從 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
key 時,請遵守下列規則:SoC 編碼器必須先將區塊 QP 的平均值四捨五入到最接近的整數,再發送至 Codec 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);