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:
- Führen Sie den Test zuerst mit cts-tradefed aus.
- 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> - Fügen Sie der Datei
/etc/media_codecs.xmldie in der Fehlermeldung des Tests vorgeschlagenenconcurrent-instances-Zeilen hinzu. - 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:
- 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.
- Verwenden Sie das bereitgestellte Skript get_achievable_rates.py, um die XML-Datei zu generieren.
- 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 unddevice.mkeinePRODUCT_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
- 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.xmlangegeben 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.xmleinfügen. - Die
ResourceManagerTest-CTS-Tests können fehlschlagen, wenn diese beiden Einstellungen nicht richtig festgelegt wurden.