1.视频压缩概述
近几年来是由4k分辨率到8k分辨率过渡的时期,hdmi2.1协议规定了frl模式,使带宽从原来的tmds下的18G提升到48G(12G4l),但是对于超高分辨率如4k144 yuv444 12bit或者8k60,48G的带宽依旧可能不够用。原有的物理传输层不足以满足如此之高的带宽需求。将视频进行高效的压缩以减少数据传输所需要的带宽是一种可行的方式。dsc压缩算法是其中一种,本文详细介绍其算法原理。
影像压缩传输(Display Stream Compression)简称DSC,是将影像数据压缩后进行传输,达成低带宽就可输出高分辨率内容,并且经压缩后画面表现上视觉无失真、低延迟的技术。
在介绍hdmi的DSC之前,先简略介绍DSC的运作原理。一个完整的DSC系统需要一个编码器及译码器。编码器配置在传送端,传输影像数据前将影像压缩; 译码器则配置在接收端,将接收到的影像数据解压缩、还原并显示。由此可知,传送端及接收端两者都必须要支持DSC方可启用。
2.dsc压缩算法的c model的使用
本文不想一上来就长篇大论介绍一堆dsc压缩算法的原理,笔者查阅了很多dsc相关的资料,dsc协议是英文的,国内的一些文献仅仅是简单翻译了一下,一堆比较难懂的概念,不是工作压力,项目驱动,没有具体的例子和环境跑起来,很难对算法进行深入的研究。这里先演示下由官方给出的开源c model 是如何跑起来的。
c model文件如下图所示:
除代码实现的.c和.h文件外,还有makefile文件,cfg文件,list文件,输入文件
makefile就是用来编译生成可执行文件的,dsc是生成的可执行文件。
cfg文件是配置文件,内容如下:
dsc模型的输入文件是dpx图像文件,可以用jpg转dpx转换。list文件指定输入文件,内容如下:
找了一张dpx格式的图像文件,用dpx文件查看工具看下图像内容
这里我们把cfg中的func字段配成1,只编码
执行完后,在当前目录下生成.ref文件和.dsc文件