【今更だけどandroid.hardware.Cameraを使う】Camera.Parametersの設定値 手振れ補正機能(揺れ安定化機能)
android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。
Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はCamera.Parametersの手振れ補正機能(揺れ安定化機能)に関連する設定値を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
手振れ補正機能(揺れ安定化機能)
カメラデバイスには手振れ補正機能(揺れ安定化機能)が実装されているものがあります。Camera.Parameters内に手振れ補正機能(揺れ安定化機能)に関連するデータのキーは下記のとおりです。
video-stabilization-supported | カメラデバイスが手振れ補正機能(揺れ安定化機能)のサポート状況のキーです。 |
video-stabilization | カメラデバイスに設定されている手振れ補正機能(揺れ安定化機能)の有効無効のキーです。 |
手振れ補正機能(揺れ安定化機能)のサポート状況
boolean isVideoStabilizationSupported()はカメラデバイスの手振れ補正機能(揺れ安定化機能)のサポート状況を取得するメソッドです。trueの場合は手振れ補正機能(揺れ安定化機能)を利用することができますが、falseの場合は利用することはできません。
Camera.Parameters#isVideoStabilizationSupportedを使って手振れ補正機能(揺れ安定化機能)を利用する前に必ずチェックをしましょう。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); Log.d(TAG, "VideoStabilizationSupported: " + parameters.isVideoStabilizationSupported()); mCamera.setParameters(parameters); }
手振れ補正機能(揺れ安定化機能)の有効化
boolean getVideoStabilization()は手振れ補正機能(揺れ安定化機能)の有効無効状態を取得するメソッドです。一方、void setVideoStabilization(boolean toggle)は手振れ補正機能(揺れ安定化機能)の有効無効状態を変更s得るためのメソッドです。
trueを設定すると手振れ補正機能(揺れ安定化機能)が有効になり、falseで無効になります。
private void updateCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); Log.d(TAG, "VideoStabilizationSupported: " + parameters.isVideoStabilizationSupported()); Log.d(TAG, "VideoStabilization: " + parameters.getVideoStabilization()); parameters.setVideoStabilization(true); mCamera.setParameters(parameters); }
手振れ補正機能(揺れ安定化機能)の注意点
手振れ補正機能(揺れ安定化機能)は下記の条件で例外が発生するので注意が必要です。- Camera.Parameters#removeで”video-stabilization”を削除した状態でCamera#setParametersを使用するとデフォルトが適用されます。
- カメラプレビューが開始された状態で手振れ補正機能(揺れ安定化機能)の状態を変更すると即時に反映されます。