2010-08-19 50 views
9

我正在嘗試使用onPreviewFrame()回調來顯示已過濾的相機預覽。SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS是什麼意思?

問題是,當我刪除這一行: mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

隱藏預覽,應用程序崩潰。日誌內容如下: 08-19 15:57:51.042:ERROR/CameraService(59):寄存器緩衝區失敗,狀態爲-38

這是什麼意思?這是記錄在任何地方?

我使用從SDK APIDemos的CameraPreview:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

回答

9

SURFACE_TYPE_PUSH_BUFFERS爲SurfaceView生成多個緩衝區。組件正在鎖定(填充數據)並將這些緩衝區深入OS代碼中(顯示數據)。特別是OpenMax(相機硬件設備接口)使用「圖形緩衝區」=「推動緩衝區」來填充數據和顯示數據。具體而言,相機硬件可以直接填充推動緩衝區,而圖形硬件可以直接顯示推動緩衝區(它們共享這些緩衝區)。結論:操作系統迫使您創建一個具有推送緩衝區的SurfaceView。然後它可以使用相機設備的緩衝區。

5

這是什麼意思?

這意味着您沒有通過SurfaceHolder正確配置SurfaceView

這是否記錄在任何地方?

什麼是「這個」?以下是SurfaceView,SurfaceHolder,SURFACE_TYPE_PUSH_BUFFERSCamera的文檔。

如果你真正的問題是「在哪裏記錄Camera要求SURFACE_TYPE_PUSH_BUFFERS」,我懷疑這是沒有記錄。您可以使用SURFACE_TYPE_PUSH_BUFFERS進行相機預覽和視頻播放,也可能使用其他情況。

+0

感謝您的關注 我試圖使用其他表面類型來隱藏視圖,因爲我不想顯示原始相機預覽,但我自己處理的流,很像這個應用程序http://www.androidtapp .com/camera-illusion /。 因此,我不知道我是否必須使用SURFACE_TYPE_PUSH_BUFFERS,正如此線程中所述:http://groups.google.com/group/android-developers/msg/5eee66acae3f7c1f 如果您瞭解其他資源(開源應用程序,書籍等),可用於此意圖,請分享。 – 2010-08-20 23:50:34

7

Google's Camera guide你可以找到這個簡短的提到。根據指南SURFACE_TYPE_PUSH_BUFFERS是3.0版以前的設備所必需的棄用設置。

查找代碼示例中的「創建預覽類」一節中,在構造它的底部說:

// deprecated setting, but required on Android versions prior to 3.0 
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

這是一個好主意,仔細閱讀the camera guide如果您還沒有這樣做它包含了一些不在Camera類的API文檔中的重要內容。