本文檔旨在幫助原始設備製造商 (OEM) 正確實施對 Android 媒體資源管理器和相關 API 的支持。
1.最大並發編解碼器實例
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 可以使用此測試來生成通過測試的並發限制。去做這個:
- 首先使用 cts-tradefed 運行測試。
- 評估產生的失敗消息。這是一個示例:
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>
- 將測試失敗消息中建議的
concurrent-instances
行添加到/etc/media_codecs.xml
文件中。 - 重新運行測試以驗證其成功。
2. 視頻編解碼器可實現的幀速率
VideoCapabilities.getAchievableFrameRatesFor
接口返回視頻大小的可實現視頻幀速率範圍。 OEM 必須通過位於/etc/media_codecs_performance.xml
的 XML 文件為每個設備提供此信息。這些設置由com.android.cts.videoperf.VideoEncoderDecoderTest
和android.media.cts.VideoDecoderPerfTest
CTS 測試進行測試。
OEM 可以使用 CTS 測試生成通過測試的 XML 文件。去做這個:
- 首先使用 cts-tradefed 運行測試。鑑於 Android 性能的可變性,建議多次運行測試以獲得更準確的最小值和最大值。
- 使用提供的get_achievable_rates.py腳本生成 XML 文件。
- 將 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
- 重新運行性能測試以驗證其成功。
3. 安全編解碼器和非安全編解碼器並存
- 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> …
- 請注意,默認情況下這兩個設置都是 true,這意味著如果它們受支持,則無需將設置行添加到
media_codecs.xml
。 - 如果這兩個設置沒有正確設置,
ResourceManagerTest
CTS 測試可能會失敗。