Obrazowanie HEIF

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

Obrazy HEIC są generowane przez platformę kamery, która żąda nieskompresowanego obrazu z kamery HAL i wysyła go do podsystemu multimediów w celu zakodowania przez koder HEIC lub HEVC.

Wymagania

Aby obsługiwać format obrazu HEIC, Twoje urządzenie musi być wyposażone w koder sprzętowy obsługujący MIMETYPE_IMAGE_ANDROID_HEIC lub MIMETYPE_VIDEO_HEVC z trybem stałej jakości .

Realizacja

Aby obsługiwać format obrazu HEIC na swoim urządzeniu, zaimplementuj kodek HEIC/HEVC i zapewnij obsługę wymaganych konfiguracji strumieni, 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 przy użyciu GRALLOC_USAGE_HW_IMAGE_ENCODER .

Kamera

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

W przypadku każdej obowiązkowej kombinacji strumieni kamera 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 o rozmiarze 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 kamery przydziela bufory wystarczająco duże, aby warstwa HAL kamery mogła zapełnić segmenty aplikacji JPEG. Segment APP1 jest wymagany, ale segmenty następujące po segmencie APP1 ( APP2 i nowsze) są opcjonalne. Struktura kamery zastępuje znaczniki EXIF ​​​​w segmencie APP1 , które można wyprowadzić 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 w oparciu o android.jpeg.orientation. Struktura 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 tagi 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 API HEIC .

Aby uzyskać więcej informacji, zobacz następujące źródła.

Kamera HAL

Przestrzeń danych bufora graficznego

Przestrzeń wykorzystania bufora graficznego

Walidacja

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

Testy aparatu CTS

Testy kamer VTS