OEM-Abhängigkeiten für den Media Resource Manager

Dieses Dokument soll Erstausrüstern (OEMs) dabei helfen, die Unterstützung für den Android Media Resource Manager und die zugehörigen APIs richtig zu implementieren.

Maximale Anzahl gleichzeitiger Codec-Instanzen

Die CodecCapabilities.getMaxSupportedInstances-Schnittstelle gibt die maximale Anzahl unterstützter gleichzeitiger Codec-Instanzen zurück.

Mit dem CTS-Test testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) wird sichergestellt, dass in /etc/media_codecs.xml das richtige Maximum festgelegt ist.

Hier ein Beispiel:

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

OEMs können mit diesem Test die Grenzwerte für die gleichzeitige Nutzung generieren, die den Test bestehen. Gehen Sie dazu so vor:

  1. Führen Sie den Test zuerst mit cts-tradefed aus.
  2. Prüfen Sie die resultierende Fehlermeldung. Hier ein Beispiel:
    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. Fügen Sie der Datei /etc/media_codecs.xml die in der Fehlermeldung für den Test vorgeschlagenen concurrent-instances Zeilen hinzu.
  4. Führen Sie den Test noch einmal aus, um den Erfolg zu überprüfen.

Erzielbare Frameraten für Videocodecs

Die VideoCapabilities.getAchievableFrameRatesFor-Benutzeroberfläche gibt den Bereich der erreichbaren Videoframeraten für eine Videogröße zurück. Diese Informationen müssen vom OEM für jedes Gerät über eine XML-Datei unter /etc/media_codecs_performance.xml bereitgestellt werden. Diese Einstellungen werden durch die CTS-Tests com.android.cts.videoperf.VideoEncoderDecoderTest und android.media.cts.VideoDecoderPerfTest geprüft.

OEMs können die CTS-Tests verwenden, um die XML-Dateien zu generieren, die die Tests bestehen. Gehen Sie dazu so vor:

  1. Führen Sie die Tests zuerst mit cts-tradefed aus. Aufgrund der Variabilität der Android-Leistung wird empfohlen, die Tests mehrmals durchzuführen, um genauere Mindest- und Höchstwerte zu erhalten.
  2. Verwenden Sie das bereitgestellte Script get_achievable_rates.py, um die XML-Datei zu generieren.
  3. Platzieren Sie die XML-Datei unter: /etc/media_codecs_performance.xml
    Normalerweise wird die XML-Datei im Geräteprojekt (device/<vendor>/<product>) platziert und device.mk wird eine PRODUCT_COPY_FILES-Zeile hinzugefügt. Das sieht so aus:
    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. Führen Sie die Leistungstests noch einmal aus, um den Erfolg zu überprüfen.

Koexistenz von sicherem und nicht sicherem Codec

  • supports-secure-with-non-secure-codec: Wenn die Instanz des sicheren Codecs und die Instanz des nicht sicheren Codecs nicht gleichzeitig vorhanden sein können, sollte dies in der Datei media_codecs.xml als globale Einstellung angegeben werden.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs: Wenn die Koexistenz mehrerer sicherer Codec-Instanzen nicht unterstützt wird, sollte dies als globale Einstellung in der media_codecs.xml-Datei angegeben werden.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • Beide Einstellungen sind standardmäßig aktiviert. Wenn sie unterstützt werden, muss die Einstellungszeile nicht in media_codecs.xml eingefügt werden.
  • Die ResourceManagerTest-CTS-Tests können fehlschlagen, wenn diese beiden Einstellungen nicht richtig festgelegt wurden.