Dependências OEM para o gerenciador de recursos de mídia

Este documento destina-se a ajudar os fabricantes de equipamentos originais (OEMs) a implementar adequadamente o suporte para o gerenciador de recursos de mídia do Android e APIs relacionadas.

1. Máximo de instâncias simultâneas de codec

A interface CodecCapabilities.getMaxSupportedInstances retorna o número máximo de instâncias de codec simultâneas suportadas.

O teste CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) é usado para impor o máximo adequado definido em /etc/media_codecs.xml .

Aqui está um exemplo:

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

Os OEMs podem usar esse teste para gerar os limites simultâneos que passam no teste. Para fazer isso:

  1. Execute o teste primeiro usando cts-tradefed.
  2. Avalie a mensagem de falha resultante. Aqui está um exemplo:
    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. Adicione as linhas concurrent-instances sugeridas na mensagem de falha do teste ao arquivo /etc/media_codecs.xml .
  4. Execute novamente o teste para verificar seu sucesso.

2. Taxas de quadros alcançáveis ​​para codecs de vídeo

A interface VideoCapabilities.getAchievableFrameRatesFor retorna o intervalo de taxas de quadros de vídeo alcançáveis ​​para um tamanho de vídeo. Essas informações devem ser fornecidas pelo OEM para cada dispositivo por meio de um arquivo XML colocado em /etc/media_codecs_performance.xml . Essas configurações são testadas pelos testes CTS com.android.cts.videoperf.VideoEncoderDecoderTest e android.media.cts.VideoDecoderPerfTest .

Os OEMs podem usar os testes CTS para gerar os arquivos XML que passam nos testes. Para fazer isso:

  1. Execute os testes primeiro usando cts-tradefed. Dada a variabilidade de desempenho do Android, é recomendável que os testes sejam executados várias vezes para obter valores mínimos e máximos mais precisos.
  2. Use o script get_achievable_rates.py fornecido para gerar o arquivo XML.
  3. Coloque o arquivo XML em: /etc/media_codecs_performance.xml
    Isso geralmente é feito colocando o arquivo XML no projeto do dispositivo (device/ <vendor> / <product> ) e adicionando uma linha PRODUCT_COPY_FILES a device.mk da seguinte forma:
    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. Execute novamente os testes de desempenho para verificar seu sucesso.

3. Coexistir codec seguro e codec não seguro

  • support-secure-with-non-secure-codec — Se a instância do codec seguro e a instância do codec não seguro não puderem coexistir ao mesmo tempo, isso deve ser indicado como configuração global no arquivo media_codecs.xml .
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • support-multiple-secure-codecs — Se a coexistência de várias instâncias seguras de codec não for suportada, isso deve ser indicado como uma configuração global no arquivo media_codecs.xml .
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • Observe que ambas as configurações são verdadeiras por padrão, ou seja, se forem suportadas, não há necessidade de adicionar a linha de configuração ao media_codecs.xml .
  • Os testes ResourceManagerTest CTS podem falhar se essas duas configurações não forem definidas corretamente.