一种基于FPGA的视频压缩中YUV数据8x8block转换方法及装置与流程

文档序号:13391847阅读:269来源:国知局
一种基于FPGA的视频压缩中YUV数据8x8block转换方法及装置与流程

本发明涉及视频数据处理领域,具体来说涉及一种基于fpga的视频压缩中yuv数据8x8block转换方法及装置。



背景技术:

在数字视频处理中,视频压缩技术是一项关键的技术,视频压缩在减少视频序列码率的同时保持了复原图像的质量,便于在给定的通信信道上实时传输。现场可编程门阵列fpga是利用小型查找表来实现组合逻辑功能,这种结构允许无限次的重新编程,对于视频系统的硬件实现来说fpga比传统的通用集成电路或专用集成电路更为优越。

现有技术中,参照附图1所示,利用fpga进行视频数据压缩的方法为,fpga接收显卡输出的rgb视频数据,经过视频压缩,降低原始视频的数据量,并按照以太网协议打包,通过网卡进行发送。其压缩流程是首先将显卡输出的rgb444数据转换为yuv444数据,为进一步降低视频数据量,再将yuv444数据转换为yuv420数据,按照8x8block的方式输入给视频压缩ip,完成数据压缩。其中,rgb444数据到yuv420数据的转换以及8x8block的转换是利用fpga内部的ip完成,但是fpga内部的ip需要额外购买,使用中存在很大的局限性,并且增加了项目成本,提高了系统复杂度。

为解决现有技术中rgb444到yuv4208x8block转换的局限性,本发明设计一种基于fpga的视频压缩中yuv数据8x8block转换方法及装置。



技术实现要素:

本发明的目的在于提供一种基于fpga的视频压缩中yuv数据8x8block转换方法,将显卡输出的rgb444数据转换为yuv420数据,并按照8x8block的方式输入给视频压缩ip,提高系统的灵活性,降低系统复杂度。

为解决上述技术问题,本发明采用如下技术方案予以实现:

一种基于fpga的视频压缩中yuv数据8x8block转换方法,所述转换方法包括下述步骤:

s1、利用矩阵转换公式,通过乘法器将rgb444格式数据转换为yuv444格式数据;

s2、将yuv444格式数据转换为yuv420格式数据,并分别利用16个fifo来存储y分量、8个fifo存储u分量、8个fifo存储v分量,存储队列依次记为y_fifo、u_fifo及v_fifo;

s3、依次读取所述s2中的16个y_fifo、8个u_fifo及8个v_fifo,分别得到256个y分量、64个u分量以及64个v分量;

s4、将所述s3中读出的256个y分量、64个u分量及64个v分量依次传输到视频压缩ip,完成8x8block的转换。

基于上述方案,本发明做如下优化:

作为优化,在所述s1中,将rgb444格式转换为yuv444格式的矩阵转换公式为:

y=0.257*r+0.504*g+0.098*b+16

u=-0.148*r-0.291*g+0.439*b+128

v=0.439r-0.368*g-0.071*b+128

作为优化,在所述s2中,将y分量写入y_fifo中的方法是,按照y分量所在的行号n依次写入第((n%16)+1)个y_fifo中;将u分量写入u_fifo中的方法是,对于偶数列和偶数行的u分量,根据u分量所在的行号n,依次写入第((n/2)%16)+1)个u_fifo中,奇数行或奇数列的u分量不写入u_fifo;将v分量写入v_fifo中的方法是,对于偶数列和偶数行的v分量,根据v分量所在的行号n,依次写入第((n/2)%16)+1)个v_fifo中,奇数行或奇数列的v分量不写入v_fifo。

本发明的另一目的在于提供一种基于fpga的视频压缩中yuv数据8x8block转换装置,所述转换装置包括:

rgb444至yuv444转换单元,用于利用矩阵转换公式将rgb444格式数据转换为yuv444格式数据;

yuv444至yuv420转换单元,用于将yuv444格式数据转换为yuv420格式数据,并分别利用16个fifo来存储y分量,8个fifo存储u分量,8个fifo存储v分量,存储队列依次记为y_fifo、u_fifo及v_fifo;

分量读取单元,用于依次读取所述yuv444至yuv420转换单元中的16个y_fifo、8个u_fifo及8个v_fifo,分别得到256个y分量、64个u分量及64个v分量;

分量传输单元,用于将分量读取单元中读出的256个y分量、64个u分量及64个v分量依次传输到视频压缩ip,完成8x8block的转换。

作为优化,所述rgb444至yuv444转换单元中,用于将rgb444格式转换为yuv444格式的矩阵转换公式为:

y=0.257*r+0.504*g+0.098*b+16

u=-0.148*r-0.291*g+0.439*b+128

v=0.439r-0.368*g-0.071*b+128

作为优化,在所述的yuv444至yuv420转换单元中,用于将y分量写入y_fifo中的方法是,按照y分量所在的行号n依次写入第((n%16)+1)个y_fifo中;用于将u分量写入u_fifo中的方法是,对于偶数列和偶数行的u分量,根据u分量所在的行号n,依次写入第((n/2)%16)+1)个u_fifo中,奇数行或奇数列的u分量不写入u_fifo;用于将v分量写入v_fifo中的方法是,对于偶数列和偶数行的v分量,根据v分量所在的行号n,依次写入第((n/2)%16)+1)个v_fifo中,奇数行或奇数列的v分量不写入v_fifo。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

本发明实施例的一种基于fpga的视频压缩中yuv数据8x8block转换方法及装置,利用矩阵变换以及逻辑控制和fifo阵列转换,实现rgb444到yuv420数据8x8block转换,完成视频数据的压缩处理,整个处理过程只占用很少的fpga逻辑资源,节省了使用fpga内部ip进行转换的购买成本,打破了现有转换方式存在的局限性,系统设计实现更加灵活简单,且大大降低了项目成本和系统复杂度,提高了工作效率。

附图说明

图1是现有技术中基于fpga的视频压缩流程框图;

图2是本申请实施例提供的基于fpga的视频压缩中yuv数据8x8block转换方法的流程图;

图3是本申请实施例提供的8x8block转换示意图;

图4是本申请实施例提供的基于fpga的视频压缩中yuv数据8x8block转换方法的逻辑框图;

图5是本申请实施例提供的基于fpga的视频压缩中yuv数据8x8block转换装置的结构示意图;

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

为了方便对实施例的理解,对实施例中涉及的缩略词和关键术语予以解释和说明。

rgb444:显卡输出的像素数据,每一个像素点都由r、g、b三种数值组成,分别表示红、绿、蓝三种颜色;

yuv444:由rgb444数据经过矩阵变换得到,分量y表示亮度信号,分量u、v表示两个色差信号;

yuv420:由yuv444数据得来,保留yuv444数据中所有的y分量不变,只保留偶数行和偶数列的u、v数据;

8x8block:输入给视频压缩ip的数据块,数据块的长、宽都为8;

ip:ip核,intellectualpropertycore,全称知识产权核,是指某一方提供的,形式为逻辑单元、芯片设计的可重用模块;

y_fifo:存储y分量的fifo;

u_fifo:存储u分量的fifo;

v_fifo:存储v分量的fifo。

如图2至图4所示,本实施例提供的一种基于fpga的视频压缩中yuv数据8x8block转换方法,其步骤包括,

s1、利用矩阵转换公式,通过乘法器将rgb444格式数据转换为yuv444格式数据;

s2、将yuv444格式数据转换为yuv420格式数据,并分别利用16个fifo来存储y分量、8个fifo存储u分量、8个fifo存储v分量,存储队列依次记为y_fifo、u_fifo及v_fifo;

s3、依次读取所述s2中的16个y_fifo、8个u_fifo以及8个v_fifo,分别得到256个y分量、64个u分量及64个v分量;

s4、将所述s3中读出的256个y分量、64个u分量及64个v分量依次传输到视频压缩ip,完成8x8block的转换。

具体而言,在所述s1中,通过rgb2yuv模块进行像素数据从rgb444格式到yuv444格式的转换,具体实现方法根据下述矩阵转换公式进行转换:

y=0.257*r+0.504*g+0.098*b+16

u=-0.148*r-0.291*g+0.439*b+128

v=0.439r-0.368*g-0.071*b+128

为方便使用硬件语言实现上述公式,对上述公式进行如下变换,即等式两边都扩大1024倍,得到:

y<<10=(263*r)+(516*g)+(100*b)+16384

u<<10=(-152*r)-(298*g)+(450*b)+131072

v<<10=(450*r)-(377*g)-(73*b)+131072

因为负数的乘法在计算机中用补码的形式实现,因此将上述公式转换为:

y<<10=(12'h107*r)+(12'h204*g)+(12'h064*b)+20'h04000

u<<10=(12'hf68*r)+(12'hed6*g)+(12'h1c2*b)+20'h20000

v<<10=(12'h1c2*r)+(12'he87*g)+(12'hfb7*b)+20'h20000

用乘法器计算完成上述公式后,公式两边同时除以1024,得到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数据之后,为减少视频的数据量,且不影响压缩后的视频效果,在s2中将yuv444格式数据转换为yuv420格式数据,实现方法是利用图4逻辑框图中的fifo阵列写控制模块来实现,该模块通过计数的方式得知当前像素点所在的列号和行。其中,

对于y分量,按照y分量所在的行号n将其依次写入第((n%16)+1)个y_fifo中;

对于u分量,偶数列和偶数行的u分量,根据其所在的行号n,将其依次写入第(((n/2)%16)+1)个u_fifo中,奇数行或奇数列的u分量不写入u_fifo;

对于v分量,偶数列和偶数行的v分量,根据其所在的行号n,将其依次写入第(((n/2)%16)+1)个v_fifo中,奇数行或奇数列的v分量不写入v_fifo。

进一步的,在s3中,利用图4逻辑框图中的fifo阵列读控制模块,依次读第1-16个y_fifo,分别读16次,得到256个y分量,再依次读第1-8个u_fifo,分别读8次,得到64个u分量,再依次读第1-8个v_fifo,分别读8次,得到64个v分量。

图5所示为本申请实施例提供的基于fpga的视频压缩中yuv数据8x8block转换装置示意图,所述转换装置包括:

rgb444至yuv444转换单元,用于利用矩阵转换公式将rgb444格式数据转换为yuv444格式数据;

yuv444至yuv420转换单元,用于将yuv444格式数据转换为yuv420格式数据,并分别利用16个fifo来存储y分量,8个fifo存储u分量,8个fifo存储v分量,存储队列依次记为y_fifo、u_fifo及v_fifo;

分量读取单元,用于依次读取所述yuv444至yuv420转换单元中的16个y_fifo、8个u_fifo及8个v_fifo,分别得到256个y分量、64个u分量及64个v分量;

分量传输单元,用于将分量读取单元中读出的256个y分量、64个u分量及64个v分量依次传输到视频压缩ip,完成8x8block的转换。

具体而言,在rgb444至yuv444转换单元中,通过rgb2yuv模块进行像素数据从rgb444格式到yuv444格式的转换,具体实现方法根据下述矩阵转换公式进行转换:

y=0.257*r+0.504*g+0.098*b+16

u=-0.148*r-0.291*g+0.439*b+128

v=0.439r-0.368*g-0.071*b+128

进一步的,为减少视频的数据量,且不影响压缩后的视频效果,yuv444至yuv420转换单元将yuv444格式数据转换为yuv420格式数据,具体通过fifo阵列写控制模块,采用计数的方式得到当前像素点所在的列号和行。其中,对于y分量,按照y分量所在的行号n将其依次写入第((n%16)+1)个y_fifo中;对于u分量,偶数列和偶数行的u分量,根据其所在的行号n,将其依次写入第(((n/2)%16)+1)个u_fifo中,奇数行或奇数列的u分量不写入u_fifo;对于v分量,偶数列和偶数行的v分量,根据其所在的行号n,将其依次写入第(((n/2)%16)+1)个v_fifo中,奇数行或奇数列的v分量不写入v_fifo。

进一步的,所述分量读取单元利用fifo阵列读控制模块依次读第1-16个y_fifo,分别读16次,得到256个y分量,再依次读第1-8个u_fifo,分别读8次,得到64个u分量,再依次读第1-8个v_fifo,分别读8次,得到64个v分量。

在本发明实施例中,利用矩阵变换以及逻辑控制和fifo阵列转换,实现rgb444到yuv420数据8x8block转换,完成视频数据的压缩处理,节省了使用fpga内部ip进行转换的购买成本,大大降低了项目成本和系统复杂度,提高了系统设计的灵活性。

以上所述仅为本发明的较佳实施例而已,并不用以限定本发明,对于本技术领域的技术人员来说,在不脱离本发明原理的前提下所作的任何修改、改进和等同替换等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1