從 Android 13 開始,應用程式用戶端可以請求視訊編碼器匯出每個編碼視訊幀的編碼統計資訊。利用從視訊編碼器獲得的統計數據,應用程式可以優化其視訊編碼任務,例如多通道編碼和編碼前的幀預處理。
要匯出視訊編碼統計訊息,SoC 供應商必須更改視訊編碼器驅動程序,如視訊編碼器驅動程式更新所述。
視訊編碼統計數據
在 Android 13 中,視訊編碼器會匯出統計數據,如下表所示。
編碼器統計名稱 | 描述 |
---|---|
每幀平均塊QP | 視訊畫面中編碼到位元流中的所有區塊 QP 的平均值 |
圖片類型 | I 型或 P 型或 B 型 |
開發人員可以使用MediaFormat
開發人員類別檢索每個幀的統計資訊。
視訊編碼器驅動程式更新
為了支援視訊編碼統計資料的匯出,SoC供應商必須更改視訊編碼器驅動程式。 Android 13 的 Codec 2.0 基礎中加入了以下按鍵:
KEY_VIDEO_QP_AVERAGE
描述每幀平均區塊QP。以下規則適用於
KEY_VIDEO_QP_AVERAGE
鍵的實作:在傳送到 Codec 2.0 之前,SoC 編碼器必須將區塊 QP 的平均值捨去為最接近的整數。
平均值僅根據亮度平面計算。
如果目前訊框中的所有區塊都處於跳過模式,則 SoC 編碼器必須傳回
INT_MAX
。當幀中沒有對係數進行編碼並且沒有對重要的 QP 資訊進行編碼時,就會出現這種情況。
KEY_PICTURE_TYPE
將編碼幀的圖片類型描述為PICTURE_TYPE_I
、PICTURE_TYPE_P
、PICTURE_TYPE_B
或PICTURE_TYPE_UNKNOWN
。KEY_VIDEO_ENCODING_STATISTICS_LEVEL
描述了視訊編碼器發出的編碼統計資訊的級別,如下:當編碼器不產生有關編碼統計資訊的資訊時,此鍵設定為
VIDEO_ENCODING_STATISTICS_LEVEL_NONE
。當編碼器為每個訊框產生
KEY_VIDEO_QP_AVERAGE
和KEY_PICTURE_TYPE
時,此鍵設定為VIDEO_ENCODING_STATISTICS_LEVEL_1
。
請參閱VideoEncodingStatisticsTest
以取得參考實作。
驗證
執行VideoEncodingStatisticsTest
CTS 測試以驗證視訊編碼統計資訊的平均 QP 部分是否正常運作:CTS 對相同輸入視訊執行兩種編碼,一種具有較高的位元率,另一種具有較低的位元率。然後,CTS 比較兩個編碼導出的兩個平均 QP 值。如果較低位元速率編碼的平均 QP 高於較高位元速率編碼的平均 QP,則 CTS 通過。
若要驗證在啟用時關閉匯出視訊編碼統計功能,請使用VIDEO_ENCODING_STATISTICS_LEVEL_NONE
鍵,如下所示:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);