1. 对显示器的基本认识
一个显示器的参数主要有这些:
-
分辨率:显示器屏幕上像素点的总数,通常用横向像素和纵向像素的数量来表示,比如1920×1080(即1080p)。
-
刷新率:显示器每秒钟画面更新的次数,用赫兹 (Hz) 表示,比如60Hz或144Hz。
-
色深:每个像素的颜色显示能力,色深越高,显示器能呈现的颜色越丰富,过渡越平滑,比如8bit或10bit。
这些参数也是计算显示器带宽的重要参数。
2. 错误的计算
假如这里有一块1080P@60Hz 8bit的屏幕,那它所需的带宽是多少呢?一些数学不错且有计算机硬件知识的人会立马回答道:
这块屏幕有1960乘1080个像素,每个像素又红绿蓝三个子像素构成,每秒刷新60次,而且还是8bit,所以应该是:
1920 * 1080 * 60 * 8 * 3 = 2.986Gbit/s
整个互联网上基本全是这种算法,但如果我告诉你这是错的呢?
3.显示器的工作原理
想要知道正确的算法就必须了解显示器的工作原理。
显示器在显示时并不是像幻灯片一样一整个画面一整个画面地切换,而是使用逐行扫描(Progressive Scanning):显示器会从屏幕的左上角开始一行一行地从左往右刷新,到右下角的像素完成刷新算作完成一次完整的画面刷新。如下图左半部分所示。
问题就出在这里:文艺一点地说,我们生活在电磁波的海洋里;实际一点地说,外部的Wi-Fi和移动信号的干扰以及电脑和显示器内部电路板的高频讯号干扰都会对画面传输造成影响。如果电磁波影响了数据的传输,就会导致每一行的信号对不齐,最后产出的画面就是撕裂和错位的。同时显示器还要保持画面在屏幕正中心,而不是偏左或者偏右。
所以显示器在逐行扫描时会在外围预留出一部分像素区域用于对齐和时钟同步,虽然这部分像素不参与显示,但是它会占用掉传输带宽。所以在计算带宽需求时,就需要把这一部分也考虑进去。
4. 实际像素数的计算
实际传输的画面大概分为3个部分:
- 同步信号区(Sync):分为行同步信号区(Hsync)和场同步信号区(Vsync)
- 消隐区(Blank):分为前消隐区(Front blank)和后消隐区(Back blank)
- 有效显示区域(Active)
所以说实际传输的画面的尺寸是:
Htotal = Hsync + Hfront + Hactive + Hback
Vtotal = Vsync + Vfront + Vactive + Vback
每张画面的像素量是:
pixels_per_frame = Htotal * Vtotal
每张画面的像素量乘以这个显示器的刷新率就是这个显示器一秒内要处理的像素量,专业名词叫显示器像素时钟(Pixel Clock):
pixel_clock = Htotal * Vtotal * Hz
那么如何知道Sync和Blank所占的像素数呢?这就要看显示器遵循的计时标准。不同的计时标准屏幕外用于时钟同步和对齐的部分也是不同的。
目前常见的标准是(我把下载链接附在这里):
- CVT计时标准
- CVT-RB计时标准
- CVT-R2计时标准
越新的接口越节约带宽,现在的DP接口都是采用最新的CVT-R2标准,在这个标准下,用于计算Blank和Sync区域的相关公式是:
当然如果每个分辨率都要走一遍所有公式是很麻烦的,所以VESA也制作有一张Excel表格(搜索CVT VESA就能找到)来自动计算相关参数,只需要填写分辨率、刷新率即可
拿计算出的Pixel Clock乘色深再乘3(RGB三色通道)即可:
133.187 * 8 * 3 = 3.196Gbit/s
对于HDMI和DisplayPort的各个标准在不同刷新率下对不同分辨率的支持情况,我把维基百科的表格放在这里,也可以点击链接看:
HDMI:
DP(需要结合两张图看):
表格中的DSC是指依靠显示流压缩技术(Display Stream Compression)实现,这种技术能实现基本肉眼无法察觉压缩的画面效果。
表格中的4:2:0是一种色度抽样压缩技术,人眼对于这种压缩的感知不大,但这种技术仍然没有DSC的效果极致。