自 Android 13 起,應用程式用戶端可以要求影片編碼器匯出每個已編碼影片影格的精靈統計資料。應用程式可利用從影片編碼器取得的統計資料,在編碼前最佳化影片編碼工作,例如多重通道編碼和影格預先處理。
如要匯出影片編碼統計資料,SoC 供應商必須變更影片編碼器驅動程式,詳情請參閱「影片編碼器驅動程式的更新」。
影片編碼統計資料
在 Android 13 中,影片編碼器會匯出統計資料,如下表所示。
編碼器統計資料名稱 | 說明 |
---|---|
每個影格的平均區塊 QP | 影片影格中編碼入位元串流的所有區塊 QP 平均值 |
圖片類型 | 請輸入 I、P 或 B |
開發人員可以使用 MediaFormat
開發人員類別擷取每個影格的統計資料。
影片編碼器驅動程式更新
如要支援匯出影片編碼統計資料,SoC 供應商必須變更影片編碼器驅動程式。Android 13 的 Codec 2.0 Base 新增了下列金鑰:
KEY_VIDEO_QP_AVERAGE
會說明每個影格平均區塊 QP。下列規則適用於
KEY_VIDEO_QP_AVERAGE
金鑰的實作:SoC 編碼器必須在將區塊 QP 的平均值傳送至編解碼器 2.0 之前,將其四捨五入至最近的整數。
平均值只會從亮度平面計算。
如果目前影格中的所有區塊都處於略過模式,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);