Os dispositivos que executam o 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 na ISO/IEC 23008-12 . As imagens codificadas HEIC oferecem melhor qualidade de imagem com tamanhos de arquivo menores em comparação com arquivos JPEG.
As imagens HEIC são geradas pela estrutura da câmera solicitando uma imagem não compactada do HAL da câmera e enviando-a ao subsistema de mídia para ser codificada por um codificador HEIC ou HEVC.
Requisitos
Para suportar o formato de imagem HEIC, seu dispositivo deve ter um codificador de hardware compatível com MIMETYPE_IMAGE_ANDROID_HEIC
ou MIMETYPE_VIDEO_HEVC
com modo de qualidade constante .
Implementação
Para oferecer suporte ao formato de imagem HEIC em seu dispositivo, implemente um codec HEIC/HEVC e forneça suporte para as configurações de fluxo necessárias, que são os fluxos IMPLEMENTATION_DEFINED
/ YUV
e os fluxos de segmento de aplicativo JPEG.
meios de comunicação
Implemente o codec HEIC/HEVC em modo de qualidade constante (CQ) para o hardware correspondente da seguinte maneira:
- O codec do tipo HEVC consome o formato
IMPLEMENTATION_DEFINED
com o usoGRALLOC_USAGE_HW_VIDEO_ENCODER
ou o formatoHAL_PIXEL_FORMAT_YCBCR_420_888
dependendo do tamanho da imagem. - O codec do tipo HEIC consome o formato
IMPLEMENTATION_DEFINED
com o usoGRALLOC_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 aplicativo JPEG.
Para cada combinação de fluxo obrigatória, seu dispositivo de câmera deve suportar a troca de um fluxo JPEG por um fluxo 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 HAL:
- Um fluxo BLOB com o sinalizador de uso
JPEG_APPS_SEGMENT
para armazenar segmentos de aplicativos, incluindo EXIF e segmentos de miniaturas - Um fluxo
IMPLEMENTATION_DEFINED
ouYCBCR_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
, a estrutura da câmera aloca buffers grandes o suficiente para que o HAL da câmera preencha os segmentos do aplicativo JPEG. O segmento APP1
é obrigatório, mas os segmentos seguintes ao segmento APP1
( APP2
e superior) são opcionais. A estrutura da câmera substitui as tags EXIF no segmento APP1
que podem ser derivadas dos metadados do resultado da captura ou estão 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 deve girar a imagem em 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 relacionados 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 aplicativo, use a API pública HEIC .
Para obter mais informações, consulte as seguintes fontes.
Câmera HAL
Espaço de dados do buffer gráfico
Espaço de uso do buffer gráfico
Validação
Para validar se sua implementação oferece suporte a imagens HEIC, use o aplicativo de teste TestingCamera2
e execute os seguintes testes CTS e VTS de câmera.
Testes CTS de câmera
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Testes de câmera VTS