Dispositivos com o Android 10 oferecem suporte ao HEIC formato de imagem compactado, um tamanho marca específica da codificação de vídeo de alta eficiência (HEVC, na sigla em inglês) formato de arquivo HEIF, conforme especificado 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.
Imagens HEIC são geradas pelo framework da câmera solicitando uma do HAL da câmera e enviá-la ao subsistema de mídia para ser codificado por um codificador HEIC ou HEVC.
Requisitos
Para oferecer suporte ao formato de imagem HEIC, seu dispositivo precisa ter um codificador de hardware
apoiando
MIMETYPE_IMAGE_ANDROID_HEIC
ou
MIMETYPE_VIDEO_HEVC
com o
modo de qualidade constante.
Implementação
Para oferecer suporte ao formato de imagem HEIC no seu dispositivo, implemente um codec HEIC/HEVC
e fornece suporte para as configurações de stream necessárias, que são as
IMPLEMENTATION_DEFINED
/YUV
streams e fluxos de segmento de app JPEG.
Mídia
Implemente o codec HEIC/HEVC em modo de qualidade constante (CQ) para o hardware correspondente, da seguinte forma:
- O codec do tipo HEVC consome
IMPLEMENTATION_DEFINED
. com o uso deGRALLOC_USAGE_HW_VIDEO_ENCODER
ou doHAL_PIXEL_FORMAT_YCBCR_420_888
, dependendo do tamanho da imagem. - O codec do tipo HEIC consome o formato
IMPLEMENTATION_DEFINED
com a Uso doGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Câmera
Nos metadados estáticos, defina ANDROID_HEIC_INFO_SUPPORTED
como verdadeiro.
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
a um valor entre [1, 16]
indicando o número de segmentos de app JPEG.
Para cada combinação obrigatória de transmissão, a câmera precisa ser compatível com a troca um stream JPEG com um stream HEIC do mesmo tamanho.
Para um stream de saída HEIC na API pública, o serviço de câmera cria duas HALs streams internos:
- Um stream BLOB com a flag de uso
JPEG_APPS_SEGMENT
para armazenar o app segmentos incluindo EXIF e segmentos de miniatura - Um stream
IMPLEMENTATION_DEFINED
ouYCBCR_420_888
do tamanho do Stream HEIC dependendo do codec de destino e do tamanho do stream 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 o app JPEG.
segmentos. O segmento APP1
é obrigatório, mas os segmentos que seguem a APP1
segmento (APP2
e superior) são opcionais. O framework da câmera substitui o EXIF
Tags no segmento APP1
que podem ser derivadas dos metadados do resultado da captura
ou estão relacionados ao bitstream da imagem principal e os envia para MediaMuxer
.
Como o codificador de mídia incorpora a orientação nos metadados da saída
imagens, para garantir uma orientação consistente entre a imagem principal e a miniatura,
a HAL da câmera não pode girar a imagem em miniatura com base
android.jpeg.orientation.
O framework grava a orientação no EXIF
metadados e um contêiner HEIC.
As tags de metadados estáticas, de controle e dinâmicas relacionadas ao formato JPEG também
se aplicam ao formato HEIC. Por exemplo, os operadores android.jpeg.orientation
e
Tags de metadados 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 o API pública HEIC.
Para mais informações, consulte as fontes a seguir.
HAL da câmera
Espaço de dados de buffer gráfico
Espaço de uso do buffer gráfico
Validação
Para confirmar que sua implementação é compatível com imagens HEIC, use o
TestingCamera2
App de teste e execute os seguintes testes CTS e VTS da câmera.
Testes CTS da câmera
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Testes VTS de câmera