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