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.
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_DEFINEDz flagą użyciaGRALLOC_USAGE_HW_VIDEO_ENCODERlub formatuHAL_PIXEL_FORMAT_YCBCR_420_888w zależności od rozmiaru obrazu. - Kodek typu HEIC używa formatu
IMPLEMENTATION_DEFINEDz flagą użyciaGRALLOC_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_SEGMENTdo przechowywania segmentów aplikacji, w tym segmentów EXIF i miniatur. - Strumień
IMPLEMENTATION_DEFINEDlubYCBCR_420_888o 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
NativeImageReaderTest#testHeicImageReaderTest#testHeicImageReaderTest#testRepeatingHeicReprocessCaptureTest#testBasicYuvToHeicReprocessingReprocessCaptureTest#testBasicOpaqueToHeicReprocessingRobustnessTest#testMandatoryOutputCombinationsStillCaptureTest#testHeicExif
Testy VTS aparatu