Android画⾯显⽰流程分析(1)
努⽐亚技术团队原创内容,转载请务必注明出处。
Android画⾯显⽰流程分析(1)
Android画⾯显⽰流程分析(2)
Android画⾯显⽰流程分析(3)
Android画⾯显⽰流程分析(4)
Android画⾯显⽰流程分析(5)制作android软件流程
⽬录截图:
企业截图_16324493913554.png
1. 前⾔
本⽂尝试从硬件认识开始介绍Android的显⽰系统是如何更新画⾯的,希望能就android系统是如何更新画⾯的问题,给读者带来⼀个感性认知。⽂中将尝试解释从App画出⼀帧画⾯到这帧画⾯是如何到达屏幕并最终被⼈眼看到的整个过程,这其中会涉及硬件的⼀些基础知识以及Android 系统下⼀些重要的软件基础组件。本⽂将先分别介绍画⾯显⽰过程中所涉及到的重要组件及其⼯作原理,然后从Android app渲染第⼀帧画⾯开始逐步串联起各个组件,期望最终对于Android系统下画⾯是如何显⽰出来的给读者⼀个宏观的认识。本⽂适合对Android显⽰系统有过⼀定了解的同学阅读。由于⽂章较长,这⾥会分成10个章节,共五篇博⽂来介绍。
由于本⽂是通过阅读各种⽂章及代码,总结出来的,难免有些地⽅理解得不对,欢迎⼤家批评指正。
2. 显⽰硬件基础
⽆论软件的架构设计多么⾼端⼤⽓上档次,最终都离不开硬件的⽀持,软件的架构是建构在硬件的运⾏原理之上的,所以在讨论软件的各个设计之前我们有必要对显⽰硬件的原理做⼀个初步的了解。
2.1. 常见显⽰设备
LCD(Liquid Crystal Display)俗称液晶。
液晶是⼀种材料,液晶这种材料具有⼀种特点:可以在电信号的驱动下液晶分⼦进⾏旋转,旋转时会影响透光性,
因此我们可以在整个液晶⾯板后⾯⽤⽩光照(称为背光),可以通过不同电信号让液晶分⼦进⾏选择性的透光,此时在液晶⾯板前⾯看到的就是各种各样不同的颜⾊,这就是LCD显⽰画⾯的原理。
有些显⽰器(譬如LED显⽰器、CRT显⽰器)⾃⼰本⾝会发光称为主动发光,有些(LCD)本⾝不会发光只会透光,需要背光的协助才能看起来是发光的,称为被动发光。
其他⼀些主流的显⽰设备:
CRT:阴极摄像管显⽰器。 以前的那种⼤屁股电视机就是CRT显⽰,它曾是应⽤最⼴泛的显⽰器之⼀,不过现在基本没有在使⽤这种技术了。
OLED:有机发光⼆极管⼜称为有机电激光显⽰(Organic Light-Emitting Diode,OLED),OLED显⽰技术具有⾃发光的特性,采⽤⾮常薄的有机材料涂层
和玻璃基板,可以做得更轻更薄,可视⾓度更⼤,并且能够显著节省电能。⽬前未成为主流,但是很有市场潜⼒,将来很可能取代LCD。
LED:主要⽤在户外⼤屏幕
2.2. LCD的接⼝技术
VGA(Video Graphics Array)即视频图形阵列,具有分辨率⾼、显⽰速率快、颜⾊丰富等优点。VGA接⼝不但是CRT显⽰设备的标准接⼝,同样也是LcD液晶显⽰设备的标准接⼝,具有⼴泛的应⽤范围。相信很多朋友都不会陌⽣,因为这种接⼝是电脑显⽰器上最主要的接⼝,从块头巨⼤的CRT显⽰器时代开始,VGA接⼝就被使⽤,并且⼀直沿⽤⾄今。
HDMI(High Definition Multimedia Interface) ⾼清多媒体接⼝,是⼀种全数字化视频和声⾳发送接⼝,可以发送未压缩的⾳频及视频信号。HDMI可⽤于机顶盒,DVD播放机、个⼈计算机、电视、游戏主机、综合扩⼤机、数字⾳响与电视机等设备。HDMI可以同时发送⾳频和视频信号,由于⾳频和视频信号采⽤同⼀条线材,⼤⼤简化系统线路的安装难度。
DVI(Digital Visual Interface),即数字视频接⼝。它是1998年9⽉,在Intel开发者论坛上成⽴的,由Silicon Image、Intel(英特尔)、Compaq(康柏)、IBM(国际商业机器公司)、HP(惠普)、NEC(⽇本电⽓股份有限公司)、Fujitsu(富⼠通)等公司共同组成的
DDWG(Digital Display Working Group,数字显⽰⼯作组)推出的接⼝标准
LVDS(Low Voltage Differential Signaling,即低电压差分信号)接⼝⼜称RS-644总线接⼝,是20世纪90年代才提出的⼀种数据传输和接⼝技术。LVDS接⼝是美国NS美国国家半导体公司为克服以TTL电平⽅式传输宽带⾼码率数据时功耗⼤,电磁⼲扰⼤等缺点⽽研制的⼀种数字视频信号传输⽅式。由于其采⽤低压和低电流驱动⽅式,因此,实现了低噪声和低功耗。LVDS技术具有低功耗、低误码率、低串扰和低辐射等特点,其传输介质可以是铜质的PCB连线,也可以是平衡电缆。LVDS在对信号完整性、低抖动及共模特性要求较⾼的系统中得到了越来越⼴泛的应⽤,常见于液晶电视中。
MIPI(Mobile Industry Processor Interface)是2003年由ARM, Nokia, ST ,TI等公司成⽴的⼀个联盟,⽬的是把⼿机内部的接⼝如摄像头、显⽰屏接⼝、射频/基带接⼝等标准化,从⽽减少⼿机设计的复杂程度和增加设计灵活性。MIPI联盟下⾯有不同的WorkGroup,分别定义了⼀系列的⼿机内部接⼝标准,⽐如摄像头接⼝CSI、显⽰接⼝DSI、射频接⼝DigRF、麦克风/喇叭接⼝SLIMbus等。统⼀接⼝标准的好处是⼿机⼚商根据需要可以从市⾯上灵活选择不同的芯⽚和模组,更改设计和功能时更加快捷⽅便。
display_lcdinterfaces.png
display_dsi.png
⽬前⼿机屏幕和SOC间多使⽤MIPI接⼝来传输屏幕数据,其实物如下图所⽰,图中的条状芯⽚就是负责更新显⽰屏的显⽰内容的芯⽚DDIC, 它⼀边通过mipi协议和SOC通信,⼀边把获取到的显⽰数据写⼊到显⽰存储器GRAM内, 屏幕(Panel)通过不停扫描GRAM来不停更新液晶显⽰点的颜⾊,实现画⾯的更新。
displaydsi.png
屏幕坐标系
显⽰屏幕采⽤如下图所⽰的⼆维坐标系,以屏幕左上⾓为原点,X⽅向向右,Y轴⽅向向下,屏幕上的
显⽰单元(像素)以⾏列式整齐排列,如下图所⽰,如下图⽰中以六边形块来代表⼀个像素点,如⽆例外说明,本⽂中所有图⽰都将以该六边形块来代表屏幕上的⼀个像素点。
image-20210903204315892.png
在⼀个典型的Android显⽰系统中,⼀般包括SOC、DDIC、Panel三个部分, SOC负责绘画与多图层的合成,把合成好的数据通过硬件接⼝按某种协议传输给DDIC,然后DDIC负责把buffer⾥的数据呈现到Panel上。如下图所⽰为⾼通平台上的画⾯更新简单⽰意图,⾸先CPU或GPU负责绘画,画出的多个layer交由MDP进⾏合成,合成的数据通过mipi协议和DSI总线传输给DDIC, DDIC将数据存到GRAM内(⾮video屏),Panel不断scanGRAM来显⽰内容。
image-20210903202111863.png
那么对于DDIC来讲它的职责就是按mipi协议和SOC交互,获取到从SOC合成好的⼀帧画⾯的数据,然后将数据写⼊GRAM,对GRAM的写⼊要符合⼀定的时序。
2.3. LCD时序
这个写⼊时序要⾸先从过去的 CRT 显⽰器原理说起。CRT 的电⼦按照从上到下⼀⾏⾏扫描,扫描完成后显⽰器就呈现⼀帧画⾯,随后电⼦回到初始位置继续下⼀次扫描。为了把显⽰器的显⽰过程和系统的视频控制器进⾏同步,显⽰器(或者其他硬件)会⽤硬件时钟产⽣⼀系列的定时信号。当电⼦换到新的⼀⾏,准备进⾏扫描时,显⽰器会发出⼀个⽔平同步信号(horizonal synchronization),简称 HSync;⽽当⼀帧画⾯绘制完成后,电⼦回复到原位,准备画下⼀帧前,显⽰器会发出⼀个垂直同步信号(vertical synchronization),简称 VSync。显⽰器通常以固定频率进⾏刷新,这个刷新率就是 VSync 信号产⽣的频率。尽管现在的设备⼤都是液晶显⽰屏了,但原理仍然没有变。
CLK:像素时钟,像素数据只有在时钟上升或下降沿时才有效
ENB:是数据使能信号,当它为⾼时,CLK信号到达时输出有效数据。
HBP:⾏同步信号的前肩,⽔平同步信号的上升沿到ENABLE的上升沿的间隔。
HSW:⽔平同步信号的低电平(⾮有效电平)持续时间
HFP:⾏同步信号的后肩,ENABLE的下降沿到⽔平同步信号的下升沿的间隔 如下图所⽰
image-20210906101156688.png
图中从HSYNC的下降沿开始,等待两个CLK产⽣⼀个上升沿,在等待⼀个HBP时间后开始传输⼀⾏的像素数据,像素数据只有在像素时钟和上升沿或下降沿时才会写⼊(这⾥我们只讨论原理,并不是某个特定平台的具体实现,所以HSW所对应的时钟数字并不是以图中所⽰为准,具体产品中都会有调整和变化),经过N个像素时钟后成功将⼀⾏像素数据写⼊D1-Dn
类似地,在两帧画⾯之间也存在⼀些间隔:
VSW: VSYNC信号下降沿到上升沿间的时间
VBP: 帧同步信号的前肩
VFP:帧同步信号的后肩
VPROCH: 被称为消隐区,它是指 VSW+VBP+VFP , 这个时间段内Panel不更新像素点的颜⾊