GPUImage capturePhotoAsImageProcessedUpToFilter仅适用于最后一个过滤器

时间:2014-01-14 00:53:18

标签: objective-c opencv gpuimage gpuimagestillcamera

在我的应用程序中,我使用了3个过滤器的堆栈并将其添加到stillCamera中。我试图从filter1中获取图像,它是一个空滤镜,因此它返回实际图像。

    [stillCamera addTarget:filter1];
[filter1 addTarget:filter2];
[filter2 addTarget:filter3];
[filter3 addTarget:cameraView];

当我调用capturePhotoAsImageProcessedUpToFilter时,它只会在我传递filter3时返回一个图像,如下所示。

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter3 with...

以下两个示例永远不会返回图像

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter1 with...
[stillCamera capturePhotoAsImageProcessedUpToFilter:filter2 with...

我做错了吗?作为我正在使用的修复:

[filter1 imageFromCurrentlyProcessedOutput]

调用capturePhotoAsImageProcessedUpToFilter和imageFromCurrentlyProcessedOutput之间有什么区别吗?

1 个答案:

答案 0 :(得分:1)

我认为这是我去年试图实施的记忆保护优化的副作用。对于像照片这样的非常大的图像,我尝试做的是在过滤后的图像通过过滤器链进行过程时,破坏支持每个过滤器的帧缓冲区。我们的想法是尝试通过在任何时间点在内存中只有一个或两个大图像副本来最小化内存峰值。

不幸的是,这似乎并没有像预期的那样工作,并且因为帧缓冲区随着图像的进展而被删除,所以只有链中的最后一个过滤器最终会有一个有效的帧缓冲区来读取。我可能会在不久的将来在某个时候推出这个优化以支持内部帧缓冲和纹理缓存,但我不确定在此期间可以做什么来从链中的这些中间过滤器中读取。