Зависимости OEM для менеджера медиаресурсов

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

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

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

Тест CTStestGetMaxSupportedInstances(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>

Производители оригинального оборудования могут использовать этот тест, чтобы определить допустимые ограничения. Вот как это сделать:

  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 возвращает диапазон достижимых значений частоты кадров для видео определенного размера. Эту информацию производитель должен предоставить для каждого устройства в XML-файле, который размещается в каталоге /etc/media_codecs_performance.xml. Эти настройки проверяются с помощью тестов CTS com.android.cts.videoperf.VideoEncoderDecoderTest и android.media.cts.VideoDecoderPerfTest.

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

Совместное использование защищенного и незащищенного кодеков

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