GPUImageAlphaBlendFilter - 不完整的过滤器FBO:36054

时间:2013-06-24 13:36:20

标签: ios objective-c gpuimage fbo

我试图根据GPUImage示例中的FilterShowcase应用程序使用GPUImageChromaKeyFilter,但显然我遗漏了一些因为它崩溃了。

这是我的代码:

    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;


    GPUImageChromaKeyFilter *filter = [[GPUImageChromaKeyFilter alloc] init];
    [filter setColorToReplaceRed:0.0 green:1.0 blue:0.0];
    [filter prepareForImageCapture];


    videoView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, 640, 480)];
    [self.view addSubview:videoView];


    UIImage *inputImage = [UIImage imageNamed:@"bedroom.jpeg"];
    GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
    [sourcePicture processImage];
    [sourcePicture addTarget:filter];





    [sourcePicture removeTarget:filter];
    [videoCamera removeTarget:filter];
    [videoCamera addTarget:filter];

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    blendFilter.mix = 1.0;
    [sourcePicture addTarget:blendFilter];
    [filter addTarget:blendFilter];





    [blendFilter addTarget:videoView];
    [videoCamera startCameraCapture];

当我运行它时,它只是告诉它:

  

2013-06-24 15:24:45.369 GPUImage测试[1284:1703] * 断言失败   in - [GPUImageAlphaBlendFilter createFilterFBOofSize:],   / Users / hello / Desktop / xcode / GPUImage Test / GPUImage / framework / Source / GPUImageFilter.m:369

     

2013-06-24 15:24:45.383 GPUImage测试[1284:1703] * 终止应用   由于未捕获的异常'NSInternalInconsistencyException',原因:   '不完整的过滤器FBO:36054'

     

* 第一次抛出调用堆栈:

     

(0x3134f3e7 0x391d9963 0x3134f29d 0x31c25fa3 0xc9563 0xd608d 0xc8b3d   0xc9885 0xdaa63 0xcc11f 0xdb39f 0xca07b 0xcc153 0xd266f 0xd2dbb   0xd3f35 0x395f3793 0x395f6b3b 0x395f467d 0x395f7613 0x395f77d9   0x3961b7f1 0x3961b684)

     

libc ++ abi.dylib:终止调用抛出异常

有人看到我做错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

-processImage是异步的。调用它时,它不会运行完成,因此您需要维护过滤器结构,直到完成处理。

这意味着您之后无法立即调用-removeTarget:,这也意味着您需要将sourcePicture实例作为实例变量挂起,直到处理完成为止。否则,它将在此方法结束时取消分配,并因此将拆除其输出。

您希望设置过滤器链并在正确配置所有内容后运行-processImage。只要您需要过滤结果,就需要维护源图片。