Dipendenze OEM per Media Resource Manager

Questo documento è destinato ad aiutare i produttori di apparecchiature originali (OEM) a implementare correttamente il supporto per Android Media Resource Manager e le relative API.

Numero massimo di istanze di codec simultanee

L'interfaccia CodecCapabilities.getMaxSupportedInstances restituisce il numero massimo di istanze di codec simultanee supportate.

Il test CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) viene utilizzato per garantire che il valore massimo corretto sia impostato in /etc/media_codecs.xml.

Ecco un esempio:

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

I produttori di apparecchiature originali possono utilizzare questo test per generare i limiti simultanei che superano il test. Per:

  1. Esegui prima il test utilizzando cts-tradefed.
  2. Valuta il messaggio di errore risultante. Ecco un esempio:
    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. Aggiungi le righe concurrent-instances suggerite nel messaggio di errore del test al file /etc/media_codecs.xml.
  4. Esegui di nuovo il test per verificarne la riuscita.

Frequenze fotogrammi raggiungibili per i codec video

L'interfaccia VideoCapabilities.getAchievableFrameRatesFor restituisce l'intervallo di frequenze fotogrammi video raggiungibili per una dimensione video. Queste informazioni devono essere fornite dal produttore di apparecchiature originali per ogni dispositivo tramite un file XML inserito in /etc/media_codecs_performance.xml. Queste impostazioni vengono testate dai test CTS com.android.cts.videoperf.VideoEncoderDecoderTest e android.media.cts.VideoDecoderPerfTest.

I produttori di apparecchiature originali possono utilizzare i test CTS per generare i file XML che superano i test. Per:

  1. Esegui prima i test utilizzando cts-tradefed. Data la variabilità delle prestazioni di Android, è consigliabile eseguire i test più volte per ottenere valori minimi e massimi più precisi.
  2. Utilizza lo script get_achievable_rates.py fornito per generare il file XML.
  3. Inserisci il file XML in: /etc/media_codecs_performance.xml
    In genere, questa operazione viene eseguita inserendo il file XML nel progetto del dispositivo (device/<vendor>/<product>) e aggiungendo una PRODUCT_COPY_FILES riga a device.mk come segue:
    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. Esegui di nuovo i test delle prestazioni per verificarne la riuscita.

Coesistenza di codec sicuri e non sicuri

  • supports-secure-with-non-secure-codec: se l'istanza del codec sicuro e l'istanza del codec non sicuro non possono coesistere contemporaneamente, questa impostazione deve essere indicata come impostazione globale nel file media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs: se la coesistenza di più istanze di codec sicuri non è supportata, questa impostazione deve essere indicata come impostazione globale nel file media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • Tieni presente che entrambe le impostazioni sono vere per impostazione predefinita, il che significa che, se sono supportate, non è necessario aggiungere la riga di impostazione a media_codecs.xml.
  • I test CTS ResourceManagerTest potrebbero non riuscire se queste due impostazioni non sono state configurate correttamente.