2014-02-24 28 views
1

基本上,我想從iPhone相機抓取幀,將它們輸入到自定義過濾器並從該自定義過濾器獲取結果到我自己的CPU內存中進一步處理。問題在於攝像機每秒發送30幀到濾波器,我怎麼知道濾波器何時完成?換句話說,當過濾器完成處理來自相機的每一幀時,是否有回調函數?代碼如下:GPUImage:當過濾器完成處理來自GPUImageVideoCamera的框架時,是否存在回調函數

videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; 
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; 
    MyOwnGPUFilter *mof=[[MyOwnGPUFilter alloc] init]; 
    [videoCamera addTarget:mof]; 
    [videoCamera startCameraCapture]; 

回答

1

這樣的事情,我建議使用GPUImageRawDataOutput類並設置其newFrameAvailableBlock。如果您將GPUImageRawDataOutput設置爲過濾器的目標,那麼在過濾器完成處理後即會觸發該塊。

GPUImageRawDataOutput使您可以直接訪問原始顏色數據,並使用最有效的方法將其拉低。這應該很容易將這些顏色字節傳遞到CPU端處理中。

+0

謝謝布拉德。我不敢相信你這麼快就回復。 GPUImage是一個很棒的工具。稍後我會嘗試您的建議。順便說一下,我在GPUImageOutput類中找到了frameProcessingCompletionBlock。當過濾器完成後,它是否也會被調用? – user3348157

+0

@ user3348157 - 是的,但我在一些更復雜的圖像處理操作(我認爲角落和線條檢測器使用它,但他們有自己的回調)中涉及到這一點,所以如果在某些情況下失敗,這就是爲什麼。應該適用於大多數過濾器,但如果您正在讀取CPU,我強烈建議原始數據輸出。在支持它的設備上,我使用紋理緩存來顯着加快讀取速度。 –

+0

我是否還需要調用prepareForImageCapture MyOwnGPUFilter或GPUImageRawDataOutput才能更快從GPU下載? – user3348157

相關問題