Los dispositivos que ejecutan Android 10 admiten el formato de imagen comprimida HEIC, una marca específica de codificación de video de alta eficiencia (HEVC) del formato de archivo de imagen de alta eficiencia (HEIF) como se especifica en ISO/IEC 23008-12 . Las imágenes codificadas con HEIC ofrecen una mejor calidad de imagen con tamaños de archivo más pequeños en comparación con los archivos JPEG.
Las imágenes HEIC son generadas por el marco de la cámara que solicita una imagen sin comprimir de la HAL de la cámara y la envía al subsistema de medios para que sea codificada por un codificador HEIC o HEVC.
Requisitos
Para admitir el formato de imagen HEIC, su dispositivo debe tener un codificador de hardware compatible con MIMETYPE_IMAGE_ANDROID_HEIC
o MIMETYPE_VIDEO_HEVC
con el modo de calidad constante .
Implementación
Para admitir el formato de imagen HEIC en su dispositivo, implemente un códec HEIC/HEVC y brinde soporte para las configuraciones de transmisión requeridas, que son las transmisiones IMPLEMENTATION_DEFINED
/ YUV
y las transmisiones de segmentos de aplicaciones JPEG.
Medios de comunicación
Implemente el códec HEIC/HEVC en modo de calidad constante (CQ) para el hardware correspondiente de la siguiente manera:
- El códec de tipo HEVC consume el formato
IMPLEMENTATION_DEFINED
con el usoGRALLOC_USAGE_HW_VIDEO_ENCODER
o el formatoHAL_PIXEL_FORMAT_YCBCR_420_888
según el tamaño de la imagen. - El códec tipo HEIC consume el formato
IMPLEMENTATION_DEFINED
con el usoGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Cámara
En los metadatos estáticos, establezca ANDROID_HEIC_INFO_SUPPORTED
en verdadero y ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
en un valor entre [1, 16]
, que indica la cantidad de segmentos de aplicaciones JPEG.
Para cada combinación de transmisión obligatoria, su dispositivo de cámara debe admitir el intercambio de una transmisión JPEG con una transmisión HEIC del mismo tamaño.
Para un flujo de salida HEIC en la API pública, el servicio de cámara crea dos flujos internos HAL:
- Una transmisión BLOB con el indicador de uso
JPEG_APPS_SEGMENT
para almacenar segmentos de aplicaciones, incluidos EXIF y segmentos de miniaturas - Una secuencia
IMPLEMENTATION_DEFINED
oYCBCR_420_888
del tamaño de la secuencia HEIC según el códec de destino y el tamaño de la secuencia HEIC
Basado en ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
, el marco de la cámara asigna búferes lo suficientemente grandes para que la HAL de la cámara llene los segmentos de la aplicación JPEG. El segmento APP1
es obligatorio, pero los segmentos que siguen al segmento APP1
( APP2
y superiores) son opcionales. El marco de la cámara anula las etiquetas EXIF en el segmento APP1
que pueden derivarse de los metadatos del resultado de la captura o están relacionadas con el flujo de bits de la imagen principal y las envía a MediaMuxer
.
Dado que el codificador multimedia incorpora la orientación en los metadatos de las imágenes de salida, para garantizar una orientación uniforme entre la imagen principal y la miniatura, la HAL de la cámara no debe rotar la imagen en miniatura en función de la orientación android.jpeg.orientation.
El marco escribe la orientación en los metadatos EXIF y el contenedor HEIC.
Las etiquetas de metadatos estáticos, de control y dinámicos relacionados con el formato JPEG también se aplican al formato HEIC. Por ejemplo, las etiquetas de metadatos android.jpeg.orientation
y android.jpeg.quality
en la solicitud de captura se utilizan para controlar la orientación y la calidad de las imágenes HEIC.
Para usar el formato HEIC en una aplicación, use la API pública HEIC .
Para obtener más información, consulte las siguientes fuentes.
Cámara HAL
Espacio de datos de búfer gráfico
Espacio de uso del búfer gráfico
Validación
Para validar que su implementación admite imágenes HEIC, use la aplicación de prueba TestingCamera2
y ejecute las siguientes pruebas de cámara CTS y VTS.
Pruebas de cámara CTS
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Pruebas de cámara VTS