Este documento tem como objetivo 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.
Máximo de instâncias de codec simultâneas
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:
- Execute o teste primeiro usando cts-tradefed.
- 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>
- Adicione as linhas
concurrent-instances
sugeridas na mensagem de falha do teste ao arquivo/etc/media_codecs.xml
. - Execute novamente o teste para verificar seu sucesso.
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:
- Execute os testes primeiro usando cts-tradefed. Dada a variabilidade de desempenho do Android, recomenda-se que os testes sejam executados diversas vezes para obter valores mínimos e máximos mais precisos.
- Use o script get_achievable_rates.py fornecido para gerar o arquivo XML.
- 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 linhaPRODUCT_COPY_FILES
adevice.mk
assim: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
- Execute novamente os testes de desempenho para verificar seu sucesso.
Coexistência de 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 deverá 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 de codec seguro não for suportada, isso deverá 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 poderão falhar se essas duas configurações não forem definidas corretamente.