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
。
kParamIndexQpOffsetMapBuffer
是
C2InfoBuffer
,
包含下列屬性:
長度:單一影格中的 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
: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 設定,並忽略其餘的設定。這些設定將按照以下優先順序保留:
|