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")
}
ここで
top
、left
: 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 つだけ指定し、残りの構成は無視します。構成は次の優先順位で保持されます。
|