在视频上添加GPUImagePicture

时间:2014-04-24 12:52:14

标签: ios objective-c gpuimage

我正在尝试在视频中添加GPUImagePictureGPUImageUIElementGPUImageUIElement正在运行,但我对GPUImagePicture有疑问,因为我只在第一帧看到它然后消失了。

这是我的代码:

filter = [[GPUImageBrightnessFilter alloc] init];
[(GPUImageBrightnessFilter *)filter setBrightness:0];

GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 1.0;

        GPUImagePicture *overlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"Logo.png"] smoothlyScaleOutput:YES];
        GPUImageTransformFilter *transformFilter = [GPUImageTransformFilter new];
        [transformFilter forceProcessingAtSize:CGSizeMake(73, 83)];
        [transformFilter setAffineTransform:CGAffineTransformMakeScale(0.7, 0.7)];
        [overlay addTarget:transformFilter];
        [overlay processImage];

UIView *subview1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
        UILabel *temperaturaText = [[UILabel alloc]initWithFrame:CGRectMake(77, 100, 105, 60)];
        temperaturaText.text = @"test";
        [subview1 addSubview:temperaturaText];
 uiElementInput = [[GPUImageUIElement alloc] initWithView:subview1];

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

__unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;

[filter setFrameProcessingCompletionBlock:^(GPUImageOutput *filter, CMTime frameTime) {
     [weakUIElementInput update];
 }];

[blendFilter addTarget:movieWriter];

1 个答案:

答案 0 :(得分:2)

您的问题是您在设置方法中将overlay的输入图片定义为局部变量。你没有抓住它的强引用,所以当你完成这个方法时它将被解除分配,这也将从处理管道中删除图像纹理及其输出。

如果您想要保留输入图像,则需要使overlay成为您班级的实例变量,就像您在上面对相机或电影输入所做的那样。然后它将继续被框架用作输入。