Urządzenia z systemem Android 10 obsługują format skompresowanego obrazu HEIC, markę specyficzną dla wysokowydajnego kodowania wideo (HEVC) w formacie pliku obrazu o wysokiej wydajności (HEIF) zgodnie z normą ISO/IEC 23008-12 . Obrazy zakodowane w HEIC oferują lepszą jakość obrazu przy mniejszych rozmiarach plików w porównaniu z plikami JPEG.
Obrazy HEIC są generowane przez platformę kamery, która żąda nieskompresowanego obrazu z kamery HAL i wysyła go do podsystemu multimediów w celu zakodowania przez koder HEIC lub HEVC.
Wymagania
Aby obsługiwać format obrazu HEIC, Twoje urządzenie musi być wyposażone w koder sprzętowy obsługujący MIMETYPE_IMAGE_ANDROID_HEIC
lub MIMETYPE_VIDEO_HEVC
z trybem stałej jakości .
Realizacja
Aby obsługiwać format obrazu HEIC na swoim urządzeniu, zaimplementuj kodek HEIC/HEVC i zapewnij obsługę wymaganych konfiguracji strumieni, 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
przy użyciuGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Kamera
W metadanych statycznych ustaw ANDROID_HEIC_INFO_SUPPORTED
na true i ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
na wartość z zakresu [1, 16]
, wskazując liczbę segmentów aplikacji JPEG.
W przypadku każdej obowiązkowej kombinacji strumieni kamera 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
o rozmiarze 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 kamery przydziela bufory wystarczająco duże, aby warstwa HAL kamery mogła zapełnić segmenty aplikacji JPEG. Segment APP1
jest wymagany, ale segmenty następujące po segmencie APP1
( APP2
i nowsze) są opcjonalne. Struktura kamery zastępuje znaczniki EXIF w segmencie APP1
, które można wyprowadzić 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 w oparciu o android.jpeg.orientation.
Struktura 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 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żyć formatu HEIC w aplikacji, użyj publicznego API HEIC .
Aby uzyskać więcej informacji, zobacz następujące źródła.
Kamera HAL
Przestrzeń danych bufora graficznego
Przestrzeń wykorzystania bufora graficznego
Walidacja
Aby sprawdzić, czy Twoja implementacja obsługuje obrazy HEIC, użyj aplikacji testowej TestingCamera2
i uruchom następujące testy kamer CTS i VTS.
Testy aparatu CTS
-
NativeImageReaderTest#testHeic
-
ImageReaderTest#testHeic
-
ImageReaderTest#testRepeatingHeic
-
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
-
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
-
RobustnessTest#testMandatoryOutputCombinations
-
StillCaptureTest#testHeicExif
Testy kamer VTS