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

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

  • Скриншоты остаются в формате 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, содержащий весь закодированный gainmap PNG.

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

Layout of the PNG chunks

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

С Android 16 кодек PNG поддерживает как кодирование, так и декодирование этих PNG. Приложения могут отображать PNG с gainmap таким же образом, как Ultra HDR .