CameraX 1.2 以降、ゼロシャッター ラグをキャプチャ モードとして利用できます。ゼロシャッター ラグを有効にすると、デフォルトのキャプチャ モードに比べてレイテンシが大幅に短縮されるため、シャッター チャンスを逃さずに済みます。
ゼロシャッター ラグを有効にする
ゼロシャッター ラグを有効にするには、CAPTURE_MODE_ZERO_SHOT_LAG
を ImageCapture.Builder.setCaptureMode()
に渡します。失敗した場合、setCaptureMode()
は CAPTURE_MODE_MINIMIZE_LATENCY
にフォールバックします。
キャプチャ モードの詳細については、画像キャプチャ ガイドをご覧ください。
仕組み
ゼロシャッター ラグは、最新の 3 つのキャプチャ フレームを保存するリングバッファを使用します。ユーザーがキャプチャ ボタンを押すと、CameraX は takePicture()
を呼び出し、リングバッファはキャプチャしたフレームを、ボタン押下のタイムスタンプに最も近いタイムスタンプで取得します。次に CameraX はキャプチャ セッションを再処理して、そのフレームから画像を生成し、JPEG 形式でディスクに保存します。
前提条件
ゼロシャッター ラグを有効にする前に、isZslSupported()
を使用して、デバイスが次の要件を満たしているかどうかを確認してください。
- Android 6.0(API レベル 23)以降をターゲットとしている。
PRIVATE
の再処理をサポートしている。
デバイスが最小要件を満たしていない場合、CameraX は CAPTURE_MODE_MINIMIZE_LATENCY
にフォールバックします。
ゼロシャッター ラグは、画像キャプチャでのみ使用できます。動画キャプチャやカメラ拡張機能では有効にできません。
最後に、フラッシュを使用するとレイテンシが増加するため、フラッシュが ON または AUTO モードの場合、ゼロシャッター ラグは機能しません。フラッシュ モードの設定について詳しくは、setFlashMode()
をご覧ください。