发明内容
本发明提出了一种针对KVM应用的视频数据压缩方法,用以降低KVM功能实现的成本,提高KVM的图像传输实时性。
根据上述目的,本发明提供了一种视频数据压缩方法,该方法包括:对于第一帧图像,执行如下处理:A1.将第一帧图像数据进行编码压缩,得到第一帧图像编码数据;A2.将第一帧图像数据和第一帧图像编码数据当中数据长度较小的数据作为结果输出;对于第一帧之后的图像,执行如下处理:B1.将当前帧图像数据与前一帧图像数据相比较,获取两者的差异数据;B2.分别对当前帧图像数据和差异数据进行编码压缩,得到当前帧图像编码数据和编码的差异数据;B3.将当前帧图像数据、当前帧图像编码数据、差异数据以及编码的差异数据当中数据长度最小的数据作为结果输出。
步骤B1中所述比较为将当前帧图像数据与前一帧图像数据相减,所述差异数据为将当前帧图像数据与前一帧图像数据相减得到的数据。或者,所述比较为将当前帧图像数据与前一帧图像数据做异或运算,所述差异数据为将当前帧图像数据与前一帧图像数据做异或运算得到的数据。
所述图像数据为第一格式的图像数据;所述步骤A1和/或B1之前进一步包括:将从视频接口获取的图像数据转换为第一格式的图像数据。
所述第一格式的图像数据为8比特彩色图像数据,所述从视频接口获取的图像数据为24比特真彩图像数据。
步骤A1和/或步骤B2中所述的编码压缩为行程编码。
所述编码压缩的数据编码方式为:用1比特表示是否压缩;用M比特表示数据的长度;用N比特表示数据,其中M和N分别为正整数。
所述表示数据长度的M比特分为k部分,当数据长度用二进制表示的位数小于等于所述k部分中第一部分的比特数时,用第一部分表示数据长度;当数据长度用二进制表示的位数大于前L部分的比特之和且小于等于前L+1部分的比特数之和时,用前L+1部分表示数据长度。其中k、L为正整数,且L小于k。
从上述方案中可以看出,由于本发明采用算法简单,便于通过硬件实现,极大节省了硬件成本和印刷电路板(PCB)的空间,降低了KVM功能实现的成本,并且提高了KVM的图像传输实时性。另外,由于算法简单,终端图像数据的恢复也相对简单,便于实现一台终端同时控制多台服务器,从而节省了成本,并提高了效率。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下举实施例对本发明进一步详细说明。
为了便于理解本发明,首先分析服务器管理功能和计算机图像显示特点。在KVM应用中,图像大多为简单窗口和菜单界面,因此图像的色彩比较简单,并且图像的变化较少,即使有变化也比较简单,例如窗口的切换、鼠标的移动等。本发明就是针对KVM应用中视频图像的特点而提出的一种简单的图像压缩方法。
通常的KVM图像处理系统的结构如图2所示,包括数字视频接口(DVI)、由现场可编程门阵列(FPGA)实现的图像处理逻辑、由BMC实现的图像传输控制部件以及远端计算机(PC)。
如图2所示,DVI将显示器的模拟视频信号数字化后,转换为红绿蓝(RGB)格式的计算机图像数据格式,输入图像处理逻辑,在逻辑电路中进行图像压缩处理后,由图像传输控制部件将压缩后的图像数据传输到远端计算机,而远端计算机将图像数据恢复后显示出来。
图3所示的是根据本发明实施例的图像压缩的流程示意图。参照图3,该方法包括以下步骤:
步骤S1:由于在服务器管理的场合,视频图像都是简单的界面,这些界面的色彩比较简单,所以在步骤S1中将从DVI输入的图像数据格式转换为色彩数据较少的图像数据格式。
如果DVI输入的是24比特(bit)真彩图像数据,可以将24bit真彩图像转换为8bit彩色图像。24bit图像数据中RGB每个基色都具有8bit数据,这里将其转换为R基色取2bit数据、G基色取3bit数据、B基色取3bit数据。
步骤S2:将当前帧图像数据与前一帧图像数据进行比较,比较的方法可以是相减或做异或(XOR)运算,从而得到当前帧图像数据与前一帧图像数据的差异数据。本实施例以异或运算为例说明,那么得到的是当前帧图像数据与前一帧图像数据的异或的图像数据。
在该步骤中,还可以进一步将前一帧图像数据更新为当前帧图像数据,从而为处理下一帧做准备。
步骤S3:将当前帧图像数据和异或的图像数据分别进行编码压缩。编码压缩的方法有多种,这里可以采用常见的行程编码方法。
步骤S4:BMC根据处理后的图像数据长度,控制图像数据传输。具体地,BMC根据现有的数据:当前帧图像数据、编码后的当前帧图像数据、差异数据、编码后的差异数据,以其中数据长度最小的数据作为结果输出,传输给远程PC。
需要注意的是,第一次传输数据,由于没有前一帧,所以输出的是当前帧图像数据和编码后的当前帧图像数据两者中数据长度较小的数据。另外,如果在传输过程中发生传输出错,那么BMC也选择输出当前帧图像数据和编码后的当前帧图像数据中数据长度较小的数据。
在上述图像处理过程中,由于同时总共需要存储4幅图像,所以对RAM只需求同时存储4幅图像的存储空间。例如,当图像尺寸为800×600时,需要800×600×4=1920kByte的存储空间;当图像尺寸为1024×768时,需要1024×768×4=3146kByte的存储空间。
下面具体介绍步骤S3中的一种图像数据编码方法,该方法仅采用比较和计数的简单算法,便于逻辑电路的硬件实现。
表1行程编码的图像数据编码
表2长度编码及数据
如表1所示,在行程编码的图像数据编码中,数据可以分为4个部分,第一部分占4byte,用来表示图像数据的长度;第二部分占2byte,其中1bit用来表示该数据是否为差异值,例如用1表示是和0表示否,其余15bit用来表示图像点阵宽度;第三部分占2byte,用来表示图像点阵高度;第四部分占N byte,为具体图像数据。
表2所示为图像数据中的长度编码以及数据。Byte1中的第一bit表示数据是否为压缩数据,例如1表示是而0表示否。而byte1中的其余7bit和byte2、byte3来表示长度编码。而byte4表示这些数据的图像点颜色。
在长度编码中,采用多级的方式实现长度编码。如表2所示,如果长度小于等于63,则
长度=长度1;
如果长度大于63而小于等于8191,则
长度=(长度1×128)+长度2;
如果长度大于8191,则
长度=(长度1×32768)+(长度2×256)+长度3
在表2所示的长度编码中,最大可表示的长度为2097151。
换言之,将表示数据长度的M比特分为k部分,当数据长度用二进制表示的位数小于等于第一部分的比特数时,用第一部分表示数据长度;当数据长度用二进制表示的位数大于前L部分的比特之和且小于等于前L+1部分的比特数之和时,用前L+1部分表示数据长度。其中M、k、L为正整数,且L小于k。以表2为例,其中M=23,k=3,那么第一部分为7bit,第二部分为8bit,第三部分为8bit。
在表2所示的数据中,在数据为压缩的情况下,即“是否压缩”bit=1,则数据编码格式为:长度编码+1 byte数据;在数据不是压缩的情况下,即“是否压缩”bit=0,则数据编码格式为:长度编码+nbyte数据。
例如,原始数据为0x01,0x01,0x01,0x01,0x01,由于数据相同,所以采取压缩,因此“是否压缩”bit=1。由于数据长度为5,小于63,所以采用长度1表示长度,因此表2中byte1的后7个bit为0000101。在此后面加上1byte的数据,因此该数据的编码为0x85,0x01。
再例如,原始数据为0x01,0x02,0x03,0x04,0x05,则编码为0x05,0x01,0x02,0x03,0x04,0x05,其中“0x05”表示不压缩以及长度为5,“0x01,0x02,0x03,0x04,0x05”为数据。原始数据为0x01,0x01,0x01,0x01,0x01,0x04,0x05,则编码为0x85,0x01,0x02,0x04,0x05,其中“0x85,0x01”表示压缩的5个“0x01”,长度为5;“0x02,0x04,0x05”表示未压缩的“0x04,0x05”,长度为2。
如果,800×600的一幅纯白图像的编码为0xce,0xd3,0x00,0xff,那么它的长度为:
长度=((0xce&0x3f)<<15)+((0xd3&0x7f)<<8)+0x00=480000=800×600
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。