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:
- 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 vorgeschlagenen Zeilenconcurrent-instanceshinzu. - 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:
- 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.
- 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/<Hersteller>/<Produkt>) 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 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.xmlangegeben 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.xmlhinzufügen. - Die CTS-Tests
ResourceManagerTestkönnen fehlschlagen, wenn diese beiden Einstellungen nicht richtig festgelegt wurden.