OEM-зависимости для Media Resource Manager

Этот документ призван помочь производителям оригинального оборудования (OEM) правильно внедрить поддержку диспетчера мультимедийных ресурсов Android и связанных API.

1. Максимальное количество одновременных экземпляров кодека

Интерфейс CodecCapabilities.getMaxSupportedInstances возвращает максимальное количество поддерживаемых одновременных экземпляров кодека.

Тест CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) используется для обеспечения правильного максимального значения, установленного в /etc/media_codecs.xml .

Вот пример:

...
<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. Повторно запустите тест, чтобы убедиться в его успешности.

2. Достижимая частота кадров для видеокодеков

Интерфейс VideoCapabilities.getAchievableFrameRatesFor возвращает диапазон достижимых частот кадров видео для размера видео. Эта информация должна быть предоставлена ​​OEM-производителем для каждого устройства через XML-файл, размещенный в /etc/media_codecs_performance.xml . Эти параметры проверяются тестами com.android.cts.videoperf.VideoEncoderDecoderTest и android.media.cts.VideoDecoderPerfTest CTS.

OEM-производители могут использовать тесты CTS для создания файлов XML, которые проходят тесты. Сделать это:

  1. Сначала запустите тесты, используя cts-tradefed. Учитывая изменчивость производительности Android, рекомендуется запускать тесты несколько раз, чтобы получить более точные минимальные и максимальные значения.
  2. Используйте предоставленный сценарий get_achievable_rates.py для создания XML-файла.
  3. Поместите файл XML по адресу: /etc/media_codecs_performance.xml
    Обычно это делается путем помещения XML-файла в проект устройства (device/ <vendor> / <product> ) и добавления строки 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. Повторно запустите тесты производительности, чтобы убедиться в их успешности.

3. Сосуществование безопасного и незащищенного кодека

  • 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 .
  • Тесты ResourceManagerTest CTS могут завершиться ошибкой, если эти два параметра не установлены должным образом.