Urządzenia z Androidem 10 obsługują skompresowany format obrazu HEIC, który jest marką formatu pliku obrazu o wysokiej wydajności (HEIF) opartego na kodowaniu wideo o wysokiej wydajności (HEVC) zgodnie ze specyfikacją 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
z trybem 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
i strumieni segmentów 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 wartość ANDROID_HEIC_INFO_SUPPORTED
na „PRAWDA”, a ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
na wartość z zakresu [1, 16]
, która wskazuje liczbę segmentów aplikacji JPEG.
W przypadku każdej obowiązkowej kombinacji strumieni urządzenie z kamerą musi obsługiwać zastępowanie strumienia JPEG strumieniem HEIC o tej samej wielkości.
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; IMPLEMENTATION_DEFINED
lubYCBCR_420_888
rozmiar strumienia HEIC w zależności od docelowego kodeka i rozmiaru strumienia HEIC
Na podstawie ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
interfejs aparatu przydziela bufory wystarczająco duże, aby interfejs HAL aparatu mógł 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
Przestrzeń bufora graficznego
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