1. 程式人生 > >Camera1.0和Camear2.0的區別

Camera1.0和Camear2.0的區別

1. Camera2是通過系統服務拿到CameraManager來管理camera裝置物件,camera的一次預覽、拍照都是向請求會話(CaptureSession.StateCallback,攝像頭開啟時由相機裝置的輸出surface組成)傳送一次請求(CaptureRequest.Builder)。需要在它的回撥onConfigured中進行處理,例如預覽,如果不在此方法中寫上CameraCaptureSession.setRepeatingRequest(mCaptureReqBuilder.build(), null, mHandler);那麼預覽就不會成功。

2. 此外,在建立會話,設定

ImageReader監聽,都需要傳遞一個Handler物件,這個Handler物件決定著這些會話、監聽的回撥方法會被在哪個執行緒中呼叫,如果傳遞的是NULL,那麼回撥會呼叫在當前執行緒。

閃關燈的控制方式

Camera API 1.0下 這句程式碼可以得到攝像頭支援的閃光燈模式 List<String> supportedFlashModes = params.getSupportedFlashModes(); 控制閃光燈的方法: params.setFlashMode(Parameters.FLASH_MODE_TORCH);//開啟閃光燈

API並沒有詳細說明。

我測試了Parameters.FLASH_MODE_TORCH 

FLASH_MODE_ON

Parameters.FLASH_MODE_TORCH : 閃光燈常開

Parameters.FLASH_MODE_ON :    拍照時閃光燈才打開

Camera API 2.0下: 這句程式碼可以用來檢測當前開啟的攝像頭是否支援閃光燈:
Boolean flashAvailable = cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE); 控制閃光燈的方法: camerasession.setRepeatingRequest(mCameraBuilder.build(),null,null)

但是根據API文件的說明,需要注意的問題大概如下:

1. 只有當android.flash.info.available = = true 時這種控制閃光燈才有效。

2. 會被自動曝光模式(CONTROL_AE_MODE)中的設定給覆蓋。

我測試了幾項:

a) CONTROL_AE_MODE設定為OFFON_AUTO_FLASHON_AUTO_FLASH_REDEYEON_ALWAYS_FLASH時,上述閃光燈控制方式不能開啟。

b) CONTROL_AE_MODE設定為ON或者不設定時,上述閃光燈控制方式能開啟。