zdjęcia HEIF

Urządzenia z Androidem 10 obsługują skompresowany format obrazu HEIC, czyli specyficzną dla marki wersję formatu pliku graficznego o wysokiej wydajności (HEIF) określonego w normie 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 obrazu nieskompresowanego , a następnie przesyła go do podsystemu multimediów w celu zakodowania 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 oraz strumieni segmentów aplikacji JPEG.

Multimedia

Zaimplementuj kodek HEIC/HEVC w trybie stałej jakości (CQ) dla odpowiedniego sprzętu w ten sposób:

  • Kodek typu HEVC używa formatu IMPLEMENTATION_DEFINED z flagą użycia 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 flagą użycia 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 wartości 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 nim (APP2 i nowsze) są opcjonalne.APP1 Framework aparatu zastępuje tagi EXIF w segmencie APP1, które można uzyskać z metadanych wyniku przechwytywania lub które 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ę 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.

Tagi metadanych statycznych, kontrolnych i dynamicznych powiązane z formatem JPEG dotyczą też 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żywać formatu HEIC w aplikacji, użyj publicznego interfejsu API HEIC.

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

HAL aparatu

Przestrzeń danych bufora graficznego

Przestrzeń użycia bufora graficznego

Weryfikacja

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

Testy CTS aparatu

Testy VTS aparatu