HEIF-Bildverarbeitung

Geräte mit Android 10 unterstützen den HEIC Komprimiertes Bildformat, eine hohe Spezifische Marke des Bilds mit hoher Effizienz (Effizienz-Videocodierung (HEVC)) Dateiformat (HEIF) gemäß den ISO/IEC 23008-12. HEIC-codierte Bilder bieten Bessere Bildqualität bei kleineren Dateigrößen im Vergleich zu JPEG-Dateien.

HEIC-Bilder werden vom Kamera-Framework generiert und fordern ein unkomprimiertes Bild aus der Kamera-HAL und sendet ihn an das Mediensubsystem, mit einem HEIC- oder HEVC-Encoder codiert sein.

Voraussetzungen

Damit das HEIC-Bildformat unterstützt wird, muss dein Gerät über einen Hardware-Encoder verfügen unterstützend MIMETYPE_IMAGE_ANDROID_HEIC oder MIMETYPE_VIDEO_HEVC mit dem Modus „Kontinuierliche Qualität“.

Implementierung

Damit das HEIC-Bildformat auf deinem Gerät unterstützt wird, musst du einen HEIC/HEVC-Codec implementieren und unterstützen die erforderlichen Streamkonfigurationen, also die IMPLEMENTATION_DEFINED/YUV Streams und JPEG-App-Segment-Streams.

Medien

Implementieren Sie den HEIC/HEVC-Codec im CQ-Modus (Konstante Qualität) für die der entsprechenden Hardware an:

  • Der Codec des HEVC-Typs verwendet entweder den IMPLEMENTATION_DEFINED mit der GRALLOC_USAGE_HW_VIDEO_ENCODER-Verwendung oder dem HAL_PIXEL_FORMAT_YCBCR_420_888-Format abhängig von der Bildgröße.
  • Der HEIC-Codec verwendet das IMPLEMENTATION_DEFINED-Format mit dem Nutzung 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], gibt die Anzahl der App-Segmente im JPEG-Format an.

Für jede obligatorische Stream-Kombination muss die Kamera den Austausch der Daten unterstützen. einen JPEG-Stream mit einem HEIC-Stream derselben Größe.

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

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

Basierend auf ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, dem Kamera-Framework Weist Puffer zu, die groß genug sind, damit der Kamera-HAL die JPEG-App füllen kann. Segmente. Das APP1-Segment ist erforderlich, aber Segmente, die der APP1 folgen Segment (APP2 und höher) sind optional. Das Kamera-Framework überschreibt die EXIF-Datei Tags im APP1-Segment, die aus den Metadaten der Erfassungsergebnisse abgeleitet werden können oder mit dem Bitstream des Hauptbilds zusammenhängen, und sendet sie an MediaMuxer.

Weil der Medienencoder die Ausrichtung in die Metadaten der Ausgabe einbettet. um eine einheitliche Ausrichtung zwischen Hauptbild und Thumbnail sicherzustellen, darf der Kamera-HAL das Thumbnail-Bild nicht basierend auf android.jpeg.orientation. Das Framework schreibt die Ausrichtung in die EXIF-Datei. Metadaten- und HEIC-Container.

Die statischen, Steuer- und dynamischen Metadaten-Tags, die sich auf das JPEG-Format beziehen, für das HEIC-Format. Zum Beispiel werden android.jpeg.orientation und Mit android.jpeg.quality-Metadaten-Tags in der Erfassungsanfrage wird gesteuert, Ausrichtung und Qualität von HEIC-Bildern.

Wenn du das HEIC-Format in einer App verwenden möchtest, verwende die Methode Öffentliche HEIC API

Weitere Informationen finden Sie in den folgenden Quellen.

Kamera-HAL

Grafikzwischenspeicher-Datenbereich

Nutzungsbereich des Grafikpuffers

Zertifizierungsstufe

Mit dem Parameter TestingCamera2 Test-App und führe die folgenden CTS- und VTS-Tests für die Kamera durch.

CTS-Tests der Kamera

VTS-Tests der Kamera