原始設備製造商 (OEM) 導入 RoI 指南

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

實作

SoC 供應商和原始設備製造商 (OEM) 可以利用 FEATURE_Roi 旗標。如果未啟用 FEATURE_Roi,視訊編碼器的行為就不會有所變更。

影片架構異動

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

Codec2 中的索引鍵

在 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 僅支援最高 10 的 QP 偏移值。 系統會盡力支援 QP 偏移範圍。值為 取值範圍限制 複製到支援 SoC 的範圍內
將多個 RoI 設定 (無論是標準化鍵還是供應商專屬鍵) 設為單一影格。 使用者在頁框 1 中同時使用標準化金鑰和供應商金鑰。 如果可用,架構會保留第一個標準化 rect 設定、第一個標準化 QP_map 設定,或兩者皆保留。每個類別的架構都只會傳送一個標準化 指向 SoC 的設定,並如果有標準化設定可用 SoC 實作必須忽略供應商設定。如果有多個設定傳送至 SoC,SoC 供應商必須只保留一個 RoI 設定,並忽略其餘設定。

系統會依下列優先順序保留設定:

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