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 ordnungsgemäß zu implementieren.

Maximale Anzahl gleichzeitiger Codec-Instanzen

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

Mit dem CTS-Test testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) wird erzwungen, dass das richtige Maximum in /etc/media_codecs.xml 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 gleichzeitigen Limits generieren, die den Test bestehen. Aktion:

  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 Zeilen concurrent-instances hinzu.
  4. Führen Sie den Test noch einmal aus, um zu prüfen, ob er erfolgreich ist.

Erreichbare Frameraten für Video-Codecs

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 mit den CTS-Tests die XML-Dateien generieren, die die Tests bestehen. Aktion:

  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 sind.

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 auf „true“ gesetzt. Wenn sie also unterstützt werden, müssen Sie die Einstellungszeile nicht zu media_codecs.xml hinzufügen.
  • Die CTS-Tests ResourceManagerTest können fehlschlagen, wenn diese beiden Einstellungen nicht richtig festgelegt wurden.