Geräte mit Android 10 unterstützen das komprimierte HEIC-Bildformat, eine Marke des High Efficiency Image File Format (HEIF) für die High Efficiency Video Coding (HEVC) gemäß ISO/IEC 23008-12. HEIC-codierte Bilder bieten eine bessere Bildqualität bei einer geringeren Dateigröße als JPEG-Dateien.
HEIC-Bilder werden vom Kamera-Framework generiert, das ein unkomprimiertes Bild von der Kamera-HAL anfordert und an das Medien-Subsystem sendet, um es mit einem HEIC- oder HEVC-Encoder zu codieren.
Voraussetzungen
Zur Unterstützung des HEIC-Bildformats muss dein Gerät einen Hardware-Encoder haben, der MIMETYPE_IMAGE_ANDROID_HEIC
oder MIMETYPE_VIDEO_HEVC
mit dem Modus für konstante Qualität unterstützt.
Implementierung
Wenn Sie das HEIC-Bildformat auf Ihrem Gerät unterstützen möchten, implementieren Sie einen HEIC/HEVC-Codec und unterstützen Sie die erforderlichen Streamkonfigurationen, also die IMPLEMENTATION_DEFINED
/YUV
-Streams und JPEG-App-Segmentstreams.
Medien
Implementieren Sie den HEIC/HEVC-Codec im CQ-Modus (Konstante Qualität) für die entsprechende Hardware:
- Der HEVC-Codec verwendet je nach Bildgröße entweder das
IMPLEMENTATION_DEFINED
-Format mit derGRALLOC_USAGE_HW_VIDEO_ENCODER
-Nutzung oder dasHAL_PIXEL_FORMAT_YCBCR_420_888
-Format. - Der Codec HEIC verwendet das Format
IMPLEMENTATION_DEFINED
mit der VerwendungGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Kamera
Legen Sie in den statischen Metadaten ANDROID_HEIC_INFO_SUPPORTED
auf „wahr“ und ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
auf einen Wert zwischen [1, 16]
fest, der die Anzahl der JPEG-App-Segmente angibt.
Für jede obligatorische Streamkombination muss Ihre Kamera das Austauschen eines JPEG-Streams gegen einen HEIC-Stream derselben Größe unterstützen.
Für einen HEIC-Ausgabestream in der öffentlichen API erstellt der Kameradienst zwei interne HAL-Streams:
- Ein BLOB-Stream mit dem Nutzungsflag
JPEG_APPS_SEGMENT
zum Speichern von App-Segmenten, einschließlich EXIF- und Thumbnail-Segmenten - Ein
IMPLEMENTATION_DEFINED
- oderYCBCR_420_888
-Stream, die Größe des HEIC-Streams hängt vom Zielcodec und der Größe des HEIC-Streams ab
Basierend auf ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
weist das Kamera-Framework Puffer zu, die groß genug sind, damit die Kamera-HAL die JPEG-App-Segmente belegen kann. Das APP1
-Segment ist erforderlich, aber Segmente nach dem APP1
-Segment (APP2
und höher) sind optional. Das Kamera-Framework überschreibt die EXIF-Tags im APP1
-Segment, die aus den Metadaten des Aufnahmeergebnisses abgeleitet werden können oder sich auf den Bitstream des Hauptbilds beziehen, und sendet sie an MediaMuxer
.
Da der Medienencoder die Ausrichtung in die Metadaten der Ausgabebilder einbettet, darf die HAL der Kamera das Thumbnail-Bild nicht basierend auf android.jpeg.orientation.
drehen, um eine einheitliche Ausrichtung zwischen dem Hauptbild und dem Thumbnail zu gewährleisten. Das Framework schreibt die Ausrichtung in die EXIF-Metadaten und den HEIC-Container.
Die statischen, Kontroll- und dynamischen Metadaten-Tags, die sich auf das JPEG-Format beziehen, gelten auch für das HEIC-Format. Mit den Metadaten-Tags android.jpeg.orientation
und android.jpeg.quality
in der Aufnahmeanfrage können beispielsweise die Ausrichtung und Qualität von HEIC-Bildern gesteuert werden.
Wenn Sie das HEIC-Format in einer App verwenden möchten, verwenden Sie die HEIC Public API.
Weitere Informationen finden Sie in den folgenden Quellen.
Kamera-HAL
Datenspeicher des Grafikpuffers
Nutzungsbereich des Grafikpuffers
Zertifizierungsstufe
Verwenden Sie die Test-App TestingCamera2
, um zu prüfen, ob Ihre Implementierung HEIC-Bilder unterstützt, und führen Sie die folgenden CTS- und VTS-Tests für die Kamera aus.
CTS-Tests für Kameras
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
VTS-Tests für Kameras