一种提高H264编码16x16预测模式DCT运算速度的硬件实现方法与流程

文档序号:16008586发布日期:2018-11-20 20:22阅读:1076来源:国知局

本发明涉及H264编码硬件实现领域,特别涉及16x16预测模式的DCT硬件实现。



背景技术:

随着视频编解码的不断发展,应用也越来越广,硬件需要支持的视频显示格式也越来越多,720p30fps,720p60fps,1080p30fps,1080p60fps,4k30fps 等。这就对硬件设计需要的处理速度越来越高。

目前视频编码性能的提升的瓶颈,主要是熵编码,帧内预测,帧间预测,变换量化,反变换反量化这几大块。而目前编码的主流设计方法,为了节约硬件成本,将帧内预测、变换量化、反变换反量化,重构做到同一个流水级,这就更加抑制了硬件编码的性能。

H264编码的一般变换包括4x4DCT,8x8DCT以及16x16预测模式DCT。16x16预测模式DCT需要将16x16的宏块分成16个4x4块,并依次对16个4x4块做DCT,并抽取每一个4x4块做完DCT之后的矩阵的左上角dc系数,由16个dc系数组成一个4x4矩阵,再做变换量化。而16x16在做反变换(IDCT)的时候,需要等到16个dc系数的反变换量化的结果。如果按照算法的流程去设计,则16x16预测模式DCT的处理时间将成为流水级性能的瓶颈。所以迫切需要一种提高视频编码16x16预测模式DCT运算速度的硬件实现方法。



技术实现要素:

本发明提出了一种提高H264编码16x16预测模式DCT运算速度的硬件实现方法,能有效减少16x16预测模式DCT运算的时间,从而减少这级流水结构的整体时间,提高H264编码硬件实现的性能。同时16x16预测模式DCT运算电路共用4x4DCT电路,降低了硬件成本。

本发明要求处理的目标系统满足以下条件:(1)帧内预测、变换量化、反变换反量化,重构同一个流水级设计。(2)16x16和4x4每种预测模式的求残差过程并行进行,16x16预测模式与4x4预测模式的变换量化、重构回路串行进行。(3)需要保存16x16每种预测模式的hadamard变换过程中产生的16个点的和。(4)4x4hadsad电路可以通过选择切换成4x4hadamard电路。

本发明采用技术方案是:4x4帧内预测的9种预测模式,采用三套并行预测,对于一个4x4块,9种预测模式得到最优的cost,只需要6个周期,随后对最优cost对应的预测模式得到的残差进行重构运算,做变换量化,反量化反变换,重构。其中变换量化到反量化反变换整个过程需要7个周期。16x16的帧内预测得到预测值与原像素点值的残差之后,在4x4帧内预测在做变换到反变换期间,复用4x4算cost的电路。16x16的帧内预测每3个4x4块并行预测,每个4x4块的四种预测模式流水进行预测。全部复用4x4的并行算cost预测电路。

在得到16x16的4种预测模式对应的4组16个4x4分块的和之后,通过得到的最优cost,选择其中一组,将该组的16个点全部右移一位,就得到16个4x4做完DCT之后的dc系数矩阵。再进行hadamard变换,dc量化,dc反hadamard变换,dc反量化,这部分硬件上也是复用4x4的DCT,Q,IDCT,IQ 电路。等4x4,16x16,8x8各自算出了最优的cost,16x16的预测模式的dc变换之后的值也在这之前就得到了。

本发明的有益效果是:(1)16x16预测模式的dc系数的变换,在16x16宏块的最优预测模式得到之前就能求出来,使得16x16预测模式做DCT得时候,不用叠加上算dc系数变换的这部分时间,有效提高了16x16预测模式DCT运算速度。(2)16x16与4x4预测模式串行交替进行,复用大部分电路,而没有增加各自算最优cost的时间,有效减少了硬件面积,而又没有使得性能下降。(3)4x4的hadsad变换电路与4x4的hadamard变换电路通过一个选择信号就能灵活切换,增加了硬件设计的灵活性,并减少了硬件面积。

附图说明

图1:一般设计结构跟本设计方法在结构上的对比图。

图2:采用本方法的求16x16的预测模式,16x16的dc系数的变换量化反变换反量化结构图。

图3:4x4求预测模式,DCT-Q-IQ-IDCT(DCT变换-量化-反量化-DCT反变换)的流水示意图,以及16x16求预测模式,复用4x4求预测模式电路的流水示意图。

图4:4x4DCT,4x4IDCT,4x4HAD(哈达玛变换),4x4IHAD,4x4HAD_SAD等变换蝶形算法。

具体实施方式

本发明的具体实现,详细描述如下:从16x16预测模式到重构整个结构来看,如图1所示,其采用本设计方法部分,先是从sram中读取每一个4x4块的原始像素,通过算最优cost电路(S103),就能得到16x16最优预测模式,并得到对应的16个4x4块dc变换(HAD-Q-IHAD-IQ(哈达玛变换-量化-反哈达玛变换-反量化))后的值。如果最终该16x16宏块的最终最优预测模式是16x16,则需要将该宏块分成16个4x4块,分别做DCT-Q-IQ-IDCT。采用本设计方法能将每个4x4块的DCT-Q-IQ-IDCT流水进行,其中在IDCT的时候,需要4x4块的经过变换后的ac系数以及dc系数,又因为dc系数的变换在S103模块已经得到,通过S104直接传输到IDCT模块。所以不会影响每个4x4块从变换到重构的流水进行。而按照算法流程设计,读取数据,算最优cost(S101),在16x16的变换重构通路,需要先求出16个4x4块DCT的结果,再将每个4x4的变换后的矩阵左上角的dc系数抽取出来,组成新的矩阵,再做HAD-Q-IHAD-IQ(S102),然后才能做IDCT,重构。所以这种设计方法比本设计方法多了算dc系数变换的时间。

16x16预测模式电路的具体实现,如图2所示。16x16按4x4分成16个块,每三个块并行执行(S202),每个块内部的4种预测模式流水运行(S201),具体结构如图3所示。对16x16其中的一个4x4块,从sram读取数据,选择4种预测模式(DC的三种预测模式合并为一种,由16x16整个宏块左边以及上边是否可以参考为条件选择)的其中一种预测模式,进行预测值减去原像素值得到的残差绝对值,进行hadamard变换,hadamard采用蝶形算法设计,共用4x4的hadsad蝶形结构,如图4。Hadsad(HAD_SAD)蝶形结构的行变换跟列变换的算法结构一样,其列变换跟hadamard(HAD)的蝶形算法区别在最后的结果,hadsad的S405,S406刚好跟had的S402*2,S403*2顺序掉换一下,所以电路复用上,只需要把这个不一致的地方做成可选择就行。从图4也可以看出4x4DCT跟4x4HAD的蝶形算法结构区别在,中间的蝶形参数有差异以及列变换的最后结果是否除以2。而4x4IHAD跟4x4IDCT的蝶形算法结构仅仅是蝶形参数不一样。所以4x4DCT,4x4HAD,4x4hadsad之间都可以互相切换。另外比较重要的一点是,从4x4DCT蝶形算法可以看出,DCT变换之后得到左上角的点,其实就是4x4矩阵16个点的和。4x4HAD_SAD(hadsad)的S404也是该矩阵16个点的和,4x4HAD的S401未除以2之前也是该矩阵16个点的和。利用该特征,在16x16做每一个4x4块预测算cost的时候,需要进行4x4HAD(S205)变换,这时候保存其4x4HAD的列变换之后左上角未除以2之前的中间结果,其实就是该矩阵4x4DCT变换之后的结果。所以就可以在16x16做预测的时候,得到每个4x4矩阵的DCT的dc系数。等16x16预测完,就得到16个4x4DCT变换后的4x4dc系数矩阵,保存在S203,然后在4x4预测模式做预测的时候,复用其4x4DCT-Q-IQ-IDCT电路结构,做16x16预测模式dc系数的HAD(S204)-Q-IHAD-IQ,得到的结果保存到S206。因为整个宏块的预测流水结构,16x16的预测模式是每3个4x4块并行进行,预测速度比4x4预测模式要快,不会影响到整个宏块的最优预测速度。等得到整个16x16宏块的最优预测模式,如果决策到是16x16预测模式是最优,则复用4x4DCT-Q-IQ-IDCT-REC电路对每一个拆分之后的4x4残差矩阵做运算,其中在做IDCT的时候,需要将左上角的系数替换成dc系数变换之后的值,即S206中保存的值输入给S207。

16x16预测模式采用复用4x4预测模式结构进行4x4块之间并行运算,预测模式之间流水运算,如图3所示。4x4预测模式每一个4x4块半流水串行运算,9种预测模式,分成3x3结构,每3种并行运算,3种之间流水运算。S301为求预测值并得到残差值,S302做hadsad变换,S303算cost,并依次比较每种预测模式的cost,保留最小cost。S304是将每3种预测模式的最优cost再比较,得到9种预测模式的最优cost。然后通过最优cost对应的预测模式求出残差值进行4x4DCT-Q-IQ-IDCT(S305),最后进行重构运算(S309)。16x16预测模式的每一个4x4块4种预测模式(dc,vertical,horizontal,plane(S310))流水进行,S306的求残差电路复用S301,S307的hadamard电路复用S302,S308的求预测电路复用S303。

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