Les appareils exécutant Android 10 prennent en charge le format d'image compressée HEIC, une marque spécifique d'encodage vidéo à haute efficacité (HEVC) du format de fichier image à haute efficacité (HEIF) tel que spécifié dans la norme ISO/IEC 23008-12 . Les images codées HEIC offrent une meilleure qualité d'image avec des tailles de fichier plus petites par rapport aux fichiers JPEG.
Les images HEIC sont générées par le cadre de la caméra qui demande une image non compressée à la caméra HAL et l'envoie au sous-système multimédia pour qu'elle soit encodée par un encodeur HEIC ou HEVC.
Exigences
Pour prendre en charge le format d'image HEIC, votre appareil doit disposer d'un encodeur matériel prenant en charge MIMETYPE_IMAGE_ANDROID_HEIC
ou MIMETYPE_VIDEO_HEVC
avec le mode de qualité constante .
Mise en œuvre
Pour prendre en charge le format d'image HEIC sur votre appareil, implémentez un codec HEIC/HEVC et assurez la prise en charge des configurations de flux requises, à savoir les flux IMPLEMENTATION_DEFINED
/ YUV
et les flux de segments d'application JPEG.
Médias
Implémentez le codec HEIC/HEVC en mode qualité constante (CQ) pour le matériel correspondant comme suit :
- Le codec de type HEVC consomme soit le format
IMPLEMENTATION_DEFINED
avec l'usageGRALLOC_USAGE_HW_VIDEO_ENCODER
soit le formatHAL_PIXEL_FORMAT_YCBCR_420_888
selon la taille de l'image. - Le codec de type HEIC consomme le format
IMPLEMENTATION_DEFINED
avec l'utilisationGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Caméra
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]
, indiquant le nombre de segments d'application JPEG.
Pour chaque combinaison de flux obligatoire, votre appareil photo doit prendre en charge l'échange d'un flux JPEG avec un flux HEIC de la même taille.
Pour un flux de sortie HEIC sur l'API publique, le service de caméra crée deux flux internes HAL :
- Un flux BLOB avec l'indicateur d'utilisation
JPEG_APPS_SEGMENT
pour stocker les segments d'application, y compris les segments EXIF et vignettes - Un flux
IMPLEMENTATION_DEFINED
ouYCBCR_420_888
de la taille du flux HEIC en fonction du codec cible et de la taille du flux HEIC
Basé sur ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
, le cadre de la caméra alloue des tampons suffisamment grands pour que la HAL de la caméra remplisse les segments d'application JPEG. Le segment APP1
est obligatoire mais les segments qui suivent le segment APP1
( APP2
et supérieur) sont facultatifs. La structure de la caméra remplace les balises EXIF dans le segment APP1
qui peuvent être dérivées des métadonnées du résultat de la capture ou sont liées au flux binaire 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, la caméra HAL ne doit pas faire pivoter l'image de la 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 lié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 demande de capture sont utilisées pour contrôler l'orientation et la qualité des images HEIC.
Pour utiliser le format HEIC dans une application, utilisez l' API publique HEIC .
Pour plus d'informations, consultez les sources suivantes.
Caméra HAL
Espace de données du tampon graphique
Espace d'utilisation du tampon graphique
Validation
Pour valider que votre implémentation prend en charge les images HEIC, utilisez l'application de test TestingCamera2
et exécutez les tests de caméra CTS et VTS suivants.
Essais CTS de la caméra
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Essais VTS caméra