RoI 実装に関する OEM のガイダンス

Android 15 では、 関心領域(RoI)ユーザー設定を Android 動画に統合する いくつかあります。この機能により、RoI の圧縮品質が向上します。 公開 API により、ユーザー設定を動画に統合して分析できます Encoder-Decoder

実装

SoC ベンダーと OEM は、 FEATURE_Roi 設定されます。FEATURE_Roi が有効になっていない場合、動画エンコーダの動作は変わりません。

動画フレームワークの変更

このセクションでは、この実装に必要な動画フレームワークの変更点について詳しく説明します。 機能。

Codec2 のキー

Android 15 では、量子化パラメータ マップは (QP_map)と長方形(rect)は ROI として定義されます いくつかあります。さらに、Codec2(C2)に 2 つのキーが導入されて、 サポートしています。両方の鍵の使用方法は、公開 API の場合と同じです。 エンコーダのフレームループ内で、構成は動的に調整され、 入力バッファがキューに入れられる前に、実行中のステージを 次のようになります。

  • スティッキー シナリオで、現在のリソースに ROI の設定が指定されていない場合 エンコーダは前のフレームと同じ構成を使用します。

  • 動的シナリオでは、RoI 設定のタイプが動的に変更される可能性があります。

C2 の新しい鍵については、以降のセクションで説明します。

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer キーがフレームの qp-offset マップを通知します。その値は、入力を使用して パラメータ PARAMETER_KEY_QP_OFFSET_MAP 提供元: setParameters

kParamIndexQpOffsetMapBuffer はバイト配列です。 C2InfoBuffer, 次の属性を持つ必要があります。

  • 長さ: 1 フレーム内の 16x16 ブロックの数。

  • 値: 配列の各値は、リージョン内の 16x16 ブロックの QP オフセット -51 ~ 51。ターゲットの最大符号化単位(LCU)の QP は、 オフセットを足した値になります。計算結果が 0 ~ 51 値は 0 ~ 51 で切り捨てられます。

    • 0 の場合: QP オフセットなし、QP は元のレートコントロールで決定されます。
    • ゼロ以外の場合: QP は元のレートコントロールにオフセットを加えたものです。
    • 負の値の場合: ターゲット LCU で動画の品質が補正されます。
    • 正の値の場合: ターゲット LCU で動画の品質が低下しています。
  • 使用方法: ユーザーは、このキーを 16x16 ブロックとして構成する必要があります。エンコーダは、 16x16 ピクセルの値を平均化して、実際の LCU サイズに合わせます。 ブロックされています。

C2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS キー(coding.qp-offset-rects に設定) RoI を QpOffset-Rects に設定する。この値は、setParameters の入力パラメータ PARAMETER_KEY_QP_OFFSET_RECTS を使用して設定されます。

この鍵をサポートするため、次の構造 C2QpOffsetRectStruct を使用します。 導入されます。

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

ここで

  • topleft: RoI の座標(長方形)。ROI は、 LCU 境界に合わせて引き伸ばされています。この値は 各ピクセルの左上隅に配置されます。つまり、((0,0), (16, 16)) は 作成します

  • qpOffset: 配列の各値はターゲットの QP オフセットを表します rect エリア。定義と使用法は、 kParamIndexQpOffsetMapBuffer の値。

で確認できます。

マッピング アルゴリズム

次の表に、公開鍵から動画へのマッピングを示します。 フレームワーク:

公開鍵または API 動画フレームワークでのマッピング
PARAMETER_KEY_QP_OFFSET_MAP 値は、値として kParamIndexQpOffsetMapBuffer に渡されます。 C2InfoBuffer インスタンス。
PARAMETER_KEY_QP_OFFSET_RECTS 値は String から Struct C2QpOffsetRectStruct に渡され、 C2_PARAMKEY_QP_OFFSET_RECTS

エラー処理

OEM 実装は、次のエラーケースを処理する必要があります。

エラーの場合分け 処理
ベンダー鍵と標準化された鍵の両方を使用して、RoI を有効にします。 ユーザーが setFeatureEnabled(FEATURE_ROI) と ベンダーキーを使用して ROI を有効にします。 ROI をオンにする必要があります。
QP オフセットは範囲内ですが、SoC ベンダーではサポートされていません。 ユーザーが QP オフセットを 12 に設定するが、SoC は最大 10 までの QP オフセットのみをサポート。 サポートされる QP オフセット範囲は、ベスト エフォートとして残ります。値は 締められた 対応している必要があります
複数の RoI 構成(標準化された鍵または ベンダー固有の鍵など)が単一のフレームに設定されます。 ユーザーはフレーム 1 に標準化された鍵とベンダー鍵の両方を使用します。 利用可能であれば、フレームワークは最初に標準化された rect を保持する 最初に標準化された QP_map 構成、 または両方を選択できます各カテゴリで、フレームワークは標準化された SoC に接続し、標準化された構成が利用可能な場合は、 SoC 実装ではベンダー構成を無視する必要があります。条件 複数の構成が SoC に送信された場合、SoC ベンダーは RoI 構成を 1 つだけ指定し、残りの構成は無視します。

構成は次の優先順位で保持されます。

  1. 標準化されたrect
  2. 標準化されたQP_map
  3. ベンダー rect
  4. ベンダー QP_map