Начиная с Android 10 (уровень API 29) и выше, в MediaCodecInfo
есть методы, которые раскрывают дополнительную информацию о кодеке:
-
isSoftwareOnly()
- Возвращает true, если кодек работает только в программном режиме. Программные кодеки не гарантируют производительность рендеринга.
-
isHardwareAccelerated()
- Возвращает true, если кодек ускорен аппаратно.
-
isVendor()
- Возвращает true, если кодек предоставлен поставщиком устройства, или false, если предоставлен платформой Android.
-
isAlias()
-
MediaCodecList
может содержать дополнительные записи для того же базового кодека, использующие альтернативные имена кодеков (псевдонимы). Этот метод возвращает значение true, если кодек в этой записи является псевдонимом другого кодека.
Кроме того, MediaCodec.getCanonicalName()
возвращает базовое имя кодека для кодеков, созданных через псевдоним.
Баллы за производительность
Балл производительности отражает способность кодека обрабатывать видео с заданной высотой, шириной и частотой кадров. Например, балл производительности UHD_60
соответствует видео сверхвысокой чёткости (3840x2160 пикселей) с частотой 60 кадров в секунду.
Метод MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints()
возвращает список записей PerformancePoint
, которые кодек может визуализировать или захватить.
Проверить, покрывает ли одна точка PerformancePoint
другую, можно с помощью вызова PerformancePoint.covers(PerformancePoint)
. Например, UHD_60.covers(UHD_50)
возвращает true.
Для всех кодеков с аппаратным ускорением представлен список баллов производительности. Этот список может быть пустым, если кодек не соответствует даже самому низкому стандартному баллу производительности.
Обратите внимание, что устройства, обновлённые до Android 10 (уровень API 29) и выше без обновления образа поставщика, не будут иметь данных о точках производительности, поскольку эти данные берутся из HAL-базы поставщика. В этом случае getSupportedPerformancePoints()
возвращает значение null.