HEIF-Bildgebung

Geräte mit Android 10 unterstützen das HEIC-komprimierte Bildformat, eine HEVC-spezifische Marke (High Efficiency Video Encoding) des hocheffizienten Bilddateiformats (HEIF), wie in ISO/IEC 23008-12 spezifiziert . HEIC-codierte Bilder bieten im Vergleich zu JPEG-Dateien eine bessere Bildqualität bei kleineren Dateigrößen.

HEIC-Bilder werden vom Kamera-Framework generiert, indem ein unkomprimiertes Bild von der Kamera-HAL angefordert und an das Mediensubsystem gesendet wird, damit es von einem HEIC- oder HEVC-Encoder codiert wird.

Anforderungen

Um das HEIC-Bildformat zu unterstützen, muss Ihr Gerät über einen Hardware-Encoder verfügen, der MIMETYPE_IMAGE_ANDROID_HEIC oder MIMETYPE_VIDEO_HEVC mit dem konstanten Qualitätsmodus unterstützt.

Implementierung

Um das HEIC-Bildformat auf Ihrem Gerät zu unterstützen, implementieren Sie einen HEIC/HEVC-Codec und stellen Sie Unterstützung für die erforderlichen Stream-Konfigurationen bereit, bei denen es sich um IMPLEMENTATION_DEFINED / YUV -Streams und JPEG-App-Segment-Streams handelt.

Medien

Implementieren Sie den HEIC/HEVC-Codec im Modus Constant Quality (CQ) für die entsprechende Hardware wie folgt:

  • Der Codec vom Typ HEVC verwendet je nach Bildgröße entweder das Format IMPLEMENTATION_DEFINED mit der Verwendung von GRALLOC_USAGE_HW_VIDEO_ENCODER oder das Format HAL_PIXEL_FORMAT_YCBCR_420_888 .
  • Der Codec vom Typ IMPLEMENTATION_DEFINED mit der Verwendung von GRALLOC_USAGE_HW_IMAGE_ENCODER .

Kamera

Setzen 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] , der die Anzahl der JPEG-App-Segmente angibt.

Für jede obligatorische Stream-Kombination muss Ihr Kameragerät das Austauschen eines JPEG-Streams mit einem HEIC-Stream derselben Größe unterstützen.

Für einen HEIC-Ausgabestream an der öffentlichen API erstellt der Kameradienst zwei interne HAL-Streams:

  • Ein BLOB-Stream mit dem Verwendungs-Flag JPEG_APPS_SEGMENT zum Speichern von App-Segmenten, einschließlich EXIF- und Thumbnail-Segmenten
  • Ein IMPLEMENTATION_DEFINED oder YCBCR_420_888 Stream in der Größe des HEIC-Streams, abhängig vom Ziel-Codec und der Größe des HEIC-Streams

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 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 Hauptbild-Bitstrom beziehen, und sendet sie an MediaMuxer .

Da der Media-Encoder die Ausrichtung in die Metadaten der Ausgabebilder einbettet, darf die Kamera-HAL das Miniaturbild nicht basierend auf android.jpeg.orientation. Das Framework schreibt die Orientierung in die EXIF-Metadaten und den HEIC-Container.

Die statischen, Kontroll- und dynamischen Metadaten-Tags im Zusammenhang mit dem JPEG-Format gelten auch für das HEIC-Format. Beispielsweise werden die Metadaten-Tags android.jpeg.orientation und android.jpeg.quality in der Erfassungsanforderung verwendet, um die Ausrichtung und Qualität von HEIC-Bildern zu steuern.

Um das HEIC-Format in einer Anwendung zu verwenden, verwenden Sie die öffentliche HEIC-API .

Weitere Informationen finden Sie in den folgenden Quellen.

Kamera HAL

Datenraum des Grafikpuffers

Grafikpuffernutzungsspeicherplatz

Validierung

Um zu überprüfen, ob Ihre Implementierung HEIC-Bilder unterstützt, verwenden Sie die TestingCamera2 -Testanwendung und führen Sie die folgenden Kamera-CTS- und -VTS-Tests aus.

CTS-Tests der Kamera

Kamera-VTS-Tests