zdjęcia HEIF

Urządzenia z Androidem 10 obsługują skompresowany format obrazu HEIC, który jest marką formatu pliku obrazu o wysokiej wydajności (HEIF) opartego na kodowaniu wideo o wysokiej wydajności (HEVC) zgodnie ze specyfikacją 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 z trybem 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

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 wartość ANDROID_HEIC_INFO_SUPPORTED na „PRAWDA”, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT na wartość z zakresu [1, 16], która wskazuje liczbę segmentów aplikacji JPEG.

W przypadku każdej obowiązkowej kombinacji strumieni urządzenie z kamerą musi obsługiwać zastępowanie strumienia JPEG strumieniem HEIC o tej samej wielkości.

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;
  • IMPLEMENTATION_DEFINED lub YCBCR_420_888 rozmiar strumienia HEIC w zależności od docelowego kodeka i rozmiaru strumienia HEIC

Na podstawie ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT interfejs aparatu przydziela bufory wystarczająco duże, aby interfejs HAL aparatu mógł 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

Przestrzeń bufora graficznego

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