用于压缩视频信号解码的图像存储方法

文档序号:7611524阅读:350来源:国知局
专利名称:用于压缩视频信号解码的图像存储方法
技术领域
本发明涉及一种用于压缩视频信号解码的图像存储方法,属于视频解码技术领域。
背景技术
MPEG(运动图像专家组)-2视频压缩标准由于能够在运算复杂度适中的前提下提供高压缩比与高质量图像,因而近年来得到了大力的发展与广泛的应用。MPEG-2标准对于运动图像的压缩能力很大程度上归因于它所采用的运动估计算法,即将16×16的象素块定义为宏块(MB),在编码时从视频帧序列中选取部分帧图作为参考帧,并以宏块为单位对这些参考帧的象素数据完全编码;而在编码其他非参考帧时,也以宏块为单位进行编码,编码时首先找出当前宏块在参考帧中对应的最相似部分,求出当前宏块在帧图中的位置与所找到的最相似部分在帧图中的位置两者之间的位移——称为运动向量,以及当前宏块与相似块之间的差值-称为残差,最后只需编码求得的运动向量及残差数据。配合离散余弦变换及熵编码就能大大降低编码的数据量。
但是在对符合MPEG-2视频压缩标准的码流进行解码时,必须要以选定的参考帧为基础,才能正确地解码所有的视频帧图像。因此,在解码过程中始终需要保存最多两幅参考帧(在双向运动预测时)。除了储存参考帧以外,在解码中还需要保存当前正被解码的帧以及正在被显示的帧。由于图像数据的数据量很大,在视频解码系统中一般会选用同步动态随机存储器(以下简称SDRAM)来保存上述的帧图。
当被解码的压缩视频分辨率很高时,例如在解码HDTV信号时,解码系统的数据吞吐量很大,这就对SDRAM的数据带宽提出了很高的要求,最高情况下可以达到3Gbps。尽管SDRAM能够提供高存储容量,但是其内部结构决定了它对读写操作的时序有着比较严格的要求。现有方法通常采用线形映射进行存储,即图像象素数据的行数与SDRAM的行地址对应,而列数则与列地址对应,在从SDRAM读取或向其中写入一个宏块时,至少需要进行15次换行,这在SDRAM的操作中称为断页(page break)。每次出现断页情况,SDRAM都要重新进行一次预充电(precharge)和行激活(row activation),每项操作都要求在时序上延迟一定的时钟周期(2-3个时钟周期不等,取决于SDRAM的时序特性及工作时钟频率)以便等待存储单元完成相应动作,这就意味着读取或写入中遇到换行时,都会造成一定的时序浪费。而由于读取或写入操作采用突发读/写(burstread/write)的工作模式,读取或写入一行数据也只需2-3个时钟周期。这样,换行造成的时序浪费在整个存储器访问过程中所占的比例可高达50%。因此,线性存储方式会导致存储器带宽资源被严重浪费,以至于不能实现正确的解码功能,或是需要改用更高的时钟频率和更昂贵的存储器件。

发明内容
本发明的的目的是提出一种用于压缩视频信号解码的图像存储方法,改进解码过程中的图像存储方法,以克服已有技术的缺点,提高存储器带宽的利用率。
本发明提出的用于压缩视频信号解码的图像存储方法,包括以下步骤(1)将视频序列中的帧图像划分成多个象素块,定义象素块为窗口,并为各个窗口分配存储空间,所述的窗口由多个宏块组成,每个宏块为16×16的象素块;(2)写入完成解码的宏块,为所述的宏块生成多个写入地址,所述的写入地址各自指向分配给所述宏块所在窗口的存储空间中的不同位置;(3)当当前解码宏块需要读取参考宏块时,生成多个读取地址,根据读取地址读取参考宏块。
上述方法中的压缩视频信号满足MPEG-2视频标准。
上述方法中所述的为各个窗口分配存储空间的方法包括如下步骤(1)将所述的存储空间划分为4个存储分组,所述的各个存储分组彼此独立地进行地址译码、行激活以及读、写;(2)所述的存储空间中的一个存储分组中的一行分配给一个窗口,且分配给任意四个相邻窗口的存储空间是四个互不相同的存储分组中的一行。
上述方法中,为所述的宏块生成多个写入地址的方法,包括如下步骤(1)根据所述宏块的参数信息确定其所属的窗口,并生成初始写入地址,初始写入地址中包括分组地址、行地址以及列地址;(2)所述宏块中所有的写入单元所对应的写入地址中的分组地址及行地址均即为上述初始分组地址及行地址;(3)对于同一行中的写入单元,写入单元所对应写入地址的列地址从左到右递增;(4)对于不同行的相邻写入单元,即一行中最后一个写入单元与下一行第一个写入单元的列地址之间有一个大于1的固定跳变值,该跳变值与所述窗口中所包含的宏块数量以及存储数据位宽有关。
上述方法中,为参考宏块生成读取地址的方法,包括以下步骤(1)根据当前被解码宏块的参考信息确定所述参考宏块所在的窗口,并生成初始读取地址,所述的被解码宏块的参数信息中包括当前被解码宏块的宏块地址、运动向量以及预测模式,所述的参数信息均被包含在所述的压缩视频信号中,所述的初始读取地址包括初始分组地址、初始行地址以及初始列地址,所述的初始读取地址指向所述参考宏块左上角的读取单元应在的存储位置;(2)对于所述参考宏块同一行中的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的垂直方向边界时,所述相邻读取单元的分组地址和行地址相同并等于初始分组地址和行地址,列地址依次递增,当所述的相邻读取单元跨过所述窗口的垂直方向边界时,分组地址跳变、行地址不变或递增1、列地址跳变;(3)对于所述参考宏块中不同行的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的水平方向边界时,分组地址和行地址相同并等于初始分组地址和行地址,列地址跳变,当所述的相邻读取单元跨过所述窗口的水平方向边界时,分组地址跳变、行地址不变或跳变、列地址跳变。
本发明提出的用于压缩视频信号解码的图像存储方法,其显著特点和效果在于,根据当前SDRAM普遍采用的分组(bank)的内部结构,并且在容量为64Mbits以上的SDRAM中通常采用四分组(4 banks)结构这样一个事实,采用分块的存储方式。本发明提出的图像存储方法,使得在解码时读取或写入一个宏块的过程中不需要进行换行,或是使得换行所需的额外时序开销与存储器中其他分组的读/写操作重叠,从而提高了存储器带宽的利用率。


图1是符合本发明方法要求的存储空间的SDRAM内部结构示意图。
图2a是对存储空间进行读取的时序示意图,其中两次读取的数据分别位于不同的分组中。
图2b是对存储空间进行读取的时序示意图,其中两次读取的数据分别位于相同的分组的不同行中。
图3是本发明的一个实施例的帧图像中,宏块数据在存储空间中的存储结构示意图。
图4a是被读取宏块位于单个窗口内的存储结构示意图。
图4b是被读取宏块水平跨界的存储结构示意图。
图4c是被读取宏块垂直跨界的存储结构示意图。
具体实施例方式
本发明提出的用于压缩视频信号解码的图像存储方法,包括将视频序列中的帧图像划分成多个象素块,定义象素块为窗口,并为各个窗口分配存储空间,所述的窗口由多个宏块组成,每个宏块为16×16的象素块,如图3所示;写入完成解码的宏块,为所述的宏块生成多个写入地址,所述的写入地址各自指向分配给所述宏块所在窗口的存储空间中的不同位置;当当前解码宏块需要读取参考宏块时,生成多个读取地址,根据读取地址读取参考宏块。
所述的参考宏块可能跨过多个窗口,所述的读取地址各自指向分配给所述的参考宏块所在的一个窗口或多个窗口的存储空间中的不同位置,所述的读取地址中包括存储空间的分组地址、行地址以及列地址,所述参考宏块的同一行象素中的多个象素数据组成一个读取单元,每个读取单元对应于一个读取地址,所述读取单元中所含的象素数量取决于所述存储空间的数据位宽,而所述读取单元的个数则取决于所述存储空间的数据位宽以及所述参考宏块在水平方向上跨过的所述窗口的数量,所述的读取单元是按照它们在所述参考宏块中从左到右、从上到下的顺序排列并被依次读出存储空间。
所述宏块的同一行象素中的多个象素数据组成一个写入单元,每个写入单元对应于一个写入地址,所述写入单元中所含的象素数量以及写入单元的个数均取决于所述存储空间的数据位宽,所述的写入单元是按照它们在所述宏块中从左到右、从上到下的顺序排列并被依次写入存储空间。
上述方法中的压缩视频信号满足MPEG-2视频标准。
上述方法中为各个窗口分配存储空间的方法,包括,将所述的存储空间划分为4个存储分组,所述的各个存储分组彼此独立地进行地址译码、行激活以及读、写;所述的存储空间中的一个存储分组中的一行分配给一个窗口,且分配给任意四个相邻窗口的存储空间是四个互不相同的存储分组中的一行。
上述方法中为所述的宏块生成多个写入地址的方法包括,根据所述宏块的参数信息确定其所属的窗口,并生成初始写入地址,初始写入地址中包括分组地址、行地址以及列地址;所述宏块中所有的写入单元所对应的写入地址中的分组地址及行地址均即为上述初始分组地址及行地址;对于同一行中的写入单元,写入单元所对应写入地址的列地址从左到右递增;对于不同行的相邻写入单元,即一行中最后一个写入单元与下一行第一个写入单元的列地址之间有一个大于1的固定跳变值,该跳变值与所述窗口中所包含的宏块数量以及存储数据位宽有关。
上述方法中为参考宏块生成读取地址的方法包括,根据当前被解码宏块的参考信息确定所述参考宏块所在的窗口,并生成初始读取地址,所述的被解码宏块的参数信息中包括当前被解码宏块的宏块地址、运动向量以及预测模式,所述的参数信息均被包含在所述的压缩视频信号中,所述的初始读取地址包括初始分组地址、初始行地址以及初始列地址,所述的初始读取地址指向所述参考宏块左上角的读取单元应在的存储位置;对于所述参考宏块同一行中的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的垂直方向边界时,所述相邻读取单元的分组地址和行地址相同并等于初始分组地址和行地址,列地址依次递增,当所述的相邻读取单元跨过所述窗口的垂直方向边界时,分组地址跳变、行地址不变或递增1、列地址跳变;对于所述参考宏块中不同行的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的水平方向边界时,分组地址和行地址相同并等于初始分组地址和行地址,列地址跳变,当所述的相邻读取单元跨过所述窗口的水平方向边界时,分组地址跳变、行地址不变或跳变、列地址跳变。
下面结合附图,对本发明的具体实施方式
进行详细说明。
图1为本发明方法所要求的存储空间的SDRAM的内部结构示意图,在SDRAM中,四个分组共享地址与数据总线,而每个分组具有独立的行地址译码器、列地址译码器和读出放大器。模式寄存器指示SDRAM的工作模式,包括突发长度、CAS延迟、交织模式等等。存储器访问操作包括下列三个步骤1、使用行激活指令将指定分组中的某行数据复制到该分组的读出放大器中;2、使用突发式存取指令从放大器中读出长度等于模式寄存器所指示的突发长度的数据,并将数据放到数据总线上,或是向数据总线放上将要写入存储器的数据;只改变列地址就可以对指定分组中的同一行存储单元的任意列单元进行操作,而无需发出额外的行激活指令;3、对读出放大器进行预充电,为其他行的操作做好准备。
由于SDRAM内部采用与外部时钟同步的流水线,因此用于不同分组的指令可以相互重叠,比如一个分组的行激活指令就可以与另一个分组的突发读取指令重叠。如图2所示,存储器操作所需的时钟数与被连续访问的数据的存储位置密切相关。在图2a所示的情况中,被连续读取的数据分别存储在分组0和分组1中,因此对分组1所施加的指令RAS01和CAS01就可以与分组0的指令RAS00和CAS00重叠。而在图2b所示的情况中,被连续读取的数据分别存储在分组0的两个不同行中,因而对后一组数据的读取指令RAS11和CAS11必须等待对前一组数据的读取指令RAS10和CAS10完成之后才能发出。很明显,与图2a所示的情况相比,图2b所示情况多出了额外的时钟数消耗。本发明利用了这种对SDRAM不同位置上的数据进行连续访问的时序特点,下文中将结合附图对此进行详细说明。
图3表示本发明的帧图像中,宏块数据在存储器SDRAM中的存储方式,该存储结构为本发明的一个实施例。一幅完整的帧图像被虚拟地划分成若干正方形的象素块,一个象素块被称为一个窗口,它由四个相邻的宏块构成,由于MPEG-2标准要求被编码的图像在水平与垂直方向上的宏块数量均为偶数,即使原始图像并非如此,在编码中也要在不足的位置上补入零数据。因此,一幅完整的帧图中必然包含了整数个所谓的窗口。假设采用容量为128Mbit、数据位宽64bit且内部结构分为4个分组的存储器SDRAM,这种存储器可以通过并行使用两片容量均为64Mbit、数据位宽均为32bit且内部结构分为4个分组的存储器SDRAM来构成,比如可以使用Micron公司的MT48LC2M32B2P-7或MT48LC2M32B2TG-7。该假设仅为说明本发明而作出,但本发明的应用并不受该假设的限制,即本发明所述的方法同样适用于其他规格的SDRAM。上述一个窗口中所包含的数据总量为4×16×16×8bit=8192bit,恰好可以存入SDRAM内部一个分组的一行存储单元中。在将帧图像数据存储到存储器SDRAM中时,就可以将水平与垂直方向相邻的四个窗口分别存入四个不同分组的同一行中,并将水平方向上的另外四个相邻窗口存入四个不同分组的另一行中,依次类推,直到所有的窗口均被存入SDRAM为止。需要注意的是,在帧图像中水平或垂直相邻的任意两个窗口不能被存储在相同的分组中,这样做的原因将在下文的说明中阐明。
图4表示一种可行的存储结构。在从SDRAM中读取参考宏块的数据时,由于采用了运动估计算法的原因,被读取的宏块往往并不位于帧图像中的宏块边界上,而是相对宏块边界有一个运动向量的偏移量。这样,所述的一个参考宏块的数据就有可能覆盖最多达4个宏块的范围。需要读取的参考宏块可能出现各种跨窗口边界的情况,图4示出了若干种这样的情况。下文中将结合图5来详细说明各种跨窗口边界情况以及相应的处理方法。
图4a示出了被读取宏块位于单个窗口内的情况。在这种情况下,整个宏块的数据均位于同一个存储器分组的同一行中,在读取时不需要改变行地址,也不需要对其他分组和/或其他存储行进行行激活操作,而只需根据下列方程改变列地址column_address(0)=column_counter(0)=the_first_column_addresscolumn_address(n)=column_counter(n-1)+Incr1column_counter(n)=column_address(n)其中n表示当前被读取的单元的序号,在出现换行、水平方向与/或垂直方向跨窗口的情况时,n都要被递增1,所述的单元可以是宏块中的一整行数据,也可以是以某行数据的开头为起点以窗口的垂直方向边界为终点,或是以窗口的垂直方向边界为起点以某行数据的结束为终点的同行数据;column_address为被读取单元的起始列地址;column_counter为列计数器;the_first_column_address为当前被读取宏块的起始列地址,即该宏块左上角的单元所处的列地址;Incr1为垂直方向相邻的两个单元的起始列地址之间的差值。这种情况本身不会产生断页现象,在读取时不需要改变分组地址及行地址。
图4b中示出了被读取宏块跨越垂直方向的窗口边界的情况,这种情况被称为水平跨界。在这种情况下,整个宏块的数据可能位于不同分组的同一行,这种情况称为未断行;也可能位于不同分组的不同行,这种情况称为断行。在读取时要按下列方程改变分组地址、行地址及列地址bank_address(0)=bank_counter(0)=the_first_bank_addressbank_address(n)=bank_counter(n-1)+1bank_counter(n)=bank_counter(n-1)row_address(0)=row_counter(0)=the_first_row_address column_address(0)=column_counter(0)=the_first_column_addresscolumn_address(n)=column_counter(n-1)-Imodcolumn_counter(n)=column_counter(n-1)其中n表示当前被读取的单元的序号;bank_address为被读取单元所在的存储器分组,取值为0、1、2、3之一;bank_counter为存储器分组计数器;the_first_bank_address为被读取宏块的起始单元—即左上角的单元所在的存储器分组;row_address为被读取单元所在的行地址;bank_counter为行计数器;column_address为被读取单元的起始列地址;the_first_row_address为当前被读取宏块的起始行地址,即该宏块左上角的单元所在的行;column_counter为列计数器;the_first_column_address为当前被读取宏块的起始列地址;Imod为当前被读取单元的起始位置离开其左侧窗口垂直边界的距离。
图4c示出了被读取宏块跨越水平方向的窗口边界的情况,这种情况被称为垂直跨界。与上述的水平跨界情况类似,整个宏块的数据可能位于不同分组的同一行,也可能位于不同分组的不同行,这两种情况分别称为未断行和断行。在读取时要按下列方程改变分组地址、行地址及列地址bank_address(0)=bank_counter(0)=the_first_bank_addressbank_address(n)=bank_counter(n-1)+2bank_counter(n)=bank_address(n)row_address(0)=row_counter(0)=the_first_row_address row_counter(n)=row_address(n)column_address(0)=column_counter(0)=the_first_column_addresscolumn_address(n)=column_counter(n-1)+Incr2column_counter(n)=column_address(n)其中n表示当前被读取的单元的序号;bank_address为被读取单元所在的存储器分组,取值为0、1、2、3之一;bank_counter为存储器分组计数器;the_first_bank_address为被读取宏块的起始单元,即左上角的单元所在的存储器分组;row_address为被读取单元所在的行地址;bank_counter为行计数器;column_address为被读取单元的起始列地址;the_first_row_address为当前被读取宏块的起始行地址,即该宏块左上角的单元所在的行;column_counter为列计数器;the_first_column_address为当前被读取宏块的起始列地址;Hrow为被读取宏块中垂直方向相邻两行所在的不同行的行地址之间的差,该值取决于图像大小与存储器SDRAM的规格;Incr2为被窗口的水平边界分开的两个被读取单元的列地址之差。
如果要对当前宏块执行写入存储器SDRAM的操作,则首先根据所述的宏块地址计算出当前宏块应被存入的首地址,首地址中包括行、列及存储器分组的地址,所述的首地址取决于图像的分辨率大小以及当前宏块的宏块地址。由于本发明所述的存储方法是将整个宏块存储在同一个分组的同一行中,在写入中不需改变行地址和存储器分组地址,而只需为当前宏块的每一行数据改变存储的列地址即可。在上述采用128Mbit容量64bit数据位宽的SDRAM存储器的情况下,后一行的写入列地址为前一行写入列地址加4,即column_address(n)=column_address(n-1)+权利要求
1.一种用于压缩视频信号解码的图像存储方法,其特征在于该方法包括以下步骤(1)将视频序列中的帧图像划分成多个象素块,定义象素块为窗口,并为各个窗口分配存储空间,所述的窗口由多个宏块组成,每个宏块为16×16的象素块;(2)写入完成解码的宏块,为所述的宏块生成多个写入地址,所述的写入地址各自指向分配给所述宏块所在窗口的存储空间中的不同位置;(3)当当前解码宏块需要读取参考宏块时,生成多个读取地址,根据读取地址读取参考宏块。
2.如权利要求1所述的方法,其特征在于所述的压缩视频信号满足MPEG-2视频标准。
3.如权利要求1所述的方法,其特征在于其中所述的为各个窗口分配存储空间的方法包括如下步骤(1)将所述的存储空间划分为4个存储分组,所述的各个存储分组彼此独立地进行地址译码、行激活以及读、写;(2)所述的存储空间中的一个存储分组中的一行分配给一个窗口,且分配给任意四个相邻窗口的存储空间是四个互不相同的存储分组中的一行。
4.如权利要求1所述的方法,其特征在于其中所述的为所述的宏块生成多个写入地址的方法包括如下步骤(1)根据所述宏块的参数信息确定其所属的窗口,并生成初始写入地址,初始写入地址中包括分组地址、行地址以及列地址;(2)所述宏块中所有的写入单元所对应的写入地址中的分组地址及行地址均即为上述初始分组地址及行地址;(3)对于同一行中的写入单元,写入单元所对应写入地址的列地址从左到右递增;(4)对于不同行的相邻写入单元,即一行中最后一个写入单元与下一行第一个写入单元的列地址之间有一个大于1的固定跳变值,该跳变值与所述窗口中所包含的宏块数量以及存储数据位宽有关。
5.如权利要求1所述的方法,其特征在于其中所述的为参考宏块生成读取地址的方法包括以下步骤(1)根据当前被解码宏块的参考信息确定所述参考宏块所在的窗口,并生成初始读取地址,所述的被解码宏块的参数信息中包括当前被解码宏块的宏块地址、运动向量以及预测模式,所述的参数信息均被包含在所述的压缩视频信号中,所述的初始读取地址包括初始分组地址、初始行地址以及初始列地址,所述的初始读取地址指向所述参考宏块左上角的读取单元应在的存储位置;(2)对于所述参考宏块同一行中的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的垂直方向边界时,所述相邻读取单元的分组地址和行地址相同并等于初始分组地址和行地址,列地址依次递增,当所述的相邻读取单元跨过所述窗口的垂直方向边界时,分组地址跳变、行地址不变或递增1、列地址跳变;(3)对于所述参考宏块中不同行的相邻读取单元,当所述的相邻读取单元没有跨过所述窗口的水平方向边界时,分组地址和行地址相同并等于初始分组地址和行地址,列地址跳变,当所述的相邻读取单元跨过所述窗口的水平方向边界时,分组地址跳变、行地址不变或跳变、列地址跳变。
全文摘要
本发明涉及一种用于压缩视频信号解码的图像存储方法,属于视频解码技术领域。本方法首先将视频序列中的帧图像划分成多个象素块,定义象素块为窗口,并为各个窗口分配存储空间,所述的窗口由多个宏块组成,每个宏块为16×16的象素块;写入完成解码的宏块,为所述的宏块生成多个写入地址,所述的写入地址各自指向分配给所述宏块所在窗口的存储空间中的不同位置;当当前解码宏块需要读取参考宏块时,生成多个读取地址,根据读取地址读取参考宏块。本发明方法的特点是,使得在解码时读取或写入一个宏块的过程中不需要进行换行,或是使得换行所需的额外时序开销与存储器中其他分组的读/写操作重叠,从而提高了存储器带宽的利用率。
文档编号H04N5/917GK1645928SQ20051000487
公开日2005年7月27日 申请日期2005年2月3日 优先权日2005年2月3日
发明者赵强, 杨华中, 汪蕙, 苏植丰 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1