immagini HEIF

I dispositivi con Android 10 supportano HEIC formato immagine compresso, un alto La specifica marca HEVC (efficiency Video Codifica) dell'immagine ad alta efficienza (HEIF) come specificato in ISO/IEC 23008-12. Le immagini con codifica HEIC offrono migliore qualità delle immagini con file di dimensioni inferiori rispetto ai file JPEG.

Le immagini HEIC vengono generate dal framework della fotocamera che richiede un file non compresso immagine dal camera HAL e la invia al sottosistema multimediale per essere codificati da un codificatore HEIC o HEVC.

Requisiti

Per supportare il formato delle immagini HEIC, il dispositivo deve disporre di un codificatore hardware supporto MIMETYPE_IMAGE_ANDROID_HEIC o MIMETYPE_VIDEO_HEVC con modalità qualità costante.

Implementazione

Per supportare il formato dell'immagine HEIC sul tuo dispositivo, implementa un codec HEIC/HEVC e supportare le configurazioni di streaming richieste, che sono IMPLEMENTATION_DEFINED/YUV stream e stream di segmenti di app JPEG.

Contenuti multimediali

Implementare il codec HEIC/HEVC in modalità di qualità costante (CQ) per il l'hardware corrispondente:

  • Il codec di tipo HEVC utilizza IMPLEMENTATION_DEFINED con l'utilizzo di GRALLOC_USAGE_HW_VIDEO_ENCODER o HAL_PIXEL_FORMAT_YCBCR_420_888 a seconda delle dimensioni dell'immagine.
  • Il codec di tipo HEIC utilizza il formato IMPLEMENTATION_DEFINED con Utilizzo di GRALLOC_USAGE_HW_IMAGE_ENCODER.

Fotocamera

Nei metadati statici, imposta ANDROID_HEIC_INFO_SUPPORTED su true e ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT a un valore compreso tra [1, 16], che indica il numero di segmenti di app JPEG.

Per ogni combinazione di stream obbligatoria, la videocamera deve supportare lo scambio uno stream JPEG con uno stream HEIC delle stesse dimensioni.

Per uno stream di output HEIC nell'API pubblica, il servizio videocamera crea due HAL stream interni:

  • Uno stream BLOB con il flag di utilizzo JPEG_APPS_SEGMENT per archiviare l'app segmenti, inclusi segmenti EXIF e miniature
  • Uno stream IMPLEMENTATION_DEFINED o YCBCR_420_888 delle dimensioni del Stream HEIC in base al codec target e alle dimensioni dello stream HEIC

In base a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, il framework della fotocamera assegna buffer sufficientemente grandi da consentire all'HAL della fotocamera di compilare l'app JPEG segmenti. Il segmento APP1 è obbligatorio, ma i segmenti che seguono il APP1 (APP2 e superiori) sono facoltativi. Il framework della fotocamera sostituisce il file EXIF tag nel segmento APP1 che possono essere ricavati dai metadati dei risultati dell'acquisizione oppure sono correlati al bitstream dell'immagine principale e li invia a MediaMuxer.

Poiché il codificatore multimediale incorpora l'orientamento nei metadati immagini, per garantire un orientamento coerente tra l'immagine principale e la miniatura, la fotocamera HAL non deve ruotare l'immagine della miniatura in base al android.jpeg.orientation. Il framework scrive l'orientamento nel file EXIF dei metadati e del container HEIC.

Anche i tag dei metadati statici, di controllo e dinamici correlati al formato JPEG si applicano al formato HEIC. Ad esempio, android.jpeg.orientation e I tag di metadati di android.jpeg.quality nella richiesta di acquisizione vengono utilizzati per controllare l'orientamento e la qualità delle immagini HEIC.

Per utilizzare il formato HEIC in un'app, usa la API pubblica HEIC.

Per saperne di più, consulta le seguenti fonti.

Fotocamera HAL

Spazio dati buffer grafico

Spazio di utilizzo del buffer grafico

Convalida

Per verificare che la tua implementazione supporti le immagini HEIC, utilizza la classe TestingCamera2 testare l'app ed eseguire i seguenti test CTS e VTS della videocamera.

Test CTS della fotocamera

Test VTS della fotocamera