我正在尝试将视频与视频或带图像的视频或带图像的图像进行混搭。如果我正在拍摄所有视频或所有图像,我的代码工作正常,但是当我尝试将图像与视频混合时,我会在断言中崩溃:
Tried to overrelease a framebuffer, did you forget to call -useNextFrameForImageCapture before using -imageFromCurrentFramebuffer?
我尝试在整个代码的各个点添加[<some_filter> useNextFrameForImageCapture]
,但我无法弄清楚我需要添加它的位置,或者甚至是我的问题。
我的链是:
GPUImagePicture -> any filter --\
> GPUImageColorDodgeBlendFilter
GPUImageVideoCamera -> any filter --/
我已经尝试简化我的过滤器链以进行调试,如果我消除了任何中间过滤器,那么它适用于所有图像/视频组合。但是只要我在混合之前添加任何一个过滤器,它就会崩溃。
答案 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];
作为图片链中的第一个过滤器。该视频实际上并未显示,它可以防止任何崩溃。