Устройства под управлением Android 10 поддерживают формат сжатых изображений HEIC — специальный формат высокоэффективного кодирования видео (HEVC) для высокоэффективного формата файлов изображений (HEIF), как определено в ISO/IEC 23008-12 . Изображения, закодированные в формате HEIC, обеспечивают лучшее качество при меньших размерах файлов по сравнению с файлами JPEG.
Изображения HEIC генерируются инфраструктурой камеры, которая запрашивает несжатое изображение из HAL камеры и отправляет его в медиаподсистему для кодирования кодером HEIC или HEVC.
Требования
Для поддержки формата изображения HEIC ваше устройство должно иметь аппаратный кодер, поддерживающий MIMETYPE_IMAGE_ANDROID_HEIC или MIMETYPE_VIDEO_HEVC с режимом постоянного качества .
Выполнение
Для поддержки формата изображения HEIC на вашем устройстве реализуйте кодек HEIC/HEVC и обеспечьте поддержку требуемых конфигураций потоков, а именно потоков IMPLEMENTATION_DEFINED / YUV и потоков сегментов приложений JPEG.
СМИ
Реализуйте кодек HEIC/HEVC в режиме постоянного качества (CQ) для соответствующего оборудования следующим образом:
- Кодек типа HEVC использует либо формат
IMPLEMENTATION_DEFINEDс использованиемGRALLOC_USAGE_HW_VIDEO_ENCODER, либо форматHAL_PIXEL_FORMAT_YCBCR_420_888в зависимости от размера изображения. - Кодек типа HEIC использует формат
IMPLEMENTATION_DEFINEDс использованиемGRALLOC_USAGE_HW_IMAGE_ENCODER.
Камера
В статических метаданных установите для ANDROID_HEIC_INFO_SUPPORTED значение true, а для параметра ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT — значение в диапазоне [1, 16] , указывающее количество сегментов приложения JPEG.
Для каждой обязательной комбинации потоков ваша камера должна поддерживать замену потока JPEG на поток HEIC того же размера.
Для выходного потока HEIC в общедоступном API служба камеры создает два внутренних потока HAL:
- Поток BLOB с флагом использования
JPEG_APPS_SEGMENTдля хранения сегментов приложения, включая EXIF и сегменты миниатюр. - Поток
IMPLEMENTATION_DEFINEDилиYCBCR_420_888размер потока HEIC в зависимости от целевого кодека и размера потока HEIC
На основе ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT фреймворк камеры выделяет буферы достаточного размера для HAL камеры, чтобы заполнить сегменты приложения JPEG. Сегмент APP1 является обязательным, но сегменты, следующие за сегментом APP1 ( APP2 и выше), необязательны. Фреймворк камеры переопределяет теги EXIF в сегменте APP1 , которые могут быть получены из метаданных результата захвата или связаны с основным битовым потоком изображения, и отправляет их в MediaMuxer .
Поскольку медиакодер встраивает ориентацию в метаданные выходных изображений, для обеспечения согласованной ориентации основного изображения и миниатюры HAL камеры не должен поворачивать миниатюру на основе android.jpeg.orientation. Фреймворк записывает ориентацию в метаданные EXIF и контейнер HEIC.
Статические, управляющие и динамические метатеги, относящиеся к формату JPEG, также применяются к формату HEIC. Например, метатеги android.jpeg.orientation и android.jpeg.quality в запросе на захват используются для управления ориентацией и качеством изображений HEIC.
Чтобы использовать формат HEIC в приложении, используйте общедоступный API HEIC .
Более подробную информацию можно найти в следующих источниках.
Камера HAL
Пространство данных графического буфера
Пространство использования графического буфера
Проверка
Чтобы проверить, поддерживает ли ваша реализация изображения HEIC, используйте тестовое приложение TestingCamera2 и выполните следующие тесты CTS и VTS камеры.
Тесты CTS камеры
-
NativeImageReaderTest#testHeic -
ImageReaderTest#testHeic -
ImageReaderTest#testRepeatingHeic -
ReprocessCaptureTest#testBasicYuvToHeicReprocessing -
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing -
RobustnessTest#testMandatoryOutputCombinations -
StillCaptureTest#testHeicExif
Тесты камер VTS