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) según se especifica en ISO/IEC 23008-12. Las imágenes codificadas en HEIC ofrecen una mejor calidad de imagen con tamaños de archivo más pequeños en comparación con los archivos JPEG.
El framework de la cámara genera imágenes HEIC solicitando una imagen sin comprimir desde la HAL de la cámara y enviándola al subsistema de medios para que la codifique un codificador HEIC o HEVC.
Requisitos
Para admitir el formato de imagen HEIC, tu dispositivo debe tener un codificador de hardware que admita MIMETYPE_IMAGE_ANDROID_HEIC
o MIMETYPE_VIDEO_HEVC
con el modo de calidad constante.
Implementación
Para admitir el formato de imagen HEIC en tu dispositivo, implementa un códec HEIC/HEVC y proporciona compatibilidad con las configuraciones de transmisión requeridas, que son las transmisiones IMPLEMENTATION_DEFINED
/YUV
y las transmisiones de segmentos de la app en JPEG.
Contenido multimedia
Implementa el códec HEIC/HEVC en el 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 uso deGRALLOC_USAGE_HW_VIDEO_ENCODER
o el formatoHAL_PIXEL_FORMAT_YCBCR_420_888
según el tamaño de la imagen. - El códec de tipo HEIC consume el formato
IMPLEMENTATION_DEFINED
con el uso deGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Cámara
En los metadatos estáticos, establece ANDROID_HEIC_INFO_SUPPORTED
como verdadero y ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
como un valor entre [1, 16]
, que indica la cantidad de segmentos de la app en formato JPEG.
Para cada combinación de transmisiones obligatoria, el dispositivo de cámara debe admitir el intercambio de una transmisión JPEG por 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 de HAL:
- Es un flujo de BLOB con la marca de uso
JPEG_APPS_SEGMENT
para almacenar segmentos de la app, incluidos los segmentos de EXIF y de miniaturas. - Una transmisión
IMPLEMENTATION_DEFINED
oYCBCR_420_888
del tamaño de la transmisión HEIC, según el códec de destino y el tamaño de la transmisión HEIC
Según ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
, el framework de la cámara asigna búferes lo suficientemente grandes para que la HAL de la cámara complete los segmentos de la app en JPEG. El segmento APP1
es obligatorio, pero los segmentos que siguen al segmento APP1
(APP2
y posteriores) son opcionales. El framework de la cámara anula las etiquetas EXIF en el segmento APP1
que se pueden derivar de los metadatos del resultado de captura o que se relacionan con el flujo de bits de la imagen principal y los envía a MediaMuxer
.
Dado que el codificador de medios incorpora la orientación en los metadatos de las imágenes de salida, para garantizar una orientación coherente entre la imagen principal y la miniatura, el HAL de la cámara no debe rotar la imagen en miniatura según android.jpeg.orientation.
. El framework escribe la orientación en los metadatos EXIF y en el contenedor HEIC.
Las etiquetas de metadatos estáticas, de control y dinámicas relacionadas con el formato JPEG también se aplican al formato HEIC. Por ejemplo, las etiquetas de metadatos android.jpeg.orientation
y android.jpeg.quality
de la solicitud de captura se usan para controlar la orientación y la calidad de las imágenes HEIC.
Para usar el formato HEIC en una app, usa la API pública de HEIC.
Para obtener más información, consulta las siguientes fuentes.
HAL de la cámara
Espacio de datos del búfer gráfico
Espacio de uso del búfer gráfico
Validación
Para validar que tu implementación admite imágenes HEIC, usa la app de prueba TestingCamera2
y ejecuta las siguientes pruebas de CTS y VTS de la cámara.
Pruebas de CTS de la cámara
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Pruebas de VTS de la cámara