一种适用于运动估计的片内存储的方法

文档序号:7646317阅读:158来源:国知局
专利名称:一种适用于运动估计的片内存储的方法
技术领域
本发明属于视频编解码技术领域,特别是一种运动估计时能加快速度、减小带宽、节省存储的片内存储的方法。

背景技术
随着信息技术的发展,视频的应用越来越广泛。视频监控、视频会议、视频点播、数字电视、手机电视、IPTV、可视电话、激光视盘等,构成了一个巨大的市场。视频编解码算法和标准也在不断进步,其中的AVS和H.264是目前国内、国际代表第二代视频编解码先进技术的两大标准,有着良好的市场前景。由于AVS和H.264都采用了多参考帧、多尺寸块、1/4子像素精度等技术,在获得低码率、高质量的同时,也极大地增加了编码器中运动估计的计算复杂度和内存带宽。运动估计由大规模集成电路实现的时候,对标清/高清运动幅度大的视频,内存带宽成为运动估计的主要瓶颈。
做运动估计时,有的将高或宽不能被16整除的图像扩边成能被16整除的图像,存储在片外内存;有的根据运动估计的搜索范围对整像素进行扩边,存储在片外内存;有的甚至将差值出来的子像素及其扩边,也存储在片外内存;匹配时直接从存储参考帧的片外内存读取数据。这样操作,内存带宽是巨大的,实时编码几乎是不可能的。目前已有多种降低内存带宽的方法,其共同点都是将参考帧的像素由片外内存预取至片内内存。有的对每个宏块的搜索窗口都预取一次,尽管减少了误缓冲(mis-cache)的次数,加快了数据处理的速度,但对内存带宽来说是一种巨大的浪费。有的一次将若干行的宏块读取至片内,这对低分辨率的手机视频还可以,对高分辨率的标清/高清图像则是行不通的,因为它占据的片内存储太大了。很多有关内存带宽的技术仅考虑整像素运动估计,对子像素运动估计、运动补偿是另行处理的,这就需要占据额外的内存带宽和片内存储,而有的子像素运动估计占据的片内存储甚至比整像素运动估计占据的片内存储还多。


发明内容
本发明的目的在于提供一种适用于运动估计的片内存储的方法,可以对不同架构进行相应配置,对整像素运动估计、子像素运动估计、运动补偿统一处理,并能更好地加快数据处理速度、减小内存带宽、减少片内存储。
为了达到上述目的,本发明的技术方案如下 一种适用于运动估计的片内存储的方法,通过一个环柱状片内空间,来实现数据的预取、数据和空间的重用、运动估计和运动补偿,所述环柱的周长和高都是以像素为单位,所述周长为EXT+2*SRX+16+2*SRX+EXT+H*16,高为EXT+2*SRY+16+2*SRY+EXT+(V-1)*16;其中SRX为X方向的搜索范围,SRY为Y方向的搜索范围,EXT是1/4像素插值需要的最优整像素点上、下、左、右的整像素数。
采用上述方法,通过将数据预取至上述结构的环柱状空间,可以减小mis-cache的次数以加快数据处理的速度,同时能减小内存带宽以减少功耗,并减少片内、片外的存储空间。



图1显示了被循环重用的环柱状片内空间,及空间中每次预取的一个个竖向宏块条。
图2示出了环柱展开成的长方形,整像素运动估计的搜索窗口,窗口中整像素运动估计原点、预测点、匹配点之间的关系,子像素运动估计和运动补偿所需的窗口外像素EXT,右侧预留的H个竖向宏块条,底侧用于同时做V行宏块编码所需的V-1个横向宏块条。
图3A-3C示出了对一行或两行宏块条同时编码时,第一个宏块即mbx=0时数据预取的种情况。其中图3A示出了最初几行宏块的情形;图3B示出了中间大多数宏块行的情形;图3C示出了最后几行宏块行的情形。
图4A1-4C3示出了对一行或两行宏块编码时,mbx!=0时数据预取的情况。其中图4A1-4A3示出了最初几行宏块的情形;图4B1-4B3示出了中间大多数宏块行的情形;图4C1-4C3示出了最后几行宏块行的情形。其中图4A1、4B1、4C1示出了每行中间大部分宏块编码时,宏块条横向充满的情形,图4A2、4B2、4C2示出了每行后部某一宏块编码时,宏块条横向不充满的情形,图4A3、4B3、4C3示出了每行最末几个宏块编码时,宏块条没有预取数据的情形。
图5A-5B示出了相邻宏块编码做运动估计时,重用片内数据的情形,图5A是水平方向相邻宏块的重用,图5B是垂直方向相邻宏块的重用。
图6A-6B示出了整像素运动估计匹配时,相邻像素间数据的重用,图6A是水平方向相邻像素间数据的重用,图6B是垂直方向相邻像间数据的重用。
图7示出了环柱状片内空间这一装置在视频编码系统中的位置。参考帧(reference frames)存储在片外内存,每次将所需的像素预取至环柱状片内空间(cache),利用空间里的数据实现运动估计(ME)和运动补偿(MC)的算法。

具体实施例方式 下面根据图1至图7,给出本发明的较佳实施例,并予以详细描述,使能更好地理解本发明的功能、特点。
本发明设计了一个环柱状片内空间,以实现数据的预取、数据的重用、空间的重用、整像素的运动估计、子像素的运动估计、运动补偿,从而达到加快速度、减小带宽、节省存储的目的。
环柱状片内空间是这样的环柱的周长=EXT+2*SRX+16+2*SRX+EXT+H*16,环柱的高=EXT+2*SRY+16+2*SRY+EXT+(V-1)*16,16是宏块的宽和高。SRX为X方向的搜索范围,SRY为Y方向的搜索范围。EXT是1/4像素插值需要的最优整像素点上下左右的整像素数,对AVS和h.264,EXT=3。H=1、2、3,V=1、2。参见附图1环柱状片内空间、附图2环柱展开成的长方形。
环柱状空间的变量H、V、EXT、SRX、SRY,对不同的架构,甚至不同的标准,可以做相应的配置。无论对什么样的架构,PC、DSP还是VLSI,若mby每次增1,即对一行宏块编码,V=1,若mby每次增2,即同时对二行宏块编码,V=2。对标清V=1或2,对高清,V=2,V=2的意义在于更有效地减小内存带宽。V=1时,对PC、DSP架构,H=1,表明当前宏块的运动估计与下一宏块的数据预取可以并行执行;对VLSI的流水线架构,H=2,目的在于当前宏块的子像素运动估计和运动补偿的像素不被下一宏块的整像素运动估计的像素覆盖掉,并且整像素运动估计时数据已被预取好。V=2时,对PC、DSP架构,H=2,两行宏块中第一行宏块的最初2个宏块要连续编码,并且随后宏块的运动估计与数据预取并行执行;对VLSI流水线架构,H=3,两行宏块中第一行宏块的最初3个宏块要连续编码,并且运动估计之前数据要预取好。EXT根据子像素的差值来配置,对AVS和H.264,EXT=3;对MPEG2和MPEG4-2,EXT=1。SRX、SRY,根据图像的运动幅度大小和编码器的资源合理配置,如SRX=SRY=16或SRX=32,SRY=16。
数据的预取是这样的设一幅图像的宽和高分别是width和height,(mbx,mby)是一幅图象的以宏块为单位的坐标,那么0<=mbx<ceil(width/16),0<=mby<ceil(height/16)。当mbx=0时,参见附图3数据的预取mbx=0,分A0<=mby<ceil((2*SRY+EXT)/16)、Bfloor((2*SRY+EXT)/16)<mby<ceil((height-(16+2*SRY+EXT+(V-1)*16))/16)、Cmby>floor((height-(16+2*SRY+EXT+(V-1)*16))/16)三种情形;由以下三步完成预取过程 第一步,将参考帧的像素预取至环柱状空间的相应位置,图中的灰色部分,这是一个水平方向16+2*SRX+EXT个像素、垂直方向EXT+2*SRY+16+2*SRY+EXT+(V-1)*16-(up_dy>0?up_dybot_dy>0?bot_dy0)个像素的矩形,其中up_dy=EXT+2*SRY-mby*16,bot_dy=mby*16+16+2*SRY+EXT-height。对情形A,up_dy>0,图中画出的是mby=0的情形;对情形B,up_dy<=0且bot_dy<=0;对清形C,bot_dy>0,图中画出的是mby=height/16-1且height被16整除的情形。
第二步,将预取的灰色区域的最左一列的每一个像素,向左平行扩写EXT+2*SRX个像素,这将形成一个水平方向EXT+2*SRX个像素、垂直方向EXT+2*SRY+16+2*SRY+EXT+(V-1)*16-(up_dy>0?up_dybot_dy>0?bot_dy0)个像素的矩形,up_dy、bot_dy同上。
第三步,用预取的最上一行像素(包括向左扩充的像素)垂直向上扩写至环柱状空间的顶部,或用预取的最下一行像素(包括向左扩充的像素)垂直向下扩写至环柱状空间的底部。对情形A,形成一个水平方向EXT+2*SRX+16+2*SRX+EXT个像素、垂直方向EXT+2*SRY-mby*16个像素的矩形;对情形B,灰色区域上、下方都没有空白区域,此时已经满足要求;对情形C,形成一个水平方向EXT+2*SRX+16+2*SRX+EXT个像素、垂直方向mby*16+16+2*SRY+EXT-height个像素的矩形。
当mbx!=0时,参见附图4数据的预取mbx!=0,分A1、A2、A3、B1、B2、B3、C1、C2、C3九种情形,A、B、C的条件与mbx=0时一样,1、2、3的条件分别是10<mbx<ceil((width-(2*SRX+EXT+16))/16);2floor((width-(2*SRX+EXT+16))/16)<mbx<ceil((width-(2*SRX+EXT))/16),3mbx>floor((width-(2*SRX+EXT))/16);由以下二步完成数据的预取过程 第一步、从参考帧预取数据至环柱状空间的相应位置,图中的灰色部分,这是一个水平方向x个像素宽、0<=x<=16、垂直方向EXT+2*SRY+16+2*SRY+EXT+(V-1)*16-(up_dy>0?up_dybot_dy>0?bot_dy0)个像素高的像素条,up_dy、bot_dy同上。对情形1,像素条每行水平方向的16个像素全部由片外预取至片内;对情形2,像素条每行水平方向仅预取到x0、0<x0<16个像素,则将每行最后预取的一个像素按水平方向右扩写x1个像素,使得x0+x1=16;对情形3,没有从片外预取到数据,则将左侧宏块条的最右一列像素水平向右扩写至16个像素。该步骤结束后,对每种情况都将获得一个16像素宽、EXT+2*SRY+16+2*SRY+EXT+(V-1)*16-(up_dy>0?up_dybot_dy>0?bot_dy0)像素高的宏块条。
第二步、用上一步骤获得的宏块条最上一行的16个像素垂直向上扩写至环柱的顶部,或用宏块条的最下一行16个像素向下扩写至环柱的底部。对情形A,向上扩写形成一个水平方向16个像素宽、垂直方向EXT+2*SRY-mby*16个像素高的宏块条;对情形B,不需要扩写;对情形C,向下扩写形成一个水平方向16个像素宽、垂直方向mby*16+16+2*SRY+EXT-height个像素高的宏块条。该步骤结束后,就得到了16像素宽、EXT+2*SRY+16+2*SRY+EXT+(V-1)*16像素高(环柱状高)的宏块条。
上面数据预取的过程,描述了如何将片外参考帧的像素预取到环柱状片内空间。无论width、height能不能被16整除,不需要做任何处理,都隐含在具体的实现中了,也没有根据搜索范围进行整像素扩边,预取的仅是整像素,子像素是不存储的,这既减少了存储,也减小了预取数据的带宽。内存带宽的减小,数据的重用,空间的重用,也在这个过程中体现出来了。内存带宽的减小,主要是靠数据的重用来实现的。
数据的重用包括两个层次一是由片外预取至片内的数据的重用,二是由片内送往处理单元的数据的重用。第一层次的数据重用,参见图5相邻宏块间数据的重用,A水平方向,B垂直方向。水平方向数据的重用,发生在左右相邻宏块依次编码时,单个宏块的范围是高为EXT+2*SRY+16+2*SRY+EXT,宽为EXT+2*SRX+16+2*SRX+EXT的矩形,也就是图中的灰色部分加一个16像素宽的竖向宏块条(白色部分),灰色部分(重叠部分)的数据并不需要再次预取,这就大大地减小了内存带宽;垂直方向数据的重用,发生在V=2时,单个宏块的范围也是高为EXT+2*SRY+16+2*SRY+EXT,宽为EXT+2*SRX+16+2*SRX+EXT的矩形,也就是图中的灰色部分加一个16像素高的横向宏块条(白色部分),灰色部分(重叠部分)的数据不需要再次预取,这就更有效地减小了内存带宽;空间中的EXT,是做子像素差值用的,不单独处理,不重复预取,也被重用,更进一步地减小了带宽。
第二层次的数据重用,参见附图六相邻像素间数据的重用,灰色部分A水平方向,B垂直方向。这个层次的数据重用,发生在将片内空间的数据送往处理单元处理时。一次匹配时,256个参考像素已经在处理单元内,若下一个匹配的像素是水平方向的相邻像素,则只需将紧邻参考宏块右侧(或左侧)垂直方向的16个像素(图中的细长白条)送往处理单元;若下一个匹配的像素是垂直方向的相邻像素,则只需将紧邻参考宏块下侧(或上侧)平行方向的16个像素(图中的细长白条)送往处理单元。这样每次匹配有15×16或16×15个像素(图中的灰色部分)被重用,这将减小片内内存与处理单元之间的传送数据的带宽,并加快数据处理的速度。
对片内空间的节省,主要是通过空间的重用实现的。空间的重用是这样的mbx=H时,预取的数据将整个环柱状空间填满,mbx每增加1,预取的数据就要向右覆盖一个垂直像素条,空间的重用就这样实现了。参见图1环柱状片内空间,虚线隔出一个个垂直像素条。举例说明由于环柱的周长=EXT+2*SRX+16+2*SRX+EXT+H*16,逻辑上的图像宽=EXT+2*SRX+width+2*SRX+EXT,对标清D1,width=720,height=576,设SRX=16,H=V=1,EXT=3,那么图像宽/环柱周长=(3+2*16+720+2*16+3)/(3+2*16+16+2*16+3+16)=790/102=7.7,也就是说,每对一行宏块编码,环柱状空间至少被重用7次;576/16=36,36*7=252,也就是说一幅D1参考帧,做运动估计时,环柱状空间就被重用252次。
整像素运动估计,参见图2环柱展开成的长方形,图中的搜索窗口,原点(0,0)、预测点MVP(pmvx,pmvy)、匹配点MV(mvx,mvy)反映了整像素运动估计与环柱状空间的关系。整像素运动估计在以MVP(pmvx,pmvy),-SRX<=pmvx<=SRX,-SRY<=pmvy<=SRY为中心点,以-SRX<=mvx-pmvx<SRX,-SRY<=mvy-pmvy<SRY为搜索范围的区域内搜索。搜索的区域只是搜索窗口的四分之一,可以做全搜索,适合于大规模集成电路的实现。整像素运动估计的算法,就是在环柱状空间里实现的,将搜索区域的数据送往数据匹配处理单元,适合第二层次的数据重用。
子像素运动估计,围绕最优整像素点,先要进行1/2像素差值,求出最优1/2像素点;再围绕最优1/2像素点进行1/4像素差值,求出最优1/4像素点。当最优整像素点(bmvx,bmvy)与搜索窗口的边界点(emvx,emvy)满足|bmvx-emvx|<EXT或|bmvy-emby|<EXT时,就要用到附图2环柱展开成的长方形中EXT的数据。为节省片内存储空间,子像素是不作过多存储的,随用随插,用过即扔,若用再插。
运动补偿,当最优运动向量MV(mvx,mvy)是整像素点时,不需要做子像素差值,运动补偿可以直接从搜索窗口中求出;当MV(mvx,mvy)是1/2像素点的时候,不需要做1/4子像素差值,合理插出1/2像素值作为运动补偿;当MV(mvx,mvy)是1/4像素点时,先做1/2像素差值,再做1/4像素差值,插出运动补偿的结果。运动补偿中子像素的差值与子像素运动估计的差值规律是一样的。
整像素运动估计、子像素运动估计、运动补偿共用环柱状片内空间,参见图7模块设置图中的灰色模块。通过数据的预取,处理单元及时取到数据,加快了处理速度;通过数据的重用,减小了内存带宽;通过空间的重用,减少了片内存储。
前面提供了对较佳实施例的描述,以使本领域内的任何技术人员可使用或利用本发明。对该较佳实施例,本领域内的技术人员在不脱离本发明原理的基础上,可以作出各种修改或者变换。应当理解,这些修改或者变换都不脱离本发明的保护范围。
权利要求
1、一种适用于运动估计的片内存储的方法,通过一个环柱状片内空间,来实现数据的预取、数据和空间的重用、运动估计和运动补偿,所述环柱的周长和高都是以像素为单位,所述周长为EXT+2*SRX+16+2*SRX+EXT+H*16,高为EXT+2*SRY+16+2*SRY+EXT+(V-1)*16;其中SRX为X方向的搜索范围,SRY为Y方向的搜索范围,EXT是1/4像素插值需要的最优整像素点上、下、左、右的整像素数。
2、如权利要求1所述的一种适用于运动估计的片内存储的方法,其特征在于,对于AVS和h.264标准的编码系统,EXT=3,H=1或2或3,V=1或2。
3、如权利要求1或2所述的一种适用于运动估计的片内存储的方法,其特征在于,当一幅图像的以宏块为单位的横坐标等于零时,完成预取的步骤如下
将参考帧的像素预取至环柱状空间的相应位置;
用预取的最左一列的像素向左平行扩写EXT+2*SRX个像素;
用预取的最上一行像素垂直向上扩写至环柱状空间的顶部或用预取的最下一行像素垂直向下扩写至环柱状空间的底部。
4、如权利要求3所述的一种适用于运动估计的片内存储的方法,其特征在于,当一幅图像的以宏块为单位的横坐标等于零时,分为0<=mby<ceil((2*SRY+EXT)/16)、floor((2*SRY+EXT)/16)<mby<ceil((height-(16+2*SRY+EXT+(V-1)*16))/16)、mby>floor((height-(16+2*SRY+EXT+(V-1)*16))/16)三种情形;其中mby是一幅图像的以宏块为单位的纵坐标,height是图像的高。
5、如权利要求1或2所述的一种适用于运动估计的片内存储的方法,其特征在于,当一幅图像的以宏块为单位的横坐标不等于零时,完成预取的步骤如下
从参考帧预取数据至环柱状空间的相应的16个像素宽的垂直宏块条,若每行预取不到16个像则将该行最后预取的一个像素水平向右扩写至16个像素,若每行一个像素都预取不到则将左侧宏块条的最右一列像素水平扩写至16个像素;
用预取的宏块条最上一行的16个像素垂直向上扩写至环柱的顶部或用预取的宏块条的最下一行16个像素向下扩写至宏块条的底部。
6、如权利要求5所述的一种适用于运动估计的片内存储的方法,其特征在于,当一幅图像的以宏块为单位的横坐标不等于零时,分为0<=mby<ceil((2*SRY+EXT)/16)且0<mbx<ceil((width-(2*SRX+EXT+16))/16)、0<=mby<ceil((2*SRY+EXT)/16)且floor((width-(2*SRX+EXT+16))/16)<mbx<ceil((width-(2*SRX+EXT))/16)、0<=mby<ceil((2*SRY+EXT)/16)且mbx>floor((width-(2*SRX+EXT))/16)、floor((2*SRY+EXT)/16)<mby<ceil((height-(1 6+2*SRY+EXT+(V-1)*16))/16)且0<mbx<ceil((width-(2*SRX+EXT+16))/16)、floor((2*SRY+EXT)/16)<mby<ceil((height-(16+2*SRY+EXT+(V-1)*16))/16)且floor((width-(2*SRX+EXT+16))/16)<mbx<ceil((width-(2*SRX+EXT))/16)、floor((2*SRY+EXT)/16)<mby<ceil((height-(16+2*SRY+EXT+(V-1)*16))/16)且mbx>floor((width-(2*SRX+EXT))/16)、mby>floor((height-(16+2*SRY+EXT+(V-1)*16))/16)且0<mbx<ceil((width-(2*SRX+EXT+16))/16)、mby>floor((height-(16+2*SRY+EXT+(V-1)*16))/16)且floor((width-(2*SRX+EXT+16))/16)<mbx<ceil((width-(2*SRX+EXT))/16)、mby>floor((height-(16+2*SRY+EXT+(V-1)*16))/16)且mbx>floor((width-(2*SRX+EXT))/16)九种情形;其中mby是一幅图像的以宏块为单位的纵坐标,mbx是一幅图像的以宏块为单位的横坐标,height是图像的高,width是图像的宽。
7、如权利要求1或2所述的一种适用于运动估计的片内存储的方法,其特征在于,数据的重用包括由片外预取至片内的数据的重用和由片内送往处理单元的数据的重用。
8、如权利要求7所述的一种适用于运动估计的片内存储的方法,其特征在于,在相邻宏块编码时,发生由片外预取至片内的数据的重用;左右相邻宏块编码,有(EXT+2*SRX+16+2*SRX+EXT-16)×(EXT+2*SRY+16+2*SRY+EXT)个像素重用;上下相邻宏块编码时,有(EXT+2*SRX+16+2*SRX+EXT6)×(EXT+2*SRY+16+2*SRY+EXT-16)个像素重用。
9、如权利要求7或8所述的一种适用于运动估计的片内存储的方法,其特征在于,在将片内空间的数据送往处理单元处理时,发生由片内送往处理单元的数据的重用;一次匹配时,256个参考像素已经在处理单元内,若下一个匹配的像素是水平方向的相邻像素,则只需将紧邻参考宏块右侧或左侧垂直方向的16个像素送往处理单元;若下一个匹配的像素是垂直方向的相邻像素,则只需将紧邻参考宏块下侧或上侧平行方向的16个像素送往处理单元。
10、如权利要求1或2所述的一种适用于运动估计的片内存储的方法,其特征在于,整像素运动估计、子像素运动估计以及运动补偿都是在环柱状片内空间里完成的;整像素运动估计在以MVP(pmvx,pmvy),-SRX<=pmvx<=SRX,-SRY<=pmvy<=SRY为中心点,以-SRX<=mvx-pmvx<SRX,-SRY<=mvy-pmvy<SRY为搜索范围的区域内搜索;子像素运动估计是围绕最优整像素点,先要进行1/2像素差值并求出最优1/2像素点,再围绕最优1/2像素点进行1/4像素差值并求出最优1/4像素点;运动补偿的步骤为当最优运动向量MV(mvx,mvy)是整像素点时,不需要做子像素差值;当MV(mvx,mvy)是1/2像素点的时候,仅1/2像素差值;当MV(mvx,mvy)是1/4像素点时,先做1/2像素差值,再做1/4像素差值。
全文摘要
本发明公开了一种适用于运动估计的片内存储的方法,通过一个环柱状片内空间,来实现数据的预取、数据和空间的重用、运动估计和运动补偿,所述环柱的周长和高都是以像素为单位,所述周长为EXT+2*SRX+16+2*SRX+EXT+H*16,高为EXT+2*SRY+16+2*SRY+EXT+(V-1)*16;其中SRX为X方向的搜索范围,SRY为Y方向的搜索范围,EXT是1/4像素插值需要的最优整像素点上、下、左、右的整像素数。采用上述方法,通过将数据预取至上述结构的环柱状空间,可以减小mis-cache的次数以加快数据处理的速度,同时能减小内存带宽以减少功耗,并减少片内、片外的存储空间。
文档编号H04N7/26GK101102493SQ20071004462
公开日2008年1月9日 申请日期2007年8月7日 优先权日2007年8月7日
发明者野 田 申请人:华亚微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1