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

Android 15 導入了標準化程序 將興趣區域 (RoI) 使用者設定整合至 Android 影片 編碼架構這項功能可讓 RoIs 的壓縮品質提升 提供公用 API,以便整合及分析使用者的設定 較為

實作

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 的區塊。編碼器會調整 將 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:RI 的座標,以矩形形狀。RoI 是 延展至 LCU 邊界。值代表 ,因此 ((0,0) (16, 16) 定義 整個 16x16 區塊

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

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

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