媒體資源管理工具的 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. 重新執行效能測試,確認測試是否成功。

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

  • supports-secure-with-non-secure-codec - 如果安全編碼的例項和非安全編碼的例項無法同時共存,應在 media_codecs.xml 檔案中將其標示為全域設定。
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs:如果不支援多個安全編碼器例項共存,應在 media_codecs.xml 檔案中將其設為全域設定。
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • 請注意,這兩項設定預設為「是」,也就是說,如果系統支援這兩項設定,就不需要將設定行加入 media_codecs.xml
  • 如果這兩項設定未正確設定,ResourceManagerTest CTS 測試可能會失敗。