Obrazowanie HEIF

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Urządzenia z systemem Android 10 obsługują format skompresowanego obrazu HEIC, markę specyficzną dla kodowania wideo o wysokiej wydajności (HEVC) w formacie pliku obrazu o wysokiej wydajności (HEIF), zgodnie z normą ISO/IEC 23008-12 . Obrazy zakodowane w formacie HEIC oferują lepszą jakość obrazu przy mniejszych rozmiarach plików w porównaniu z plikami JPEG.

Obrazy HEIC są generowane przez szkielet kamery żądający nieskompresowanego obrazu z kamery HAL i przesyłający go do podsystemu mediów w celu zakodowania przez koder HEIC lub HEVC.

Wymagania

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

Realizacja

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

Głoska bezdźwięczna

Zaimplementuj kodek HEIC/HEVC w trybie stałej jakości (CQ) dla odpowiedniego sprzętu w następujący 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 z użyciem GRALLOC_USAGE_HW_IMAGE_ENCODER .

Kamera

W metadanych statycznych ustaw ANDROID_HEIC_INFO_SUPPORTED na true, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT na wartość między [1, 16] , wskazując liczbę segmentów aplikacji JPEG.

W przypadku każdej obowiązkowej kombinacji strumieni urządzenie z kamerą 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 kamery tworzy dwa 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 rozmiar strumienia HEIC w zależności od docelowego kodeka i rozmiaru strumienia HEIC

W oparciu o ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT struktura aparatu przydziela bufory wystarczająco duże, aby warstwa HAL aparatu mogła wypełnić segmenty aplikacji JPEG. Segment APP1 jest wymagany, ale segmenty następujące po segmencie APP1 ( APP2 i wyższe) są opcjonalne. Struktura kamery zastępuje tagi EXIF ​​w segmencie APP1 , które można uzyskać z metadanych wyników przechwytywania lub są powiązane z głównym strumieniem bitów obrazu i wysyła je do MediaMuxer .

Ponieważ koder multimediów osadza orientację w metadanych obrazów wyjściowych, aby zapewnić spójną orientację między obrazem głównym a miniaturą, warstwa HAL kamery nie może obracać obrazu miniatury na podstawie android.jpeg.orientation. Framework zapisuje orientację w metadanych EXIF ​​i kontenerze HEIC.

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

Aby użyć formatu HEIC w aplikacji, użyj publicznego interfejsu API HEIC .

Więcej informacji można znaleźć w następujących źródłach.

Kamera HAL

Przestrzeń danych bufora graficznego

Przestrzeń do wykorzystania bufora graficznego

Walidacja

Aby sprawdzić, czy implementacja obsługuje obrazy HEIC, użyj aplikacji testowej TestingCamera2 i uruchom następujące testy CTS i VTS kamery.

Testy CTS kamery

Testy kamer VTS