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 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 que o máximo adequado seja 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>
- Inclua as linhas
concurrent-instances
sugeridas na mensagem de falha de teste no arquivo/etc/media_codecs.xml
. - 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:
- Execute os testes primeiro usando cts-tradefed. Dada a variabilidade do desempenho do Android, é recomendável que os testes sejam executados várias 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
aodevice.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.
3. 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 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 de codec seguro 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.