Целью настоящего документа является помощь производителям оригинального оборудования (OEM) в правильной реализации поддержки Android Media Resource Manager и связанных с ним API.
Максимальное количество одновременных экземпляров кодека
Интерфейс 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-производители могут использовать этот тест для генерации одновременных лимитов, которые проходят тест. Для этого:
- Сначала запустите тест с помощью 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 для каждого устройства через XML-файл, размещенный в /etc/media_codecs_performance.xml
. Эти настройки проверяются тестами CTS com.android.cts.videoperf.VideoEncoderDecoderTest
и android.media.cts.VideoDecoderPerfTest
.
OEM-производители могут использовать тесты CTS для генерации XML-файлов, которые проходят тесты. Для этого:
- Сначала запустите тесты с помощью cts-tradefed. Учитывая изменчивость производительности Android, рекомендуется запускать тесты несколько раз, чтобы получить более точные минимальные и максимальные значения.
- Используйте предоставленный скрипт get_achievable_rates.py для генерации XML-файла.
- Поместите 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
- Повторно запустите тесты производительности, чтобы убедиться в их успешности.
Сосуществование защищенного кодека и незащищенного кодека
- 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> …
- Обратите внимание, что обе настройки по умолчанию установлены, то есть, если они поддерживаются, нет необходимости добавлять строку настройки в
media_codecs.xml
. - Тесты
ResourceManagerTest
CTS могут завершиться неудачей, если эти два параметра установлены неправильно.