2012-02-12 39 views
1

我試圖將一些CIFilters應用於CIImage的序列,並希望實時顯示它們(至少20-30幀/秒)。是否有可能從iOS上的CIFilter獲得(接近)實時性能?

的圖像通過一個EAGL上GLKView繪製支持CIContext

當我畫我的圖片與此代碼(在更新方法)我得到±20 FPS(這已經是有點緊):

image = [image imageByApplyingTransform: CGAffineTransformMakeScale(@scale, @scale)]; 
[self.capture_controller.core_image_context drawImage:image atPoint: [0, 0] fromRect: image.extent]; 

如果我補充一點,一個簡單的過濾就降到了10-12 FPS(compoCISourceOverCompositing濾波器,其inputImage的是所有設置一次)之前:

[self.compo setValue:image forKey: @"inputBackgroundImage"]; 
image = [self.compo outputImage]; 

有什麼辦法可以從CoreImage獲得更好的性能?我認爲UIImageView可以更快地顯示序列,所以它應該是可能的。

+0

我想答案是依賴。取決於什麼設備,分辨率,過濾器和過濾器的數量。 – 2012-02-13 00:36:01

+0

是的,這是問題的一部分,但目前我的圖像相當小(640x426)。 從我在WWDC會議視頻中看到的內容,他們可以通過視頻流上的簡單過濾器實時或幾乎實時處理。在這裏,我有幾張圖片,而且速度很慢。 – hlidotbe 2012-02-13 15:58:32

+0

在什麼設備上? – 2012-02-13 16:07:05

回答

-1

因此,從我所收集的信息和傑斯華的評論中,表演(顯然)是綁定設備的,如果我使用CIFilter,沒有太多的工作要做。

+4

作爲一個建議,你可能想嘗試我的新的GPUImage框架:http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework。我正在運行基準測試,但在早期的測試中,它能夠通過鏈中的兩個過濾器在iPhone 4上以6 ms(〜170 FPS)的總渲染時間過濾640x480幀視頻。你想要做什麼特定的過濾器?我可以測試特定濾波器鏈上的時序,看看它是否在「較舊」的硬件上保持不變。 – 2012-02-15 23:45:34

+0

這就是我們去的。我貢獻了(基本)電影輸入類:) – hlidotbe 2012-03-22 16:50:06

2

有關如何獲得性能的信息,請參閱CoreImage上的WWDC 2012視頻。默認情況下,性能受到顏色管理等因素的限制。爲獲得最佳性能,在創建CIContext時關閉色彩管理,僅創建一次上下文,並僅創建一次濾鏡。

1

蘋果正在提供一個手冊來做到這一點。

從手動引:

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

NSDictionary *options = @{ kCIContextWorkingColorSpace : [NSNull null] }; 
CIContext *myContext = [CIContext contextWithEAGLContext:myEAGLContext options:options]; 
相關問題