I dispositivi con Android 10 supportano il formato di compressione delle immagini HEIC, una codifica video ad alta efficienza (HEVC) specifica del brand del formato di file immagine ad alta efficienza (HEIF) come specificato in ISO/IEC 23008-12. Le immagini codificate in formato HEIC offrono una qualità migliore con dimensioni dei file più piccole 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 dispositivo deve disporre di un codificatore hardware
che supporti
MIMETYPE_IMAGE_ANDROID_HEIC
o
MIMETYPE_VIDEO_HEVC
con la
modalità a 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 stream
IMPLEMENTATION_DEFINED
/YUV
e gli stream di segmenti di app JPEG.
Contenuti multimediali
Implementa il codec HEIC/HEVC in modalità a qualità costante (CQ) per l'hardware corrispondente come segue:
- Il codec di tipo HEVC utilizza il formato
IMPLEMENTATION_DEFINED
con l'utilizzo diGRALLOC_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'utilizzo diGRALLOC_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, il dispositivo di videocamera deve supportare lo scambio di uno stream JPEG con uno stream HEIC delle stesse dimensioni.
Per un flusso di output HEIC nell'API pubblica, il servizio della videocamera crea due flussi interni HAL:
- Un flusso BLOB con il flag di utilizzo
JPEG_APPS_SEGMENT
per archiviare i segmenti dell'app, inclusi i segmenti EXIF e delle miniature - Un flusso
IMPLEMENTATION_DEFINED
oYCBCR_420_888
delle dimensioni del flusso HEIC a seconda del codec di destinazione e delle dimensioni del flusso HEIC
In base a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
, il framework della videocamera
alloca buffer sufficientemente grandi da consentire alla fotocamera HAL di popolare i segmenti
dell'app JPEG. Il segmento APP1
è obbligatorio, ma i segmenti successivi al segmento APP1
(APP2
e successivi) sono facoltativi. Il framework della fotocamera esegue l'override dei 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 della 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 correlati 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'app, utilizza l'API pubblica HEIC.
Per saperne di più, consulta le seguenti fonti.
HAL della fotocamera
Spazio dati del buffer grafico
Spazio di utilizzo del buffer grafico
Convalida
Per verificare che l'implementazione supporti le immagini HEIC, utilizza l'app di test
TestingCamera2
ed esegui i seguenti test CTS e VTS della fotocamera.
Test CTS della videocamera
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Test VTS della videocamera