導入 RoI 的 OEM 指南

Android 15 導入了標準化程序 將興趣區域 (RoI) 使用者設定整合至 Android 影片 編碼架構這項功能會提供公開 API,將使用者設定整合並分析至影片編碼器,進而提升 RoI 的壓縮品質。

實作

SoC 供應商和原始設備製造商 (OEM) 可以利用 FEATURE_Roi 旗標。如未啟用 FEATURE_Roi,影片編碼器行為就不會改變。

影片架構異動

本節將詳細說明導入這項功能時所需的影片架構變更 而不是每個特徵的分數

轉碼器 2 中的金鑰

在 Android 15 中,量化參數對應項目 (QP_map) 和矩形設定 (rect) 會定義為 RoI 設定類型。此外,Codec2 (C2) 中也引入了兩個鍵,以支援這些新類型。兩者的金鑰使用方式與公用 API 相同。 在編碼器的框架迴圈中,設定會在執行階段動態調整,也就是在輸入緩衝區排入佇列之前,如下所述:

  • 固定式的情況下,如未提供目前的 RoI 設定 編碼器就會採用與前一影格相同的設定

  • 動態的情況下,RoI 設定類型可能會以動態方式變更。

以下章節將說明 C2 中新鍵。

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer 鍵會為影格傳送 qp-offset 對應表信號。值是利用輸入 參數 PARAMETER_KEY_QP_OFFSET_MAP 來自 setParameters

kParamIndexQpOffsetMapBufferC2InfoBuffer, 包含下列屬性:

  • 長度:一個影格中的 16x16 區塊數量。

  • 值:陣列的每個值都是 16x16 區塊的 QP 偏移量,位於地區 -51~51。目標最大程式設計單位 (LCU) 的 QP 計算方式則是 編碼器速率控制項加上偏移量如果計算結果超出 0 到 51 的範圍,值會截斷為 0 到 51。

    • 如果為 0:沒有 QP 偏移,則 QP 由原始速率控制決定。
    • 如果是非零:QP 是指原始費率控制項加上偏移量。
    • 如果為否定值:系統會在目標 LCU 中提升影片品質。
    • 如果是肯定答案:在指定 LCU 中,影片品質會降低。
  • 用途:使用者必須將此金鑰設為 16x16 的區塊。編碼器會透過平均 LCU 中 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 的座標。廣告指定目標會拉長,以對齊 LCU 邊界。這個值代表每個像素的左上角,例如 ((0,0), (16, 16)) 會定義完整的 16x16 區塊。

  • qpOffset:陣列的每個值都代表目標的 QP 偏移 rect 個範圍。它的定義和使用方式與 kParamIndexQpOffsetMapBuffer 的值。

對應演算法

下表顯示公開金鑰與影片架構的對應關係:

公開金鑰或 API 在影片架構中對應
PARAMETER_KEY_QP_OFFSET_MAP 值會以 C2InfoBuffer 例項的形式傳遞至 kParamIndexQpOffsetMapBuffer
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 僅支援 QP 偏移量 (最多 10 個)。 支援的 QP 偏移範圍會盡可能保持最佳狀態。值為 取值範圍限制 複製到支援 SoC 的範圍內
將多個 RoI 設定 (無論是標準化鍵還是供應商專屬鍵) 設為單一影格。 使用者在頁框 1 中同時使用標準化金鑰和供應商金鑰。 如果可用,架構會保留第一個標準化 rect 設定、第一個標準化 QP_map 設定,或兩者皆保留。在每個類別中,架構只會將一個標準化設定傳送至 SoC,如果有標準化設定,SoC 實作必須忽略供應商設定。如果有多個設定傳送至 SoC,SoC 供應商必須只保留一個 RoI 設定,並忽略其餘設定。

這些設定將按照以下優先順序保留:

  1. 標準化rect
  2. 標準化 QP_map
  3. 供應商 rect
  4. 供應商 QP_map