Urządzenia z Androidem 10 obsługują format skompresowanego obrazu HEIC, specyficzną markę kodowania wideo (HEVC) o wysokiej wydajności formatu pliku graficznego (HEIF) zgodnie z normą 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
w trybie stałej jakości.
Implementacja
Aby zapewnić obsługę formatu 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 segmentu 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życiemGRALLOC_USAGE_HW_VIDEO_ENCODER
lub formatuHAL_PIXEL_FORMAT_YCBCR_420_888
w zależności od rozmiaru obrazu. - Kodek typu HEIC używa formatu
IMPLEMENTATION_DEFINED
z użyciemGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Aparat
W metadanych statycznych ustaw ANDROID_HEIC_INFO_SUPPORTED
na wartość true, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
jako wartość z zakresu [1, 16]
, co będzie oznaczało liczbę segmentów aplikacji w formacie JPEG.
W przypadku każdej wymaganej kombinacji strumieni aparat musi obsługiwać zamianę strumienia JPEG na strumień HEIC o takim samym rozmiarze.
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; - Strumień
IMPLEMENTATION_DEFINED
lubYCBCR_420_888
określa rozmiar strumienia HEIC w zależności od docelowego kodeka i rozmiaru strumienia HEIC
Zgodnie z modelem ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
platforma aparatu przydziela bufory wystarczająco duże, aby HAL aparatu 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.orientation
i android.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
Miejsce na bufor graficzny
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
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Testy VTS aparatu