Codecs de mídia

No Android 10 (nível 29 da API) e versões mais recentes, há métodos em MediaCodecInfo que revelam mais informações sobre um codec:

isSoftwareOnly()
Retorna verdadeiro se o codec for executado somente no software. Os codecs de software não garantem o desempenho da renderização.
isHardwareAccelerated()
Retorna "true" se um codec for acelerado pelo hardware.
isVendor()
Retorna verdadeiro se o codec for fornecido pelo fornecedor do dispositivo ou falso se for fornecido pela plataforma Android.
isAlias()
MediaCodecList pode conter entradas adicionais para o mesmo codec subjacente usando um nome de codec alternativo (alias). Esse método retorna como verdadeiro se o codec nesta entrada for um alias para outro codec.

Além disso, MediaCodec.getCanonicalName() retorna o nome do codec subjacente para codecs criados por meio de um alias.

Pontos de desempenho

Um ponto de desempenho representa a capacidade de um codec de renderizar vídeo em uma altura, largura e taxa de quadros específicas. Por exemplo, o ponto de desempenho UHD_60 representa um vídeo em Ultra HD (3.840 x 2.160 pixels) renderizado a 60 quadros por segundo.

O método MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints() retorna uma lista de PerformancePoint entradas que o codec pode renderizar ou capturar.

Você pode verificar se um determinado PerformancePoint abrange outro chamando PerformancePoint.covers(PerformancePoint). Por exemplo, UHD_60.covers(UHD_50) retorna como verdadeiro.

Uma lista de pontos de desempenho é fornecida para todos os codecs acelerados por hardware. A lista poderá ser vazia caso o codec não atenda ao ponto de desempenho padrão mais baixo.

Os dispositivos que fizeram upgrade para o Android 10 (nível 29 da API) e versões mais recentes sem atualizar a imagem do fornecedor não terão dados do ponto de desempenho, porque esses dados vêm do HAL do fornecedor. Nesse caso, getSupportedPerformancePoints() retorna um valor nulo.