Tecnologia HEIF

Os dispositivos com Android 10 são compatíveis com o formato de imagem compactada HEIC, uma marca específica de codificação de vídeo de alta eficiência (HEVC) do formato de arquivo de imagem de alta eficiência (HEIF), conforme especificado em ISO/IEC 23008-12. As imagens codificadas em HEIC oferecem melhor qualidade de imagem com tamanhos de arquivo menores em comparação com arquivos JPEG.

As imagens HEIC são geradas pelo framework da câmera, que solicita uma imagem não compactada da HAL da câmera e a envia para o subsistema de mídia para ser codificada por um codificador HEIC ou HEVC.

Requisitos

Para oferecer suporte ao formato de imagem HEIC, seu dispositivo precisa ter um codificador de hardware compatível com MIMETYPE_IMAGE_ANDROID_HEIC ou MIMETYPE_VIDEO_HEVC no modo de qualidade constante.

Implementação

Para oferecer suporte ao formato de imagem HEIC no seu dispositivo, implemente um codec HEIC/HEVC e ofereça suporte às configurações de stream necessárias, que são os streams IMPLEMENTATION_DEFINED/YUV e os streams de segmento de app JPEG.

Mídia

Implemente o codec HEIC/HEVC no modo de qualidade constante (CQ) para o hardware correspondente da seguinte maneira:

  • O codec do tipo HEVC consome o formato IMPLEMENTATION_DEFINED com o uso de GRALLOC_USAGE_HW_VIDEO_ENCODER ou o formato HAL_PIXEL_FORMAT_YCBCR_420_888, dependendo do tamanho da imagem.
  • O codec do tipo HEIC consome o formato IMPLEMENTATION_DEFINED com o uso de GRALLOC_USAGE_HW_IMAGE_ENCODER.

Câmera

Nos metadados estáticos, defina ANDROID_HEIC_INFO_SUPPORTED como "true" e ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT como um valor entre [1, 16], indicando o número de segmentos do app JPEG.

Para cada combinação de stream obrigatória, o dispositivo de câmera precisa ser compatível com a troca de um stream JPEG por um HEIC do mesmo tamanho.

Para um fluxo de saída HEIC na API pública, o serviço de câmera cria dois fluxos internos da HAL:

  • Um fluxo BLOB com a flag de uso JPEG_APPS_SEGMENT para armazenar segmentos de apps, incluindo EXIF e miniaturas.
  • Um fluxo IMPLEMENTATION_DEFINED ou YCBCR_420_888 do tamanho do fluxo HEIC, dependendo do codec de destino e do tamanho do fluxo HEIC

Com base em ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, o framework da câmera aloca buffers grandes o suficiente para que a HAL da câmera preencha os segmentos do app JPEG. O segmento APP1 é obrigatório, mas os segmentos após o APP1 (APP2 e acima) são opcionais. A estrutura da câmera substitui as tags EXIF no segmento APP1, que podem ser derivadas dos metadados de resultado da captura ou relacionadas ao fluxo de bits da imagem principal, e as envia para MediaMuxer.

Como o codificador de mídia incorpora a orientação nos metadados das imagens de saída, para garantir uma orientação consistente entre a imagem principal e a miniatura, o HAL da câmera não pode girar a miniatura com base em android.jpeg.orientation.. A estrutura grava a orientação nos metadados EXIF e no contêiner HEIC.

As tags de metadados estáticos, de controle e dinâmicos relacionadas ao formato JPEG também se aplicam ao formato HEIC. Por exemplo, as tags de metadados android.jpeg.orientation e android.jpeg.quality na solicitação de captura são usadas para controlar a orientação e a qualidade das imagens HEIC.

Para usar o formato HEIC em um app, use a API pública HEIC.

Para mais informações, consulte as seguintes fontes.

HAL da câmera

Espaço de dados do buffer gráfico

Espaço de uso do buffer gráfico

Validação

Para validar se a implementação oferece suporte a imagens HEIC, use o app de teste TestingCamera2 e execute os seguintes testes de CTS e VTS da câmera.

Testes do CTS da câmera

Testes de VTS da câmera