Медиакодеки

В Android 10 (уровень API 29) и более поздних версиях в классе MediaCodecInfo есть методы, позволяющие получить больше информации о кодеке:

isSoftwareOnly()
Возвращает значение true, если кодек работает только в программном обеспечении. Программные кодеки не гарантируют высокую производительность рендеринга.
isHardwareAccelerated()
Возвращает значение true, если кодек ускоряется аппаратными средствами.
isVendor()
Возвращает значение true, если кодек предоставлен производителем устройства, или false, если он предоставлен платформой Android.
isAlias()
MediaCodecList может содержать дополнительные записи для одного и того же базового кодека с использованием альтернативных названий (псевдонимов). Этот метод возвращает значение true, если кодек в этой записи является псевдонимом для другого кодека.

Кроме того, MediaCodec.getCanonicalName() возвращает название базового кодека для кодеков, созданных с помощью псевдонима.

Баллы за эффективность

Точка производительности – это способность кодека воспроизводить видео с определенной высотой, шириной и частотой кадров. Например, точка производительности UHD_60 представляет видео Ultra HD (3840 x 2160 пикселей), воспроизводимое с частотой 60 кадров в секунду.

Метод MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints() возвращает список записей PerformancePoint, которые кодек может воспроизвести или записать.

Чтобы проверить, охватывает ли один объект PerformancePoint другой, вызовите метод PerformancePoint.covers(PerformancePoint). Например, UHD_60.covers(UHD_50) возвращает значение True.

Для всех кодеков с аппаратным ускорением предоставляется список точек производительности. Если кодек не соответствует даже минимальным требованиям, список может быть пустым.

Обратите внимание, что на устройствах, обновленных до Android 10 (уровень API 29) и выше без обновления образа поставщика, не будет данных о баллах производительности, поскольку эти данные поступают от HAL поставщика. В этом случае getSupportedPerformancePoints() возвращает значение null.