Immagini HEIF

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

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

Requisiti

Per supportare il formato immagine HEIC, il tuo dispositivo deve disporre di un codificatore hardware che supporti 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 supporto per le configurazioni di flusso richieste, che sono i flussi IMPLEMENTATION_DEFINED / YUV e i flussi del segmento dell'app JPEG.

Media

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

  • 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 .

Telecamera

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] , indicando il numero di segmenti dell'app JPEG.

Per ogni combinazione di stream obbligatoria, il dispositivo della fotocamera deve supportare lo scambio di uno stream JPEG con uno stream HEIC della stessa dimensione.

Per un flusso di output HEIC nell'API pubblica, il servizio telecamera crea due flussi interni HAL:

  • Uno stream BLOB con il flag di utilizzo JPEG_APPS_SEGMENT per archiviare segmenti di app inclusi EXIF ​​e segmenti di anteprima
  • Un flusso IMPLEMENTATION_DEFINED o YCBCR_420_888 delle dimensioni del flusso HEIC a seconda del codec di destinazione e delle dimensioni del flusso HEIC

Sulla base di ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT , il framework della fotocamera alloca buffer sufficientemente 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 superiori) sono facoltativi. Il framework della fotocamera sovrascrive i tag EXIF ​​nel segmento APP1 che possono essere derivati ​​dai metadati del risultato dell'acquisizione o sono correlati al flusso di bit 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, l'HAL della fotocamera non deve ruotare l'immagine in miniatura in base ad android.jpeg.orientation. Il framework scrive l'orientamento nei metadati EXIF ​​e nel contenitore HEIC.

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

Per ulteriori informazioni, vedere le seguenti fonti.

Fotocamera HAL

Spazio dati del buffer grafico

Spazio di utilizzo del buffer grafico

Convalida

Per verificare che l'implementazione supporti le immagini HEIC, utilizzare l'applicazione di test TestingCamera2 ed eseguire i seguenti test CTS e VTS della telecamera.

Test CTS della fotocamera

Prove VTS della fotocamera