Este documento tem como objetivo ajudar os fabricantes de equipamentos originais (OEMs) a implementar corretamente o suporte ao gerenciador de recursos de mídia do Android e às 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 com suporte.
O teste CTS
testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
é usado para aplicar o máximo adequado definido em
/etc/media_codecs.xml
.
Confira 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 atendem aos requisitos. Para fazer isto:
- Primeiro, execute o teste usando o cts-tradefed.
- Avalie a mensagem de falha resultante. Confira 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 o teste novamente para verificar se ele foi bem-sucedido.
Frame rates possíveis para codecs de vídeo
A interface VideoCapabilities.getAchievableFrameRatesFor
retorna o intervalo de frame rates de vídeo alcançáveis para um tamanho de vídeo. Essas
informações precisam ser fornecidas pelo OEM para cada dispositivo usando 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 do CTS para gerar os arquivos XML que passam nos testes. Para fazer isto:
- Primeiro, execute os testes usando o 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
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 os testes de desempenho novamente para verificar se eles foram bem-sucedidos.
Coexistência de codec seguro e codec não seguro
- supports-secure-with-non-secure-codec:
se a instância de codec seguro e a instância de codec não seguro não puderem
coexistir ao mesmo tempo, isso 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> …
- supports-multiple-secure-codecs:
se a coexistência de várias instâncias de codec seguras não tiver suporte, isso será indicado
como uma configuração global no arquivo
media_codecs.xml
.<MediaCodecs> <Settings> <Setting name="supports-multiple-secure-codecs" value="false" /> </Settings> <Encoders> …
- As duas configurações são verdadeiras por padrão, ou seja, se elas tiverem suporte,
não será necessário adicionar a linha de configuração ao
media_codecs.xml
. - Os testes de CTS
ResourceManagerTest
podem falhar se essas duas configurações não estiverem definidas corretamente.