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:
- Führen Sie den Test zuerst mit cts-tradefed aus.
- 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>
- Fügen Sie der Datei
/etc/media_codecs.xml
die in der Fehlermeldung für den Test vorgeschlagenenconcurrent-instances
Zeilen hinzu. - 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:
- 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.
- Verwenden Sie das bereitgestellte Script get_achievable_rates.py, um die XML-Datei zu generieren.
- Platzieren Sie die XML-Datei unter:
/etc/media_codecs_performance.xml
Normalerweise wird die XML-Datei im Geräteprojekt (device/<vendor>/<product>) platziert unddevice.mk
wird einePRODUCT_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
- 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.