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