新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于DSP和FPGA的视频编码器

基于DSP和FPGA的视频编码器

作者:时间:2013-09-13来源:网络收藏

2 视频压缩算法优化

(1)MPEG-4数据流优化设计

实验表明,如果代码和代码要访问的数据在C6201片内存储区(PRAM和DRAM),其代码执行速度要比代码和数据在片外同步SDRAM中平均快17倍(片内总线宽度为256位,数据访问为1个CPU周期)。因此,将执行代码和数据放到片内将大大提高程序的运行速度。

在MPEG-4算法中,由于没有考虑存储器的限制,算法每次读入一帧YUV数据进行压缩编码。但对于C6201来说,片内只有64K字节DRAM,不可能一次将一帧数据读到片内存储器进行压缩。如果将一帧数据一次读到片外存储器(SDRAM)中进行压缩,又会大大降低代码的执行速度,因此,我们对视频压缩算法进行了改进,一次对一个切片(slice)数据进行压缩编码,并将压缩码流数据直接送入到发送缓冲区中。

编码器一次将一个切片的YUV数据(当前帧)读入到片内存储器中,然后根据计算决定切片宏块的编码类型(帧内/帧间编码)。如果宏块进行帧内编码,则YUV数据被分成8×8的像素块(一个宏块包含4个Y分量像素块和2个UV分量像素块)进行DCT变化,以消除图像空间冗余信息。DCT变化后的系数经过量化后进行游程编码(RunLengthCoding即RLC)和变长编码(VariableLengthCoding,即VLC),变长编码的结果送入到视频发送缓冲区中。与此同时,量化后的DCT系数经过反量化(结果放入内存B中)和反DCT过程形成重建帧,重建帧用作下一帧的参考帧。

如果宏块进行帧间编码,则以宏块为单位进行运动估计,根据运动估计的结果建立预测帧。当前帧和预测帧的差值形成了残差帧(residue frame),残差帧的编码过程与帧内编码过程相同。

(2)宏块编码类型判别算法

在MPEG-4算法中采用了快速运动估计算法,但是在进行宏块编码类型判别时计算量仍然很大。为此,本文提出了基于宏块空间复杂度的判别算法MTJBSC,进一步降低了运动估计过程中的计算量。

在编码P帧宏块的时候,首先要决定宏块是进行帧内编码还是帧间编码。在标准MPEG-4算法中是通过以下方法决定的[5]:

设参考宏块的像素值(Y分量值,以下同)用P(x,y)表示,当前宏块的像素值用C(x,y)表示,x,y表示宏块的纵、横坐标,M,N表示宏块的宽和高。当前宏块像素值的方差用EVAR表示,其值为

参考宏块和当前宏块的方差用EVMC表示,其值为

EVMC值越小(比如EVMC

if(EVMC>EVARandEVMC≥9)then帧内编码else帧间编码

显然,在MPEG-4算法中,为了判断宏块的编码模式进行了大量的计算(对于每一个P帧宏块都要进行上面的计算)。为了减少计算复杂度,本文提出了基于宏块空间复杂度(EMBC)的宏块类型判断(MTJBSC)算法,用以判断P帧宏块的帧内/帧间编码模式。

定义宏块的空间复杂度为水平方向上相邻像素差值的绝对值之和,即

在基于帧间差原理进行视频压缩的MPEG标准中,一般都是采用绝对差总合(ESAD)来进行运动估计的。在MPEG标准中,宏块的ESAD值定义为

式中:m,n为该宏块的运动向量。

根据上述定义,MTJBSC算法可简单描述为:

如果宏块的ESAD小于其EMBC,则该P帧宏块进行帧间编码;否则进行帧内编码。实验表明,在压缩质量和压缩输出码率均没有大的变动的情况下,该算法有效降低了的计算复杂度,编码器的压缩帧率(f/s)得到明显提高。



关键词: DSP FPGA 视频编码器

评论


相关推荐

技术专区

关闭