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

Dieses Dokument soll Erstausrüstern (Original Equipment Manufacturers, OEMs) helfen, die Unterstützung für den Android-Media-Ressourcenmanager und zugehörige APIs richtig zu implementieren.

Maximale Anzahl gleichzeitiger Codec-Instanzen

Die CodecCapabilities.getMaxSupportedInstances-Schnittstelle gibt die maximale Anzahl der unterstützten gleichzeitigen Codec-Instanzen zurück.

Der CTS-Test testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) wird verwendet, um sicherzustellen, 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. Werten Sie die resultierende Fehlermeldung aus. 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 des Tests vorgeschlagenen concurrent-instances-Zeilen hinzu.
  4. Führen Sie den Test noch einmal aus, um zu prüfen, ob er erfolgreich war.

Erreichbare Frameraten für Videocodecs

Die VideoCapabilities.getAchievableFrameRatesFor-Schnittstelle 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 bereitgestellt werden, die sich unter /etc/media_codecs_performance.xml befindet. Diese Einstellungen werden von den CTS-Tests com.android.cts.videoperf.VideoEncoderDecoderTest und android.media.cts.VideoDecoderPerfTest getestet.

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 unterschiedlichen Geschwindigkeiten bei Android wird empfohlen, die Tests mehrmals auszuführen, um genauere Mindest- und Höchstwerte zu erhalten.
  2. Verwenden Sie das bereitgestellte Skript get_achievable_rates.py, um die XML-Datei zu generieren.
  3. Platzieren Sie die XML-Datei unter /etc/media_codecs_performance.xml
    . Dies geschieht in der Regel, indem Sie die XML-Datei im Geräteprojekt (device/<Hersteller>/<Produkt>) platzieren und device.mk eine PRODUCT_COPY_FILES-Zeile hinzufügen:
    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 zu prüfen, ob sie erfolgreich waren.

Koexistenz von sicherem und nicht sicherem Codec

  • supports-secure-with-non-secure-codec: Wenn es nicht sein darf, dass die Instanz des sicheren Codecs zur gleichen Zeit wie die Instanz des nicht sicheren Codecs existiert, sollte dies als globale Einstellung in der Datei media_codecs.xml angegeben werden.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs: Wenn nicht unterstützt wird, dass mehrere sichere Codec-Instanzen gleichzeitig existieren, 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 „true“. Wenn sie also unterstützt werden, müssen Sie die Einstellungszeile nicht in die media_codecs.xml einfügen.
  • Die ResourceManagerTest-CTS-Tests können fehlschlagen, wenn diese beiden Einstellungen nicht richtig festgelegt wurden.