媒體資源管理器的 OEM 依賴項

本文檔旨在協助原始裝置製造商 (OEM) 正確實現對 Android 媒體資源管理器和相關 API 的支援。

最大並發解碼器實例數

CodecCapabilities.getMaxSupportedInstances介面傳回支援的並發編解碼器實例的最大數量。

CTS 測試testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)用於強制在/etc/media_codecs.xml中設定適當的最大值。

這是一個例子:

...
<MediaCodecs>
    ...
    <Encoders>
        <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" >
           ...
            <Limit name="concurrent-instances" max="13" />
        </MediaCodec>
        ...
    </Encoders>
    ...
</MediaCodecs>

OEM 可以使用此測試來產生通過測試的並發限制。去做這個:

  1. 首先使用 cts-tradefed 執行測試。
  2. 評估產生的失敗訊息。這是一個範例:
    There was 1 failure:
    1) testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
    junit.framework.AssertionFailedError: In order to pass the test, please publish
    following codecs' concurrent instances limit in /etc/media_codecs.xml:
    <MediaCodec name="OMX.<vendor>.video.encoder.mpeg4" type="video/mp4v-es" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.h263" type="video/3gpp" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.vp8" type="video/x-vnd.on2.vp8" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.avc" type="video/avc" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.avc.secure" type="video/avc" >
        <Limit name="concurrent-instances" max="4" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.mpeg4" type="video/mp4v-es" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.h263" type="video/3gpp" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.vp8" type="video/x-vnd.on2.vp8" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    
  3. 將測試失敗訊息中建議的concurrent-instances行新增至/etc/media_codecs.xml檔案中。
  4. 重新運行測試以驗證其成功。

視訊編解碼器可實現的幀速率

VideoCapabilities.getAchievableFrameRatesFor介面傳回視訊大小可實現的視訊幀速率的範圍。 OEM 必須透過位於/etc/media_codecs_performance.xml的 XML 檔案為每個裝置提供此資訊。這些設定由com.android.cts.videoperf.VideoEncoderDecoderTestandroid.media.cts.VideoDecoderPerfTest CTS 測試進行測試。

OEM 可以使用 CTS 測試來產生通過測試的 XML 檔案。去做這個:

  1. 首先使用 cts-tradefed 執行測試。鑑於 Android 效能的可變性,建議多次執行測試以獲得更準確的最小值和最大值。
  2. 使用提供的get_achievable_rates.py腳本產生 XML 檔案。
  3. 將 XML 檔案放置在: /etc/media_codecs_performance.xml
    這通常是透過將 XML 檔案放入裝置專案 (device/ <vendor> / <product> ) 並在device.mk新增PRODUCT_COPY_FILES行來完成的,如下所示:
    PRODUCT_COPY_FILES += \
    ...
       device/moto/shamu/media_codecs.xml:system/etc/media_codecs.xml \
    +    device/moto/shamu/media_codecs_performance.xml:system/etc/media_codecs_performance.xml
    
  4. 重新運行效能測試以驗證其成功。

安全編解碼器和非安全編解碼器共存

  • support-secure-with-non-secure-codec — 如果安全性編解碼器實例和非安全性編解碼器實例不能同時共存,則應在media_codecs.xml檔案中將其指示為全域設定。
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • support-multiple-secure-codecs — 如果不支援多個安全編解碼器實例的共存,則應在media_codecs.xml檔案中將其指示為全域設定。
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • 請注意,預設情況下這兩個設定都是 true,這表示如果支援它們,則無需將設定行新增至media_codecs.xml中。
  • 如果這兩個設定設定不正確, ResourceManagerTest CTS 測試可能會失敗。