背景技术
AVS(Audio Video Coding Standard)标准是《信息技术先进音视频编码》系列标准的简称,是由我国自主提出的第一个音视频编码标准,其在压缩效率上是MPEG2的2.4倍,与H.264相当。
在AVS视频编码标准中规定了一个总体技术框架,包括八大技术模块:变换、量化、帧内预测、变长编码、环路滤波器、帧间预测、熵编码器和场编码。其中,变换算法采用了基于8×8块的整数离散余弦变换DCT。由于是分别对每个块进行DCT变换,块与块之间的像素相关性被忽略了。在对每个块的DCT系数进行量化时,要将DCT变换后的系数除以量化系数后取整,因此丢弃了一些对图像质量影响不大的高频分量。但当压缩率较高的时候就会丢失块边缘的大量高频信息,造成重建图像中块的边界处出现不连续的跳变,即块效应。为了减小块效应,改善图像质量,AVS采用了环路滤波来消除用于帧间预测的参考帧中由于量化、运动补偿以及帧内预测而产生的图像块噪声,以增强主观和客观视频质量。环路滤波的应用在不影响压缩效率的前提下使图像质量有了很大的改善。但是与此同时,解码端的计算复杂度也增大了很多,基于宏块的滤波处理过程消耗了大量的时钟周期,同时也增大了片上存储器资源,并对系统的带宽也带来了一定的影响。
根据对AVS中环路滤波算法的描述,如何减少与片外存储器之间的数据交换以及快速有效地调整待滤波的数据,成为提高滤波速率、实现实时性解码的关键。对于整个AVS系统来说,实际需要带宽等于从片外存储器请求的数据占用带宽与向片外存储器输出数据占用的带宽之和。由于总线本身的利用效率因素,在一定的时钟频率下,系统实际可用的带宽是很有限的。运动补偿已经占用了大部分的带宽资源从片外存储器请求数据,所以在环路滤波模块中需要适当地设计存储策略,使本模块在能够完成环路滤波处理的同时占用最小的带宽,减少片上存储器资源,并尽量减少每个宏块滤波操作所需的时钟数。
在AVS标准中,环路滤波器作用于一个宏块的每个8×8块的边界。以亮度块为例,对于一个宏块各边界的滤波顺序为:首先滤波两条垂直边,再将垂直边滤波结束后的中间数据转置,然后再进行两条水平边的滤波。如图1所示,按照4:2:0图像格式,AVS标准中所规定的滤波顺序为:
亮度:BsV00->BsV10->BsV01->BsV11->BsH00->BsH01->BsH10->BsH11;
色度:BsV00->BsV10->BsH00->BsH01
这种滤波方式的缺点是需要存储多达整个宏块的数据,即需要12×8×64bits的片上存储器,以暂存整个宏块的中间滤波数据,因此,产生了很大的存储容量,大大增加了片上资源。另外,会造成对8×8的数据块的重复性读取,引起高的数据带宽;并且每个宏块滤波操作所需的时钟数目多达293。
为了解决这一问题,在不违背协议的前提下可以在进行完某数据块的垂直边界滤波后直接对该数据块的水平边界进行滤波,以亮度块为例,其滤波顺序为:
BsV00->BsV01->BsH00->BsH01->BsV10->BsV11->BsH10->BsH11
这种滤波方式在基本不增加时钟数目(其时钟数目为316)的前提下明显减少了片上存储器资源。但是,由于其将滤波中的左宏块中间数据放在了片外,这样便增加了直接存取存储器DMA(Direct Memory Access)的读写(4×8×64bits),增加了对数据带宽的要求。但是,如果将左宏块中间数据放在片内,在不增加其它资源的情况下又会造成片上暂存器的使用冲突。
为此,如何解决存储器资源和数据带宽的冲突,并大幅度减少滤波过程中每个宏块所需的时钟数是目前众多高校、科研院所及各大公司致力于解决的主要问题之一。
发明内容
本发明为了解决现有环路滤波方法所存在的存储器资源和数据带宽的冲突问题,提供了一种全新的环路滤波方法,通过调整滤波顺序,在不增加对系统带宽需求的前提下,减少了片上存储器资源,并尽可能地降低了处理每个宏块所需的时钟数目。
为解决上述技术问题,本发明采用以下技术方案予以实现:
一种环路滤波方法,所述环路滤波方法以宏块为基本单元,对其内部的4个数据子块的垂直边界和水平边界进行滤波,其滤波顺序为:
左上数据子块的垂直边界BsV00;
右上数据子块的垂直边界BsV01;
左上数据子块的水平边界BsH00;
右上数据子块的水平边界BsH01;
左下数据子块的垂直边界BsV10;
右下数据子块的垂直边界BsV11;
右下数据子块的水平边界BsH11;
左下数据子块的水平边界BsH10。
通过调整滤波顺序,可显著降低片上存储器容量和处理每个宏块所需的时钟数目。
其中,在对当前宏块的边界BsH11执行完滤波操作后,右上数据子块和右下数据子块的数据作为中间数据直接存储于环路滤波器的片上存储器中,而不是像现有技术那样存储于外部存储器中,这样便减少了滤波过程中环路滤波器与外部存储器之间读写数据的次数,从而降低了对数据带宽的要求。
由于在对当前宏块的边界BsH11执行完滤波操作后,存储于片上存储器的右上数据子块和右下数据子块的中间数据未经转置便直接存储,因此,在对下一宏块执行边界滤波操作时,所述当前宏块的右上数据子块和右下数据子块的中间数据经转置后参与下一宏块垂直边界的滤波运算。
进一步的,在对所述下一宏块的左上数据子块的垂直边界执行完滤波操作后,所述当前宏块的右上数据子块的数据作为最终数据存储于外部存储器;在对所述下一宏块的左下数据子块的垂直边界执行完滤波操作后,所述当前宏块的右下数据子块的数据作为最终数据存储于外部存储器。
基于上述环路滤波方法,本发明又提供了一种环路滤波器,包括控制单元、存储器和滤波器,所述控制单元对当前宏块的各边界按照左上数据子块的垂直边界BsV00->右上数据子块的垂直边界BsV01->左上数据子块的水平边界BsH00->右上数据子块的水平边界BsH01->左下数据子块的垂直边界BsV10->右下数据子块的垂直边界BsV11->右下数据子块的水平边界BsH11->左下数据子块的水平边界BsH10的滤波顺序控制输入到所述滤波器的数据。
进一步的,在所述存储器中包含有一左宏块数据存储器,在对当前宏块进行滤波操作前,对左宏块中与所述当前宏块相邻的两个数据子块进行存储;而在对当前宏块的边界BsH11执行完滤波操作后,右上数据子块和右下数据子块的数据作为中间数据直接存储于所述左宏块数据存储器中,以用于对下一宏块垂直边界的滤波,直到所述下一宏块的左上数据子块和左下数据子块执行完垂直滤波操作后,作为最终数据输出到外部存储器。这样可以减少环路滤波器与外部存储器之间存取数据的次数,进而达到节约数据带宽的目的。
又进一步的,在所述存储器中还包含有一暂存器和一转置寄存器。所述暂存器在滤波进行的过程中暂时存储滤波的中间结果。所述转置寄存器对输入的数据块进行转置运算并暂存;在对下一宏块执行边界滤波操作时,所述当前宏块的右上数据子块和右下数据子块的中间数据首先进入所述的转置寄存器进行转置运算后,再输入到滤波器中参与滤波运算。
再进一步的,在所述存储器中还包含有一上块中间数据暂存器,在滤波操作开始以前对转置后的上宏块中与所述当前宏块相邻的两个数据子块进行存储;在当前宏块的边界BsH00执行完滤波操作后,对当前宏块的左上数据子块进行存储;在当前宏块的边界BsH01执行完滤波操作后,对当前宏块的右上数据子块进行存储。
与现有技术相比,本发明的优点和积极效果是:本发明的环路滤波方法通过调整滤波顺序,使每个宏块滤波操作所需的时钟数目显著减少,采用所述滤波方法的滤波器通过合理配置片上存储单元,在不增加对系统带宽需求的前提下,一定程度上减少了硬件资源,降低了设计成本,有效解决了现有环路滤波器所存在的存储器资源和数据带宽冲突的问题,可广泛应用于高清或者标清AVS解码芯片中。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细地描述。
在AVS标准中,环路滤波器作用于一幅图像中除图像边界和条带边界以外所有8×8块的边界,以16×16的宏块为基本单元按照光栅扫描的顺序进行处理,分别作用于亮度块和色度块。以亮度块为例,如图2所示,每个亮度块大小都为8×8,U0、U1是上宏块中与当前宏块相邻的两个数据子块,L1、L3是左宏块中与当前宏块相邻的两个数据子块,C0~C3是当前宏块的四个8×8数据子块。为了解决现有环路滤波方式所存在的诸多缺陷,本发明在不影响滤波正确性的前提下,将滤波顺序调整为:
BsV00->BsV01->BsH00->BsH01->BsV10->BsV11->BsH11->BsH10
其中,BsV00表示当前宏块中左上数据子块的垂直边界;BsV01表示当前宏块中右上数据子块的垂直边界;BsH00表示当前宏块中左上数据子块的水平边界;BsH01表示当前宏块中右上数据子块的水平边界;BsV10表示当前宏块中左下数据子块的垂直边界;BsV11表示当前宏块中右下数据子块的垂直边界;Bs H11表示当前宏块中右下数据子块的水平边界;Bs H10表示当前宏块中左下数据子块的水平边界。这样便可以解决存储器资源与数据带宽之间的冲突,并大幅度地减少滤波中每个宏块所需的时钟数目。
表1显示了在所述滤波顺序下,各个数据子块在存储器中的调用情况。在对边界BsV00滤波时,首先读入L0、C0数据子块,滤波后得到L0-1和C0-1数据块,其中,L0-1是左宏块滤波的最终结果,可以直接输出;而C0-1数据块在存储器中暂存,作为下一个边界BsV01的输入;在对边界BsV01进行滤波时,还需要读入另一个数据子块C1。由此,两个输入数据只需读入一个数据子块的数据,另外一个已经在当前处理的存储器中了。通过这样的滤波顺序可以减少表1中斜体字部分数据的读入操作,节省数据搬移时间。
表1
为了减少环路滤波器与外部存储器之间存取数据的次数,进而达到节约数据带宽的目的,在本发明所设计的环路滤波器中主要包括以下部分:
1、控制单元:
在滤波操作开始之前,首先读取图像类型、宏块类型、参考图像、运动矢量、量化参数、alpha_c_offset、beta_offset等参数,然后计算边界滤波强度Bs、边界阈值α、β、裁减参数C;在滤波进行的过程中,控制滤波的顺序,选择各边界滤波进行过程中数据的流向和各边界滤波时需要的边界滤波强度Bs、边界阈值α、β、裁减参数C,以及产生读写SRAM的地址。
在环路滤波时,对于每个8×8数据子块之间的块边界都定义了一个边界滤波强度Bs,根据相应的滤波强度Bs选择不同的滤波器进行滤波处理。边界滤波强度Bs采用如下方式进行计算:只要两个相邻数据块中有一个块是帧内编码块,则Bs=2;否则,如果两个块有不同的参考图像或者有相同的参考图像,但是两块的运动矢量差大于一个像素,则Bs=1;若上述情况都不满足,则Bs=0。色度块的滤波强度与相应的亮度块的滤波强度一致。
边界阈值α、β和裁减参数C可以根据两个相邻块的量化参数QP的平均值QPav和两个参数alpha_c_offset、beta_offset通过查找索引IndexA和IndexB得到。其中,两个块的平均值QPav=(QPP+QPq+1)>>1,“>>”表示右移操作,其后值为右移操作次数;索引IndexA和IndexB为:
IndexA=Clip3(0,63,QPav+AlphaCoffset);
IndexB=Clip3(0,63,QPav+Beta0ffset)。
在滤波时,边界像素值的更新是根据边界滤波强度Bs的取值、边界阈值α、β、裁减参数C以及块的类型(亮度块还是色度块)等条件进行自适应地更新。
2、8×8转置寄存器:
用于将输入的8×8大小的数据块进行转置运算并暂存,使用一种行进列出的方式实现。
3、8×8暂存器:
在滤波进行的过程中暂时存储滤波的中间结果,以缩短滤波时的等待时间。
4、16×64bits的SRAM:
存储两个8×8的数据子块,共有16个单元,每个单元存储的是每个块一行8个像素点共64bits的数据。滤波操作开始之前存储的是转置后的U2、U3数据子块的数据;在当前宏块的边界BsH00执行完滤波操作后,对当前宏块的左上数据子块C0进行暂存;在当前宏块的边界BsH01执行完滤波操作后,对当前宏块的右上数据子块C1进行暂存;此时的C0、C1为转置后的中间数据。
5、16×64bits的左宏块数据存储器:
在对当前宏块进行滤波操作前,用于暂存左宏块中L1、L3的中间数据,此时的L1、L3数据为左宏块滤波结束后经转置的中间数据;而在对当前宏块的边界BsH11执行完滤波操作后,C1、C3数据子块的数据作为中间数据直接存储于所述的左宏块数据存储器中,以用于对下一宏块垂直边界的滤波,直到所述下一宏块的左上数据子块和左下数据子块执行完垂直滤波操作后,作为最终数据输出到外部存储器。
通过增设左宏块数据存储器,可以减少环路滤波器与外部存储器之间存取数据的次数,进而达到节约数据带宽的目的。
6、滤波器:
根据边界滤波强度Bs、边界阈值α、β和裁减参数C对相应的边界进行滤波。具体滤波操作为现有技术,本发明在此不进行具体描述。
图3为本发明所揭示的环路滤波器硬件结构的一种实施例的原理框图。其中,上块中间数据暂存器采用所述的16×64bits大小的SRAM实现,暂存当前宏块中C0、C1子块转置后的中间数据;左上数据寄存器只用来暂存和转置上宏块中与当前宏块左上数据子块相邻的数据子块,即图2中的U2,既能起到暂存作用又能完成数据的转置,通过采用分时复用技术,使其占用资源很小。
下面具体阐述所述环路滤波器的具体滤波过程:
在滤波操作开始之前,首先由控制单元获取边界滤波强度Bs,当前宏块的Bs值根据上宏块/左宏块信息与当前宏块信息计算得到;然后根据读入的其他宏块信息计算边界阈值α、β和裁减参数C;计算的同时将块U2和块U3的数据从外部存储器中读进来,即从图3中的上行宏块数据存储器中读进来;进而用转置寄存器将读进来的块U0和块U1的数据进行转置运算,并将转置后的块U0和块U1数据存入上块中间数据暂存器。具体过程是:
a)将上宏块中U2的数据读入转置寄存器;
b)将转置寄存器中的U2数据存入上块中间数据暂存器,同时将上宏块中U3数据读入转置寄存器;
c)将转置寄存器中的U3数据存入上块中间数据暂存器,同时将左宏块中L1数据由左宏块数据存储器读入转置寄存器,对其进行转置运算后暂存,以等待参与当前宏块中对垂直边界BsV00的滤波。
以上是滤波开始之前的准备工作,下面具体进入对当前宏块各边界的滤波操作过程:
(1)对垂直边界BsV00的滤波:
当需要的参数计算完毕后,由控制单元启动图2中边界BsV00的滤波,块L1的数据从转置暂存器进入滤波器,而块C0的数据(即图3中的重建数据)从外部存储器直接读入滤波器进行滤波;边界BsV00的滤波结束后,块L1的数据直接送入滤波数据暂存器,并存入滤波数据外部存储器,块C0的数据进入暂存器,等待边界BsV01的滤波;
(2)对垂直边界BsV01的滤波:
由控制单元启动边界BsV01的滤波,并选择相应的滤波强度Bs、边界阈值α、β和裁剪系数C;块C0的数据从暂存器直接进入滤波器,块C1的数据(即图3中的重建数据)从外部存储器直接读入滤波器进行滤波;边界BsV01滤波结束后,块C0的数据进入转置寄存器T1进行转置,等待边界BsH00的滤波,块C1的数据先进入暂存器暂存;
(3)对水平边界BsH00的滤波:
块C0的数据转置完毕后,由控制单元启动边界BsH00的滤波;块U2的数据从上块中间数据暂存器中进入滤波器,块C0的数据从转置寄存器进入滤波器,同时块C1的数据进入转置寄存器进行转置,等待边界BsH01的滤波;边界BsH00的滤波结束后,块C0的数据进入上块中间数据暂存器进行存储,等待边界BsH10的滤波,块U2的数据进入左上数据寄存器完成转置后,作为最终数据直接送入滤波数据暂存器,并存入滤波数据外部存储器。
(4)对水平边界BsH01的滤波:
由控制单元启动边界BsH01的滤波,块C1的数据从转置寄存器进入滤波器,块U3的数据从上块中间数据暂存器进入滤波器进行滤波;边界BsH01滤波结束后,块C1的数据进入上块中间数据暂存器进行存储,等待边界Bs H11的滤波,块U3的数据进入转置寄存器完成转置后,作为最终数据直接送入滤波数据暂存器,并存入滤波数据外部存储器。
边界BsV00、BsV01、BsH00、BsH01滤波结束后,上块中间数据暂存器中存储的更新数据为经转置后的块C0、C1的数据。
(5)对垂直边界BsV10的滤波:
边界BsV10的滤波方式和BsV00边界的滤波方式相同,即由控制单元启动边界BsV10的滤波,并选择相应的滤波强度Bs、边界阈值α、β和裁剪系数C;块L3的数据由左宏块数据存储器读入转置寄存器,对其进行转置运算后进入滤波器,而块C2的数据(即图3中的重建数据)从外部存储器直接读入滤波器进行滤波;边界BsV10的滤波结束后,块L3的数据直接送入滤波数据暂存器,并存入滤波数据外部存储器,块C2的数据进入暂存器,等待边界BsV11的滤波;
(6)对垂直边界BsV11的滤波:
由控制单元启动边界BsV11的滤波,并选择相应的滤波强度Bs、边界阈值α、β和裁剪系数C;块C2的数据从暂存器直接进入滤波器,块C 3的数据(即图3中的重建数据)从外部存储器直接读入滤波器进行滤波;边界BsV11滤波结束后,块C3的数据进入转置寄存器T1进行转置,等待边界BsH11的滤波,块C2的数据先进入暂存器暂存;
(7)对水平边界BsH11的滤波:
块C3的数据转置完毕后,由控制单元启动边界BsH11的滤波,块C1的数据从上块中间数据暂存器中进入滤波器,块C3的数据从转置寄存器进入滤波器,同时块C2的数据进入转置寄存器进行转置,等待边界BsH10的滤波;边界BsH11的滤波结束后,块C1的数据进入左宏块数据存储器进行存储,以等待下一宏块垂直边界BsV00的滤波,块C3的数据进入暂存器,然后进入左宏块数据存储器进行存储,以等待下一宏块垂直边界BsV10的滤波;
此处将C1、C3未经转置的数据直接存储到左宏块数据存储器,是因为C1和C3的数据只是中间滤波数据,不是最终的滤波数据,等待下一个宏块的垂直边界BsV00和BsV10滤波结束后才可得到最终数据,因此左宏块数据存储器中存储的只是滤波过程中的中间结果而已。这种存储方式相比现有技术中将C1、C3的中间数据转置后存储于外部存储器,在对下一宏块进行垂直滤波时再从外部存储器读入的设计方式而言,可有助于减少滤波过程所需的时钟数目,避免与外部存储器之间进行数据交换,节省数据带宽;
(8)对水平边界BsH10的滤波:
由控制单元启动边界BsH10的滤波,块C2的数据从转置寄存器进入滤波器,块C0的数据从上块中间数据暂存器中进入滤波器;边界BsH10滤波结束后,块C0的数据进入转置寄存器进行转置,然后直接送入滤波数据暂存器,并存入滤波数据外部存储器;块C2的数据首先进入暂存器,然后再进入转置寄存器进行转置,最后直接送入滤波数据暂存器,并存入滤波数据外部存储器。
色度块的滤波过程和亮度块类似,并且在滤波过程中首先处理亮度块,后处理色度块,这样亮度块和色度块可以复用一个SRAM而不需要增加额外的存储单元。
本发明的环路滤波方法及环路滤波器的硬件设计方案,通过合理的选择各边界滤波的顺序,适当配置硬件结构,在不增加对系统带宽要求的前提下,一定程度上减少了硬件资源、降低了设计成本,可广泛应用于高清和标清AVS解码芯片中。
当然,以上所述仅是本发明的一种优选实施方式而已,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。