zdjęcia HEIF

Urządzenia z Androidem 10 obsługują format skompresowanego obrazu HEIC, specyficzną markę kodowania wideo (HEVC) o wysokiej wydajności formatu pliku graficznego (HEIF) zgodnie z normą ISO/IEC 23008-12. Obrazy zakodowane w formacie HEIC zapewniają lepszą jakość obrazu przy mniejszych rozmiarach pliku niż w przypadku plików JPEG.

Obrazy HEIC są generowane przez framework aparatu, który prosi o nieskompresowany obraz z camera HAL i 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ć sprzętowy koder obsługujący MIMETYPE_IMAGE_ANDROID_HEIC lub MIMETYPE_VIDEO_HEVC w trybie stałej jakości.

Implementacja

Aby zapewnić obsługę formatu 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 segmentu aplikacji JPEG.

Multimedia

Wprowadź kodek HEIC/HEVC w trybie stałej jakości (CQ) na odpowiednim sprzęcie w następujący sposób:

  • Kodek typu HEVC używa formatu IMPLEMENTATION_DEFINED z użyciem GRALLOC_USAGE_HW_VIDEO_ENCODER lub formatu HAL_PIXEL_FORMAT_YCBCR_420_888 w zależności od rozmiaru obrazu.
  • Kodek typu HEIC używa formatu IMPLEMENTATION_DEFINED z użyciem GRALLOC_USAGE_HW_IMAGE_ENCODER.

Aparat

W metadanych statycznych ustaw ANDROID_HEIC_INFO_SUPPORTED na wartość true, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT jako wartość z zakresu [1, 16], co będzie oznaczało liczbę segmentów aplikacji w formacie JPEG.

W przypadku każdej wymaganej kombinacji strumieni aparat musi obsługiwać zamianę strumienia JPEG na strumień HEIC o takim samym rozmiarze.

W przypadku strumienia wyjściowego HEIC w interfejsie API publicznego usługa aparatu tworzy 2 strumienie wewnętrzne 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 określa rozmiar strumienia HEIC w zależności od docelowego kodeka i rozmiaru strumienia HEIC

Zgodnie z modelem ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT platforma aparatu przydziela bufory wystarczająco duże, aby HAL aparatu wypełnił segmenty aplikacji JPEG. Segment APP1 jest wymagany, ale segmenty następujące po nim (APP2 i później) są opcjonalne.APP1 Platforma aparatu zastępuje tagi EXIF w segmencie APP1, które można uzyskać na podstawie metadanych wyniku przechwycenia lub które są powiązane z głównym strumieniem danych obrazu, i przesyła je do MediaMuxer.

Kodeki multimedialne umieszczają orientację w metadanych obrazów wyjściowych, aby zapewnić spójność orientacji obrazu głównego i miniatury. Dlatego interfejs HAL aparatu nie może obracać miniatury na podstawie android.jpeg.orientation.. Ramka zapisuje orientację w metadanych EXIF i kontenerze HEIC.

Tagi metadanych statycznych, kontrolnych i dynamicznych związane z formatem JPEG mają zastosowanie również do formatu HEIC. Na przykład tagi metadanych android.jpeg.orientationandroid.jpeg.quality w żądaniu rejestrowania służą do kontrolowania orientacji i jakości obrazów HEIC.

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

Więcej informacji znajdziesz w tych materiałach.

Camera HAL

Przestrzeń danych bufora graficznego

Miejsce na bufor graficzny

Weryfikacja

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

Testy CTS aparatu

Testy VTS aparatu