Как определить текущий режим экрана AMOLED? - PullRequest
0 голосов
/ 14 января 2020

Многие Android устройства с экранами AMOLED отображают все изображения с перенасыщенными цветами по умолчанию. Например, телефоны Samsung Galaxy имеют «адаптивный» режим экрана, который заставляет windows всех приложений отображаться так, как будто они были отображены в цветовом пространстве Display-P3 (на самом деле я измерил одно из устройств с колориметром, чтобы подтвердить ).

OTOH, не все такие устройства поддерживают EGL_EXT_gl_colorspace_display_p3, независимо от режима экрана, поэтому я не могу быть уверен, что устройство, на котором запущено мое приложение, имеет даже экран с широкой гаммой, и даже меньше этот режим используется по умолчанию.

Итак, как я могу на самом деле определить, является ли текущий режим экрана sRGB или какой-либо режим с широкой гаммой? Я нацеливаюсь на одну конкретную c модель устройства, Samsung Galaxy A320F / DS (AKA "A3 (2017)"), поэтому способы указания платформы c также приемлемы.

1 Ответ

0 голосов
/ 20 января 2020

Есть несколько слоев, где можно манипулировать цветами.

  • SurfaceFlinger. Этот компонент является общим для всех систем Android. В него можно передать собственную цветовую матрицу (см. исходный код обработчика этого запроса ), например, с помощью следующей команды, выполняемой как пользователь root:
service call SurfaceFlinger 1015 i32 1 \
f 0 f 0 f 1 f 0 \
f 0 f 1 f 0 f 0 \
f 1 f 0 f 0 f 0 \
f 0 f 0 f 0 f 1

Приведенный выше пример команды устанавливает матрицу, которая, действуя на векторы RGBA, меняет красный и синий каналы. Чтобы сбросить пользовательскую матрицу по умолчанию (идентичность), вы можете просто сделать

service call SurfaceFlinger 1015 i32 0

Вы можете сделать все это из приложения Java / JNI без привилегий root, просто попросив разрешения, я не исследовал это.

  • mDN Ie, что означает мобильный движок Digital Natural Image . Это специфицированная Samsung c система, которая работает на более низком уровне, чем SurfaceFlinger. А именно, это влияет на Always On Display, на который пользовательская цветовая матрица SurfaceFlinger не оказывает никакого влияния.
    Текущий режим экрана можно увидеть в файле /sys/class/mdnie/mdnie/mode, который, как представляется, имеет следующее отображение значений на Galaxy A320F / DS:
    • 0 - кинотеатр AMOLED,
    • 1 - фото AMOLED,
    • 2 - Basi c,
    • 3 - (не знаю его назначение, но значение принимается, если записано в mode)
    • 4 - Адаптивный дисплей.
    • 5 - (не знаю его назначение, но значение принимается, если записано в mode)

Более того, Cool * 1050 также влияет на цвета * - Теплый ползунок , а также Дополнительные параметры Настройки RGB на канал. Изменения в первом так или иначе отражаются в файлах mdnie_ldu и sensorRGB в том же каталоге, в то время как последний напрямую соответствует файлу whiteRGB.

Кроме того, Фильтр синего света состояние отражается в файле night_mode (оно также влияет на файлы mdnie_ldu и sensorRGB, упомянутые выше).

Из файлов, описанных выше, только mode доступно для чтения не root пользователь.

...