【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 自動露出補正ロック機能

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。

Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersの自動露出補正ロック機能に関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。

自動露出補正ロック機能

カメラデバイスには自動露出補正ロック機能が実装されているものがあります。
自動露出補正ロック機能とは、カメラデバイスの自動露出補正機能を強制的にスキップする機能のことです。
Camera.Parameters内にある自動露出補正ロック機能に関連するデータのキーは下記のとおりです。
auto-exposure-lock-supportedカメラデバイスが自動露出補正ロック機能をサポートしているかどうかを表すキーです。
auto-exposure-lock/td>カメラデバイスの自動露出補正ロックの状態を表すキーです。

カメラデバイスの自動露出補正ロック機能のサポート

カメラデバイスが自動露出補正ロック機能をサポートしているかどうかはboolean isAutoExposureLockSupported()で取得することができます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        Log.d(TAG, "AutoExposureLockSupported: " + parameters.isAutoExposureLockSupported());
        mCamera.setParameters(parameters);
    }


自動露出補正ロック機能の状態の取得と状態の変更

自動露出補正ロック機能はboolean getAutoExposureLock()で現在の状態が取得できます。
また、void setAutoExposureLock(boolean toggle)を使って自動露出補正ロック機能の状態を変更することができます。
trueを設定した場合はカメラデバイスの自動露出補正の演算がスキップされ、falseの場合は自動露出補正の演算が再開されます。


    private void updateCameraParameters() {
        Camera.Parameters parameters = mCamera.getParameters();
        Log.d(TAG, "AutoExposureLockSupported: " + parameters.isAutoExposureLockSupported());
        Log.d(TAG, "AutoExposureLock: " + parameters.getAutoExposureLock());
        parameters.setAutoExposureLock(true);
        mCamera.setParameters(parameters);
    }


自動露出補正ロック機能の注意点

自動露出補正ロック機能の設定値は下記の条件で例外が発生するので注意が必要です。
  1. Camera.Parameters#removeで”auto-exposure-lock”を削除した状態でCamera#setParametersを使用するとデフォルト値が使用されるようです。
  2. カメラプレビューが開始された状態で自動露出補正ロック機能の有効無効は即時に反映されます。
  3. カメラプレビューが停止しても自動露出補正ロック機能の有効無効は変更されません。