Начиная с 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.