10 ビットカメラ出力

Android 13 以降を搭載しているデバイスでは、Android によってダイナミック レンジ プロファイルを介した 10 ビットカメラ出力がサポートされます。カメラ クライアントは、ダイナミック レンジ プロファイルをストリーム構成の一部として構成できます。デバイス メーカーは、HLG10、HDR 10、HDR 10+、ドルビー ビジョンなどの 10 ビット ダイナミック レンジ プロファイルのサポートを追加できます。

10 ビットカメラ出力のサポートにより、カメラ クライアントは getSupportedProfiles を呼び出して、デバイスでサポートされている 10 ビット ダイナミック レンジ プロファイルを検出できます。その後、フレームワークは、サポートされているダイナミック レンジ プロファイルとキャプチャ リクエストの制約(存在する場合)に関する情報を含む DynamicRangeProfiles のインスタンスを返します。HLG10 プロファイルがサポートされている必要があります。推奨されるダイナミック レンジ プロファイルが、REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE フィールドに一覧表示されます。

カメラ クライアントは、setDynamicRangeProfile を呼び出してストリームの組み合わせを構成できます。必須の出力ストリームの組み合わせについて詳しくは、Regular capture の「10-bit output additional guaranteed configurations」の表をご覧ください。

要件

10 ビットカメラ出力をサポートするには、デバイスに、ISP がサポートされている 10 ビット以上対応のカメラセンサーが搭載されている必要があります。10 ビットのサポートに関連する互換性の要件について詳しくは、CDD のセクション 7.5. カメラをご覧ください。

実装

10 ビットカメラ出力をサポートするには、デバイス メーカーは次のカメラ AIDL HAL 統合を行う必要があります。

  • カメラ機能に ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT を含めます。
  • ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP に、サポートされているすべてのダイナミック レンジ プロファイルとそれらの制約のビットマップを入力します。HLG10 プロファイルがサポートされている必要があります。また、サポートされている最適な形式をカメラ クライアントに伝えるために、推奨されるダイナミック レンジ プロファイルを含める必要があります。
  • P010 形式を使用するストリームのストリーム構成中にダイナミック レンジ プロファイル値をサポートするか、実装定義形式(ImageFormat.PRIVATE)をサポートするようにします。
  • ダイナミック レンジ プロファイルに応じて、カメラサービスに通知する前に、処理された Gralloc 4 バッファの静的または動的メタデータ バッファを設定します。

カメラ HAL の 10 ビットカメラ出力について詳しくは、metadata_definitions.xml 内の以下をご覧ください。

10 ビットカメラ出力をサポートするカメラ HAL リファレンス実装については、/hardware/google/camera/devices/EmulatedCamera/hwl をご覧ください。

検証

10 ビットカメラ出力の実装を検証し、サードパーティ アプリでこの機能を有効にできるようにするには、次の 3 つの段階の検証を行うことをおすすめします。

10 ビットカメラ出力の視覚的な検証では、デバイスが HDR の表示(1,000 ニト以上のディスプレイ)をサポートし、動画再生アプリ(Google フォトなど)が HDR 動画の再生をサポートしていることを前提としています。

API 機能の正確性をテストする

10 ビットカメラ出力の API 機能の正確性をテストするには、次の CTS、カメラ ITS、VTS テストを実行します。

ネイティブ カメラとサードパーティ アプリを比較する

サードパーティ アプリで 10 ビットの動画を撮影した結果が、ネイティブ カメラアプリと同一でないとしても、同様のものになるようにすることを強くおすすめします。つまり、露出、ダイナミック レンジ、色などの調整オプションを、ネイティブ アプリからサードパーティ アプリに引き継ぐ必要があります。デバイスで 10 ビットカメラ出力をサポートするサードパーティ アプリの録画の動作を確認するには、GitHub の Camera2Video サンプルアプリを使用します。センサー、パネル、視聴条件、ベンダーの設定はさまざまなため、以下のガイダンスでは、目標の数値を示さずに HDR の視覚的な側面について説明します。

比較に推奨されるシーン

ネイティブ カメラアプリとサードパーティ アプリを比較するには、ネイティブ カメラアプリと Camera2Video サンプルアプリの両方で、複数の異なるシーンを使用して動画を撮影します。比較での使用に推奨されるシーンは次のとおりです。

  • 幅広い明るさを作り出す明るい物体(キャンドルや小さな明るいライトなど)がある、中程度の光量から少ない光量のシーン。これにより、自動露出動作とダイナミック レンジを確認できます。
  • 明るいハイライトを作り出す鮮やかな色と反射物(車のクローム バンパーなど)がある、明るい屋外シーン。これにより、さらに明るいハイライトがある明るいシーンのレンダリングを確認できます。
  • 自宅やオフィスの屋内の自然なシーンなど、標準的な低ダイナミック レンジのシーン。これにより、あまり極端ではない照明条件が想定どおりに動作することを確認できます。

すべてのシーンで、露出、色、肌色の処理を確認するために人物と顔を入れることをおすすめします。ショット間のばらつきを減らすと、連続して比較しやすくなります。

標準ダイナミック レンジとハイ ダイナミック レンジを比較する

標準のダイナミック レンジ プロファイルよりも 10 ビットのダイナミック レンジ プロファイルを使用する際にメリットが感じられることを確かめるには、SDR を使用した動画キャプチャ(HDR プロファイルなし)と HDR 動画を比較し、キャプチャに HDR の主要な側面が見られることを確認します。SDR と HDR を比較するには、Camera2Video サンプルアプリと、ネイティブ カメラアプリとサードパーティ アプリを比較する際に推奨されるシーンを使用します。

推奨されるシーンで確認すべき主要な側面は次のとおりです。HDR に対応しているディスプレイ パネルは明るさのレベル(ニトまたはルーメンで測定)がさまざまであるため、以下の数値は一例です。

  • 中程度の光量から少ない光量のシーンでは、キャンドルや小さいライトの明るいハイライトは、HDR クリップではディスプレイの最大輝度(場合によっては最大 1,000 ニト)でレンダリングされ、SDR クリップでは SDR の最大輝度(約 100 ニト)でレンダリングされます。HDR クリップでは、明るいハイライトがディスプレイから輝きを放ち、ユーザーがシーンの実際のダイナミック レンジを認識できるようにする必要があります。HDR クリップと比較すると、SDR クリップは平坦で明るさが抑えられているように見える必要があります。
  • 明るい出力シーンでは、デバイスの調整に応じて、HDR クリップでは SDR クリップと比較して画面の明るさに明らかな違いが現れます。HDR クリップの場合、シーン全体の画面の明るさ(ヘッドルームによって異なる)を上げる必要があり(最大 800 ニトなど)、クローム バンパーなどの明るいハイライトではさらに上げる必要があります(最大輝度近く)。
  • 標準的な低ダイナミック レンジの屋内のキャプチャでは、HDR クリップと SDR クリップの色とトーンは類似していますが、HDR キャプチャのほうが SDR よりも明るい可能性があります。HDR は SDR より暗くしないでください。調整オプションによりこれが不可能な場合は、サードパーティ アプリの動作がネイティブのカメラアプリの動作と一致するようにします。