I dispositivi con Android 10 supportano il formato di immagine compressa 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 dall'HAL della fotocamera 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 streaming richieste, ovvero gli stream IMPLEMENTATION_DEFINED
/ YUV
e gli stream di segmenti di app JPEG.
Media
Implementare il codec HEIC/HEVC in modalità qualità costante (CQ) per l'hardware corrispondente come segue:
- Il codec di tipo HEVC utilizza il formato
IMPLEMENTATION_DEFINED
con l'utilizzoGRALLOC_USAGE_HW_VIDEO_ENCODER
o il formatoHAL_PIXEL_FORMAT_YCBCR_420_888
a seconda delle dimensioni dell'immagine. - Il codec di tipo HEIC utilizza il formato
IMPLEMENTATION_DEFINED
con l'utilizzoGRALLOC_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]
, che indica il numero di segmenti dell'app JPEG.
Per ogni combinazione di streaming obbligatoria, il dispositivo della fotocamera deve supportare lo scambio di un flusso JPEG con un flusso HEIC della stessa dimensione.
Per un flusso di output HEIC nell'API pubblica, il servizio fotocamera crea due flussi interni HAL:
- Un flusso BLOB con il flag di utilizzo
JPEG_APPS_SEGMENT
per archiviare segmenti di app inclusi EXIF e segmenti di miniature - Un flusso
IMPLEMENTATION_DEFINED
oYCBCR_420_888
della dimensione del flusso HEIC a seconda del codec di destinazione e della dimensione del flusso HEIC
In base a 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 successivi) sono facoltativi. Il framework della fotocamera sovrascrive i tag EXIF nel segmento APP1
che possono essere derivati dai metadati dei risultati di acquisizione o sono correlati al bitstream 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 a 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 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'applicazione, utilizza l' API pubblica HEIC .
Per ulteriori informazioni, consultare le seguenti fonti.
Fotocamera HAL
Spazio dati del buffer grafico
Spazio di utilizzo del buffer grafico
Validazione
Per verificare che la tua implementazione supporti le immagini HEIC, utilizza l'applicazione di test TestingCamera2
ed esegui i seguenti test CTS e VTS della fotocamera.
Prove CTS della telecamera
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Prove VTS della telecamera