このドキュメントは、相手先ブランド製品製造企業(OEM)が Android メディア リソース マネージャーと関連 API のサポートを適切に行えるようにすることを目的に書かれています。
コーデック インスタンスの最大同時実行数
CodecCapabilities.getMaxSupportedInstances
インターフェースは、サポートされている同時実行コーデック インスタンスの最大数を返します。
/etc/media_codecs.xml
で適切な最大数を設定するために、CTS テスト testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
を使用します。
次に例を示します。
... <MediaCodecs> ... <Encoders> <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" > ... <Limit name="concurrent-instances" max="13" /> </MediaCodec> ... </Encoders> ... </MediaCodecs>
OEM はこのテストを使用して、テストに合格する同時実行の制限を生成できます。手順は次のとおりです。
- まず cts-tradefed を使用してテストを実行します。
- 生成されたエラー メッセージを評価します。次に例を示します。
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>
- テストの失敗メッセージから得られた
concurrent-instances
の行を/etc/media_codecs.xml
ファイルに追加します。 - テストを再度実行して、テストの成否を確認します。
動画コーデックの達成可能なフレームレート
VideoCapabilities.getAchievableFrameRatesFor
インターフェースは、動画サイズに対して達成可能な動画フレームレートの範囲を返します。この情報は、各デバイスの OEM が /etc/media_codecs_performance.xml
に配置された XML ファイルを介して提供する必要があります。これらの設定は、CTS テスト com.android.cts.videoperf.VideoEncoderDecoderTest
と android.media.cts.VideoDecoderPerfTest
でテストされます。
OEM は、テストに合格する XML ファイルを生成するために CTS テストを使用できます。手順は次のとおりです。
- まず cts-tradefed を使用してテストを実行します。Android のパフォーマンスのばらつきを考慮して、最小値と最大値の精度を高めるためにテストを複数回実行することをおすすめします。
- get_achievable_rates.py スクリプトを使用して XML ファイルを生成します。
- XML ファイルを
/etc/media_codecs_performance.xml
に置きます。
通常は XML ファイルをデバイス プロジェクト(device/<ベンダー名>/<製品名>)に配置し、PRODUCT_COPY_FILES
の行をdevice.mk
に追加してこれを行います。以下の例のようになります。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
- パフォーマンス テストを再度実行して、テストの成否を確認します。
セキュアなコーデックとセキュアでないコーデックの共存
- supports-secure-with-non-secure-codec - セキュアなコーデックのインスタンスとセキュアではないコーデックのインスタンスが共存できない場合は、その旨をグローバル設定として
media_codecs.xml
ファイル内で示す必要があります。<MediaCodecs> <Settings> <Setting name="supports-secure-with-non-secure-codec" value="false" /> </Settings> <Encoders> …
- supports-multiple-secure-codecs - 複数のセキュアなコーデックのインスタンスの共存がサポートされていない場合は、その旨をグローバル設定として
media_codecs.xml
ファイル内で示す必要があります。<MediaCodecs> <Settings> <Setting name="supports-multiple-secure-codecs" value="false" /> </Settings> <Encoders> …
- どちらの設定もデフォルトで true になっています。つまり、サポートされている場合は、設定行を
media_codecs.xml
に追加する必要はありません。 - この 2 つが正しく設定されていないと、
ResourceManagerTest
CTS テストが失敗することがあります。