一种嵌入式视频解码的运动补偿参考块数据读取装置及方法
技术领域
本发明涉及视频处理技术领域,尤其涉及一种嵌入式视频解码的运动补偿参考块数据读取装置及方法。
背景技术
在过去的几十年里,视频领域的两大国际组织ISO-MPEG与ITU已经相继推出了一系列视频压缩标准如MPEG-1、MPEG-2和MPEG-4以及H.261、H.263、H.263+、H.264/AVC等,中国也于2002年成立数字视音频编解码技术标准化工作组,即AVS组织,2005年完成并已成为国家标准。这些标准不断地提高了视频编码效率,也推动了多媒体产业的发展。随着嵌入式处理芯片的飞速发展,移动多媒体业务也越来越广泛,数字电视、移动电视、视频安防等产品已经广泛应用于我们的生活中。
在嵌入式处理器中,从CPU利用效率上讲只有数据处理才是有效操作,而数据读取操作都属于无效操作,其执行周期应越小越好。对于海量的视频数据而言,嵌入式处理器的片内存储空间比较有限,因此通常将占用空间较大的帧缓存数据存储于片外。CPU在访问片上存储空间与片外存储空间在效率上存在巨大差距(以TI DM642为例,CPU访问片上内存需要3~10个周期,而访问片外存储器需要50~100个周期)。因此,在解码时,需要在片内外进行大量数据的交互。为了减少这些无效操作,一般都采用DMA(Direct Memory Access)工具来实现。该工具能够在不占用CPU资源的情况下,完成片内外数据传输。
在嵌入式视频处理的解码端,运动补偿需要对大量的数据进行处理,是最为耗时的模块,约占整个解码器的30%。与此同时,还需要将片外参考帧缓冲区的数据读入到片内,数据传输频度以及传输量非常大。因此,对这部分内容进行优化处理是十分必要的。
发明内容
(一)要解决的技术问题
有鉴于此,本发明的主要目的在于提供一种嵌入式视频解码的运动补偿参考块数据读取装置及方法,以减少片内外数据交互次数,并减少片内外交互数据量。
(二)技术方案
为达到上述目的,本发明提供了一种嵌入式视频解码的运动补偿参考块数据读取装置,该装置包括参考块数据范围计算模块、数据读取模块以及边界扩展模块,其中:
参考块数据范围计算模块,用于根据宏块类型和运动矢量mv值对帧间宏块进行分类,然后分别计算每种宏块类型的参考块数据读取范围;
数据读取模块,用于从片外数据空间读取数据到片上存储空间;
边界扩展模块,对于参考块数据读取范围中的部分超出参考帧边界的数据,该边界扩展模块将读取到片内的数据扩展至所需要的范围,该范围由参考块数据计算模块得到。
上述方案中,所述参考块数据范围计算模块根据Inter模式和mv值对帧间宏块进行分类,将帧间宏块分为分为三种类型:mv为零的skip模式或Inter 16×16模式的宏块、mv为非零的skip模式或Inter 16×16模式的宏块,以及其余的Inter模式宏块。
上述方案中,对于mv为零的skip模式或Inter 16×16模式的宏块,所述参考块数据范围计算模块计算其参考块数据读取范围为当前宏块在参考帧内相同位置的宏块。
上述方案中,对于mv为非零的skip模式或Inter 16×16模式的宏块,所述参考块数据范围计算模块计算其参考块数据读取范围时,以宏块为单位,并在水平/垂直方向向前扩展2行/列像素,向后扩展3行/列像素。
上述方案中,对于其余帧间宏块类型,所述参考块数据范围计算模块计算其参考块数据读取范围时,首先计算宏块内每个4×4块所对应的mv值指向的参考帧内的参考子块位置,然后找出其中最小的水平/垂直分量位置:min_xPos,min_yPos,以及最大的水平/垂直分量位置:max_xPos,max_yPos,并重设参考块,然后在水平/垂直方向向前扩展2行/列像素,向后扩展3行/列像素。
上述方案中,所述边界扩展模块对于参考块数据范围超出参考帧边界的宏块,在其参考块数据读取到片内后,对超出参考帧边界的像素点,用参考帧边界上的像素点替代,将其扩展到由范围计算模块得到的范围大小。
为达到上述目的,本发明还提供了一种嵌入式视频解码的运动补偿参考块数据读取方法,该方法包括:
步骤1:参考块数据范围计算模块首先对帧间宏块类型进行判断,如果宏块的编码模式是skip模式或Inter 16×16模式,再判断其运动矢量mv值是否等于0,如果等于0,跳转到步骤2;如果不等于0,则跳转到步骤3;如果宏块的编码模式为其余模式,则跳转到步骤4;
步骤2:对于skip模式或Inter 16×16模式,并且mv=0的宏块,确定其参考块数据范围为:亮度分量读取范围为16×16,色度分量读取范围为8×8,然后跳转到步骤7;
步骤3:对于mv不为0的skip模式或Inter 16×16模式的宏块,确定其参考块数据范围为:亮度分量读取范围为(16+5)×(16+5),色度分量读取范围为(8+1)×(8+1),然后跳转到步骤6;
步骤4:对于编码模式不是skip模式或Inter 16×16模式的宏块,则计算各个4×4子块的mv值指向的参考块位置,找出其中最小的水平/垂直分量位置:min_xPos,min_yPos,以及最大的水平/垂直分量位置:max_xPos,max_yPos,然后跳转到步骤5;
步骤5:根据找到的最大、最小的参考块位置,重设一个大小为(max_xPos-min_xPos)×(max_yPos-min_yPos)的块,然后对该块进行扩展,确定当前宏块的参考块数据范围为:亮度分量读取范围为(min_xPos-2,min_yPos-2)~(max_xPos+3,max_yPos+3),色度分量读取范围为(min_xPos/2,min_yPos/2)~(max_xPos/2+1,max_yPos/2+1);然后跳转到步骤6;
步骤6:根据当前宏块的参考块数据读取范围,判断其是否超出了参考帧的边界,如果超出边界,则将参考块数据范围缩小到参考帧边界内,然后跳转到步骤7;如果未超出边界,则直接跳转到步骤7;
步骤7:参考块数据读取过程,将数据从片外存储空间读取到片上存储空间,在嵌入式处理器中通常采用DMA来实现,将参考块数据读取到片内后,如果没有经过参考块数据范围缩小过程,则当前宏块的参考块数据读取过程结束,否则跳转到步骤8;
步骤8;对于经过了参考块数据范围缩小过程的宏块,还需要将读取进来的参考块数据扩展至由范围计算模块得到的范围大小,用参考帧边界上的像素点替代超出边界的像素点,完成当前宏块的参考块数据读取过程。
上述方案中,在亚像素精度插值阶段,对于步骤4中所述的宏块类型,将其各个子块的参考块位置减去min_xPos和min_yPos的值,才是该子块在参考块数据范围内的用于插值的数据。
上述方案中,步骤5中所述在片内存储器开辟的空间大小与所解码的码流相关,码流在编码时,其运动矢量搜索范围为-MVrange~+MVrange,则在片内所需要开辟的最大空间,亮度为(2×MVrange+16+5)×(2×MVrange+16+5),色度为(2×MVrange/2+8+1)×(2×MVrange/2+8+1)。
(三)有益效果
从上述技术方案可以看出,本发明具有以下有益效果:
1、由于H.264对于一个宏块内的每个4×4块都要计算其mv值,然后对其进行扩展,再从片外将数据读取到片内,交互次数频繁。本发明通过帧间编码模式或者寻找mv指向的宏块内各4×4块的最大最小参考数据位置,一次性将整个宏块的参考块数据读取到片内,有效地减少了片内外存储器的交互次数。
2、对于mv为0的skip或Inter 16×16宏块,由于本发明不需要插值,只需要读取当前宏块在参考帧内的相同宏块数据,避免了亚像素插值所需要的前向/后向数据扩展。同时对于有多个mv的宏块,一次性读取参考块数据,能够减少4×4块亚像素插值所需的前向/后向数据扩展导致的重叠数据,减少片内外交互的数据量。
3、对于参考块数据超出参考帧边界的情况,由于本发明进行了边界扩展,避免了在后续亚像素插值时对参考块数据是否超出参考帧边界的判断。
附图说明
图1是亮度亚像素精度插值示意图;
图2是色度亚像素精度插值示意图;
图3是亮度相邻子块参考块数据重叠部分示意图;
图4是参考块数据读取结构图;
图5是参考块数据读取流程图;
图6是其余帧间宏块参考块数据读取范围示意图;
图7是边界扩展示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
本发明是一种嵌入式视频解码的运动补偿参考块数据读取装置及方法,用于在嵌入式视频解码时,从片外参考帧缓冲区读取当前解码宏块的参考块数据到片内存储空间。根据宏块的类型和运动矢量(mv,motionvector)对帧间宏块进行分类,然后分别确定不同的参考块数据范围。读取参考块数据到片内后,还要对超出了参考帧范围的数据进行边界扩展。
如图1所示,对于运动补偿中的亚像素精度插值,亮度1/2精度采用6-tap滤波器,需要用到当前像素点的前面两个像素点和后面三个像素点,1/4精度只用到相邻的1/2像素点或整像素点即可。因此,对于每一个子块,其亮度亚像素精度插值所需的参考块数据范围,需要在水平/垂直分量各向前扩展2个像素点、向后扩展3个像素点。
如图2所示,对于色度运动补偿的亚像素精度插值,采用的是双线性插值,需要用到当前像素点的水平/垂直分量的后一个像素点。因此,对于每一个色度子块,其色度亚像素精度插值所需的参考块数据范围,需要在水平/垂直分量各向后扩展1个像素点。
对于图像的绝大部分宏块来说,同一个宏块内部各个4×4块的mv值相差都很小,甚至相同,而由于其参考块数据范围需要在该块的范围上进行扩展,有一部分数据便会重复,如图3所示的两个相邻亮度4×4块,其前后扩展范围有一部分重叠数据,如图3所示的阴影部分(两个虚线框分别为block1和block2的参考块数据范围,黑色实线框部分即两个参考块数据重叠部分)。如果能在参考块数据读取的时候一次性将两个4×4块的参考块数据读取进入片内,既能减少重叠部分数据的重复读取,又能降低片内外数据交互的频度。
对于同一个宏块内,其各个4×4块的mv值完全相同的情况,该宏块类型为skip模式或Inter 16×16模式,此时可以以宏块为单位读取参考块数据。而对于各个4×4块的mv值全为零的情况,该宏块类型为skip模式或Inter 16×16模式且运动矢量为零,此时不需要进行亚像素精度插值,所以只需要复制参考帧内相同位置的宏块数据即可。
因此,基于以上三个原因,提出了一种嵌入式视频解码的运动补偿参考块数据读取装置及方法。如图4所示,该嵌入式视频解码的运动补偿参考块数据读取装置具体包括参考块数据范围计算模块、数据读取模块以及边界扩展模块。
其中,参考块数据范围计算模块用于根据宏块类型和mv值对帧间宏块进行分类,然后分别计算每种宏块类型的参考块数据读取范围。参考块数据范围计算模块首先根据宏块类型和mv值,将帧间编码宏块分为分为三种类型:运动矢量(motion vector,mv)为零的skip模式或Inter 16×16模式的宏块、运动矢量(mv,motion vector)为非零的skip模式或Inter16×16模式的宏块,以及其余帧间模式的宏块;
对于运动矢量(mv,motion vector)为零的skip模式或Inter 16×16模式的宏块,参考块数据范围计算模块计算其参考块数据读取范围为:亮度分量读取范围为16×16,色度分量读取范围为8×8;
对于运动矢量(mv,motion vector)为非零的skip模式或Inter 16×16模式的宏块,参考块数据范围计算模块计算其参考块数据读取范围时,以宏块为单位,并在水平/垂直方向进行相应扩展,得到其参考块数据读取范围为:亮度分量读取范围为(16+5)×(16+5);色度分量读取范围为(8+1)×(8+1);
对于其余帧间宏块类型,参考块数据范围计算模块计算其参考块数据读取范围时,首先计算宏块内每个4×4块所对应的mv值指向的参考帧内的参考子块位置,然后找出其中最小的水平/垂直分量位置:min_xPos,min_yPos,以及最大的水平/垂直分量位置:max_xPos,max_yPos,并重设参考块,然后进行相应扩展得到参考块数据范围为:亮度分量读取范围为(min_xPos-2,min_yPos-2)~(max_xPos+3,max_yPos+3);色度分量读取范围为(min_xPos/2,min_yPos/2)~(max_xPos/2+1,max_yPos/2+1);
对于参考块数据读取范围中的部分超出参考帧边界的数据,在其参考块数据读取到片内后,对超出参考帧边界的像素点,用参考帧边界上的像素点替代,将其扩展到由范围计算模块得到的范围大小。
该嵌入式视频解码的运动补偿参考块数据读取方法可参照图5所示的流程图,具体如下:
步骤1:参考块数据范围计算模块首先对宏块的帧间编码模式进行判断,如果是skip模式或Inter 16×16模式,再判断其运动矢量mv值是否等于0,如果等于0,跳转到步骤2;如果不等于0,则跳转到步骤3;如果不是skip模式或Inter 16×16模式(即宏块的编码模式为其余模式),则跳转到步骤4;
步骤2:对于skip模式或Inter 16×16模式,并且mv=0的宏块,确定其参考块数据范围为:亮度分量读取范围为16×16,色度分量读取范围为8×8,然后跳转到步骤7;
步骤3:对于mv不为0的skip模式或Inter 16×16模式的宏块,确定其参考块数据范围为:亮度分量读取范围为(16+5)×(16+5),色度分量读取范围为(8+1)×(8+1),然后跳转到步骤6;
步骤4:对于编码模式不是skip模式或Inter 16×16模式的宏块,则计算各个4×4子块的mv值指向的参考块位置,找出其中最小的水平/垂直分量位置:min_xPos,min_yPos,以及最大的水平/垂直分量位置:max_xPos,max_yPos,然后跳转到步骤5;
步骤5:根据找到的最大、最小的参考块位置,重设一个大小为(max_xPos-min_xPos)×(max_yPos-min_yPos)的块,然后对该块进行扩展,该块的参考块数据范围内包含了当前宏块所有子块需要的参考块数据,如图6所示(内部虚线框为重设参考块范围,外部虚线框为当前宏块的最终参考块数据范围),因此确定当前宏块的参考块数据范围为:亮度分量读取范围为(min_xPos-2,min_yPos-2)~(max_xPos+3,max_yPos+3),色度分量读取范围为(min_xPos/2,min_yPos/2)~(max_xPos/2+1,max_yPos/2+1);然后跳转到步骤6;
步骤6:根据当前宏块的参考块数据读取范围,判断其是否超出了参考帧的边界,如果超出边界,则将参考块数据范围缩小到参考帧边界内,如图7所示的参考帧边界内的实线框部分(此时只传位于参考帧边界内的数据,而超出参考帧边界的数据,在片内通过步骤8可以得到),然后跳转到步骤7;如果未超出边界,则直接跳转到步骤7;
步骤7:参考块数据读取过程,将数据从片外存储空间读取到片上存储空间,在嵌入式处理器中通常采用DMA(Direct Memory Access)来实现,将参考块数据读取到片内后,如果没有经过参考块数据范围缩小过程,则当前宏块的参考块数据读取过程结束,否则跳转到步骤8;
步骤8;对于经过了参考块数据范围缩小过程的宏块,还需要将读取进来的参考块数据进行扩展,用参考帧边界上的像素点替代超出边界的像素点,扩展至范围计算模块得到的范围大小,完成当前宏块的参考块数据读取过程。
在亚像素精度插值阶段,对于步骤4中所述的宏块类型,将其各个子块的参考块位置减去min_xPos和min_yPos的值,才是该子块在参考块数据范围内的用于插值的数据,如图6所示。
步骤5中所述在片内存储器开辟的空间大小与所解码的码流相关,若码流在编码时,码流在编码时,其运动矢量搜索范围为-MVrange~+MVrange,则在片内所需要开辟的最大空间,亮度为(2×MVrange+16+5)×(2×MVrange+16+5),色度为(2×MVrange/2+8+1)×(2×MVrange/2+8+1);例如在编码时运动矢量搜索范围为-32~+32,则在片内所需要开辟的最大空间,亮度为(2×32+16+5)×(2×32+16+5),色度为(2×16+8+1)×(2×16+8+1)。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。