動画エンコード統計情報のエクスポート

Android 13 以降では、アプリ クライアントは動画エンコーダに、エンコードされた動画フレームごとにエンコード統計情報をエクスポートするようリクエストできます。動画エンコーダから取得した統計情報により、アプリは、マルチパス エンコードやエンコード前のフレーム前処理などの動画エンコード タスクを最適化できます。

動画エンコード統計情報をエクスポートするには、SoC ベンダーは動画エンコーダ ドライバの更新の説明に沿って、動画エンコーダ ドライバを変更する必要があります。

動画エンコード統計情報のデータ

Android 13 では、次の表に示すように、動画エンコーダによって統計データがエクスポートされます。

エンコーダ統計情報の名前 説明
1 フレームあたりの平均ブロック QP ビットストリームにエンコードされた動画フレーム内のすべてのブロック QP の平均
画像のタイプ タイプ I、P、または B

デベロッパーは、MediaFormat デベロッパー クラスを使用して、各フレームの統計情報を取得できます。

動画エンコーダ ドライバの更新

動画エンコード統計情報のエクスポートをサポートするには、SoC ベンダーは動画エンコーダ ドライバを変更する必要があります。Android 13 の Codec 2.0 ベースでは、以下のキーが追加されました。

  • KEY_VIDEO_QP_AVERAGE は、フレームごとの平均ブロック QP を表します。

    KEY_VIDEO_QP_AVERAGE キーの実装には、以下のルールが適用されます。

    • SoC エンコーダは、Codec 2.0 に出力する前に、ブロック QP の平均を最も近い整数に丸める必要があります。

    • 平均値は輝度レベルからのみ計算されます。

    • 現在のフレーム内のすべてのブロックがスキップモードの場合、SoC エンコーダは INT_MAX を返す必要があります。この条件は、係数がエンコードされておらず、フレーム内で重要な QP 情報がエンコードされていない場合に発生します。

  • KEY_PICTURE_TYPE は、エンコードされたフレームの画像タイプを PICTURE_TYPE_IPICTURE_TYPE_PPICTURE_TYPE_B または PICTURE_TYPE_UNKNOWN で記述します。

  • KEY_VIDEO_ENCODING_STATISTICS_LEVEL は、動画エンコーダから出力されるエンコード統計情報のレベルを次のように記述します。

リファレンス実装については、VideoEncodingStatisticsTest をご覧ください。

検証

VideoEncodingStatisticsTest CTS テストを実行し、動画エンコード統計情報の平均 QP 部分が正しく動作することを検証します。CTS では、同じ入力動画に対して 2 つのエンコード(1 つは高いビットレート、もう 1 つは低いビットレート)を実行します。次に、CTS で 2 つのエンコードからエクスポートされた 2 つの平均 QP 値を比較します。低いビットレートのエンコードの平均 QP が、高いビットレートのエンコードの平均 QP よりも大きい場合、CTS で合格します。

動画エンコード統計情報のエクスポート機能が有効な場合に、この機能をオフにすることを検証するには、次のように VIDEO_ENCODING_STATISTICS_LEVEL_NONE キーを使用します。

format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);