本发明涉及芯片设计领域,具体地说是一种实用性强的视频采集压缩方法及系统。
背景技术:
所谓视频压缩就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的h.261、h.263、h.264,运动静止图像专家组的m-jpeg和国际标准化组织运动图像专家组的mpeg系列标准等。
传统的视频压缩的应用场景如附图1所示,压缩芯片接收显卡输出的视频数据,并且进行压缩、存储,并将压缩后的数据通过网络进行传输,发送至远端显示。
其中压缩芯片需要额外的购买,并且还需配套的软件及驱动,这将大大增加项目成本。同时完全利用压缩芯片,对于项目/产品的安全性也是一个极大的挑战。
基于此,亟需一种安全性能高、无需额外增加成本的视频采集压缩技术。
技术实现要素:
本发明的技术任务是针对以上不足之处,提供一种实用性强的视频采集压缩方法及系统。
一种视频采集压缩方法,实现过程为,
一、首先检测显卡芯片输出的视频数据分辨率,并对视频数据进行色彩空间转换,将视频数据从rgb444格式转换到yuv444格式;
二、设定目标分辨率,将转换后的显卡视频数据的分辨率转换成目标分辨率;
三、再将yuv444格式的视频数据转换到yuv420格式,将转换后的视频数据传递给视频压缩ip核;
四、将目标分辨率配置给视频压缩ip核,由视频压缩ip核对接收到的视频数据完成压缩,将完成压缩后的视频数据存入ddr存储中。
所述步骤一中视频数据分辨率通过对显卡视频输出的行/场同步信号及视频数据有效信号进行检测得到,具体为:
首先根据视频数据有效信号,对像素时钟进行计数,即根据一个视频数据有效信号周期内的时钟数,得到分辨率的宽度;
统计一个场同步信号周期内,对视频数据有效信号进行计数,得到分辨率的高度。
所述步骤一中的色彩空间转换通过以下矩阵转换公式,并由乘法器实现rgb444到yuv444的转换:
y=((12'h107*r)+(12'h204*g)+(12'h064*b)+20'h04000)>>10;
u=((12'hf68*r)+(12'hed6*g)+(12'h1c2*b)+20'h20000)>>10;
v=((12'h1c2*r)+(12'he87*g)+(12'hfb7*b)+20'h20000)>>10。
所述步骤三中,在将yuv444格式的视频数据转换为yuv420视频数据后,按照8*8block的格式传输给视频压缩ip核,然后由视频压缩ip核完成数据压缩,8*8block是指输入给视频压缩ip核的数据块,该数据块的长、宽都为8。
步骤三中的视频数据转换及传输给视频压缩ip核的具体过程为:
在将视频数据由yuv444转yuv420时,对y分量全部存储;u、v分量隔行、隔列存储,即只存偶数列、偶数行的u、v分量;
通过16个fifo:y_fifo_0---y_fifo_15来存储y分量,其中y_fifo_n存储第n,16+n,32+n…行的y分量,n取值为0-15;
通过8个u_fifo:u_fifo_0---u_fifo_7来存储u分量,其中u_fifo_n存储第2n’,8+2n’,16+2n’..行的奇数列的u分量,n’取值为0-7;
通过8个v_fifo:v_fifo_0---v_fifo_7存储v分量,其中v_fifo_n’’存储第2n’’,8+2n’’,16+2n’’..行的奇数列的v分量;
读16次y_fifo_0,读16次y_fifo_1……读16次y_fifo_15,即共读256次y;
读8次u_fifo_0,读8次u_fifo_1……读8次u_fifo_7,共读64次u;
读8次v_fifo_0,读8次v_fifo_1……读8次v_fifo_7,共读64次v;
依次循环读,实现yuv420视频数据的8x8block转换。
一种视频采集压缩系统,包括,
分辨率检测模块,用于检测显卡芯片输出视频的视频分辨率;
色彩空间转换模块,完成显卡芯片输出的视频数据从rgb444格式到yuv444格式的转换;
分辨率调整模块,用于根据当前分辨率以及配置的目标分辨率进行配置,将视频数据从当前分辨率调整为目标分辨率;
数据块转换模块,完成视频数据从yuv444到yuv420的格式转换,并且按照数据块的形式将视频数据传递给视频压缩ip核;
ip配置模块,用于将分辨率调整模块调整的目标分辨率传输给视频压缩ip核;
视频压缩ip核,用于将数据块转换模块输出的视频数据按照目标分辨率进行视频压缩;
ddr存储,用于存储经视频压缩ip核压缩的视频数据。
所述分辨率检测模块通过对显卡芯片输出视频的行/场同步信号及视频数据有效信号进行检测得到分辨率,具体为:分辨率检测模块首先根据视频数据有效信号,对像素时钟进行计数,即根据一个视频数据有效信号周期内的时钟数,得到分辨率的宽度;统计一个场同步信号周期内,对视频数据有效信号进行计数,得到分辨率的高度。
所述色彩空间转换模块通过以下矩阵转换公式,并由乘法器实现rgb444到yuv444的转换:
y=((12'h107*r)+(12'h204*g)+(12'h064*b)+20'h04000)>>10;
u=((12'hf68*r)+(12'hed6*g)+(12'h1c2*b)+20'h20000)>>10;
v=((12'h1c2*r)+(12'he87*g)+(12'hfb7*b)+20'h20000)>>10。
所述数据块转换模块在将yuv444格式的视频数据转换为yuv420视频数据后,按照8*8block的格式传输给视频压缩ip核,然后由视频压缩ip核完成数据压缩,8*8block是指输入给视频压缩ip核的数据块,该数据块的长、宽都为8。
在数据块转换模块中将视频数据由yuv444转yuv420时,对y分量全部存储;u、v分量隔行、隔列存储,即只存偶数列、偶数行的u、v分量,该数据块转换模块实现8x8block转换过程为:
通过16个fifo:y_fifo_0---y_fifo_15来存储y分量,其中y_fifo_n存储第n,16+n,32+n…行的y分量,n取值为0-15;
通过8个u_fifo:u_fifo_0---u_fifo_7来存储u分量,其中u_fifo_n存储第2n’,8+2n’,16+2n’..行的奇数列的u分量,n’取值为0-7;
通过8个v_fifo:v_fifo_0---v_fifo_7存储v分量,其中v_fifo_n’’存储第2n’’,8+2n’’,16+2n’’..行的奇数列的v分量;
读16次y_fifo_0,读16次y_fifo_1……读16次y_fifo_15,即共读256次y;
读8次u_fifo_0,读8次u_fifo_1……读8次u_fifo_7,共读64次u;
读8次v_fifo_0,读8次v_fifo_1……读8次v_fifo_7,共读64次v;
依次循环读,实现yuv420视频数据的8x8block转换。
本发明的一种视频采集压缩方法及系统和现有技术相比,具有以下有益效果:
本发明的一种视频采集压缩方法及系统,涉及的具体的逻辑功能模块通过代码自主设计实现,实现了视频采集压缩系统的设计,而不是利用视频压缩芯片来实现,不再需要额外购买视频压缩芯片,极大的节省了项目成本,也降低了系统的复杂度,安全性较高,适用于对安全性要求较高的项目或产品;实用性强,适用范围广泛,易于推广。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
附图1为传统视频压缩实现示意图。
附图2为本发明视频压缩实现示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的方案,下面结合具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如附图2所示,一种视频采集压缩方法,通过检测显卡视频数据的分辨率,色彩空间转换,ip压缩,ddr存储,完成从高带宽,大数据量的显卡视频数据到压缩后低带宽,小数据量的视频数据,并且实现方法简单,只使用很少的fpga逻辑资源,和低价的视频压缩ip核,极大降低了项目成本。
同时为了进一步的降低压缩后的视频数据量,方便网络传输,本设计中通过进一步将yuv444数据转换为yuv420格式数据,并且提供分辨率调整的功能,方便在显卡输出的视频分辨率过大的情况下,降低压缩后的视频数据量。
本方法的具体实现过程为:
步骤一、首先检测显卡芯片输出的视频数据分辨率,并对视频数据进行色彩空间转换,将视频数据从rgb444格式转换到yuv444格式;
步骤二、设定目标分辨率,将转换后的显卡视频数据的分辨率转换成目标分辨率;
步骤三、再将yuv444格式的视频数据转换到yuv420格式,将转换后的视频数据传递给视频压缩ip核;
步骤四、将目标分辨率配置给视频压缩ip核,由视频压缩ip核对接收到的视频数据完成压缩,将完成压缩后的视频数据存入ddr存储中。
本发明使用很少的逻辑资源及低价的视频压缩ip核,实现视频数据的压缩存储系统设计,完成从高带宽,大数据量的显卡视频数据到压缩后低带宽,小数据量的视频数据,避免了使用显卡芯片及其配套软件的成本,同时代码及模块划分是自主设计,安全性较高,适用于对安全性要求较高的项目或产品。
所述步骤一中视频数据分辨率通过对显卡视频输出的行/场同步信号及视频数据有效信号进行检测得到,具体为:
首先根据视频数据有效信号,对像素时钟进行计数,即根据一个视频数据有效信号周期内的时钟数,得到分辨率的宽度;
统计一个场同步信号周期内,对视频数据有效信号进行计数,得到分辨率的高度。
所述步骤一中的色彩空间转换通过以下矩阵转换公式,并由乘法器实现rgb444到yuv444的转换:
y=((12'h107*r)+(12'h204*g)+(12'h064*b)+20'h04000)>>10;
u=((12'hf68*r)+(12'hed6*g)+(12'h1c2*b)+20'h20000)>>10;
v=((12'h1c2*r)+(12'he87*g)+(12'hfb7*b)+20'h20000)>>10。
所述步骤三中,在将yuv444格式的视频数据转换为yuv420视频数据后,按照8*8block的格式传输给视频压缩ip核,然后由视频压缩ip核完成数据压缩,8*8block是指输入给视频压缩ip核的数据块,该数据块的长、宽都为8。
步骤三中的视频数据转换及传输给视频压缩ip核的具体过程为:
在将视频数据由yuv444转yuv420时,对y分量全部存储;u、v分量隔行、隔列存储,即只存偶数列、偶数行的u、v分量;
通过16个fifo:y_fifo_0---y_fifo_15来存储y分量,其中y_fifo_n存储第n,16+n,32+n…行的y分量,n取值为0-15;
通过8个u_fifo:u_fifo_0---u_fifo_7来存储u分量,其中u_fifo_n存储第2n’,8+2n’,16+2n’..行的奇数列的u分量,n’取值为0-7;
通过8个v_fifo:v_fifo_0---v_fifo_7存储v分量,其中v_fifo_n’’存储第2n’’,8+2n’’,16+2n’’..行的奇数列的v分量;
读16次y_fifo_0,读16次y_fifo_1……读16次y_fifo_15,即共读256次y;
读8次u_fifo_0,读8次u_fifo_1……读8次u_fifo_7,共读64次u;
读8次v_fifo_0,读8次v_fifo_1……读8次v_fifo_7,共读64次v;
依次循环读,实现yuv420视频数据的8x8block转换。
在上述技术方案中,ip核全称知识产权核(intellectualpropertycore),是指某一方提供的,形式为逻辑单元、芯片设计的可重用模块。
分辨率表示每帧图像的像素点数,通常表示为wxh,其中w表示图像每一行的有效像素点数,称为分辨率的宽度。h表示每一列的有效像素点数,也是一帧图像中的总行数,称为分辨率的高度。
rgb444为显卡输出的像素数据,每一个像素点都由r、g、b三种数值组成。分别表示红、绿、蓝三种颜色。
yuv444是一种由rgb444数据经过矩阵变换得到,分量表示亮度信号(y)和两个色差信号(u、v)。
yuv420是由yuv444数据得来,保留yuv444数据中所有的y分量不变,只保留偶数行,偶数列的u/v数据。
如附图2所示,一种视频采集压缩系统,包括,
分辨率检测模块,用于检测显卡芯片输出视频的视频分辨率;
色彩空间转换模块,完成显卡芯片输出的视频数据从rgb444格式到yuv444格式的转换;
分辨率调整模块,用于根据当前分辨率以及配置的目标分辨率进行配置,将视频数据从当前分辨率调整为目标分辨率;
数据块转换模块,完成视频数据从yuv444到yuv420的格式转换,并且按照数据块的形式将视频数据传递给视频压缩ip核;
ip配置模块,用于将分辨率调整模块调整的目标分辨率传输给视频压缩ip核;
视频压缩ip核,用于将数据块转换模块输出的视频数据按照目标分辨率进行视频压缩;
ddr存储,用于存储经视频压缩ip核压缩的视频数据。
所述分辨率检测模块通过对显卡芯片输出视频的行/场同步信号及视频数据有效信号进行检测得到分辨率,具体为:
1.1:根据data_en信号,对像素时钟进行计数,一个data_en周期内的时钟数,得到分辨率的宽度(wxh中的w)。
1.2:统计一个vs周期内,对data_en信号进行计数,得到分辨率的高度(wxh中的h)。
在本发明中,涉及到的英文名词解释如下:
像素时钟:pixel_clock,指像素点对应的时钟信号,分辨率越高,像素时钟信号的频率也越高。
hs:行同步信号,当一行像素输出结束后发出的脉冲信号,指示一行的结束。
vs:场同步信号,对一场像素输出结束后发出的脉冲信号,指示一场图像的结束。
data_en:视频数据有效信号,在该信号为高期间的像素信号是有效的像素,可以显示,当该信号为低时,像素信号无效,不显示。
所述色彩空间转换模块通过以下矩阵转换公式,并由乘法器实现rgb444到yuv444的转换:
y=((12'h107*r)+(12'h204*g)+(12'h064*b)+20'h04000)>>10;
u=((12'hf68*r)+(12'hed6*g)+(12'h1c2*b)+20'h20000)>>10;
v=((12'h1c2*r)+(12'he87*g)+(12'hfb7*b)+20'h20000)>>10。
所述数据块转换模块在将yuv444格式的视频数据转换为yuv420视频数据后,按照8*8block的格式传输给视频压缩ip核,然后由视频压缩ip核完成数据压缩,8*8block是指输入给视频压缩ip核的数据块,该数据块的长、宽都为8。
在数据块转换模块中将视频数据由yuv444转yuv420时,对y分量全部存储;u、v分量隔行、隔列存储,即只存偶数列、偶数行的u、v分量,该数据块转换模块实现8x8block转换过程为:
通过16个fifo:y_fifo_0---y_fifo_15来存储y分量,其中y_fifo_n存储第n,16+n,32+n…行的y分量,n取值为0-15;
通过8个u_fifo:u_fifo_0---u_fifo_7来存储u分量,其中u_fifo_n存储第2n’,8+2n’,16+2n’..行的奇数列的u分量,n’取值为0-7;
通过8个v_fifo:v_fifo_0---v_fifo_7存储v分量,其中v_fifo_n’’存储第2n’’,8+2n’’,16+2n’’..行的奇数列的v分量;
读16次y_fifo_0,读16次y_fifo_1……读16次y_fifo_15,即共读256次y;
读8次u_fifo_0,读8次u_fifo_1……读8次u_fifo_7,共读64次u;
读8次v_fifo_0,读8次v_fifo_1……读8次v_fifo_7,共读64次v;
依次循环读,实现yuv420视频数据的8x8block转换。
在本发明中,分辨率调整模块可利用fpga自带分辨率调整ip(免费),根据分辨率检测模块得到的视频分辨率和系统可配置的目标分辨率进行设置,在显卡输出的分辨率过高的情况下,同时不影响压缩后的视频效果,可以设置比本地分辨率低的目标分辨率,来减少压缩后的视频数据量。
视频压缩ip核可以购买(价格很低,并且可以购买一次,无限次使用),比如型号为igdjpeg02a的ip核,将分辨率调整模块调整后的分辨率信息通过ip配置模块,配置到视频压缩ip核,并将8*8block模块的输出传递到该ip,进行视频压缩,并将压缩后的视频数据存入ddr,等待软件/驱动来读取。
以上所述仅为本发明的较佳实施例,本发明的专利保护范围包括但不限于上述具体实施方式,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的专利保护范围之内。
通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。