HDR на скриншотах Android

После появления HDR-видео стриминговые сервисы начали транслировать HDR-видео, ориентируясь на полноэкранный режим. Приложения социальных сетей теперь поддерживают HDR-видео и Ultra HDR, что свидетельствует о растущем интересе к использованию HDR в различных приложениях.

Поддержка HDR на Android

Поддержка технологии HDR в Android прошла несколько этапов:

Андроид 7

  • Первоначальная поддержка декодирования и отображения HDR-видео.
  • Дальнейшее развитие возможностей HDR.

Андроид 13

  • Комплексная поддержка захвата, кодирования и отображения HDR-видео.
  • Введена смешанная композиция SDR и HDR , которая определяет различные отображаемые диапазоны яркости между SDR и HDR.

Андроид 14

  • Поддержка HDR-изображений с Ultra HDR .

Поддержка снимков экрана HDR также развилась и изменилась.

Улучшения в возможностях создания скриншотов HDR

В этом разделе описывается развитие возможностей создания скриншотов в HDR в обновлениях Android.

Андроид 9

SurfaceFlinger, графический редактор Android, представляет поддержку HDR-видео. Для рендеринга HDR-видео и скриншотов на GPU используется комплексный полиномиальный тональный картограф. Эта кривая тональной компрессии не всегда эквивалентна тональному картографу дисплея, поэтому скриншоты отличаются от содержимого экрана.

Андроид 13

Блок графического рендеринга SurfaceFlinger включает плагин тональной компрессии , который позволяет OEM-производителю предоставлять шейдер графического процессора, соответствующий кривой тональной компрессии дисплея. Скриншоты практически соответствуют изображению на экране, но со следующими отличиями:

  • Скриншоты сохраняются в формате SDR. Следовательно, при просмотре вместе с HDR-сценой HDR-области на скриншоте выглядят более тусклыми.
  • Яркость SDR не регулируется, поэтому содержимое SDR на снимке экрана выглядит таким же ярким, как и содержимое HDR.

Другими словами, система преобразует любое HDR-видео, захваченное на снимке экрана, в SDR-видео.

Андроид 14

Создание скриншотов в Ultra HDR представляет собой серьёзную проблему. В отличие от видео, система обычно визуализирует изображения в буфере кадра пользовательского интерфейса, что имеет два основных последствия:

  • Изображения не могут иметь обработку, включая тональную коррекцию, отличную от окружающего пользовательского интерфейса.
  • Приложения отвечают за тональную компрессию на основе источника при визуализации своего пользовательского интерфейса.

Чтобы облегчить эту задачу, рассмотрим три возможных варианта реализации создания снимков экрана:

  • Сохраняет детали HDR изображения Ultra HDR, что приводит к затемнению интерфейса приложения на снимке экрана.
  • Сохраняет детали пользовательского интерфейса приложения, вызывая обрезку изображения Ultra HDR.
  • Компромисс достигается за счет увеличения яркости пользовательского интерфейса приложения и обрезки ярких участков HDR.

В Android 14 реализован третий подход — увеличение яркости пользовательского интерфейса приложения и обрезка бликов HDR.

Android 15-QPR1

SurfaceFlinger включает в себя алгоритм локальной тональной компрессии для снимков экрана. Этот процесс включает в себя:

  • Разделение входного изображения на более мелкие изображения.
  • Вычисление максимальной яркости на каждом изображении и отбрасывание значений низкой яркости в каждом разделе.
  • Интерполяция вычисленных яркостей посредством размытия и повторной выборки.
  • Применение параметризованного тонального преобразователя Рейнхарда к входному изображению на основе интерполированных значений яркости.

Этот алгоритм значительно улучшает снимки экрана между Android 14 и Android 15-QPR1, как показывают следующие примеры:

  • Пример 1 — скриншот HDR-видео, наложенного поверх страницы Chrome с Ultra HDR. Цвета пользовательского интерфейса в новой реализации в основном сохранены, а изображение больше не обрезается.

    Андроид 14 Android 15-QPR1
    Пример 1 в Android 14Пример 1 в Android 15qpr

    Рисунок 1. Сравнение Android 14 и Android 15-QPR1 для примера 1.

  • Пример 2 — скриншот HDR-видео, наложенный поверх настроек с последующими скриншотами. В Android 14 цвета на скриншотах постепенно становятся темнее. В Android 15-QPR1 тональный корректор корректно воспроизводит и сохраняет цвета пользовательского интерфейса.

    Андроид 14 Android 15-QPR1
    Пример 2 в Android 14Пример 2 в Android 15qpr

    Рисунок 2. Сравнение Android 14 и Android 15-QPR1 для примера 2.

Андроид 16

Подобно Ultra HDR , скриншоты HDR сохраняют карту усиления в файле снимка экрана для восстановления HDR-представления во время рендеринга. Однако, в отличие от Ultra HDR, скриншот сохраняется в формате PNG для обратной совместимости с системами, принимающими скриншоты PNG.

Создание скриншотов включает в себя следующее:

  • При отображении на устройстве HDR-контента снимок экрана создается с использованием пикселей FP16.
  • Локальный преобразователь тонов, описанный в Android 15-QPR1, генерирует 8-битную базовую SDR-версию.
  • 8-битная карта усиления создается путем объединения базового SDR-изображения с HDR-изображением.
  • Базовая версия SDR и карта усиления кодируются в один файл PNG.

Кодирование PNG включает в себя следующее:

  • Карта усиления закодирована как изображение PNG, которое включает фрагмент gmAP , содержащий метаданные ISO 21496-1 для карты усиления.
  • Базовая версия SDR кодируется как PNG-изображение, включающее фрагмент gmAP , содержащий версию метаданных ISO 21496-1 . Это PNG-изображение также включает фрагмент gdAT , содержащий весь закодированный PNG-файл карты усиления.

На следующем рисунке показана структура фрагментов PNG:

Layout of the PNG chunks

Рисунок 3. Расположение фрагментов PNG.

В Android 16 кодек PNG поддерживает как кодирование, так и декодирование PNG-файлов. Приложения могут отображать PNG-файлы с картой усиления так же, как Ultra HDR .