В 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.