Urządzenia z systemem Android 10 obsługują format skompresowanego obrazu HEIC, markę specyficzną dla kodowania wideo o wysokiej wydajności (HEVC) w formacie pliku obrazu o wysokiej wydajności (HEIF), zgodnie z normą ISO/IEC 23008-12 . Obrazy zakodowane w formacie HEIC oferują lepszą jakość obrazu przy mniejszych rozmiarach plików w porównaniu z plikami JPEG.
Obrazy HEIC są generowane przez szkielet kamery żądający nieskompresowanego obrazu z kamery HAL i przesyłający go do podsystemu mediów w celu zakodowania przez koder HEIC lub HEVC.
Wymagania
Aby obsługiwać format obrazu HEIC, Twoje urządzenie musi mieć koder sprzętowy obsługujący MIMETYPE_IMAGE_ANDROID_HEIC
lub MIMETYPE_VIDEO_HEVC
w trybie stałej jakości .
Realizacja
Aby obsługiwać format 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 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życiemGRALLOC_USAGE_HW_VIDEO_ENCODER
lub formatHAL_PIXEL_FORMAT_YCBCR_420_888
w zależności od rozmiaru obrazu. - Kodek typu HEIC wykorzystuje format
IMPLEMENTATION_DEFINED
z użyciemGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Kamera
W metadanych statycznych ustaw ANDROID_HEIC_INFO_SUPPORTED
na true, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
na wartość między [1, 16]
, wskazując liczbę segmentów aplikacji JPEG.
W przypadku każdej obowiązkowej kombinacji strumieni urządzenie z kamerą 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
lubYCBCR_420_888
rozmiar 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 aparatu przydziela bufory wystarczająco duże, aby warstwa HAL aparatu mogła wypełnić segmenty aplikacji JPEG. Segment APP1
jest wymagany, ale segmenty następujące po segmencie APP1
( APP2
i wyższe) są opcjonalne. Struktura kamery zastępuje tagi EXIF w segmencie APP1
, które można uzyskać 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 na podstawie android.jpeg.orientation.
Framework 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 znaczniki 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 interfejsu API HEIC .
Więcej informacji można znaleźć w następujących źródłach.
Kamera HAL
Przestrzeń danych bufora graficznego
Przestrzeń do wykorzystania bufora graficznego
Walidacja
Aby sprawdzić, czy implementacja obsługuje obrazy HEIC, użyj aplikacji testowej TestingCamera2
i uruchom następujące testy CTS i VTS kamery.
Testy CTS kamery
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Testy kamer VTS