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 die zugehörigen 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 Videoframerate 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 Variabilität der Android-Leistung 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/<vendor>/<product>) 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 die Instanz des sicheren Codecs und die Instanz des nicht sicheren Codecs nicht gleichzeitig vorhanden sein können, 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 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 „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.