imagerie HEIF

Les appareils équipés d'Android 10 sont compatibles avec le format d'image compressé HEIC, une marque spécifique à l'encodage vidéo haute efficacité (HEVC) du format d'image haute efficacité (HEIF), comme spécifié dans la norme ISO/IEC 23008-12. Les images encodées au format HEIC offrent une meilleure qualité d'image avec des tailles de fichiers plus petites que les fichiers JPEG.

Les images HEIC sont générées par le framework de l'appareil photo qui demande une image non compressée au HAL de la caméra et l'envoie au sous-système multimédia pour l'encoder par un encodeur HEIC ou HEVC.

Conditions requises

Pour prendre en charge le format d'image HEIC, votre appareil doit disposer d'un encodeur matériel compatible avec MIMETYPE_IMAGE_ANDROID_HEIC ou MIMETYPE_VIDEO_HEVC avec le mode qualité constante.

Implémentation

Pour prendre en charge le format d'image HEIC sur votre appareil, implémentez un codec HEIC/HEVC et prenez en charge les configurations de flux requises, à savoir les flux IMPLEMENTATION_DEFINED/YUV et les flux de segments d'application JPEG.

Contenus multimédias

Implémentez le codec HEIC/HEVC en mode qualité constante (CQ) pour le matériel correspondant comme suit:

  • Le codec de type HEVC utilise le format IMPLEMENTATION_DEFINED avec l'utilisation de GRALLOC_USAGE_HW_VIDEO_ENCODER ou le format HAL_PIXEL_FORMAT_YCBCR_420_888, en fonction de la taille de l'image.
  • Le codec de type HEIC consomme le format IMPLEMENTATION_DEFINED avec l'utilisation de GRALLOC_USAGE_HW_IMAGE_ENCODER.

Appareil photo

Dans les métadonnées statiques, définissez ANDROID_HEIC_INFO_SUPPORTED sur "true" et ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT sur une valeur comprise entre [1, 16], ce qui indique le nombre de segments d'application JPEG.

Pour chaque combinaison de flux obligatoire, votre appareil photo doit être compatible avec le remplacement d'un flux JPEG par un flux HEIC de la même taille.

Pour un flux de sortie HEIC dans l'API publique, le service de caméra crée deux flux internes HAL:

  • Flux BLOB avec l'indicateur d'utilisation JPEG_APPS_SEGMENT pour stocker des segments d'application, y compris des segments EXIF et des miniatures
  • Un flux IMPLEMENTATION_DEFINED ou YCBCR_420_888 de la taille du flux HEIC en fonction du codec cible et de la taille du flux HEIC

En fonction de ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, le framework de l'appareil photo alloue des tampons suffisamment grands pour que le HAL de l'appareil photo puisse insérer les segments de l'application JPEG. Le segment APP1 est obligatoire, mais les segments qui suivent le segment APP1 (APP2 et versions ultérieures) sont facultatifs. Le framework de l'appareil photo remplace les balises EXIF du segment APP1 qui peuvent être dérivées des métadonnées de résultat de la capture ou qui sont liées au flux de bits de l'image principale, et les envoie à MediaMuxer.

Étant donné que l'encodeur multimédia intègre l'orientation dans les métadonnées des images de sortie, pour garantir une orientation cohérente entre l'image principale et la vignette, le HAL de l'appareil photo ne doit pas faire pivoter l'image de vignette en fonction de android.jpeg.orientation.. Le framework écrit l'orientation dans les métadonnées EXIF et le conteneur HEIC.

Les balises de métadonnées statiques, de contrôle et dynamiques associées au format JPEG s'appliquent également au format HEIC. Par exemple, les balises de métadonnées android.jpeg.orientation et android.jpeg.quality dans la requête de capture permettent de contrôler l'orientation et la qualité des images HEIC.

Pour utiliser le format HEIC dans une application, utilisez l'API publique HEIC.

Pour en savoir plus, consultez les sources suivantes.

Camera HAL

Espace de données du tampon graphique

Espace d'utilisation du tampon graphique

Validation

Pour vérifier que votre implémentation est compatible avec les images HEIC, utilisez l'application de test TestingCamera2 et exécutez les tests CTS et VTS de l'appareil photo suivants.

Tests CTS de l'appareil photo

Tests VTS de la caméra