如何更有效地实现GPUImageWhiteBalanceFilter和uiElement混合?

时间:2012-09-12 03:39:01

标签: ios gpuimage uielement avcapture

我正在开发一个使用GPUImage框架的应用。我想使用GPUImageWhiteBalanceFilter来调整白平衡并记录一些水印使用uiElement混合,它可以工作,但在iphone 4s中捕获1080p视频时帧率很差。代码如下,任何人都可以给予帮助。

if (filter==nil) {
    filter = [[GPUImageWhiteBalanceFilter alloc] init];
}
[((GPUImageWhiteBalanceFilter *)filter) setTemperature:3000];
[videoCamera addTarget:filter];
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.8;

NSDate *startTime = [NSDate date];

UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 240.0f, 320.0f)];
timeLabel.font = [UIFont systemFontOfSize:17.0f];
timeLabel.text = @"Time: 0.0 s";
timeLabel.textAlignment = UITextAlignmentCenter;
timeLabel.backgroundColor = [UIColor clearColor];
timeLabel.textColor = [UIColor whiteColor];

uiElementInput = [[GPUImageUIElement alloc] initWithView:timeLabel];

[filter addTarget:blendFilter];
[uiElementInput addTarget:blendFilter];

[blendFilter addTarget:filterView];

__unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;

[filter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){

    timeLabel.text = [NSString stringWithFormat:@"Time: %f s", -[startTime timeIntervalSinceNow]];
    [weakUIElementInput update];
}];


NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/CPMovie.mov"];
unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(videoDimensions.width , videoDimensions.height)];
//[videoCamera addTarget:movieWriter];
//to record filtered video
[blendFilter addTarget:movieWriter];
[videoCamera startCameraCapture]; 

0 个答案:

没有答案