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, позволяя производителю оборудования предоставлять шейдер графического процессора, соответствующий кривой тональной компрессии своего дисплея. Скриншоты практически соответствуют тому, что происходит на экране, но со следующими отличиями:

  • Скриншоты сохраняются в формате 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 .