使用Blend Filter时GPUImage崩溃(' over release framebuffer')

时间:2014-06-24 19:49:59

标签: ios gpuimage

由于我在尝试将混合滤镜应用于图像并显示时遇到的崩溃,我感到头疼。 我想要做的只是将叠加图像放到另一个图像上。

这是我的代码:

- (GPUImageOutput<GPUImageInput> *)myFilter
{
    GPUImageFilterGroup *filtersGroup = [GPUImageFilterGroup new];

    // Saturation
    GPUImageSaturationFilter *saturationFilter = [GPUImageSaturationFilter new];
    saturationFilter.saturation = 0.0;
    [filtersGroup addFilter:saturationFilter];

    // Noise
    UIImage *noiseImage = [UIImage imageNamed:@"noise.png"];
    GPUImagePicture *noisePicture = [[GPUImagePicture alloc] initWithImage:noiseImage];
    GPUImageAddBlendFilter *blend = [GPUImageAddBlendFilter new];
    [blend useNextFrameForImageCapture];
    [filtersGroup addFilter:blend];
    [noisePicture addTarget:blend atTextureLocation:1];
    [noisePicture processImage];

    [saturationFilter addTarget:blend];

    filtersGroup.initialFilters = @[saturationFilter];
    filtersGroup.terminalFilter = blend;

    return filtersGroup;
}


    // Applying filter
    GPUImageOutput <GPUImageInput> *effect = [self myFilter];
    self._photoHandle = [[GPUImagePicture alloc] initWithImage:staticImage];
    [self._photoHandle addTarget:effect];
    [effect addTarget:self.targetPreviewView];
    [self._photoHandle processImage]; // Crash

当我尝试运行它时,应用程序崩溃,我收到此消息:

  

由于未捕获的异常而终止应用   &#39; NSInternalInconsistencyException&#39;,原因:&#39;试图过度发布a   framebuffer,你忘了调用-useNextFrameForImageCapture吗?   在使用-imageFromCurrentFramebuffer之前?&#39;

我打电话&#39; useNextFrameForImageCapture&#39;在混合过滤器上,我的代码出了什么问题?

1 个答案:

答案 0 :(得分:7)

哎呀,我发现了导致车祸的原因。

请注意,我没有对noisePicture对象进行任何强引用。 替换:

GPUImagePicture *noisePicture

@property (nonatomic, strong) GPUImagePicture *noisePicture;
...
self.noisePicture = ...

解决了这个问题。感谢帮助! :)