该系列文章总目录链接与各部分简介: Android Qcom Display学习(零)
在上一篇中dump GraphicBuffer中,知道了护眼模式中调用setColorTransform应用于每一层Layer,于是想往上了解一些,color是针对屏幕的,不是对单个Layer的,Screencap出的图是不带color模式的。

屏幕重要指标之一的色域
显示屏色域、色深、色差等参数
Android10 Night Light实现细节分析

Android原生支持模式

frameworks/base/services/core/java/com/android/server/display/color/DisplayTransformManager.java setColorMode
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp SurfaceFlinger::onTransact

护眼模式 通过applyTint只调用DisplayTransformManager::setColorMatrix来调节色温
色彩模式 通过setColorMode调用DisplayTransformManager::setColorMode来调节色彩模式

Android原生支持的四种color mode

(1)COLOR_MODE_NATURAL      COLOR_SATURATION_NATURAL + DISPLAY_COLOR_MANAGED
(2)COLOR_MODE_BOOSTED      COLOR_SATURATION_BOOSTED + DISPLAY_COLOR_MANAGED
(3)COLOR_MODE_SATURATED    COLOR_SATURATION_NATURAL + DISPLAY_COLOR_UNMANAGED
(4)COLOR_MODE_AUTOMATIC    COLOR_SATURATION_NATURAL + DISPLAY_COLOR_ENHANCED

主要依据以下四个参数进行设置: (1)saturation 饱和度  (2)color 显示模式   (3)compositionColorMode 颜色模式   (4)level 颜色转换

1.applySaturation(saturation)

可通过 “persist.sys.sf.color_saturation” 设置,通过SURFACE_FLINGER_TRANSACTION_SATURATION = 1022与SurfaceFlinger进行通信

COLOR_SATURATION_NATURAL = 1.0f;
COLOR_SATURATION_BOOSTED = 1.1f;

2.setDisplayColor(color)

可通过“persist.sys.sf.native_mode” 设置,通过SURFACE_FLINGER_TRANSACTION_DISPLAY_COLOR = 1023与SurfaceFlinger进行通信

DISPLAY_COLOR_MANAGED = 0;
DISPLAY_COLOR_UNMANAGED = 1;
DISPLAY_COLOR_ENHANCED = 2;

3.setDisplayColor(compositionColorMode)

可通过“persist.sys.sf.color_mode” 设置,通过SURFACE_FLINGER_TRANSACTION_DISPLAY_COLOR = 1023与SurfaceFlinger进行通信

COLOR_MODE_INVALID = -1;
COLOR_MODE_DEFAULT = 0;
COLOR_MODE_BT601_625 = 1;
COLOR_MODE_BT601_625_UNADJUSTED = 2;
COLOR_MODE_BT601_525 = 3;
COLOR_MODE_BT601_525_UNADJUSTED = 4;
COLOR_MODE_BT709 = 5;
COLOR_MODE_DCI_P3 = 6;
COLOR_MODE_SRGB = 7;
COLOR_MODE_ADOBE_RGB = 8;
COLOR_MODE_DISPLAY_P3 = 9;

4.setColorMatrix(level)

通过setMatrix设置色温temperature,通过SURFACE_FLINGER_TRANSACTION_COLOR_MATRIX = 1015与SurfaceFlinger进行通信

LEVEL_COLOR_MATRIX_NIGHT_DISPLAY = 100;
LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE = 125;色温调节范围设置
<integer name="config_nightDisplayColorTemperatureMin">2596</integer>
<integer name="config_nightDisplayColorTemperatureMax">4082</integer>

Setting中默认是支持的Display white balance,只是这个功能没有打开,如下修改后即可

packages/apps/Settings/res/xml/display_settings.xml Settings.APK
<SwitchPreferenceandroid:key="display_white_balance"android:title="@string/display_white_balance_title"android:summary="@string/display_white_balance_summary"settings:controller="com.android.settings.display.DisplayWhiteBalancePreferenceController"/>DisplayWhiteBalancePreferenceController getAvailabilityStatus DisplayWhiteBalanceTintController isDisplayWhiteBalanceAvailableColorDisplayManager  config_displayWhiteBalanceAvailable (services.jar)frameworks/base/core/res/res/values/config.xml framework-res.apk
-<bool name="config_displayWhiteBalanceAvailable">false</bool>
+<bool name="config_displayWhiteBalanceAvailable">true</bool>

打开后没有效果,才发现需要AmbientSensor.AmbientColorTemperatureSensor环境色温传感器支持来一直更新Temperature

Android色彩模式色域

色域其实也可以叫做色彩空间,就是指表色模式所能表达的颜色构成的范围区域,指一个技术系统能够产生颜色的总和。下图的最大范围就是人眼可接受范围的色彩空间,市面上的色域标准都是它的子集。色域越高,颜色越丰富,越接近肉眼所见的真实色彩。


       广色域用于描述可以再现比 sRGB 色彩空间更多颜色的设备和色彩空间。在原来CRT、TN屏的时代,色域都是较小,可能以前达到70% sRGB色域就能称为广色域,但现在有了更加优秀的技术加持(IPS屏、OLED屏、QLED屏),色域需提升至90% sRGB才满足。

SRGB/NTSC/DCI-P3的色域标准广泛应用于手机屏幕行业中,由于色域空间的大小不一致,所以宣传的时候可能会倾向于更大比例范围的,之前有询问过模组厂,不同的屏色域的标准来源主要是基于屏幕的材质,驱动IC主要影响gamma亮度,对色域影响较小,并且客户在选型的过程中,色域的优先级并非第一位,屏幕的尺寸和性能是选型的主要因素,色域除非有特别要求.,一般色域在65% NTSC以上+调整好IC的gamma参数,屏幕的整体质量还是不错。一般来说相同标准下色域是越高越好,但并不意味着高色域能够真实地显示色彩,色域还要搭配色彩还原才能体现出显示器在色彩方面的真实表现。

1.sRGB

sRGB色域是微软和HP在1996年共同开发的色彩空间,也是目前的微软旗下的Windows系统和众多原生软件默认支持的色彩空间

2.NTSC

NTSC色域(美国国家电视标准委员会)指定的标准,不能直接兼容计算机系统,不能完全覆盖住 sRGB,100% sRGB ≈ 72% NTSC

3.DCI-P3

DCI-P3是一种应用于数字影院的色域,它是一种以人类视觉体验为主导的色域标准,尽可能匹配电影场景中能展现的全部色域。它也不是色域最广的标准(目前最新的标准为BT.2020),但是在Rec.709标准之上,拥有更广阔的红色/绿色系范围

4.Adobe RGB

Adobe RGB是专业软件生产商Adobe在1998年推出的色彩空间,初衷是为了同时囊括sRGB(电脑常用的色彩空间)和CMYK(印刷常用的色彩空间),随着CCD/CMOS的发展,拍出的数码照片不仅能在电脑上正常显示和编辑,也能印刷出颜色无损而正确的相片。

Android护眼模式色温


       色温就是用来形容常见的冷暖色,Camera Tunning调试AWB的时候就会涉及到人造光源D65(6500K)、D50(5000K), 不同色温下通过ISP的算法调整,抵消色温引起的偏色,在日光灯的房间里拍摄会发绿,在室内钨丝灯光下拍摄会偏黄,而在日光阴影处拍摄会偏蓝。
       色温没有特定的标准,看个人眼镜的适应程度。一般考验显示设备在屏幕不同亮度(比如0%、25%、50%、75%、100%五个亮度等级)下白点色温的稳定性,让电子产品屏幕显示纯白色,在D65标准、色温为6500K标记为正常,低于6500K则偏暖,而高于6500K则偏冷。测试结果在标准色温值6500K的基础上呈现±500K的规格,意味着该显示设备的灰度上只有非常低的色调转变。

Android Qcom Display学习(十三)相关推荐

  1. Android Qcom Display学习(五)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) 什么是UEFI 高通平台UEFI有关介绍 高通605平台屏调试(4):UEFI初始化流程 Android SDM ...

  2. Android Qcom Display学习(一)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) LCD的结构 TFT-LCD屏幕构造组成原理 Android LCD(一):LCD基本原理篇 LCD: 奇景光电 ...

  3. Android Qcom Display学习(四)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) DRM Linux DRM(二)基本概念和特性 DRM(Direct Rendering Manager)学习简 ...

  4. Android Qcom Display学习(十)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) 本章主要是基于高通平台不同的背光类型处理的学习,包含XBL和Kernel两大部分. Kernel - qcom, ...

  5. Android Qcom Display学习(九)

    该系列文章总目录链接与各部分简介: Android Qcom Display学习(零) 最简单的DRM应用程序 (single-buffer)- 学习drm看这个大神的就行 DRM驱动支持MODESE ...

  6. Android Qcom Flashlight学习

    pmic闪光灯电流控制的逻辑时从Hal下发电流,在kernel中做判断并工作 Hal 从下面的一段逻辑可以很清晰的得出,当没有tunning参数时,使用的时默认default 300mA,当tunni ...

  7. android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...

    ## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...

  8. Android Qcom USB Driver学习(二)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) BC v1.2充电规范 Battery Charging Specification USB port 如 ...

  9. Android Qcom USB Driver学习(八)

    该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) 因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SC ...

最新文章

  1. Python GUI漫谈
  2. RuoYi(若依开源框架)-前后台分离版-后端流程简单分析
  3. C++ 模板详解(二)
  4. 合肥工业大学计算机学院王院长,王青山(合肥工业大学教授)_百度百科
  5. 字符设备驱动基础篇2——用开发板来调试驱动模块的步骤
  6. 如何制作一个塔防游戏 Cocos2d x 2 0 4
  7. LaTeX设置长公式的跨页显示
  8. python爬虫接口_python爬虫之百度API调用方法
  9. Eclipse是否必需要安装jdk,jre
  10. 华为平板鸿蒙评测,华为平板首发鸿蒙系统,Matepad Pro2 跑分首曝
  11. linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
  12. 管理者如何制定团队目标?读完这篇你就懂了.
  13. python-机器学习的两种传统算法-knn,k-means
  14. 多指标评价方法-变异系数法的pathon实现
  15. 高等数学Mathematica实验题——2.2 - 16. 欧拉常数的计算(Calculation of EulerGamma Constant)
  16. 工大SCIR | 文本摘要简述
  17. Java反射获取类,方法
  18. 【防火墙配置QOS之最小带宽保证】
  19. 查看当前系统 jave 版本 ,Eclipse版本
  20. MySQL运维进阶必备

热门文章

  1. ArcEngine编辑模块——将线段按距离、按比例分割成两部分
  2. 设计占空比为50%的三分频电路
  3. Python 北京二手房成交数据分析过程
  4. 基辛格等分享: ChatGPT 预示着一场智能革命,而人类还没有准备好
  5. 【数学】用C语言实现函数的定积分—— 把 “定积分定义计算出的值” 和 “牛顿-莱布尼兹公式计算出的值” 两者进行误差比较
  6. 蓝牙技术|AirPods Pro 2 支持蓝牙 LE Audio 技术带来的 5 大好处
  7. 已解决:win11无法连接网络共享打印机的方法
  8. 2020面试要点大全
  9. 本学期3个sprint的团队贡献分
  10. 怎么用class引入svg_让动效更酷炫!4 个常见且常用的 SVG 交互动画方法