GPUImage - низкий FPS
В настоящее время я использую графический процессор для записи видео вместе с фильтрами WhiteBalance и Exposure, но FPS очень плохой (около 12 FPS). Я использовал вышеупомянутые фильтры в оригинальном демонстрационном коде GPUImage (SimpleVideoFilter), но результаты те же.
Вот метод, который я использую для записи видео с комбинированными фильтрами. Это результаты для iPhone 5, iPod Touch, который поддерживает до 30 FPS.
Любые идеи для достижения FPS до 28 или что-то с AVCaptureSessionPresetHigh и WhiteBalance, фильтр экспозиции вместе!! Спасибо!!
-(void)recordVideo{
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
videoCamera.horizontallyMirrorFrontFacingCamera = NO;
videoCamera.horizontallyMirrorRearFacingCamera = NO;
filter = [[GPUImageFilterGroup alloc] init];
[videoCamera addTarget:filter];
GPUImageFilterGroup *group = (GPUImageFilterGroup *)filter;
GPUImageWhiteBalanceFilter *whiteBalance = [[GPUImageWhiteBalanceFilter alloc] init];
[group addFilter:whiteBalance];
GPUImageExposureFilter *exposureFilter = [[GPUImageExposureFilter alloc] init];
[group addFilter:exposureFilter];
[whiteBalance addTarget:exposureFilter];
[group setInitialFilters:[NSArray arrayWithObject:whiteBalance]];
[group setTerminalFilter:exposureFilter];
filter = group;
[videoCamera addTarget:filter];
GPUImageView *filterView = (GPUImageView *)self.view;
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
unlink([pathToMovie UTF8String]);
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter.encodingLiveVideo = YES;
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(1080.0, 1920.0)];
[filter addTarget:movieWriter];
[filter addTarget:filterView];
[videoCamera startCameraCapture];
double delayToStartRecording = 0.5;
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC);
dispatch_after(startTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Start recording");
videoCamera.audioEncodingTarget = movieWriter;
[movieWriter startRecording];
double delayInSeconds = 10.0;
dispatch_time_t stopTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(stopTime, dispatch_get_main_queue(), ^(void){
[filter removeTarget:movieWriter];
videoCamera.audioEncodingTarget = nil;
[movieWriter finishRecording];
NSLog(@"Movie completed");
});
});
}