一种运动补偿数据载入装置及方法

文档序号:7623222阅读:146来源:国知局
专利名称:一种运动补偿数据载入装置及方法
技术领域
本发明涉及图像处理领域,特别是涉及一种对图像进行运动补偿数据载入的装置及方法。
背景技术
目前的视频压缩编码技术通常采用基于块的运动估计和离散傅立叶变换(DCT)的混合编码方式对运动图像进行编码。
运动估计的过程,即在当前帧的前一帧或前几帧中搜索与当前处理的块最“相似”的块的过程。若在以前的帧中找到与当前帧中的块最相似的块,则使用所述找到的块作为当前块的预测块,并记录下当前块与预测块之间的距离(即当前块的运动矢量(MV))。这个用作预测块的块在本领域中叫做参考块,存在参考块的帧叫做参考帧。视频编码器将当前块与参考块的差值(残差)和当前块的运动矢量进行编码,从而达到减小传输或存储数据量的目的。
运动补偿是运动估计的逆过程,是视频解码器的一部分。运动补偿的原理为根据当前块的位置和运动矢量计算出参考块在参考帧中的位置,并从该位置取出参考块与残差相加,得到当前块的重构值(经过解码恢复出来的图像的原始值)。运动补偿的实现要求存储器能够缓存一至多个参考帧,因此一般采用解码芯片外部的动态存储器(SDRAM)来保存参考帧。
最初的运动估计和运动补偿操作是以宏块(大小16×16个像素的块)为单位。为了更好的匹配图像细节的运动,目前许多视频编解码协议(如H.263、H.264或MPEG-4等)都允许基于更小的块(8×8块、4×4块)进行运动估计和运动补偿,这就导致一个宏块带有多个运动矢量。由于宏块内的每个独立子块都有一个自己的运动矢量,所以每个独立子块都需要单独进行运动补偿操作。在运动补偿的数据载入时就需要更频繁地从存储参考帧的存储器(SDRAM)中读取尺寸更小的参考块。因此多MV的运动补偿需要占用更多的系统存储带宽。另外,尽管很多视频编解码协议的运动估计和运动补偿操作都只使用前一帧作为当前帧中所有宏块的参考帧,而H.264协议则允许当前帧内的各个宏块及其子块基于多个不同的参考帧进行运动估计和运动补偿,这就导致了在运动补偿过程中必须在不同参考帧问切换以读取参考块,因此读取位置更加不连续,使得读取SDRAM的次数增多,占用更多的系统存储带宽。
现有的一种运动补偿数据载入方案为帧缓存方案,其载入装置结构示意图参见图1所示。即在开始一帧图像的运动补偿前,将整个参考帧全部载入到解码芯片内部的缓存(静态随机访问存储器(SRAM))中,而后的每个宏块的运动补偿都从片上的SRAM中读取参考块。
本方案必须在解码芯片内集成一块能够缓存至少一帧图像的SRAM,占用面积较大;在载入多参考帧进行运动补偿时,则载入时间较长,造成系统存储带宽长期被占用的问题;以帧为缓存单位限制了载入图像的大小,无法支持对尺寸更大的图像进行解码,不利于功能扩充。
现有的另一种运动补偿数据载入方案为以参考块为单位逐一载入的方案,其载入装置结构示意图参见图2所示。即对每个MV都以一次读操作来完成从参考帧中载入对应的参考块。在实现H.264协议所规定的运动补偿时,一帧图像包括若干个宏块,一个宏块最多又包括16个4×4像素的独立子块,所以一个宏块最多需要16次载入操作(即每次载入一个4×4像素的参考块)。
本方案在读取小尺寸图像块时频繁的行间切换引入了过多的额外操作,导致SDRAM读写效率低下;各个子块的参考块有可能相互重叠,单独载入各个子块的参考块会造成存储带宽的浪费;由各个子块的参考块引起的离散读操作增加了系统总线的仲裁次数,延长了载入时间,影响了视频解码器的性能。

发明内容
本发明提供一种运动补偿数据载入装置,用以解决现有技术存在以小尺寸图像块为载入单位时,存储器的读写效率低下,造成系统资源浪费的问题。
基于本发明的装置,本发明还提供了一种运动补偿数据载入方法。
本发明装置包括存储器,用以存储当前帧中各宏块内的子块对应的参考块数据;读控器,用以读取存储器中的数据并输出;至少两个计算截取模块,用以分别计算当前宏块内的各子块对应的参考块的位置信息,以及截取所述读控器输出的数据,并将所述数据缓存;载入位置汇总模块,用以根据各计算截取模块发来的信息,将当前载入行中相邻或重叠的像素点合并为一段像素区间,并将所述像素区间的位置信息发出;读地址生成模块,用以根据载入位置汇总模块发来的信息,计算应访问的存储地址和选取猝发读序列,以触发读控器。
所述存储器为同步动态随机访问存储器(SDRAM)。所述SDRAM支持猝发读写操作。
所述参考块的位置信息包括该参考块所在帧的帧号,以及起始载入行的行号、起始列号和结束列号。
在所述载入位置汇总模块中存在译码电路,用以定位当前行中存在待载入像素点的区间和不存在待载入像素点的区间。所述译码电路的数量与计算截取模块的数量对应。
通过各译码电路,将宏块内各子块对应的参考块在当前行中的像素点区间译码后,按照各参考块的位置将各译码电路的输出信号映射到一维坐标轴上,并将映射后的结果相或,得出当前行中存在待载入像素点的区间和不存在待载入像素点的区间。
所述像素区间的位置信息包括该像素区间在其所在帧中的行号、行内起始位置和长度信息。
所述SDRAM读地址生成模块根据所述行号和行内起始位置信息,计算应访问的SDRAM地址;以及根据所述像素区间长度和各区间之间的位置关系选取猝发读序列。
所述SDRAM读地址生成模块中包括下列电路,用以获取像素区间的位置信息第一电路,用于将所述坐标轴上待载入像素点的离散区间的边缘以电平跳变点的形式表示;优先级编码器,用以将所述坐标轴上最左边的跳变点作为当前跳变点进行编码,并根据编码后的信息得出当前跳变点的位置信息;第二电路,用以将所述第一电路得到的跳变点数量置于一个计数器,使在计数范围内的每一时钟周期触发一次所述优先级编码器;第三电路,用以在获取了当前跳变点的位置信息后,屏蔽当前跳变点及其以左的所有跳变点。所述第一电路将所述坐标轴上的相邻位异或,用以将所述边缘以电平跳变点的形式表示。
所述SDRAM读地址生成模块中还包括像素区间长度获取模块,用于以偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度,并将获得的长度保存;像素区间间隔长度获取模块,用于以奇数跳变点位置减去其左侧最近的偶数跳变点位置得到间隔长度,并将获得的长度保存;选取猝发读序列模块,用于根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度,选取猝发读序列,并将选出的各猝发读序列的起始位置告知计算截取模块。
所述选取猝发读序列模块选取猝发读序列的规则为在所述选取的猝发读序列个数最少的前提下,以猝发读序列长度总和最短为原则,确定猝发读序列。
所述SDRAM读地址生成模块还用以根据各计算截取模块发来的信息,判定并告知需要参与当前行载入的计算截取模块。
所述SDRAM读地址生成模块中还包括比较电路,用以比较出各计算截取模块对应的参考块的起始载入行行号的最小值,并告知起始行行号为所述最小值的参考块对应的计算截取模块参与当前行载入。
所述计算截取模块将截取的数据缓存于该计算截取模块对应的参考块缓存中。所述参考块缓存为静态随机访问存储器(SRAM)。所述SRAM的存储容量至少与所述参考块大小相同。
所述计算截取模块根据其对应的参考块的起始位置与当前猝发读序列的起始位置之间的偏移量,从所述SDRAM读控器读取的数据中截取对应子块运动补偿所需的数据。
所述子块具有独立的运动矢量。
本发明方法包括下列步骤A、获取当前待处理宏块中各子块对应的参考块在参考帧中的位置信息;B、根据所述位置信息将各参考块的每一行像素点合并为像素点区间;C、以所述像素点区间确定猝发读序列的组合;D、以所述猝发读序列组合读取参考块数据,完成运动补偿数据的载入。
所述参考块在参考帧中的位置信息包括参考块的起始载入行在参考帧中的行号,以及起始列和结束列的列号。
所述步骤B包括下列步骤B1、以各参考块起始载入行中的最小行号对应的起始载入行作为当前行;B2、将当前行中各参考块相邻或重叠的像素点合并为一个区间。
所述步骤B2包括下列步骤建立一维坐标轴,所述坐标轴的长度等于参考块在水平维度上出现的范围;将当前行中各参考块的待载入像素点,按照参考块在参考帧中的位置信息映射到所述坐标轴上;以所述坐标轴上的映射区间作为合并区间。
所述步骤C根据合并后的各像素区间的长度和各区间之间的位置关系,以选取的猝发读序列个数最少为原则,确定猝发读序列的组合。
在所述选取的猝发读序列个数最少的前提下,以各猝发读序列长度总和最短为原则,确定猝发读序列的组合。
获取所述合并后的各像素区间的长度包括下列步骤将所述坐标轴上待载入像素点的离散区间的边缘以电平跳变点的形式表示;获取各跳变点的位置信息;以偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度。
获取所述各区间之间的位置关系是通过奇数跳变点位置减去其左侧最近的偶数跳变点位置得到区间间隔长度。
所述步骤D包括下列步骤D1、依次以组合中的各猝发读序列对应的合并区间的起始位置及当前行的行号得出SDRAM读地址,并据此读取相应地址存储的参考块数据;D2、根据各参考块的起始位置与当前猝发读序列的起始位置之间的偏移量,从读取的数据中截取各子块运动补偿所需的数据,完成运动补偿数据的载入。
步骤D1中所述得出SDRAM读地址包括步骤指定参考帧的基地址;将当前行的行号乘以参考帧图像宽度得到当前行相对于基地址的地址偏移;将所述地址偏移和当前猝发读序列对应的合并区间的起始列号相加,得到SDRAM读地址。
所述当前宏块中各子块数量不大于16个。
所述子块具有独立的运动矢量。
本发明有益效果如下本发明方法通过将各个子块对应的参考块在同一行内相邻或重叠的像素点合并为一个像素区间;之后,根据合并后的区间的位置信息和长度信息,确定猝发读序列组合;以所述猝发序列组合从存储器中读取参考块数据,完成运动补偿数据的载入。
通过本发明方法的实施,将多MV或多参考帧运动补偿所需的零散短小的存储器读操作整合成较长的存储器猝发读操作,从而减少了读存储器的次数,提高了存储器的访问效率,减少了等待系统总线仲裁所引入的延迟。
进而避免了对各参考块的重叠区域的重复读取,减少了读存储器所引入的系统额外开销。
本发明还提供一种运动补偿数据载入装置,用于实现多运动矢量宏块的联合载入,并支撑本发明方法。其添加了至少两个计算截取模块,用以计算当前宏块内的独立子块对应的参考块的位置信息,以及截取所述读控器输出的数据,并将所述数据缓存;载入位置汇总模块,用以根据各计算截取模块发来的信息,将当前载入行中相邻或重叠的像素点合并为一段像素区间,并将所述像素区间的位置信息发出;读地址生成模块,用以根据载入位置汇总模块发来的信息,计算应访问的存储地址,并选取猝发读序列,以触发读控器。
本发明装置中的每一计算截取模块分别对应一个参考块缓存,其对应存储各个子块的参考块数据,使得在进行运动补偿运算过程中,从缓存中提取相应数据时,无需复杂的地址生成逻辑。所述参考块缓存的存储空间只需与宏块内的子块大小相仿即可满足本发明的要求。


图1为以帧为单位完成载入的装置结构示意图;图2为以子块为单位完成载入的装置结构示意图;图3为本发明装置结构示意图;图4为本发明译码器映射示意图;图5为本发明方法步骤流程图;图6为本发明获取跳变点位置信息示意图;图7为本发明选取猝发读序列组合示意图。
具体实施例方式
为了在以小尺寸图像块为载入单位时,使存储器的读写效率得到提高,以及节约系统资源,本发明提供一种用于实现多运动矢量的宏块联合载入的运动补偿装置,参见图3所示,其包括至少两个参考块缓存,每一所述参考块缓存分别连接一个计算截取模块,所述各个计算截取模块均通过载入位置汇总模块与SDRAM读地址生成模块相连;SDRAM读控器与所述SDRAM读地址生成模块、同步动态随机访问存储器(SDRAM),以及所述各个计算截取模块分别相连。
上述装置中的各个模块的主要功能为所述参考块缓存,用以分别存储各计算截取模块截取的数据,其数量与一次完成的运动补偿的子块数量相一致。
所述计算截取模块,用以分别计算当前宏块内的各子块对应的参考块的位置信息,以及截取所述SDRAM读控器输出的数据,并将所述数据缓存到相应的参考块缓存。
所述载入位置汇总模块,用以根据各计算截取模块发来的信息,将当前载入行中相邻或重叠的像素点合并为一段像素区间,并将所述像素区间的位置信息发送给所述SDRAM读地址生成模块。
所述SDRAM读地址生成模块,用以根据载入位置汇总模块发来的信息,计算应访问的SDRAM地址,并选取猝发读序列,以触发SDRAM读控器。
所述SDRAM读控器,用以根据所述SDRAM读地址生成模块发来的猝发读序列,相应从SDRAM中读取数据,并输出给所述各个计算截取模块。
所述SDRAM,用以存储当前帧的参考帧数据(各宏块内的子块对应的参考块存在于参考帧中),并按照所述SDRAM读控器的指令向其输出相应地址的数据。
为了实现上述各个模块的主要功能,上述模块具有一些特性,或者在其内部还包括若干子模块。
所述参考块缓存为同步静态随机访问存储器(SRAM),每一参考块缓存的存储空间只需与宏块内的子块大小相仿即可满足本发明的要求。
所述计算截取模块输出的参考块的位置信息包括该参考块所在帧的帧号,以及起始载入行的行号、起始列号和结束列号。起始载入行的行号的具体计算过程为将子块所在宏块在参考帧中的纵坐标乘以16,加上子块运动矢量的垂直分量,再加上子块在宏块内的垂直位置偏移(有0、4、8、12几种)得到。起始列号的具体计算过程为将子块所在宏块在参考帧中的横坐标乘以16,加上子块运动矢量的水平分量,再加上子块在宏块内的水平位置偏移(有0、4、8、12几种)得到。结束列号为起始行号加上子块参考块宽度得到。其中各子块所在参考帧的帧号、子块所在宏块在参考帧中的横/纵坐标、子块的运动矢量及子块在宏块内的位置偏移由软件指定。(本部分为现有技术)各个计算截取模块截取其对应子块运动补偿所需数据的规则为根据其对应的参考块的起始位置与当前猝发读序列的起始位置之间的偏移量,从所述SDRAM读控器读取的数据中截取对应子块运动补偿所需的数据。其中,当前猝发读序列的起始位置由所述SDRAM读地址生成模块在选定猝发读序列组合的同时输出至各个计算截取模块。
为了实现将当前载入行中相邻或重叠的像素点合并为一段像素区间,在所述载入位置汇总模块中设置了译码电路。所述译码电路的数量与计算截取模块的数量对应,即一个译码电路只对应编译一个参考块在当前行中的像素点区间。参见图4所示,通过各译码电路,将宏块内各子块对应的参考块在当前行中的像素点区间译码后,按照各参考块的位置将各译码电路的输出信号映射到一维坐标轴上,并将映射后的结果相或,得出当前行中存在待载入像素点的区间和不存在待载入像素点的区间。图中的平行线为一维坐标轴,数字0至15分别标识各个子块,子块中的圆点填充部分为已载入的区域,子块中白色部分为未载入区域,虚线为当前载入行,一维坐标轴上灰色填充部分为待载入像素点的区间。
所述SDRAM读地址生成模块在开始运动补偿数据载入之前,先通过其内置的比较电路来比较出各计算截取模块对应的参考块的起始载入行行号的最小值,并告知起始行行号为所述最小值的参考块对应的计算截取模块参与当前行的载入(即被选定的计算截取模块才会向载入位置汇总模块输出合法的参考块位置信息)。
所述SDRAM读地址生成模块收到的载入位置汇总模块所述像素区间的位置信息包括该像素区间在其所在帧中的行号、行内起始位置和长度信息。
为了实现根据所述行号和行内起始位置信息,计算应访问的SDRAM地址,以及根据所述像素区间长度和各区间之间的位置关系选取猝发读序列,所述SDRAM读地址生成模块中包括第一电路,通过将所述坐标轴上的相邻位异或,来实现将所述坐标轴上存在待载入像素点的离散区间的边缘以电平跳变点的形式表示;优先级编码器,用以将所述坐标轴上最左边的跳变点作为当前跳变点进行编码,并根据编码后的信息得出当前跳变点的位置信息,其中奇数跳变点的位置信息即为各像素区间的行内起始位置信息;第二电路,用以将所述第一电路得到的跳变点数量置于一个计数器,使在计数范围内的每一时钟周期触发一次所述优先级编码器;第三电路,用以在获取了当前跳变点的位置信息后,屏蔽当前跳变点及其以左的所有跳变点;像素区间长度获取模块,用于以偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度,并将获得的长度保存;像素区间间隔长度获取模块,用于以奇数跳变点位置减去其左侧最近的偶数跳变点位置得到间隔长度,并将获得的长度保存;选取猝发读序列模块,用于根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度,在所述选取的猝发读序列个数最少的前提下,以猝发读序列长度总和最短为原则,确定猝发读序列,并将选出的各猝发读序列的起始位置告知计算截取模块。
所述SDRAM支持猝发读写操作,即在同一行内连续读或写多个连续的存储单元。猝发读写操作具有固定长度,一般为4、8、16几种猝发读序列。猝发读序列越长,需要加入的额外操作占总读写时间的比例越小,SDRAM读写效率也就越高。
基于上述装置,本发明提供一种方法,参见图5所示,其包括下列步骤S1、各个计算截取模块分别获取当前宏块中各子块对应的参考块在参考帧中的位置信息;S2、载入位置汇总模块根据所述位置信息将各参考块当前行的像素点合并为像素点区间;S3、SDRAM读地址生成模块获取所述像素点区间的位置信息和长度信息;S4、以所述像素点区间的位置信息和长度信息确定猝发读序列的组合;S5、SDRAM读控制器以所述猝发读序列组合从SDRAM中读取相应的参考块数据;S6、SDRAM读控制器将读取的数据发送给每一计算截取模块;S7、各计算截取模块从中截取完成其对应的子块运动补偿所需的数据,并将截取的数据分别存储于对应的参考块缓存;S8、当前行行号加1后,返回步骤S2,直至当前宏块中的各子块对应的参考块数据全部载入。
以下通过三个实例具体描述本发明方法。
实例一以最长的猝发读序列为单位,完成数据载入。
S101、各个计算截取模块分别获取当前宏块中各子块对应的参考块在参考帧中的位置信息。
本例按照H.264协议的规定,最多可将一个宏块分为16个子块。根据一次处理子块的数量(16个),在所述装置中对应设置16个计算截取模块,其中每一计算截取模块对应处理一个子块。
宏块内的各个子块所在参考帧的帧号、子块所在宏块在参考帧中的横/纵坐标位置、子块在宏块中的相对位置以及本子块的运动矢量大小均由软件指定,所述各计算截取模块根据其对应的位置信息,分别计算出其对应子块在参考帧中起始载入行的行号、起始列号和结束列号。
各计算截取模块获得了上述位置信息后,将所述位置信息发送给载入位置汇总模块和SDRAM读地址生成模块。
SDRAM读地址生成模块通过其内置的比较电路来比较出各计算截取模块对应的参考块的起始载入行行号的最小值,并告知起始行行号为所述最小值的参考块对应的计算截取模块参与当前行的载入。
S102、载入位置汇总模块根据所述位置信息将各参考块当前行的像素点合并为像素点区间。
在所述载入位置汇总模块中存在译码电路,其数量与所述计算截取模块的数量相一致。即每一计算截取模块输出的参考块位置信息分别通过其对应的译码电路完成译码。
参见图3所示,所述译码电路收到其对应的计算截取模块发来的参考块的起始列号和结束列号,则按照所述起始列号和结束列号,向长度为n的一维水平坐标上输出输出值为1的信号线(长度n为参考块在水平维度内可能出现的位置范围),并在该一维水平坐标上映射出该参考块在当前行中的像素点区间;若译码电路收到其对应的计算截取模块发来的无效值(在步骤S101中,若某个子块对应的计算截取模块不参与当前行的载入,则本处输出超出水平位置范围的值),即该计算截取模块对应的参考块在当前行中没有需要载入的像素点,则该译码电路向所述一维水平坐标上输出值为0的信号线,用以不映射像素点区间。
将各译码电路在所述一维水平坐标上的输出相或,得到当前载入行内需载入的像素点区间。即如图4所示的一维水平坐标上灰色部分为当前载入行内需载入的像素点区间。
S103、SDRAM读地址生成模块获取所述像素点区间的位置信息和长度信息。
参见图6所示,通过SDRAM读地址生成模块内的第一电路,将所述一维坐标上的相邻位异或,来实现将所述一维坐标上待载入像素点的离散区间的边缘以电平跳变点的形式表示,所述电平跳变点为图中以斜线填充的方格。
在将所述边缘转换为跳变点后,以第二电路将跳变点数量置于一个计数器,并在计数范围内的每一时钟周期触发一次优先级编码器。
在每一时钟周期到来时,优先级编码器被触发,按照该优先级编码器的处理规则,其将所述一维坐标上最左边的跳变点作为当前跳变点进行编码。编码后,得到当前跳变点的位置信息,所述当前跳变点的位置信息表明了对应像素点区间在当前行中的的位置(奇数跳变点的位置信息即为各像素区间的行内起始位置信息,偶数跳变点的位置信息即为各像素区间的行内结束位置信息)。
在获得了当前跳变点的位置信息后,以第三电路将当前跳变点及其以左的所有跳变点全部屏蔽,屏蔽区域在图6中以黑色填充表示。所述屏蔽操作用以配合所述优先级编码器的处理规则(即对最左边的跳变点编码),逐一完成各跳变点的编码工作,进而获取各个跳变点的位置信息。
在获得了各个跳变点的位置信息后,通过像素区间长度获取模块将偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度,并将获得的长度保存在对应的寄存器中;通过像素区间间隔长度获取模块将奇数跳变点位置减去其左侧最近的偶数跳变点位置得到该间隔的长度,并将获得的长度保存在对应的寄存器中。
S104、SDRAM读地址生成模块以所述像素点区间的位置信息和长度信息确定猝发读序列的组合。
SDRAM读地址生成模块中的选取猝发读序列模块根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度信息选取猝发读序列组合。
在本例中直接以最长的猝发读序列(例如长度为16)为单位,在一个猝发读序列中尽量多的包含像素点区间。若所述最长的猝发读序列不足以包含某一像素点区间,则以所述最长的猝发读序列为单位,分段包含该像素点区间。
将各个猝发读序列按顺序排列,形成所述猝发读序列组合。
获得所述猝发读序列组合后,依次将各猝发读序列的起始位置输出至各个计算截取模块。
S105、SDRAM读控制器以所述猝发读序列组合从SDRAM中读取相应的参考块数据。
SDRAM读控制器根据所述SDRAM读地址生成模块发来的猝发读序列组合,依次以组合中的各猝发读序列包含的像素点区间的起始位置和当前行的行号得出对应的SDRAM读地址。
所述得出对应的SDRAM读地址的具体处理过程为指定参考帧的基地址;将当前行的行号乘以参考帧图像宽度得到当前行相对于基地址的地址偏移;将所述地址偏移和当前猝发读序列对应的合并区间的起始列号相加,得到SDRAM读地址。
之后,以获得的SDRAM读地址读取相应地址存储的参考块数据。
S106、SDRAM读控制器将读取的数据发送给每一计算截取模块。
S107、各计算截取模块从中截取完成其对应的子块运动补偿所需的数据,并将截取的数据分别存储于对应的参考块缓存。
各计算截取模块根据其对应的参考块的起始位置(起始列号)与当前猝发读序列包含的像素点区间的起始位置(在步骤S104中得到)之间的偏移量,得到本计算截取模块应截取数据的起始位置;以参考块的宽度与所述应截取数据的起始位置相加,得到应截取数据的结束位置。
之后,各计算截取模块从读取的数据中截取各自的数据,并将截取的数据分别存储于对应的参考块缓存。本例有16个计算截取模块,则用16个参考块缓存分别存储各计算截取模块截取的数据。
由于是以猝发读序列组合中各猝发读序列的顺序,一次一次读取数据,所以显然当前一次读出的数据不是当前行的全部数据,进而所述各计算截取模块需要判断是否已完成其对当前行数据的载入,若载入全部完成则表明完成了一行像素点的载入。每一计算截取模块判断其是否完成载入的规则为若对应参考块的起始行号与当前载入行的行号相等,且该参考块起始列号与结束列号完全落入当前猝发读序列包含的像素点区间,则表明该参考块对应的计算截取模块载入操作完毕。
至此,完成了一行像素点的载入。
S108、当前行行号加1后,返回步骤S102,以继续完成后面各行像素点的载入。
若当前行的行号不等于计算截取模块对应的参考块的起始载入行号,则表明该参考块的全部数据已载入。由于每一子块具有独立的运动矢量,可按现有技术完成运动补偿工作。
直至当前宏块中的各子块对应的参考块数据全部载入,并分别完成运动补偿后,开始对下一宏块进行运动补偿。
实例二每一像素点区间对应一个长度与其相同的猝发读序列,完成数据载入。
S201至S203与实例一中的S101至S103相同。
S204、SDRAM读地址生成模块以所述像素点区间的位置信息和长度信息确定猝发读序列的组合。
SDRAM读地址生成模块中的选取猝发读序列模块根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度信息选取猝发读序列组合。
在本例以每一像素点区间的长度一一对应选取猝发读序列,即每一猝发读序列正好可包含一个与其对应的像素点区间。若最长的猝发读序列不足以包含某一像素点区间,则以所述最长的猝发读序列为单位,分段包含该像素点区间。
将选取的各个猝发读序列按像素点区间的顺序排列,形成所述猝发读序列组合。
获得所述猝发读序列组合后,依次将各猝发读序列的起始位置输出至各个计算截取模块。
S205至S208与实例一中的S105至S108相同。
实例三在选取的猝发读序列的数量最少的前提下,以各猝发读序列长度总和最短为原则,确定猝发读序列的组合,并完成数据载入。
S301至S303与实例一中的S101至S103相同。
S304、SDRAM读地址生成模块以所述像素点区间的位置信息和长度信息确定猝发读序列的组合(即SDRAM读地址生成模块中的选取猝发读序列模块根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度信息选取猝发读序列组合)。
目前,SDRAM数据总线宽度为32,猝发读序列的最长长度为16;每个像素点占8个比特,因此SDRAM的每个地址单元能够存储4个像素点。
依据在选取的猝发读序列的数量最少的前提下,以各猝发读序列长度总和最短为原则;以及SDRAM的每个地址单元存储4个像素点,举例如下按位置顺序,第1至第4像素点区间的长度依次为8像素、18像素、4像素和9像素;各像素点区间之间的间隔依次为4像素、32像素、3像素。
参见图7所示,第一个猝发读序列的长度为8,即包含了第1像素点区间(8像素)、第1与第2像素点区间间隔(4像素)以及第2像素点区间,其中第1与第2象素点区间之间的间隔(4像素)及猝发读序列尾部、即第2象素点区间后面的2像素为无用数据;第二个猝发读序列的长度为4,即包含第3像素点区间(4像素)、第3与第4像素点区间间隔(3像素)及第4像素点区间(9像素)。
将选取的各个猝发读序列按像素点区间的顺序排列,形成所述猝发读序列组合。
获得所述猝发读序列组合后,依次将各猝发读序列的起始位置输出至各个计算截取模块。
在本例中,若上述像素点区间和像素点区间之间的间隔不同,则显然可能出现将前3个像素区间包含在同一猝发读序列中,最后一个像素区间单独包含在一个猝发读序列中的情况;也可能出现将第一个像素区间单独包含在一个猝发读序列中,将后3个像素区间包含在同一猝发读序列中的情况。
基于所述实例三,若离散区间个数大于四个时,可根据所述在选取的猝发读序列的数量最少的前提下,以各猝发读序列长度总和最短为原则,继续选取后面的猝发读序列;或者仅根据前四个离散区间的位置关系重复选取猝发读序列。
S305至S308与实例一中的S105至S108相同。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种运动补偿数据载入装置,包括存储器,用以存储当前帧中各宏块内的子块对应的参考块数据;读控器,用以读取存储器中的数据并输出;其特征在于,所述装置还包括至少两个计算截取模块,用以分别计算当前宏块内的各子块对应的参考块的位置信息,以及截取所述读控器输出的数据,并将所述数据缓存;载入位置汇总模块,用以根据各计算截取模块发来的信息,将当前载入行中相邻或重叠的像素点合并为一段像素区间,并将所述像素区间的位置信息发出;读地址生成模块,用以根据载入位置汇总模块发来的信息,计算应访问的存储地址和选取猝发读序列,以触发读控器。
2.如权利要求1所述的装置,其特征在于,所述存储器为同步动态随机访问存储器SDRAM。
3.如权利要求2所述的装置,其特征在于,所述SDRAM为支持猝发读写操作的SDRAM。
4.如权利要求3所述的装置,其特征在于,所述参考块的位置信息包括该参考块所在帧的帧号,以及起始载入行的行号、起始列号和结束列号。
5.如权利要求4所述的装置,其特征在于,在所述载入位置汇总模块中存在译码电路,用以定位当前行中存在待载入像素点的区间和不存在待载入像素点的区间。
6.如权利要求5所述的装置,其特征在于,所述译码电路的数量与计算截取模块的数量对应。
7.如权利要求6所述的装置,其特征在于,通过各译码电路,将宏块内各子块对应的参考块在当前行中的像素点区间译码后,按照各参考块的位置将各译码电路的输出信号映射到一维坐标轴上,并将映射后的结果相或,得出当前行中存在待载入像素点的区间和不存在待载入像素点的区间。
8.如权利要求7所述的装置,其特征在于,所述像素区间的位置信息包括该像素区间在其所在帧中的行号、行内起始位置和长度信息。
9.如权利要求8所述的装置,其特征在于,所述SDRAM读地址生成模块根据所述行号和行内起始位置信息,计算应访问的SDRAM地址;以及根据所述像素区间长度和各区间之间的位置关系选取猝发读序列。
10.如权利要求9所述的装置,其特征在于,所述SDRAM读地址生成模块中包括下列电路,用以获取像素区间的位置信息第一电路,用于将所述坐标轴上待载入像素点的离散区间的边缘以电平跳变点的形式表示;优先级编码器,用以将所述坐标轴上最左边的跳变点作为当前跳变点进行编码,并根据编码后的信息得出当前跳变点的位置信息;第二电路,用以将所述第一电路得到的跳变点数量置于一个计数器,使在计数范围内的每一时钟周期触发一次所述优先级编码器;第三电路,用以在获取了当前跳变点的位置信息后,屏蔽当前跳变点及其以左的所有跳变点。
11.如权利要求10所述的装置,其特征在于,所述第一电路将所述坐标轴上的相邻位异或,用以将所述边缘以电平跳变点的形式表示。
12.如权利要求10所述的装置,其特征在于,所述SDRAM读地址生成模块中还包括像素区间长度获取模块,用于以偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度,并将获得的长度保存;像素区间间隔长度获取模块,用于以奇数跳变点位置减去其左侧最近的偶数跳变点位置得到间隔长度,并将获得的长度保存;选取猝发读序列模块,用于根据所述像素区间长度获取模块和像素区间间隔长度获取模块确定的长度,选取猝发读序列,并将选出的各猝发读序列的起始位置告知计算截取模块。
13.如权利要求12所述的装置,其特征在于,所述选取猝发读序列模块选取猝发读序列的规则为在所述选取的猝发读序列个数最少的前提下,以猝发读序列长度总和最短为原则,确定猝发读序列。
14.如权利要求13所述的装置,其特征在于,所述SDRAM读地址生成模块还用以根据各计算截取模块发来的信息,判定并告知需要参与当前行载入的计算截取模块。
15.如权利要求14所述的装置,其特征在于,所述SDRAM读地址生成模块中还包括比较电路,用以比较出各计算截取模块对应的参考块的起始载入行行号的最小值,并告知起始行行号为所述最小值的参考块对应的计算截取模块参与当前行载入。
16.如权利要求15所述的装置,其特征在于,所述计算截取模块将截取的数据缓存于该计算截取模块对应的参考块缓存中。
17.如权利要求16所述的装置,其特征在于,所述参考块缓存为静态随机访问存储器SRAM。
18.如权利要求17所述的装置,其特征在于,所述SRAM的存储容量至少与所述参考块大小相同。
19.如权利要求18所述的装置,其特征在于,所述计算截取模块根据其对应的参考块的起始位置与当前猝发读序列的起始位置之间的偏移量,从所述SDRAM读控器读取的数据中截取对应子块运动补偿所需的数据。
20.如权利要求19所述的装置,其特征在于,所述子块具有独立的运动矢量。
21.一种运动补偿数据载入的方法,其特征在于,包括下列步骤A、获取当前待处理宏块中各子块对应的参考块在参考帧中的位置信息;B、根据所述位置信息将各参考块的每一行像素点合并为像素点区间;C、以所述像素点区间确定猝发读序列的组合;D、以所述猝发读序列组合读取参考块数据,完成运动补偿数据的载入。
22.如权利要求21所述的方法,其特征在于,所述参考块在参考帧中的位置信息包括参考块的起始载入行在参考帧中的行号,以及起始列和结束列的列号。
23.如权利要求22所述的方法,其特征在于,所述步骤B包括下列步骤B1、以各参考块起始载入行中的最小行号对应的起始载入行作为当前行;B2、将当前行中各参考块相邻或重叠的像素点合并为一个区间。
24.如权利要求23所述的方法,其特征在于,所述步骤B2包括下列步骤-建立一维坐标轴,所述坐标轴的长度等于参考块在水平维度上出现的范围;-将当前行中各参考块的待载入像素点,按照参考块在参考帧中的位置信息映射到所述坐标轴上;-以所述坐标轴上的映射区间作为合并区间。
25.如权利要求24所述的方法,其特征在于,所述步骤C根据合并后的各像素区间的长度和各区间之间的位置关系,以选取的猝发读序列个数最少为原则,确定猝发读序列的组合。
26.如权利要求25所述的方法,其特征在于,在所述选取的猝发读序列个数最少的前提下,以各猝发读序列长度总和最短为原则,确定猝发读序列的组合。
27.如权利要求26所述的方法,其特征在于,获取所述合并后的各像素区间的长度包括下列步骤-将所述坐标轴上待载入像素点的离散区间的边缘以电平跳变点的形式表示;-获取各跳变点的位置信息;-以偶数跳变点位置减去其左侧最近的奇数跳变点位置得到该像素区间长度。
28.如权利要求27所述的方法,其特征在于,获取所述各区间之间的位置关系是通过奇数跳变点位置减去其左侧最近的偶数跳变点位置得到区间间隔长度。
29.如权利要求28所述的方法,其特征在于,所述步骤D包括下列步骤D1、依次以组合中的各猝发读序列对应的合并区间的起始位置及当前行的行号得出SDRAM读地址,并据此读取相应地址存储的参考块数据;D2、根据各参考块的起始位置与当前猝发读序列的起始位置之间的偏移量,从读取的数据中截取各子块运动补偿所需的数据,完成运动补偿数据的载入。
30.如权利要求29所述的方法,其特征在于,步骤D1中所述得出SDRAM读地址包括步骤-指定参考帧的基地址;-将当前行的行号乘以参考帧图像宽度得到当前行相对于基地址的地址偏移;-将所述地址偏移和当前猝发读序列对应的合并区间的起始列号相加,得到SDRAM读地址。
31.如权利要求30所述的方法,其特征在于,所述当前宏块中各子块数量不大于16个。
32.如权利要求31所述的方法,其特征在于,所述子块具有独立的运动矢量。
全文摘要
本发明公开了一种运动补偿数据载入装置,用以解决现有技术存在以小尺寸图像块为载入单位时,存储器的读写效率低下,造成系统资源浪费的问题。所述装置包括存储器,用以存储参考块数据;读控器,用以读取存储器中的数据并输出;至少两个计算截取模块,用以分别计算当前宏块内的各子块对应的参考块的位置信息,以及截取所述读控器输出的数据,并将所述数据缓存;载入位置汇总模块,用以根据各计算截取模块发来的信息,将当前载入行中相邻或重叠的像素点合并为一段像素区间,并将所述像素区间的位置信息发出;读地址生成模块,用以根据载入位置汇总模块发来的信息,计算应访问的存储地址和选取猝发读序列,以触发读控器。
文档编号H04N7/26GK1859570SQ20051009873
公开日2006年11月8日 申请日期2005年9月7日 优先权日2005年9月7日
发明者顾骧 申请人:深圳市海思半导体有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1