immagini HEIF

I dispositivi con Android 10 supportano il formato di immagine compressa HEIC, un brand specifico per la codifica video ad alta efficienza (HEVC) del formato file di immagine ad alta efficienza (HEIF) come specificato in ISO/IEC 23008-12. Le immagini codificate in HEIC offrono una migliore qualità delle immagini con dimensioni dei file inferiori rispetto ai file JPEG.

Le immagini HEIC vengono generate dal framework della fotocamera che richiede un'immagine non compressa dall'HAL della fotocamera e la invia al sottosistema multimediale per la codifica da un codificatore HEIC o HEVC.

Requisiti

Per supportare il formato immagine HEIC, il dispositivo deve avere un codificatore hardware supportante MIMETYPE_IMAGE_ANDROID_HEIC o MIMETYPE_VIDEO_HEVC con la modalità di qualità costante.

Implementazione

Per supportare il formato immagine HEIC sul tuo dispositivo, implementa un codec HEIC/HEVC e fornisci il supporto per le configurazioni di stream richieste, ovvero gli streamIMPLEMENTATION_DEFINED/YUV e gli stream di segmenti di app JPEG.

Contenuti multimediali

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

  • Il codec di tipo HEVC utilizza il formato IMPLEMENTATION_DEFINED con l'utilizzo di GRALLOC_USAGE_HW_VIDEO_ENCODER o il formato HAL_PIXEL_FORMAT_YCBCR_420_888, a seconda delle dimensioni dell'immagine.
  • Il codec di tipo HEIC utilizza il formato IMPLEMENTATION_DEFINED con l'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 su un valore compreso tra [1, 16], che indica il numero di segmenti dell'app JPEG.

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

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

  • Uno stream BLOB con il flag di utilizzo JPEG_APPS_SEGMENT per archiviare i segmenti dell'app, inclusi i segmenti EXIF e delle miniature
  • Uno stream IMPLEMENTATION_DEFINED o YCBCR_420_888 delle dimensioni dello stream HEIC a seconda del codec di destinazione e delle dimensioni dello stream HEIC

In base a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, il framework della fotocamera alloca buffer abbastanza grandi da consentire all'HAL della fotocamera di popolare i segmenti dell'app JPEG. Il segmento APP1 è obbligatorio, ma i segmenti che seguono il segmento APP1 (APP2 e versioni successive) sono facoltativi. Il framework della fotocamera sostituisce i tag EXIF nel segmento APP1 che possono essere ricavati dai metadati del risultato di acquisizione o sono correlati al flusso di dati dell'immagine principale e li invia a MediaMuxer.

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

I tag dei metadati statici, di controllo e dinamici relativi al formato JPEG si applicano anche al formato HEIC. Ad esempio, i tag dei metadati android.jpeg.orientation e 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, utilizza la API pubblica HEIC.

Per ulteriori informazioni, consulta le seguenti fonti.

Fotocamera HAL

Spazio dati del buffer grafico

Spazio di utilizzo del buffer grafico

Convalida

Per convalidare che la tua implementazione supporti le immagini HEIC, utilizza l'app di test TestingCamera2 esegui i seguenti test CTS e VTS della fotocamera.

Test CTS della fotocamera

Test VTS della videocamera