zdjęcia HEIF

Urządzenia z Androidem 10 obsługują format skompresowanych obrazów HEIC, czyli specyficzny dla marki format kodowania wideo o wysokiej wydajności (HEVC) będący odmianą formatu plików obrazów o wysokiej wydajności (HEIF), zgodnie ze specyfikacją ISO/IEC 23008-12. Obrazy zakodowane w formacie HEIC mają lepszą jakość i mniejszy rozmiar niż pliki JPEG.

Obrazy HEIC są generowane przez framework aparatu, który wysyła do HAL aparatu żądanie przesłania nieskompresowanego obrazu, a następnie przesyła go do podsystemu multimediów, aby został zakodowany przez koder HEIC lub HEVC.

Wymagania

Aby obsługiwać format obrazu HEIC, urządzenie musi mieć koder sprzętowy obsługujący MIMETYPE_IMAGE_ANDROID_HEIC lub MIMETYPE_VIDEO_HEVC w trybie stałej jakości.

Implementacja

Aby obsługiwać format obrazu HEIC na urządzeniu, zaimplementuj kodek HEIC/HEVC i zapewnij obsługę wymaganych konfiguracji strumieni, czyli strumieni IMPLEMENTATION_DEFINED/YUV i strumieni segmentów aplikacji JPEG.

Multimedia

Wdróż kodek HEIC/HEVC w trybie stałej jakości (CQ) na odpowiednim sprzęcie w ten sposób:

  • Kodek typu HEVC wykorzystuje format IMPLEMENTATION_DEFINED z użyciem GRALLOC_USAGE_HW_VIDEO_ENCODER lub format HAL_PIXEL_FORMAT_YCBCR_420_888 w zależności od rozmiaru obrazu.
  • Kodek typu HEIC wykorzystuje format IMPLEMENTATION_DEFINED w sposób GRALLOC_USAGE_HW_IMAGE_ENCODER.

Aparat

W metadanych statycznych ustaw wartość ANDROID_HEIC_INFO_SUPPORTED na „true”, a wartość ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT na liczbę z zakresu [1, 16], która wskazuje liczbę segmentów aplikacji JPEG.

W przypadku każdej obowiązkowej kombinacji strumieni urządzenie z aparatem musi obsługiwać zamianę strumienia JPEG na strumień HEIC o tym samym rozmiarze.

W przypadku strumienia wyjściowego HEIC w publicznym interfejsie API usługa aparatu tworzy 2 wewnętrzne strumienie HAL:

  • strumień BLOB z flagą użycia JPEG_APPS_SEGMENT do przechowywania segmentów aplikacji, w tym segmentów EXIF i miniatur;
  • Strumień IMPLEMENTATION_DEFINED lub YCBCR_420_888 o rozmiarze strumienia HEIC w zależności od kodeka docelowego i rozmiaru strumienia HEIC

Na podstawie ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT framework aparatu przydziela bufory wystarczająco duże, aby HAL aparatu mógł wypełnić segmenty aplikacji JPEG. Segment APP1 jest wymagany, ale segmenty następujące po segmencie APP1 (APP2 i wyżej) są opcjonalne. Platforma aparatu zastępuje tagi EXIF w segmencie APP1, które można uzyskać z metadanych wyniku rejestracji lub które są powiązane z głównym strumieniem bitów obrazu, i wysyła je do MediaMuxer.

Koder multimediów umieszcza orientację w metadanych obrazów wyjściowych, więc aby zapewnić spójną orientację głównego obrazu i miniatury, HAL aparatu nie może obracać miniatury na podstawie android.jpeg.orientation.. Framework zapisuje orientację w metadanych EXIF i kontenerze HEIC.

Statyczne, kontrolne i dynamiczne tagi metadanych związane z formatem JPEG mają zastosowanie również do formatu HEIC. Na przykład tagi metadanych android.jpeg.orientationandroid.jpeg.quality w żądaniu przechwytywania są używane do kontrolowania orientacji i jakości obrazów HEIC.

Aby używać formatu HEIC w aplikacji, skorzystaj z publicznego interfejsu HEIC API.

Więcej informacji znajdziesz w tych źródłach.

Camera HAL

Przestrzeń danych bufora graficznego

Miejsce wykorzystywane przez bufor graficzny

Weryfikacja

Aby sprawdzić, czy implementacja obsługuje obrazy HEIC, użyj TestingCamera2 aplikacji testowej i przeprowadź te testy CTS i VTS aparatu.

Testy CTS aparatu

Testy VTS aparatu