このドキュメントは、相手先ブランド製品製造企業(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 つが正しく設定されていないと、
ResourceManagerTestCTS テストが失敗することがあります。