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

msm*_*lko 2 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;
}
Run Code Online (Sandbox Code Playgroud)

    // 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
Run Code Online (Sandbox Code Playgroud)

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

由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'试图过度发布帧缓冲区,你是否忘记在使用-imageFromCurrentFramebuffer之前调用-useNextFrameForImageCapture?'

我在混合过滤器上调用'useNextFrameForImageCapture',那么我的代码有什么问题?

msm*_*lko 7

唉,我发现了造成撞车事故的原因.

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

GPUImagePicture *noisePicture
Run Code Online (Sandbox Code Playgroud)

@property (nonatomic, strong) GPUImagePicture *noisePicture;
...
self.noisePicture = ...
Run Code Online (Sandbox Code Playgroud)

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