基于Android 系统的移动终端图像显示不一致的研究

2023-07-27 03:42:00张海珂朱宏宣
现代电影技术 2023年7期
关键词:应用程序终端色彩

张海珂 朱宏宣

北京电影学院中国电影高新技术研究院,北京 100088

【关键字】Android;移动终端;显示链路;图像色彩

1 引言

随着科技的进步,移动终端早已从用途单一的通信设备发展到现如今的智能终端设备,并拓展出了阅读、观影、拍摄等丰富的功能,成为人们日常生活和学习工作中的必备工具。

作为继电影银幕、电视屏幕、个人电脑屏幕之后的“第四块屏幕”,移动终端逐渐成为人们使用最频繁的图像显示设备。然而,由于不同移动终端在图像显示流程、系统配置参数以及屏幕工作原理,甚至使用方式等方面的差异,会导致其色彩显示的不一致(图1),使得人们在不同的移动终端上观看相同的图像时,产生不同的观感,有些严重的色彩偏差甚至会影响正常的观看。

图1 不同Android 手机对于同一图像显示的不一致示意

除了民用领域以外,在影视行业等专业领域,移动终端也已经广泛地用于监看、审阅等工作,移动终端显示的颜色不一致则会给影视制作人员的沟通带来不便,影响人们对于影像正确性的判断,还会影响影像制作的结果。

导致移动终端图像显示结果不一致的因素是多种的,但核心因素来自于显示链路本身,研究移动终端图像的显示链路对分析显示不一致的原因来说十分必要。因此,本文通过研究Android 系统的架构以及显示流程,包括承载图像数据内容的Layer 色彩空间的选择、系统色彩模式的设置以及移动终端屏幕的类型和不同生产工艺的差异等因素,进而分析影响移动终端图像显示不一致的原因。

2 Android 系统显示流程概述

2.1 Android 系统架构

Android 系统是一种基于Linux 技术,由操作系统、用户界面和应用程序组成的具有开源性质的手机终端解决方案。Android 系统架构分为五层:从下到上依次是Linux 内核层、硬件抽象层、系统运行库层、应用架构层和应用层,各层关系如图2所示。

图2 Android 系统架构①

(1)Linux 内核层,作为Android 底层的系统使用,是Android 系统的核心。

(2)硬件抽象层(Hardware Abstraction Layer,HAL)是位于操作系统内核和硬件电路之间的接口层,为操作系统提供具有硬件无关性的虚拟硬件平台。

(3)库层(Library)的存在主要是为了在Android平台上复用一些已经开发好的库,为上层服务提供底层实现。

(4)Android 运行时(Runtime)包含核心库(Core Libraries)和虚拟机(Android Runtime,ART),运行时是一个提供给操作系统使用的系统,虚拟机ART 负责运行Android 应用程序,每一个Android 的应用程序都在相应的虚拟机中运行。

(5)应用架构层(Java API Framework)为开发人员提供了开发应用程序所需要的相应API。在应用架构层中,视图系统(View System)、活动管理器(Activity Manager)、窗口管理器(Window Manager)三个组件主要服务于Android 的图形系统。

View System 负责管理View 对象,View 对象承载着应用程序中的各种UI 元素,例如按键、显示条等。Activity Manager 负责管理Activity,Activity 是应用程序界面的载体,主要承载着各种由View System 负责的控件。Window Manager 负责管理Window,每个应用程序端会关联一个Window 对象,用来描述应用程序窗口,每一个应用程序窗口内部又包含一个View对象,用来描述应用程序窗口的视图,应用程序窗口视图则对UI 内容和布局进行实现。也就是说,应用程序上的UI内容和布局都是通过与其所关联的一个Window 对象内部的View 对象来实现,最终在显示屏上显示的画面是由多个窗口组成,如图3所示,其中,1-3 为系统层面关联的窗口,4 为应用程序关联的窗口。

图3 窗口示意图②

(6)应用层(System Apps),管理着系统级的应用程序以及非系统级的应用程序,例如:日历(Calendar)、相机(Camera)、电子邮件(Email)、地图(Map)、微信(Wechat)等,主要负责与用户进行直接交互。

2.2 Android 系统的图像显示链路

上述介绍了Android 系统的整体框架结构,显示链路作为其中的一部分,同样遵循着Android 系统的架构,接下来对该链路进行详细阐述。

Android 的图形显示系统管理着从渲染到合成再到显示的过程,图像信息的显示流程如图4所示。

图4 Android 图形显示系统

Android 的显示系统遵循C/S 架构,SurfaceFlinger是其中的服务端,各种含有图形用户界面(Graphical User Interface,GUI)的应用程序则是用户端, 应用程序的GUI显示以Surface 为单元[1]。

SurfaceFlinger 作为系统进程合成所有窗口的服务,接收系统色彩模式设置传输来的色彩模式参数,系统负责合成所有来自系统或不同应用程序的Surface 提供的图形数据。Surface 可以抽象为一个绘图表面,应用程序端负责往这个绘图表面中填充图像内容,WindowManagerService 负责往这个绘图表面中填充应用程序窗口的属性,例如位置、大小、透明度等。而SurfaceFlinger 服务端负责取出绘图表面中的内容(在SurfaceFlinger 端,将绘图表面采用Layer 类来描述),如图5所示。

图5 Surface 的对应示意

同时Surface 也是应用程序与SurfaceFlinger 交互的通道, 每个应用程序可以有一个或多个Surface,SurfaceFlinger 将所有的Surface 数据通过一定规则进行排列与合成。

图像从应用程序端传入时,通过应用程序的视图对象View 中Measure、Layout、Draw 方法,对窗口的位置以及大小等属性进行测量和布局,最后通过SurfaceFlinger 请求为Surface 分配一个内存Buffer。Android 应用程序窗口通过一些Android 系统库中的图形库对Buffer 进行操作,将图片显示信息通过OpenGL、Skia 等提供的API,利用硬件或软件的方法渲染绘制在Buffer 上。最后将Buffer 送往Surface-Flinger 中,SurfaceFlinger 与应用程序端通过Buffer-Queue 实现内存共享,BufferQueue 中包含多个Buffer对象,一些用于渲染绘制,一些用于合成显示,双方处理完后,交换Buffer,以此提高效率(图6)。

通过上述流程,来自多个源的Surface 承载着应用程序或系统的图像数据以及窗口属性,经过BufferQueue 来到SurfaceFlinger 系统服务后,由SurfaceFlinger 的Layer 接收相应的图像数据、窗口属性信息,并从系统传下来的色彩模式设置参数信息,待接收到刷新的指令(VSync)后,SurfaceFlinger 对Surface 进行合成,然后发送到显示设备进行显示。HWC2 是SurfaceFlinger 用来与专门的窗口合成硬件进行通信的工具,合成工作在硬件端通常由显示处理单元(Display Processor Unit,DPU)完成,DPU 作为图形硬件的一部分,通常被封装在图形处理器(Graphic Processing Unit,GPU)模块当中,最主要的功能是将GPU 渲染完成的图层合成输出到屏幕。DPU 在完成合成工作后将连接显示设备(OLED、LCD、HDMI 等),并向其输送像素色彩信息。为保护知识产权,显示设备厂家通常会将硬件接口进行封装,通过硬件抽象层提供的虚拟硬件平台进行连接,最多支持同时2路输出设备。

3 Android 系统图像显示的不一致因素分析

3.1 Layer色彩空间的选择

在Android 系统图像显示流程中,Surface 承载着图像显示数据和应用程序窗口的属性,将各种数据接收和传递到显示流程的各个服务当中。在应用程序端,Surface 将接收图像的色彩信息,通过Buffer-Queue 传输到服务端SurfaceFlinger,SurfaceFlinger 端通过Layer 接收由BufferQueue 传来的图像色彩数据,因此Layer 中的色彩空间选取会影响图像色彩数据的呈现效果。

在接收图像信息时,系统会为Layer 分配相应的Buffer,同时选择相应的色彩空间参数。Android 中可被选择的色彩空间有包含HDR、SDR 范围在内的BT.2020、Display P3、DCI-P3、sRGB 等,这些色彩空间参数在系统内部由DataSpace 参数记录,DataSpace 描述了应用程序和硬件如何解释在应用程序端接收的图像色彩数据,DataSpace 包含颜色的三个部分,三原色信息、转换函数和数据范围,例如:DataS-pace_sRGB 参数如图7所示。

若应用程序没有对Layer 的DataSpace 进行设置,系统则自动将DataSpace 设置为默认UNKNOWN,UNKNOWN 在最终显示时会被当成sRGB 对待,若此时承载的数据信息是Display P3 等不与sRGB 相同的色彩空间图像,则会出现色域不匹配的问题,导致所承载的图像数据信息不正确,进而造成图像显示的不一致。

3.2 Android 系统色彩模式设置

在3.1 所描述的显示流程中,除了Layer 色彩空间选择之外,移动端系统色彩模式设置也对图像显示造成了影响。移动端中有许多可以提供给消费者选择的色彩模式,例如自然模式、鲜艳模式、效果增强模式、自动调节模式,不同的Android 手机至少提供两种或两种以上的色彩模式。这些色彩模式会传入SurfaceFlinger 中,对合成设置中的色彩参数进行修改,不同的色彩模式会根据相应的设置改变移动端显示的色彩,下面主要分析不同的色彩模式在显示流程中对图像显示造成的影响。

Google 给出的四种色彩模式包括自然模式、鲜艳模式、效果增强模式、自动调节模式。在系统面板中选中相应的模式后,相应模式对应的参数将传入SurfaceFlinger 中,上述四种模式主要通过两个参数来描述,分别是Saturation 饱和度和DisplayColorSetting 显示颜色,Saturation 饱和度有两种可选模式:Natural 和Boosted;DisplayColorSetting 显示颜色有三种可选模式:Managed、UnManaged 以及Enhance。而不同的色彩模式分别对应不同的饱和度和显示颜色两个参数,具体的对应情况如表1、2所示。

表1 饱和度Saturation 参数对应情况

表2 显示颜色DisplayColorSetting 参数对应情况

在上层系统中选中的色彩模式,按照表1、2 中对应情况将相应的参数传入系统底层,例如自然模式传入饱和度参数为Natural,传入显示颜色为Managed。上述参数将传入SurfaceFlinger 中对Layer 合成的色彩参数做相应的修改。

当SurfaceFlinger 接收到传入的DisplayColorSetting、Saturation 的数据时,将会结合前文所述Layer 的Dataspace,确定出targetDataspace、ColorMode 和RenderIntent 三个参数,最终由这三个参数生成Color-Map,传到硬件端。注意此处的ColorMode 与上文的应用层端的色彩模式不同,此处的ColorModes 与设备硬件所支持的色彩模式有关。

在SurfaceFlinger 中,确定targetDataspace、Color-Mode和RenderIntent的具体数值。

若上层传下来的DisplayColorSetting 为UnManaged,则不进行任何色彩管理,显示效果将简单结合设备本身的硬件特性确定一套显示效果参数,能够较好地表现出屏幕硬件本身特点,但忽略流程中出现的任何色彩空间参数的限制,由表1 对应可知,不进行色彩管理的色彩模式为鲜艳模式。若Display-ColorSetting 参数不为UnManaged,则遵循下述流程。

首先,通过getBestDataspace 函数根据Layer 的DataSpace 确定targetDataspace 参数,函数将遍历来自各应用程序或系统的Layer 的DataSpace,并将根据ZOrder 的顺序,将最上层的Layer 的DataSpace 作为targetDataspace 的值,其余Layer 的DataSpace 若与最上层的Layer 的DataSpace 不符,则需要对该Layer 做色彩空间的转换。

其次,targetDataspace 确定后,需要确定Render-Intent,RenderIntent 由传递下来的DisplayColorSetting确定,对应的参数如表3所示。

表3 RenderIntent 与DisplayColorSetting 对应情况

由表3 可知,有COLORIMETRIC 和ENHANCE 两个参数,其中COLORIMETRIC 参数不对显示做任何操作,而ENHANCE 则会将色彩空间拉伸到显示设备所能够显示的最大色域中,也就是说会改变图像的色域,将图像正确的色域拉伸到更大的色域中,使其变得更加鲜艳。

由上层传下来的饱和度Saturation 参数则影响显示的RGBA 值,饱和度通过生成saturationMatrix,将此矩阵与传输来的图像数据中的RGBA 值相乘得到新的RGBA 值,通过改变RGBA 数据改变图像的色彩显示。

最后,调用getBestColorMode 函数,根据targetDataspace、RenderIntent 来从本机支持的ColorMode List中确定ColorMode。上述这些参数在显示刷新的过程中被传递给HAL 层,生成相应ColorMap,设置硬件的显示参数。色彩模式参数传递的流程图如图8所示。

图8 色彩模式参数传递流程

经由上述流程可以分析得知,图像显示的正确与否和承载图像数据的Layer 以及色彩模式的选择有关,Layer 的相关参数影响已经在3.1 中阐述。对于色彩模式而言,想要图像能够正确显示,需选择自然模式的色彩模式,其余三种模式通过改变参数的方式对图像色彩进行了相应的改变。鲜艳模式简单地结合设备本身的硬件特性确定一套显示效果参数,不同的硬件显示设备各有其特点,因此显示出来的颜色也不一致;自动调节模式对色域进行了拉伸,将原始色域拉伸至显示设备支持的最大色域,旨在凸显显示设备的优势;效果增强模式则对RGBA 矩阵数据进行了更改,使其变得更加饱和,更加鲜艳;各模式在不同方面对图像数据进行了相应的改变,导致了图像显示的不一致性。

图9 为华为P50E 中的标准模式和鲜艳模式下的图像显示,因此,不同色彩模式下的图像显示不一致。

图9 不同色彩模式下的图像显示

3.3 Android 系统移动端屏幕差异

移动终端主要采用的屏幕类型有OLED 和LCD两种,例如:华为P60、OPPO Find X6、小米13 等采用OLED 屏幕,畅享60X、OPPO K10x 等采用LCD 屏幕。OLED 和LCD 因其不同的显示原理也会导致图像显示的不一致。在OLED 屏幕中,每一个像素都由三个基本颜色的发光结构构成(图10),通过化学反应使得内部的有机材料发光。LCD 为液晶显示器,液晶本身不发光,通过背光发光,以液晶面板控制光通量的方式进行显示[2]。由于液晶分子的特性,LCD 无法做到完全遮挡背光,屏幕会出现“漏光”的现象,所以LCD 屏幕无法显示真正意义的纯黑色(图11)。而OLED 显示屏是通过打开和关闭数百万个微小的单个OLED 控制发光,每个OLED 构成显示器的单个像素,可以通过关闭该像素的OLED 达到纯黑显示,因此拥有比LCD更纯粹的黑以及更高的显示对比度。

图10 OLED 内部结构④

图11 LCD 内部结构⑤

在亮度方面,LCD 由于液晶面板较为复杂的结构,需要对一些电路和排线等做遮光处理,光线从背光光源发射出来后,并不能够完全穿过液晶面板,降低了LCD 的显示亮度。OLED 由于其自发光原理,拥有更大的开口率,光线损耗较少,因此普遍拥有比LCD 更高的显示亮度。

除了显示原理的影响之外,屏幕生产厂家的生产工艺不同也影响着屏幕的显示效果(图12),现如今,国内大多手机品牌都采用京东方、华星光电、天马、三星等国内外知名厂家生产的屏幕,例如华为、小米、OPPO 等。即使是同一型号的手机屏幕,由于生产厂家的技术流程和误差标准不同,也会造成显示不一致。

图12 京东方(左)和天马(右)OLED 屏幕显示效果对比

此外,由于生产批次不同,即便是同一个厂家生产的屏幕,也会有一定程度的差异,例如LCD 屏幕背光的白光波长、LCD 偏光片的旋转角度、OLED 中蒸镀的有机发光材料厚度等,都会导致图像显示不一致。

总之,对于移动端图像显示而言,不同类型屏幕的显示特性,不同的技术工艺和生产批次,都会对图像显示的一致性造成影响。

大多数显示设备通常仅限于室内使用,但移动终端的自身特点决定了其使用的环境范围非常广泛,如白天、晚上、室内办公室和室外环境等[3],外界光在色域、亮度、对比度等方面会对显示器显示图文信息造成干扰[4],影响着移动端最佳的色彩表现。除此之外,手机屏幕上是否覆盖手机膜、手机膜的种类(例如防蓝光膜、防窥膜等)、手机屏幕的使用导致的老化等因素,也会影响图像的显示亮度和色彩准确度。

4 总结

综上所述,在基于Android 系统的移动终端显示链路中,显示流程、参数配置和硬件表现都会对图像的显示一致性造成直接影响,其中一部分因素可以通过正确设置进行规避,另一部分因素需要通过更复杂的手段进行改进。

目前采用Dolby Vison 显示技术的移动终端,已经较好地解决了HDR 图像内容显示不一致的问题,但对于未采用Dolby Vison 技术的移动终端,显示SDR 内容时不一致问题依然存在。希望本文在此方面的探讨有助于该问题的解决,相信在未来,随着移动终端的发展,图像色彩显示不一致的问题会得到改善和解决。

作者贡献声明:

张海珂:主导设计论文框架,撰写和修订论文,全文文字贡献80%;

朱宏宣:指导设计论文框架,修订论文,全文文字贡献20%。

注释

①图片来源于网站https://developer.android.com/guide/platform?hl=zh-cn。

②图片来源于网站https://www.jianshu.com/p/6474297924b6。

③图片来源于网站https://developer.android.com/reference/android/hardware/DataSpace#DATASPACE_UNKNOWN。

④图片来源于网站https://www.utmel.com/blog/categories/optoelectronics/what-is-oled。

⑤图片来源于网站https://www.yaoyulcd.com/whatislcd.html。

猜你喜欢
应用程序终端色彩
X美术馆首届三年展:“终端〉_How Do We Begin?”
现代装饰(2020年8期)2020-08-24 08:22:58
通信控制服务器(CCS)维护终端的设计与实现
删除Win10中自带的应用程序
电脑报(2019年12期)2019-09-10 05:08:20
神奇的色彩(上)
多功能北斗船载终端的开发应用
电子制作(2016年15期)2017-01-15 13:39:14
春天的色彩
环球人物(2016年9期)2016-04-20 03:03:30
色彩当道 俘获夏日
Coco薇(2015年5期)2016-03-29 23:18:25
2015春夏鞋履色彩大集结
Coco薇(2015年3期)2015-12-24 02:46:58
ABB Elastimold 10kV电缆终端及中间接头
自动化博览(2014年4期)2014-02-28 22:31:14
关闭应用程序更新提醒
电脑迷(2012年15期)2012-04-29 17:09:47