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_SEGMENTzum 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#testHeicImageReaderTest#testHeicImageReaderTest#testRepeatingHeicReprocessCaptureTest#testBasicYuvToHeicReprocessingReprocessCaptureTest#testBasicOpaqueToHeicReprocessingRobustnessTest#testMandatoryOutputCombinationsStillCaptureTest#testHeicExif
Kamera-VTS-Tests