Устройства под управлением 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