我正在寫一個程序來學習Android相機功能。 現在,我有一些關於相機預覽操作的問題:Android相機預覽問題
我的程序將在主Activity(ActivityMain)的onCreate()函數中創建一個surfaceview對象,然後將其設置爲內容。
super.onCreate(savedInstanceState);
m_surface = new MyCameraSurface(this);
// remove title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(m_surface);
然後startPreview()將在surfaceChanged()運行時被調用。
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Log.d(TAG, "*** surfaceChanged >>>>> ***");
Log.d(TAG, "format=" + format + ", width=" + width + ", height=" + height);
if(m_control.IsCameraClosed() == false) {
if(m_control.IsPreviewRun() == false) {
m_control.startPreview();
}
}
Log.d(TAG, "*** surfaceChanged <<<<< ***");
}
我的問題是:在開始我的節目總是接收 「GetNextPreviewFrame錯誤/ 1幀:爲0x0,緩衝液:爲0x0」 錯誤:
07-22 06:47:46.727: DEBUG/MyCameraSurface(2313): *** surfaceChanged <<<<< ***
07-22 06:47:46.735: DEBUG/SurfaceFlinger(1276): commiting overlay changes
07-22 06:47:46.735: INFO/TIOverlay(1276): Nothing to do!
07-22 06:47:46.735: INFO/ActivityManager(1276): Displayed activity com.hykwok.CameraEffect/.ActivityMain: 7866 ms (total 7866 ms)
07-22 06:47:47.792: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:48.477: DEBUG/dalvikvm(1276): GC freed 2299 objects/119216 bytes in 143ms
07-22 06:47:48.793: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:49.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
07-22 06:47:50.794: ERROR/CameraHal(1052): GetNextPreviewFrame Error/1 frame:0x0, buffer:0x0
然而,當我切換到另一個活動(ActivityCameraSetting ),然後回到主要活動,輸出就會正常。
任何人都可以給我一些建議來解決它嗎?
我正在使用Motorola Milestone。固件版本爲2.1-update1,內部版本號爲SHOLS_U2.02.36.0。
我不確定其他Android手機是否有這個問題。
另一個問題是: 是否有可能通過預覽回調函數獲取預覽幀數據而不設置surfaceview保持器?
謝謝您的幫助。
源代碼可以從這裏下載:
我遇到過摩托羅拉設備的類似問題。此外,有時候讓他們的手機很容易崩潰(我的意思是,不要在Java中引發異常,但也要重置設備)。我放棄了一些棘手的解決方法。根據我的理解,這絕對是摩托羅拉相機HAL中的BUG。不過,我可以觀察到這個問題仍然沒有解決在Droid X.我建議你嘗試其他設備(宏達電或三星) - 我要確保你的代碼將工作得很好。 – sandrstar 2011-06-16 06:15:04