HEIF-Bildverarbeitung

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 der GRALLOC_USAGE_HW_VIDEO_ENCODER-Nutzung oder das HAL_PIXEL_FORMAT_YCBCR_420_888-Format.
  • Der Codec HEIC verwendet das Format IMPLEMENTATION_DEFINED mit der Verwendung GRALLOC_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- oder YCBCR_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

VTS-Tests für Kameras