После появления видео с расширенным динамическим диапазоном (HDR) потоковые сервисы начали транслировать HDR-видео, уделяя особое внимание полноэкранному режиму. Приложения социальных сетей теперь поддерживают HDR-видео и Ultra HDR, что свидетельствует о растущем интересе к внедрению HDR в различных приложениях.
Поддержка HDR в Android
Поддержка технологии HDR в Android была реализована на нескольких этапах:
Android 7
- Первоначальная поддержка декодирования и отображения HDR-видео.
- Дальнейшее совершенствование возможностей HDR.
Android 13
- Комплексная поддержка захвата, кодирования и отображения HDR-видео.
- Введена функция смешанной композиции SDR и HDR , которая определяет различные диапазоны отображаемой яркости между SDR и HDR.
Android 14
- Поддержка HDR-изображений с технологией Ultra HDR .
Поддержка HDR-скриншотов также развивалась и менялась.
Улучшения в возможностях создания скриншотов в формате HDR.
В этом разделе описывается развитие функции создания скриншотов в формате HDR в обновлениях Android.
Android 9
В SurfaceFlinger, графическом композиторе Android, появилась поддержка HDR-видео. Рендеринг HDR-видео и скриншотов с помощью графического процессора использует сложный полиномиальный тональный преобразователь. Эта кривая тонального преобразования не всегда эквивалентна тональному преобразователю дисплея, поэтому скриншоты отличаются от содержимого на экране.
Android 13
Блок рендеринга на графическом процессоре в SurfaceFlinger включает плагин тонального отображения , который позволяет производителю оборудования предоставлять шейдер для графического процессора, соответствующий кривой тонального отображения его дисплея. Скриншоты почти полностью соответствуют содержимому экрана, но со следующими отличиями:
- Скриншоты остаются в формате SDR. Следовательно, при просмотре вместе со сценой HDR области HDR на скриншоте выглядят тусклее.
- Яркость в режиме SDR не регулируется, поэтому контент SDR на скриншоте выглядит таким же ярким, как и контент HDR.
Иными словами, система преобразует любое HDR-видео, запечатленное на скриншоте, в SDR-видео.
Android 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. Цвета пользовательского интерфейса в основном сохранены в новой реализации, и изображение больше не обрезается.
Android 14 Android 15-QPR1 

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

Рисунок 2. Сравнение Android 14 и Android 15-QPR1 для примера 2.
Android 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-файла:

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