媒体资源管理器的 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>
    …
    
  • 请注意,这两个设置默认均为 true,这意味着如果支持它们,则无需将设置行添加到 media_codecs.xml
  • 如果未正确设置这两个设置,ResourceManagerTest CTS 测试可能会失败。