以上是Google官方Android开发者社区提供的平台架构图,我们只需要知道其中的四个模块:从最接近用户的顶层往下查看,蓝色的是App即应用程序,绿色的是Android Framework框架,然后跳过紫色和黄色是青色的HAL硬件抽象层,最后是最底层的Linux Kernel即核心。一个App显示图像的过程如下图所示:
①Android应用把要显示的图形分解成一个个图层,然后进行各个图层的测量和绘制,将测量出的共24位红(R)、绿(G)、蓝(B),以及透明度(Alpha)四个分量信号传输给Framework框架。
②Framework框架接收App传输的RGB和Alpha信号,并进行各个图层的渲染。
③待框架层渲染完毕后,再由HAL硬件抽象层根据RGB信号和Alpha透明度,叠加图层合成完整的图像,然后将合成后图像的RGB数值转交给Kernel核心。
④由Kernel核心调用SoC中的显示处理模块进行色域映射、色彩增强等优化,处理后的数据传输给屏幕面板驱动芯片。
⑤由屏幕的驱动芯片进行处理开始在屏幕上绘制。
除小米首发的纯硬件方案外,其他DC调光方案分别作用于显示图像过程的不同阶段,相比防闪烁类的App有着巨大进步,不仅兼容自动亮度,图像质量也有大幅提升。不过它们的共同点都是最后传输给OLED屏幕驱动芯片的数据相比App绘制的数据更少,压缩了灰阶值。
1、 蒙版 dither抖动,作用于显示流程第②部分这种方法相当于在人眼与屏幕之间叠加了一个半透明的蒙版,Framework在渲染图层时会根据蒙版修改Alpha通道的透明度以压缩灰阶值。随后从Framework传输至HAL层进行图像合成的色彩位数已经小于24位,低于原有色彩数据。然后在Kernel进行色域映射、色彩增强优化后加入dither抖动算法,对小于24位的色彩进行补偿。
2、 PCC dither抖动,作用于显示流程第④部分小米9开发版最早加入的DC调光方案就是采用PCC dither的方式。在Kernel进行色域映射、色彩增强后调用高通PCC(Picture Color Calibration,图像色彩校正)硬件模块,压缩输出给屏幕数据的色彩位数,计算应该显示的亮度,随后同样通过dither抖动算法进行色彩补偿。