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
Damit das HEIC-Bildformat unterstützt wird, muss Ihr 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
Implementiere den HEIC/HEVC-Codec im Modus „Constant Quality“ (CQ) für die entsprechende Hardware so:
- 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 HEIC-Typ-Codec verwendet das
IMPLEMENTATION_DEFINED
-Format mit derGRALLOC_USAGE_HW_IMAGE_ENCODER
-Nutzung.
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 durch 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 der 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.
Camera HAL
Datenspeicher des Grafikpuffers
Nutzung 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