Geräte mit Android 10 unterstützen das HEIC-komprimierte Bildformat, eine Marke des High Efficiency Image File Format (HEIF) gemäß ISO/IEC 23008-12, die auf High Efficiency Video Coding (HEVC) basiert. HEIC-codierte Bilder bieten im Vergleich zu JPEG-Dateien eine bessere Bildqualität bei kleineren Dateigrößen.
HEIC-Bilder werden generiert, indem das Kamera-Framework ein unkomprimiertes Bild von der Kamera-HAL anfordert und es an das Media-Subsystem sendet, um es von einem HEIC- oder HEVC-Encoder codieren zu lassen.
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 bieten Sie Unterstützung für die erforderlichen Streamkonfigurationen, d. h. die IMPLEMENTATION_DEFINED
-/YUV
-Streams und JPEG-App-Segment-Streams.
Medien
Implementieren Sie den HEIC/HEVC-Codec im Modus „Konstante Qualität“ (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-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 „true“ 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 erforderliche Streamkombination muss Ihr Kameragerät das Ersetzen 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, dessen Größe vom Zielcodec und der HEIC-Streamgröße abhängt
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 füllen kann. Das Segment APP1
ist erforderlich, Segmente nach dem Segment APP1
(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 Hauptbild-Bitstream beziehen, und sendet sie an MediaMuxer
.
Da der Media Encoder die Ausrichtung in die Metadaten der Ausgabebilder einbettet, darf die Kamera-HAL 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, Steuerungs- und dynamischen Metadatentags, die sich auf das JPEG-Format beziehen, gelten auch für das HEIC-Format. Die Metadaten-Tags android.jpeg.orientation
und android.jpeg.quality
in der Aufnahmeanfrage werden beispielsweise verwendet, um die Ausrichtung und Qualität von HEIC-Bildern zu steuern.
Wenn Sie das HEIC-Format in einer App verwenden möchten, nutzen Sie die öffentliche HEIC-API.
Weitere Informationen finden Sie in den folgenden Quellen.
Camera HAL
Grafikpuffer-Datenbereich
Speicherplatz für die Nutzung des Grafikpuffers
Zertifizierungsstufe
Verwenden Sie die Test-App TestingCamera2
und führen Sie die folgenden CTS- und VTS-Tests für die Kamera aus, um zu prüfen, ob Ihre Implementierung HEIC-Bilder unterstützt.
Camera CTS-Tests
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Kamera-VTS-Tests