混合图像和视频的GPUImage会过度释放帧缓冲区

时间:2014-10-23 20:06:35

标签: ios objective-c gpuimage

我正在尝试将视频与视频或带图像的视频或带图像的图像进行混搭。如果我正在拍摄所有视频或所有图像,我的代码工作正常,但是当我尝试将图像与视频混合时,我会在断言中崩溃:

Tried to overrelease a framebuffer, did you forget to call -useNextFrameForImageCapture before using -imageFromCurrentFramebuffer?

我尝试在整个代码的各个点添加[<some_filter> useNextFrameForImageCapture],但我无法弄清楚我需要添加它的位置,或者甚至是我的问题。

我的链是:

GPUImagePicture -> any filter     --\ 
                                      > GPUImageColorDodgeBlendFilter
GPUImageVideoCamera -> any filter --/

我已经尝试简化我的过滤器链以进行调试,如果我消除了任何中间过滤器,那么它适用于所有图像/视频组合。但是只要我在混合之前添加任何一个过滤器,它就会崩溃。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,但提出了解决方法AKA&#34; hack。&#34; HTH !!

    // next two lines address a bug in the GPUImage reference counting ...
    GPUImageFramebuffer* fb = self.filter.framebufferForOutput;
    [fb disableReferenceCounting];
    [self.filter useNextFrameForImageCapture];
    // next line was crashing with reference counting ...
    UIImage *retImage = [self.filter imageFromCurrentFramebuffer];

答案 1 :(得分:1)

事实证明这是带有GPUImage的open bug。将视频/相机源与GPUImagePicture混合时。

我通过添加:

解决了这个问题
GPUImageNormalBlendFilter *blendFilter = [GPUImageNormalBlendFilter new];
[videoCameras[0] addTarget:blendFilter];
[source addTarget:blendFilter];

作为图片链中的第一个过滤器。该视频实际上并未显示,它可以防止任何崩溃。