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_DEFINEDz użyciemGRALLOC_USAGE_HW_VIDEO_ENCODERlub formatHAL_PIXEL_FORMAT_YCBCR_420_888w zależności od rozmiaru obrazu. - Kodek typu HEIC wykorzystuje format
IMPLEMENTATION_DEFINEDw 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_SEGMENTdo przechowywania segmentów aplikacji, w tym segmentów EXIF i miniatur; - Strumień
IMPLEMENTATION_DEFINEDlubYCBCR_420_888o 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#testHeicImageReaderTest#testHeicImageReaderTest#testRepeatingHeicReprocessCaptureTest#testBasicYuvToHeicReprocessingReprocessCaptureTest#testBasicOpaqueToHeicReprocessingRobustnessTest#testMandatoryOutputCombinationsStillCaptureTest#testHeicExif
Testy VTS aparatu