HEIF-визуализация

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

Тесты камеры VTS