2014-01-14 71 views
1

在我的應用程序中,我使用了3個過濾器並將其添加到stillCamera中。我正在嘗試從filter1中獲取圖像,它是一個空濾鏡,因此它會返回實際圖像。GPUImage capturePhotoAsImageProcessedUpToFilter只適用於最後一個過濾器

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

當我打電話capturePhotoAsImageProcessedUpToFilter,它永遠只能當我通過它下面的過濾器3返回喜歡的圖像。

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter3 with... 

下面永遠不會返回圖像

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

兩個例子難道我做錯了什麼?作爲一個修復我使用:

[filter1 imageFromCurrentlyProcessedOutput] 

是否有打電話capturePhotoAsImageProcessedUpToFilter和imageFromCurrentlyProcessedOutput之間有什麼區別?

回答

1

我認爲這是我嘗試去年實施的記憶保存優化的副作用。對於像照片這樣的非常大的圖像,我試圖做的是在濾波後的圖像通過濾波器鏈時,銷燬支持每個濾波器的幀緩衝區。這個想法是試圖通過在任何時間點在內存中只有一個或兩個大圖像副本來最大限度地減少內存尖峯。

不幸的是,這似乎並沒有像預期的那樣工作,並且由於隨着圖像的進展,幀緩衝區被刪除,只有鏈中的最後一個過濾器纔會有一個有效的幀緩衝區讀取。我可能會在不久的將來在某個時候推出這種優化,以支持內部幀緩衝和紋理緩存,但我不確定在此期間如何從鏈中的這些中間過濾器讀取數據。

+0

感謝您的迴應和偉大的框架!似乎你在正常操作期間進行優化是正確的。如果在調用時只保留緩衝區,ProcessedUpToFilter和... CurrentlyProcessedOutput類型函數可能是兩全其美的。 –

+0

@BradLarson我使用0.1.6,而我的stillCamera只有1個過濾器。我使用'capturePhotoAsImageProcessedUpToFilter'這個過濾器,但是我得到了無'processedImage' – onmyway133

相關問題