一种数据缓存方法及装置与流程

文档序号:14393861阅读:156来源:国知局

本发明涉及电子技术领域,尤其涉及一种数据缓存方法及装置。



背景技术:

目前,处理器通常需要对存储的视频数据进行编码处理,视频编码方法包括帧内压缩和帧间压缩,帧间压缩的关键技术之一是运动估计,通过运动估计进行帧间压缩能够去除相邻帧间的冗余,提高视频图像的压缩比。

当前处理器在通过运动估计进行帧间编码过程中,为提高读取速度,处理器可从存储器中读取部分参考帧数据缓存至缓存器,以使处理器在编码过程中可直接读取缓存器的数据进行运动估计从而提高处理器的处理速度。但是,目前处理器从存储器中读取参考帧数据缓存至缓存器时,为节约成本,处理器仅是在外置存储器存储的参考帧数据上读取当前块对应的搜索窗数据进行缓存至缓存器中。因此,当处理器处理下一个当前块时,处理器需在存储器存储的当前帧数据上重新读取新的搜索窗数据进行缓存。可见,由于外部存储器的读取速度相对处理器读取缓存器的读取速度要慢很多,处理器多次读取存储器内的部分参考帧数据会占用大量的时间,使处理器处于空闲等待状态,严重影响编码效率,并且在更新缓存区的搜索窗时,fpga装置可能需频繁读取存储器同一地址的数据,占用大量读取带宽。



技术实现要素:

本发明实施例所要解决的技术问题在于,提供一种数据缓存方法及装置。装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中数据,缩短了读取数据等待时间,加快了运动估计的速度,并有效节省大量读取带宽。

本发明实施例第一方面提供了一种数据缓存方法,可包括:

当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,其中,所述部分参考帧数据包括w行参考帧数据,所述当前块的尺寸为m×n个像素,所述m为行数,所述n为列数,所述w≥3m,所述m、n和所述w均为自然数;

当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据;

当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,其中,所述新的m行数据与所述已标记的前m行数据大小相同。

本发明实施例第二方面提供了一种数据缓存装置,可包括:

第一监测单元,用于当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,其中,所述部分参考帧数据包括w行参考帧数据,所所述当前块的尺寸为m×n,所述w≥3m,其中,所述w、m、n均为自然数;

第一确定单元,用于当所述第一监测单元监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据;

更新单元,用于当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,其中,所述新的m行数据与所述已标记的前m行数据大小相同。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种数据缓存方法的流程示意图;

图2是本发明实施例提供的一种fpga装置的结构示意图;

图3是本发明实施例提供的一种搜索窗在部分当前帧数据中的位置示意图;

图4是本发明实施例提供的另一种搜索窗在部分当前帧数据中的位置示意图;

图5是本发明实施例提供的一种已标记的前m行数据的示意图;

图6是本发明实施例提供的一种ddr中存储的参考帧数据示意图;

图7是本发明实施例提供的另一种数据缓存方法的流程示意图;

图8是本发明实施例提供的一种ram的空间划分示意图;

图9是本发明实施例提供的一种参考帧数据与ram的存储映射示意图;

图10是本发明实施例提供的又一种数据缓存方法的流程示意图;

图11是本发明实施例提供的一种目标参考块在参考帧数据中的位置的示意图;

图12是本发明实施例提供的一种数据缓存装置的结构示意图;

图13是本发明实施例提供的另一种数据缓存装置的结构示意图;

图14是本发明实施例提供的一种终端的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供的一种数据缓存方法可以应用于可编程门阵列fpga进行数据缓存的场景。

下面将结合附图1-附图11,对本发明实施例提供的一种数据缓存方法进行详细介绍,其中,实施例的执行主体可为数据缓存装置,具体可以是fpga(fieldprogrammablegatearray,现场可编程门阵列)装置,下列实施例以执行主体为fpga装置进行描述。

为了更好描述本发明实施例,下面将对本发明涉及的运动估计算法原理进行详细描述。

目前,处理器通常需要对存储在内存中的视频数据进行编码处理,视频编码方法包括帧内压缩和帧间压缩,帧间压缩的关键技术之一是运动估计,通过运动估计进行帧间压缩能够去除相邻帧间的冗余,提高视频图像的压缩比。一般情况下,相邻帧间的内容变化非常有限,并且有着较大的相关性,这种相关性成为时域冗余度。运动估计的目的正是要找出这种时域相关性,帮助编码端尽可能的将它去除。

在视频编码中,将正在进行运动估计的帧称为当前帧数据或目标帧,将在当前帧数据运动估计中用来作为运动估计基准的帧称为参考帧数据。当前图像可以被划分为相同大小的若干数据块,当前帧数据中进行运动估计的数据块可称为当前块。运动估计通常以数据块或子数据块为单位进行,每个数据块可由16×16的像素数据组成。在运动估计过程中,最重要的过程就是搜索匹配过程。以一个进行搜索匹配的当前块为例,搜索匹配的目的是在参考帧数据中找到与当前块的尺寸相同、在图像上亮度分量最相似的参考块,这个最相似的参考块称为最优匹配块,匹配块所在的位置成为最佳匹配位置,然后将当前块与匹配块两者的位置差作为当前块的运动矢量,当前块和匹配块两者的像素差作为残差块,运动矢量和残差块即为当前块的搜索匹配结果。

为提高运动估计的效率,通常在参考帧数据中固定范围内搜索匹配块,搜索范围和当前块在图像中所处位置相关,搜索范围可以称为搜索窗,搜索窗中的参考帧数据为搜索窗数据,对当前块进行搜索匹配时需要当前块数据和搜索窗数据参与运动估计。

在以下实施例所涉及到的一行参考帧数据或多行参考帧数据具体可指的是参考帧中的一行或多行像素数据、一行数据或多行数据具体可指的是数据对应的图像中的一行或多行像素数据。一列或多列参考帧数据具体也可指的是参考帧中的一列或多列像素数据,一列或多列数据具体可指的是数据对应的图像中的一列或多列像素数据。

参见图1,是本发明实施例提供的一种数据缓存方法的第一实施例流程示意图。本发明实施例的一种数据缓存方法包括如下步骤:

s100,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变。

在本发明实施例中,fpga装置的一种结构示意图具体可如图2所示,fpga装置可通过pci(peripheralcomponentinterconnect,外设部件互连标准)总线与主板的外置存储器相连接,其中,主板通过总线与cpu(centralprocessingunit,中央处理器)相连接。当fpga装置需进行运动估计运算时,fpga装置可获取主板的外置存储器存储的当前帧数据和参考帧数据,并将当前帧数据存储至fpga装置的外置存储器中。进一步的,fpga装置可将当前帧数据和参考帧数据分别缓存至缓存区1和缓存区2中,并控制运动估计模块从缓存区1和缓存区2读取数据进行运动估计。在以下发明实施例中,主要针对fpga装置读取外置存储器存储的部分参考帧数据缓存至fpga装置控制缓存区1的具体实施方式进行详细描述。

在本发明实施例中,缓存区具体可以是ram(randomaccessmemory,随机存取存储器),在以下实施例中以ram作为缓存区进行具体描述。ram中缓存部分参考帧数据,即可以理解的是ram中缓存参考帧数据中的一部分数据。在本发明实施例中,当当前块的尺寸为m×n个像素,m为行数,n为列数时,部分参考帧数据可包括w行参考帧数据,其中,w≥3m,w、m和n可均为自然数。具体的,当前块的尺寸可以是16×16个像素的当前块,也可以是其它尺寸,比如32×32个像素、8×8个像素或4×4个像素等,在此不限制。fpga装置可以根据ram的资源限制,进行灵活配置w。优选的,w可以为3m,即是,当当前块的尺寸为16×16个像素时,w可以为48,即fpga配置的ram可以缓存48行的部分参考帧数据。

在本发明实施例中,当fpga装置根据参考帧数据对当前帧数据的数据块进行运动估计时,fpga装置可在ram中缓存的部分参考帧数据中确定当前块的搜索窗,并按运动估计算法在确定的当前块的搜索窗对当前块进行运动估计运算。

在本发明实施例中,当fpga装置进行运动估计的当前块发生改变时,fpga装置可在ram中缓存的部分参考帧数据中重新确定当前块的搜索窗。当fpga装置在ram中缓存的部分参考帧数据中确定当前块的搜索窗时,fpga装置可监测当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变。如参见图3所示的搜索窗在部分当前帧数据中的位置示意图,搜索窗的宽度可小于当前帧数据的宽度(即是搜索窗的列数小于当前帧数据的列数)。当前块1为当前块2的前一个当前块,当fpga装置进行运动估计的当前块为当前块1时,fpga装置确定的当前块1的搜索窗可以是实线搜索窗1000;当fpga装置进行运动估计的当前块为当前块2时,fpga装置确定的当前块1的搜索窗可以是虚线搜索窗2000,由于搜索窗1000和搜索窗2000不重合,可确定当前块的搜索窗位置相比前一个当前块的搜索窗位置发生改变。进一步的,还可以参见图4所示的搜索窗在部分当前帧数据中的位置示意图,搜索窗的宽度与当前帧数据的宽度相同(即是搜索窗的列数等于当前帧数据的列数),当前块3为当前块4的前一个当前块,当fpga装置进行运动估计的当前块为当前块3时,fpga装置确定的当前块3的搜索窗可以是实线搜索窗3000,当fpga装置进行运动估计的当前块为当前块4时,fpga装置确定的当前块4的搜索窗仍可以是实线搜索窗3000,由于当前块4和当前块5的搜索窗重合,可确定当前块的搜索窗位置相比前一个当前块的搜索窗位置没有改变。

s101,当监测所述当前块的搜索窗位置发生改变时,在所述rm中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据。

在本发明实施例中,当前块的搜索窗相比前一个当前块的搜索窗移出至少一列部分参考帧数据具体可参见图3,当搜索窗从搜索窗1000移至搜索窗2000时,可见在搜索窗2000的左边至少一列部分参考帧数据被移出。fpga装置可从搜索窗2000的左边被移出的至少一列部分参考帧数据中的第一行开始获取m行数据,即获取与当前块相同行数的数据。当然,fpga装置在进行运动估计时,fpga装置也可在ram中部分参考帧数据中从右往左确定搜索窗,或者从上往下确定搜索窗,或者从下往上确定搜索窗等,在此不进行赘述。

在本发明实施例中,当fpga装置确定移出的至少一列部分参考帧数据中的前m行数据时,fpga装置可对移出的至少一列部分参考帧数据中的前m行数据进行标记。其中,标记的前m行数据可被识别为已老化数据,即在后续的运动估计中,该部分数据不再参与运算。因此,在本发明实施例中,当fpga装置完成前一个当前块的运动估计,确定当前块的搜索窗位置进行运动估计时,终端可识别前一个当前块进行运动估计后ram中存储的部分参考帧数据中所老化的数据。

在具体应用中,参见图5所示的已标记的前m行数据的示意图,当fpga装置进行运动估计的当前块从当前块1更改为当前块2时,fpga装置确定移出的至少一列部分参考帧数据中的前m行数据可以是图5的阴影部分数据。因此,fpga装置可对阴影部分数据进行标记,如添加标签,以使fpga装置可根据阴影部分数据的标签识别出该阴影部分数据为已老化数据。进一步的,当fpga装置不断的获取新的当前块进行运动估计时,fpga装置可确定多个移出的至少一列部分参考帧数据中的前m行数据,从而有多个已标记的前m行数据。

s102,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述ram中所述已标记的前m行数据存储进所述ram中。

在本发明实施例中,fpga装置可监测已标记的前m行数据的大小是否满足预设条件。如fpga装置可判断已标记的前m行数据的组数是否大于预设阈值,若fpga装置判断已标记的前m行数据的组数大于预设阈值,fpga装置可确定已标记的前m行数据的大小满足预设条件。其中,预设阈值可以自行设置,具体可以为1,2,3等自然数。优选的,fpga装置可判断已标记的前m行数据的组数是否大于1;或者fpga装置可判断已标记的前m行数据是否组成前m行参考帧数据等。

在本发明实施例中,当fpga装置检测到已标记的前m行数据的大小满足预设条件时,fpga装置可确定对老化数据进行覆盖更新。因此,fpga装置可从外置存储器中存储的参考帧数据中读取新的m行数据,将新的m行数据替换ram中已标记的前m行数据存储进ram中。

在本发明实施例中,外置存储器可以是ddr(doubledatarate,双倍速率同步动态随机存储器)在以下实施例中以ddr作为外置存储器进行具体描述。fpga装置可从ddr中读取部分参考帧数据存储至ram中进行缓存。因此,fpga装置可根据ram中存储的部分参考帧数据,在ddr存储的参考帧数据中按序获取新的m行数据,将新的m行数据替换掉ram中已标记的前m行数据存储进ram中,以进行更新ram中的部分参考帧数据。

在具体应用中,可参见6所示的ddr中存储的参考帧数据示意图,fpga装置可首先将ddr中存储的参考帧数据中的参考帧数据0~参考帧数据15载入ram中。当fpga装置根据ram中的部分参考帧数据进行运动估计时,fpga装置可同时在ram中确定已老化数据。其中,当fpga装置确定ram中的已老化数据满足预设条件时,fpga装置可从ddr中读取ram中存储的部分参考帧中的下一部分参考帧数据。如在ram中,当fpga装置设置预设条件为已老化数据的组数为一组时,则当参考帧数据0为已老化数据时,fpga装置可从ddr中读取参考帧数据16存储至参考帧数据0的位置上,从而实现对已老化数据的更新。进一步的,还可以例如:当fpga装置设置预设条件为已老化数据的组数为5组时,则当参考帧数据0、参考帧数据3、参考帧数据6、参考帧数据9和参考帧数据12均为已老化数据时,fpga装置可从ddr中读取参考帧数据16、参考帧数据17、参考帧数据18、参考帧数据19和参考帧数据20分别存储至参考帧数据0、参考帧数据3、参考帧数据6、参考帧数据9和参考帧数据12的位置上,从而实现对已老化数据的更新。

在本发明实施例中,fpga装置可在运动估计的同时确定ram中的已老化数据,并将新的m行数据存储至已老化数据的位置上。因此,由上可知,当fpga装置不断地从上往下处理当前帧数据的当前块时,fpga装置可不断的从ddr中储存的参考帧数据中的读取新的m行数据写入ram中进行更新已老化数据,这可有效提高缓存效率,最大化减少数据载入带宽。

在具体应用中,可例如,当前块的尺寸为16×16个像素,假设每个当前帧数据的当前块的搜索窗最大可以为垂直方向上的48行参考帧数据,当然也可以是小于48行的其他行数的参考帧数据,ram中可存储48行参考帧数据。优选的在本发明实施例中搜索窗为48行参考帧数据。当fpga装置对当前帧数据的一行数据块处理完成运动估计时,搜索窗往下移,并移出16行当参考帧数据。由于搜索窗中被移出的16行参考帧数据已老化在后续运算中不会再使用,fpga装置读取ddr存储的48行参考帧数据中的以下16行当前帧数据覆盖至搜索窗移出的16行参考帧数据的位置上。这样下面新进入的16行当前帧数据就可以卷绕存储进空出的空间,由于当前块的尺寸是16×16个像素,因此fpga装置可控制ram以16行为单位进行卷绕存储刷新。当然,搜索窗往左移或者右移等方向进行移动并更新已老化数据时,fpga装置可同理按照上述的方式fpga装置可控制ram以预置单位进行卷绕存储刷新,仅是单位大小不一致。

在本发明实施例中,由于参考帧数据从ddr载入到ram中的带宽跟参考帧数据量大小以及ddr相同地址参考帧数据的载入次数有关系,对于不同的缓存设计,参考帧数据量大小是一样的,因此ddr相同地址参考帧数据的载入次数成为衡量带宽的指标,可见,在本发明实施例中,对于ddr存储的参考帧数据,每个ddr地址只读取了一次,因此,可节省大量读取参考帧数据的带宽资源。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述ram中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

参见图7,是本发明实施例提供的一种数据缓存方法的第二实施例流程示意图。本发明实施例的一种数据缓存方法包括如下步骤:

s200,配置n个ram。

在本发明实施例中,fpga装置可配置n个ram,fpga装置可对配置的n个ram进行并行读取数据,n>1,显然这增大了fpga装置的读取效率,使得fpga装置的处理速度更快,并且由于fpga装置可进行配置ram的个数以及ram的深度,这增加配置的灵活性并可根据需要进行扩展支持不同搜索窗以及图像分辨率大小,从而可快速进行不同应用的扩展。其中,每个ram的存储空间大小分别相同,并根据w行参考帧数据所需数据的存储空间进行配置每个ram的存储空间大小。在具体应用中,可例如:当w为48,当前块为16×16,则搜索窗垂直48行数据,ram位宽设置为128bit(16byte),按照参考帧数据的宽度是1920(假设每个像素1byte),那么每个ram深度为(48/m)*(1920/m),其中,m为当前块的像素行数。当m为16时,若需对1080p分辨率的搜索范围为(-16,+15)的参考帧数据的缓存处理,每个ram深度可以为(48/16)*(1920/16)=360,也就是说我们只需要16片sp360×128bit的ram就能完成1080p分辨率的搜索范围(-16,+15)参考帧数据的缓存处理。

在本发明实施例中,为方便缓存数据更新过程中的ram寻址,fpga装置可对配置的n个ram进行顺序编址,如fpga装置配置16片ram时,fpga装置可对16片的ram依次编号为第一个ram、第二个ram……第16个ram。在具体应用中可对n个ram分别编号如下:spram0、spram1……spram15。

在本发明实施例中,fpga装置还可按连续地址顺序划分出每个ram的f个存储空间,并按每个所述ram的连续地址顺序对f个存储空间分别进行顺序编址。如参见图8所示的一种ram的空间划分示意图,ram从上到下的每个地址依次相连,fpga装置可从上到下划分为3个存储空间,fpga装置可对3个存储空间依次编号为第一个存储空间、第二个存储空间以及第三个存储空间,每个存储空间的大小为一行参考帧数据的大小,每个存储空间用于存储一行参考帧数据。

s201,按行列顺序依次逐行读取所述外置存储器存储的参考帧数据的m行参考帧数据,将所述m行参考帧数据分别写入所述n个ram中缓存。

在本发明实施例中,fpga装置可基于参考帧的从上到下的顺序逐行读取外置存储器中存储的参考帧数据的m行参考帧数据,并将读取到的m行参考帧数据分别写入到n个ram中。其中,fpga装置将读取到的m行参考帧数据分别写入到n个ram中具体可以是,fpga装置将m行参考帧数据中的第一行参考帧数据至最后一行参考帧数据,按照所在行的排列顺序依次对应存储至第一个ram至第n个ram中。如当n个ram分别编号为spram0、spram1……spramn时,fpga装置可将m行参考帧数据中的第一行参考帧数据存储至spram0中,将m行参考帧数据中的第二行参考帧数据存储至spram1中,当m大于n时,fpga装置可采用循环存储方式,将m行参考帧数据中的第n+1行存储至spram0中。因此,当将参考帧数据中的第i行的参考帧数据存储到第j个ram的具体关系可以为:j=imod(n),fpga装置可根据该对应关系获取参考帧数据中的第i行的参考帧数据所要存储的第j个ram,并将参考帧数据中的第i行参考帧数据存储至第j个ram中。其中,fpga装置将参考帧数据中的第i行参考帧数据存储至第j个ram中可以是fpga装置可将参考帧数据中的第i行参考帧数据按连续地址顺序存储至第j个ram中。

在本发明实施例中,当fpga装置将参考帧数据中的第i行参考帧数据存储至第j个ram,如果此时第j个ram中的第一个存储空间存储有参考帧数据时,fpga装置可按连续地址顺序获取到下一个的存储空间,即第二个存储空间并将第i行参考帧数据存储至第二个存储空间中。可见,一个有f个存储空间的ram可卷绕存储f行参考帧数据。因此可见,将参考帧数据中的第i行的参考帧数据存储到ram的第k个存储空间的具体关系可以为:k=imod(f)。

在具体应用中,可例如:当当前块的尺寸为16×16个像素,每个当前块的搜索窗为垂直方向上的48行数据时,fpga装置可以将所有ram可设计成一共最大可以缓存48行的参考帧数据。其中,fpga装置可一共配置16片ram,每片ram可以存储3行的数据。如图9所示的参考帧数据与ram的存储映射示意图,以1080p(1920x1088)分辨率图像进行示例,图左半部为参考帧数据示意图,行0~行1087代表1088行参考帧数据,这1088行参考帧数据按照16行为一个单位,分成1088/16=68单位,每个单位相同index(index=linenumbermod16)的行存储在一片ram里面,每片ram按连续地址分三部分空间,每片空间大小可以连续存储一行参考帧数据,其中行0/行16/行32...参考帧数据存储在ram0上,如图中虚线所示,行1/行17/行33...参考帧数据存储在ram1上,以此类推,行15/行31/行47...参考帧数据存储在ram15上,如图中实线所示。

可见,在本发明实施例中,fpga装置把参考帧数据映射进不同的ram,从而可实现搜索窗内部任意位置参考块的多行数据同时读取,流水起来一个周期可以读到需要的参考块数据,提高了装置的数据的读取效率。

s202,监测所述n个ram是否已存满数据。

fpga装置可对各个配置的ram进行监测剩余空间大小,根据监测到的各个ram的剩余空间大小判断各个ram是否已存满数据。

s203,当确定所述n个ram已存满数据时,停止读取所述存储器中的参考帧数据。

在本发明实施例中,当监测到各个ram的剩余空间大小为0时,fpga装置可确定n个ram已存满数据。当fpga装置确定n个ram已存满数据时,fpga装置可停止读取ddr中的参考帧数据,避免将数据继续写入存满数据的ram中对ram中的数据进行覆盖,从而提高ram中数据安全性。

s204,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变。

s205,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据。

s206,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中。

在本发明实施例中,步骤s204、步骤s205和步骤s206的具体实施方式可参见上述实施例,在此不进行赘述。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

参见图10,是本发明实施例提供的一种数据缓存方法的第三实施例流程示意图。本发明实施例的一种数据缓存方法包括如下步骤:

s300,当需从所述n个ram中读取目标参考块对当前块进行运动估计时,获取所述目标参考块在参考帧数据中的坐标,所述坐标包括横坐标和纵坐标。

在本发明实施例中,目标参考块在参考帧数据中的坐标可以是目标参考块在参考帧数据对应的参考帧中横坐标和纵坐标,即是目标参考块在参考帧图像中的横坐标和纵坐标。其中,横坐标可以是目标参考块的左上角像素至参考帧左边界距离,纵坐标可以是目标参考块中的任意一行数据到参考帧的顶边界距离,其中,距离可通过行列表示。

s301,根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的ram的编址。

由上述实施例我们可以获知,将参考帧的第i行的像素行存储到第j个ram的具体关系可以为:j=imod(n),n为fpga装置配置的ram的个数。因此,fpga装置可结合该关系,根据目标参考块的纵坐标确定所述目标参考块中的每行数据分别对应的ram的编址,从而可根据ram的编址确定对应的ram。

具体可以参见图11所示的目标参考块在参考帧数据中的位置的示意图,ram中存储的部分参考帧可以是搜索窗1,竖虚线是参考帧数据里面16像素对齐位置,因为目标参考块可能在搜索窗任意位置,因此图11中目标参考块的任意一行像素行可能跨16像素边界。由于任意参考块的尺寸可为16×16个像素,ram的位宽为16byte,因此,图11中目标参考块的任意一行数据可以存储在ram中的2个连续地址上。当fpga装置配置16片ram,目标参考块的任意一行数据的纵坐标为25时,根据j=imod(n),可获得25mod16=9,可见,fpga装置将该目标参考块中的纵坐标为25的一行数据存储到第9个ram中。

s302,根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的存储空间的编址。

由上述实施例我们可以获知,将参考帧数据中的第i行参考帧数据存储到ram的第k个存储空间的具体关系可以为:k=imod(f),f为fpga装置在ram里面划分的存储空间的个数。因此,fpga装置可结合该关系,根据目标参考块的纵坐标确定所述目标参考块中的每行数据分别对应的存储空间的编址,从而可根据存储空间的编址确定对应的存储空间。

具体可以参见图11所示的目标参考块在参考帧数据中的位置的示意图,当每个ram划分为3个存储空间,图11中目标参考块中的任意一行数据的纵坐标为25(即是该行数据在参考帧数据的第25行位置上)时,根据k=imod(f),可获得25mod3=1,可见,fpga装置将该目标参考块中的纵坐标为25的一行数据存储到第9个ram的第1片存储空间中。

s303,根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的偏移地址。

在本发明实施例中,将横坐标对ram的位宽取整,获得存储空间的偏移地址。如当横坐标为x,位宽为y,则偏移地址z=[x/y]。如参见图11,该目标参考块中的纵坐标为25,横坐标为20的一行数据在第一片存储空间的具体位置可以是:当ram的位宽为16byte,数据存储都是16像素对齐连续存储,因此参考块的横坐标可用来获得ram中的第1片存储空间的具体偏移地址,即偏移地址z=[20/16]=1,,那么可知该目标参考块中的纵坐标为25,横坐标为20的一行数据在ram9的开始存储地址是第1片空间的地址1。

s304,结合所述目标参考块中的各行数据分别对应的ram的编址,所述目标参考块中的各行数据分别对应的存储空间的编址以及所述目标参考块中的各行数据分别对应的偏移地址,获得所述目标参考块中的各行数据的存储地址。

s305,根据所述目标参考块中的各行数据的存储地址并行读取所述目标参考块的各行数据,获得所述目标参考块。

在发明实施例中,fpga装置可在对应的ram中的对应的存储空间的偏移地址上从n个ram中并行读取数据,从而fpga装置可在同个时钟周期中读取目标参考块中的多行数据或全部数据,当把目标参考块读取完毕后,fpga装置可获得目标参考块。

在本发明实施例中,当fpga装置需在同时对ram读取或写入数据时,fpga装置可进行仲裁。当fpga装置同时接收到对所述ram读操作指令和写操作指令时,判断所述ram是否可以同时进行读操作和写操作,当判断所述ram不能同时进行读操作和写操作时,控制所述ram进行读操作。保证fpga装置中读写同时发生时候,保证数据正确性,当ram读空闲时候再写入数据。

s306,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变。

s307,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据。

s308,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中。

在本发明实施例中,步骤s306、步骤s307和步骤s308的具体实施方式可参见上述实施例,在此不进行赘述。

在本发明实施例中,装置把搜索窗映射进不同的ram,并且地址读写译码简单,可以实现搜索窗内部任意参考块的多行同时读取,流水起来可至少一个周期可以读到需要的参考块数据,提高了装置的数据的读取效率。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

下面将结合附图12-13,对本发明实施例提供的数据缓存装置进行详细介绍。需要说明的是,附图12-13所示的数据缓存装置,用于执行本发明图1-图11所示实施例的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明图1-图11所示的实施例。

在本发明实施例中,所描述的数据缓存装置具体可为fpga装置,下面将以fpga装置为例进行描述说明。

参见图12,是本发明实施例提供的一种数据缓存装置的结构图。本发明实施例中所描述的装置包括:

第一监测单元100,用于当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变。

第一确定单元200,用于当所述第一监测单元监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据。

更新单元300,用于当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中。

可以理解的是,本实施例的fpga装置中的单元的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再进行赘述。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

参见图13,是本发明实施例提供的另一种数据缓存装置的实施例结构图。本发明实施例中所描述的装置包括:

第一监测单元100、第一确定单元200和更新单元300。

其中,所述装置包括:

配置单元400,用于配置n个ram,所述n>1;

读取写入单元500,用于按行列顺序依次逐行读取所述外置存储器存储的参考帧数据的m行参考帧数据,将所述m行参考帧数据分别写入所述n个ram中缓存;

第二监测单元600,用于监测所述n个ram是否已存满数据;

停止读取单元700,用于当所述第二监测单元确定所述n个ram已存满数据时,停止读取所述存储器中的参考帧数据。

其中,所述配置单元400包括:

配置子单元10,用于配置每个所述ram的存储空间,其中,每个所述ram的存储空间大小相同,n个所述ram的存储空间大小与所述w行参考帧数据的大小相同;

第一编址子单元20,用于对所述n个ram顺序编址;

第二编址子单元30,用于按每个所述ram的连续地址划分出每个所述ram的f个存储空间,并按每个所述ram的连续地址顺序对所述f个存储空间分别进行顺序编址,其中,每个存储空间用于存储一行参考帧数据。

其中,所述读取写入单元500具体用于:

将所述m行参考帧数据中的第一行参考帧数据至最后一行参考帧数据,按照所在行的排列顺序依次存储至对应的第一个ram至第n个ram中。

其中,所述读取写入单元500还具体用于:

当将一行参考帧数据存储进对应的ram中时,按ram中的连续地址顺序将一行参考帧数据存储进所述对应的ram中的对应的存储空间中。

其中,所述更新单元300包括:

读取子单元40,用于在所述外置存储器中存储的参考帧数据中按行列顺序依次逐行读取所述部分参考帧数据之后的m行数据,其中,所述m行数据与所述已标记的前m行数据大小相同;

写入子单元50,用于将所述m行数据作为所述新的m行数据分别写入所述n个ram中缓存的所述已标记的前m行数据所存储的位置上。

其中,所述装置还包括:

第一获取单元600,用于当需从所述n个ram中读取目标参考块对当前块进行运动估计时,获取所述目标参考块在参考帧数据中的坐标,所述坐标包括横坐标和纵坐标;

第二确定单元601,用于根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的ram的编址;

第三确定单元602,用于根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的存储空间的编址;

第四确定单元603,用于根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的偏移地址;

第二获取单元604,用于结合所述目标参考块中的各行数据分别对应的ram的编址,所述目标参考块中的各行数据分别对应的存储空间的编址以及所述目标参考块中的各行数据分别对应的偏移地址,获得所述目标参考块中的各行数据的存储地址;

读取单元605,用于根据所述目标参考块中的各行数据的存储地址并行读取所述目标参考块的各行数据,获得所述目标参考块。

其中,所述装置包括:

判断单元700,用于当同时接收到对所述ram读操作指令和写操作指令时,判断所述ram是否可以同时进行读操作和写操作;

控制单元800,用于当判断所述ram不能同时进行读操作和写操作时,控制所述ram进行读操作。

可以理解的是,本实施例的fpga装置中的单元的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再进行赘述。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

请参见图14,为本发明实施例提供了一种终端的结构示意图。如图14所示,所述终端1000可以包括:至少一个处理器1001,例如cpu,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(display)、键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图14所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及通信连接应用程序。

在图14所述的终端1000中,用户接口1003主要用于为用户提供输入的接口,获取用户输入的数据;网络接口1004用于与终端相连接;而处理器1001可以用于调用存储器1005中存储的通信连接应用程序,并具体执行以下操作:

当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,其中,所述部分参考帧数据包括w行参考帧数据,所述当前块的尺寸为m×n个像素,所述m为行数,所述n为列数,所述w≥3m,所述n、m和所述w均为自然数;

当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据;

当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,其中,所述新的m行数据与所述已标记的前m行数据大小相同。

其中,所述缓存区包括n个ram;

在所述当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,处理器1001监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变之前,处理器1001还执行:

配置n个ram,所述n>1;

按行列顺序依次逐行读取所述外置存储器存储的参考帧数据的m行参考帧数据,将所述m行参考帧数据分别写入所述n个ram中缓存;

监测所述n个ram是否已存满数据;

当确定所述n个ram已存满数据时,停止读取所述存储器中的参考帧数据。

其中,所述处理器1001配置n个ram包括:

配置每个所述ram的存储空间,其中,每个所述ram的存储空间大小相同,n个所述ram的存储空间大小与所述w行参考帧数据的大小相同;

对所述n个ram顺序编址;

按每个所述ram的连续地址划分出每个所述ram的f个存储空间,并按每个所述ram的连续地址顺序对所述f个存储空间分别进行顺序编址,其中,每个存储空间用于存储一行参考帧数据,所述f为自然数。

其中,所述处理器1001按行列顺序依次逐行读取所述外置存储器存储的参考帧数据的m行参考帧数据,将所述m行参考帧数据分别写入所述n个ram中缓存包括:

将所述m行参考帧数据中的第一行参考帧数据至最后一行参考帧数据,按照所在行的排列顺序依次存储至对应的第一个ram至第n个ram中。

其中,所述处理器1001将所述m行参考帧数据中的第一行参考帧数据至最后一行参考帧数据,按照所在行的排列顺序依次存储至对应的第一个ram至第n个ram中包括:

当将一行参考帧数据存储进对应的ram中时,按ram中的连续地址顺序将一行参考帧数据存储进所述对应的ram中的对应的存储空间中。

其中,所述当监测所述当前块的搜索窗位置发生改变时,处理器1001在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据包括:

在所述外置存储器中存储的参考帧数据中按行列顺序依次逐行读取所述部分参考帧数据之后的m行数据,其中,所述m行数据与所述已标记的前m行数据大小相同;

将所述m行数据作为所述新的m行数据分别写入所述n个ram中缓存的所述已标记的前m行数据所存储的位置上。

其中,所述处理器1001还执行:

当需从所述n个ram中读取目标参考块对当前块进行运动估计时,获取所述目标参考块在参考帧数据中的坐标,所述坐标包括横坐标和纵坐标;

根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的ram的编址;

根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的存储空间的编址;

根据所述目标参考块的纵坐标确定所述目标参考块中的各行数据分别对应的偏移地址;

结合所述目标参考块中的各行数据分别对应的ram的编址、所述目标参考块中的各行数据分别对应的存储空间的编址以及所述目标参考块中的各行数据分别对应的偏移地址,获得所述目标参考块中的各行数据的存储地址;

根据所述目标参考块中的各行数据的存储地址并行读取所述目标参考块的各行数据,获得所述目标参考块。

其中,所述处理器1001还执行包括:

当同时接收到对所述ram读操作指令和写操作指令时,判断所述ram是否可以同时进行读操作和写操作;

当判断所述ram不能同时进行读操作和写操作时,控制所述ram进行读操作。

可以理解的是,本实施例的终端中的单元的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再进行赘述。

在本发明实施例中,当根据缓存区中缓存的部分参考帧数据对当前块进行运动估计时,监测所述当前块的搜索窗位置相比前一个当前块的搜索窗位置是否发生改变,当监测所述当前块的搜索窗位置发生改变时,在所述缓存区中确定所述当前块的搜索窗相比前一个当前块的搜索窗所移出的至少一列部分参考帧数据中的前m行数据,并标记所述前m行数据,当检测到已标记的前m行数据的大小满足预设条件时,从外置存储器中存储的参考帧数据中读取新的m行数据,将所述新的m行数据替换所述缓存区中所述已标记的前m行数据存储进所述ram中,这使得装置可在读取缓存器的数据进行运动估计时,同时更新缓存器中的数据,缩短了读取数据等待时间,加快了运动估计的处理速度,并有效节省大量读取带宽。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1