Urządzenia z Androidem 10 obsługują format skompresowanych obrazów HEIC, czyli specyficzny dla marki format kodowania wideo o wysokiej wydajności (HEVC) będący odmianą formatu plików obrazów o wysokiej wydajności (HEIF), zgodnie ze specyfikacją ISO/IEC 23008-12. Obrazy zakodowane w formacie HEIC mają lepszą jakość i mniejszy rozmiar niż pliki JPEG.
Obrazy HEIC są generowane przez framework aparatu, który wysyła do HAL aparatu żądanie przesłania nieskompresowanego obrazu, a następnie 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ć 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
i strumieni segmentów aplikacji JPEG.
Multimedia
Wdróż kodek HEIC/HEVC w trybie stałej jakości (CQ) na odpowiednim sprzęcie w ten 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
w sposóbGRALLOC_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_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 kodeka docelowego i rozmiaru strumienia HEIC
Na podstawie 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 segmencie APP1
(APP2
i wyżej) są opcjonalne. Platforma aparatu zastępuje tagi EXIF w segmencie APP1
, które można uzyskać z metadanych wyniku rejestracji lub które są powiązane z głównym strumieniem bitów obrazu, i wysyła je do MediaMuxer
.
Koder multimediów umieszcza orientację w metadanych obrazów wyjściowych, więc 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.
Statyczne, kontrolne i dynamiczne tagi metadanych 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 przechwytywania są używane do kontrolowania orientacji i jakości obrazów HEIC.
Aby używać formatu HEIC w aplikacji, skorzystaj z publicznego interfejsu HEIC API.
Więcej informacji znajdziesz w tych źródłach.
Camera HAL
Przestrzeń danych bufora graficznego
Miejsce wykorzystywane przez bufor graficzny
Weryfikacja
Aby sprawdzić, czy implementacja obsługuje obrazy HEIC, użyj TestingCamera2
aplikacji testowej i przeprowadź 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