HEIF-Bildverarbeitung

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

Kamera-VTS-Tests