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 камеры