メディア リソース マネージャーに対する OEM の依存関係

このドキュメントは、相手先ブランド製品製造企業(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 はこのテストを使用して、テストに合格する同時実行の制限を生成できます。手順は次のとおりです。

  1. まず cts-tradefed を使用してテストを実行します。
  2. 生成されたエラー メッセージを評価します。次に例を示します。
    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>
    
  3. テストの失敗メッセージから得られた concurrent-instances の行を /etc/media_codecs.xml ファイルに追加します。
  4. テストを再度実行して、テストの成否を確認します。

動画コーデックの達成可能なフレームレート

VideoCapabilities.getAchievableFrameRatesFor インターフェースは、動画サイズに対して達成可能な動画フレームレートの範囲を返します。この情報は、各デバイスの OEM が /etc/media_codecs_performance.xml に配置された XML ファイルを介して提供する必要があります。これらの設定は、CTS テスト com.android.cts.videoperf.VideoEncoderDecoderTestandroid.media.cts.VideoDecoderPerfTest でテストされます。

OEM は、テストに合格する XML ファイルを生成するために CTS テストを使用できます。手順は次のとおりです。

  1. まず cts-tradefed を使用してテストを実行します。Android のパフォーマンスのばらつきを考慮して、最小値と最大値の精度を高めるためにテストを複数回実行することをおすすめします。
  2. get_achievable_rates.py スクリプトを使用して XML ファイルを生成します。
  3. 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
    
  4. パフォーマンス テストを再度実行して、テストの成否を確認します。

セキュアなコーデックとセキュアでないコーデックの共存

  • 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 テストが失敗することがあります。