用于视频解码器的数据缓存方法和装置与流程

文档序号:14023231阅读:468来源:国知局
用于视频解码器的数据缓存方法和装置与流程

本申请涉及计算机技术领域,更具体地,涉及一种用于视频解码器的数据缓存方法和装置。



背景技术:

随着图像和视频处理技术的迅速发展,很多电子设备都集成了图像和视频处理装置。利用集成的图像和视频处理装置,这些电子设备能够接收并处理视频数据,从而将其转换为可播放的视频图像。

出于传输和存储的考虑,视频数据通常会被按照预定编码标准压缩,例如mpeg-2标准等。这些编码标准通常采用运动补偿(motioncompensation)技术。具体地,在运动补偿中,视频编码器或视频解码器会利用参考图像来重建待处理图像中的一部分区域,其中参考图像可以是已经被解码的一帧图像(对于视频解码器)或者是已经被编码的一帧图像(对于视频编码器),并且参考图像通常被存储在电子设备的主存储器中。

对于视频解码器,为了提高视频解码效率和减少对主存储器的访问,视频数据缓存被用来缓存在解码过程中从主存储器获取的数据,并且根据视频解码器的请求将缓存的数据提供给视频解码器。由于视频数据缓存的容量有限,因此在整个解码过程中需要不断地更新其中缓存的视频数据。然而,现有的视频数据缓存的数据更新方法效率较低,从而降低了视频解码效率,并且增加了对主存储器的访问以及视频解码的系统带宽需求。



技术实现要素:

本申请的一个目的在于提供一种用于视频解码器的数据缓存方法和装置,以提高视频解码效率,降低视频解码的系统带宽需求。

在本申请的一个方面,提供了一种用于视频解码器的数据缓存方法,包括:接收由视频解码器发送的数据请求,所述数据请求用于请求一个或多个参考像素数据块以对一个当前像素数据块进行解码处理,其中所述数据请求中包括一个或多个参考运动矢量,并且每个参考运动矢量对应于一个参考像素数据块;对于所述数据请求中的每个参考运动矢量:确定所述参考运动矢量对应的参考像素数据块是否已被缓存在缓存存储器中,其中所述缓存存储器中缓存有多个参考像素数据块;以及当所述参考运动矢量对应的参考像素数据块未被缓存在所述缓存存储器中时:a)确定所述缓存存储器中已缓存的参考像素数据块的预期使用次数和历史使用状况,其中所述预期使用次数分别指示每个已缓存的参考像素数据块将被用于当前像素数据块之后的预定数量个后续像素数据块的解码处理的次数,而所述历史使用状况指示所述已缓存的参考像素数据块的最久未使用记录;以及b)根据所述已缓存的参考像素数据块的预期使用次数以及历史使用状况,选择删除所述已缓存的参考像素数据块中的一个,并且基于所述参考运动矢量将外部存储器中对应的参考像素数据块存储到所述缓存存储器中以及提供给所述视频解码器。

在本申请的另一方面,还提供了一种用于视频解码器的数据缓存装置,包括:缓存存储器,其用于缓存多个参考像素数据块;缓存使用记录器,其用于记录所述缓存存储器中已缓存的参考像素数据块的历史使用状况,其中所述历史使用状况指示所述已缓存的参考像素数据块的最久未使用记录;缓存控制器,其用于接收由视频解码器发送的数据请求,所述数据请求用于请求一个或多个参考像素数据块以对一个当前像素数据块进行解码处理,其中所述数据请求中包括一个或多个参考运动矢量,并且每个参考运动矢量对应于一个参考像素数据块;数据块使用次数计算器,其用于获取分别用于所述当前像素数据块之后的预定数量个后续像素数据块的解码处理的数据请求,并且基于所述数据请求确定所述缓存存储器中已缓存的参考像素数据块的预期使用次数,其中所述预期使用次数分别指示每个已缓存的参考像素数据块将被用于所述预定数量个后续像素数据块的解码处理的次数;其中,所述缓存控制器还用于:当用于当前像素数据块的一个参考运动矢量对应的参考像素数据块未被缓存在所述缓存存储器中时,根据所述已缓存的参考像素数据块的预期使用次数以及历史使用状况,选择删除所述已缓存的参考像素数据块中的一个,并且基于所述参考运动矢量将外部存储器中对应的参考像素数据块存储到所述缓存存储器中以及提供给所述视频解码器。

以上为本申请的概述,可能有简化、概括和省略细节的情况,因此本领域的技术人员应该认识到,该部分仅是示例说明性的,而不旨在以任何方式限定本申请范围。本概述部分既非旨在确定所要求保护主题的关键特征或必要特征,也非旨在用作为确定所要求保护主题的范围的辅助手段。

附图说明

通过下面说明书和所附的权利要求书并与附图结合,将会更加充分地清楚理解本申请内容的上述和其他特征。可以理解,这些附图仅描绘了本申请内容的若干实施方式,因此不应认为是对本申请内容范围的限定。通过采用附图,本申请内容将会得到更加明确和详细地说明。

图1示出了根据本申请一个实施例的对视频数据进行编码的过程;

图2示出了根据本申请一个实施例的视频解码系统200的示意图;

图3示出了根据本申请一个实施例的可以作为缓存标签存储的参考运动矢量300;

图4示出了根据本申请一个实施例的缓存存储器400的结构;

图5示出了存储一帧图像的多个像素数据块的存储器的多个单元块(block);

图6示出了根据本申请一个实施例的视频解码器的框图;

图7示出了图6中运动补偿模块的一个示例性框图;

图8示出了根据本申请一个实施例的数据缓存方法的流程图;

图9示出了根据本申请一个实施例的缓存存储器中缓存队列的存储情况;

图10示出了图9的缓存队列中的缓存单元2被选择更新后的队列存储状态;

图11示出了当确定了一个缓存单元中的参考视频数据块的预期使用次数为零时对缓存单元的数据更新;

图12示出了根据本申请一个实施例的当发生数据块未命中时缓存存储器中数据块更新的算法;

图13示出了八路组相连结构的缓存存储器;

图14示出了用于根据缓存标签来确定如何对缓存存储器进行数据块更新的电路的模块示意图;

图15示出了数据coordinate_x和coordinate_y的数据结构;

图16示出了图14的电路如何进行根据标签命令来确定标签是否命中、进而进行数据块更新的过程;

图17示出了根据本申请一个实施例的数据缓存装置。

具体实施方式

在下面的详细描述中,参考了构成其一部分的附图。在附图中,类似的符号通常表示类似的组成部分,除非上下文另有说明。详细描述、附图和权利要求书中描述的说明性实施方式并非旨在限定。在不偏离本申请的主题的精神或范围的情况下,可以采用其他实施方式,并且可以做出其他变化。可以理解,可以对本申请中一般性描述的、在附图中图解说明的本申请内容的各个方面进行多种不同构成的配置、替换、组合,设计,而所有这些都明确地构成本申请内容的一部分。

图1示出了根据本申请一个实施例的对视频数据进行编码处理的过程。其中,该编码处理采用了移动图像专家组(mpeg)的相关标准和协议。

如图1所示,视频数据101包括一组图像103,其中该组图像103中的每帧图像均包括亮度y、红色色度cr及蓝色色度cb这三个分量的二维矩阵。可以理解,在一些其他的实施例中,视频数据101中图像103也可以采用其他图像格式,例如rgb格式,其包括红色r,绿色g以及蓝色b这三个分量的二维矩阵。

在一些实施例中,可以采用例如运动补偿算法来对视频数据101进行压缩处理。之所以采用运动补偿算法,是因为一组图像103中相邻的几帧图像103的内容通常较为相似,具有时间冗余性,因而可以对相邻图像之间的差异进行编码,从而减小表示视频数据101所需的数据。相邻图像的不同局部图像之间的相同或相似可以用运动矢量(motionvector)来指示。相应地,在解码(解压缩)处理时,可以利用编码时得到的运动矢量进行运动补偿,从而利用已解码图像来重建或预测相邻的图像。

具体地,一帧图像的亮度y、红色色度cr及蓝色色度cb的二维矩阵可以被分别划分为多个像素数据块。待预测图像中的一个像素数据块113可以被与其他参考图像(已解码图像)中的不同部分进行比较。当参考图像中的一部分被确定后,其被作为参考像素数据块114,并且待预测图像中的像素数据块113与参考像素数据块114之间的差异会被编码。

在实际应用中,像素数据块113和参考像素数据块114的读取和存储通常采用宏块(marcoblock)格式。具体地,参见图5,示出了存储一帧图像的多个像素数据块的存储器的多个单元块(block),其中每个单元块用于存储由多个像素数据块构成的一个宏块。具体地,单元块0对应于该帧图像的第一行上的第一宏块,单元块1对应于第一行上在第一宏块右侧且与第一宏块相邻的宏块。该帧图像的宽度为n个宏块,因此单元块n-1对应于该帧图像的第一行上的最后一个宏块。类似地,该帧图像的第二行上的宏块被存储在单元块n至2n-1;该帧图像的第三行上的宏块被存储在单元块2n至3n-1;以此类推。

参考像素数据块114在参考图像中的位置可以由运动矢量表示,其同时还可以确定像素数据块113和参考像素数据块114之间的空间位移关系。在一些实施例中,每个像素数据块可以包括例如一个16*16像素的阵列,或者两个16*8、四个8*8、十六个4*4像素的阵列。在分块化表示的情况下,每帧图像可以包括多个像素数据块113,而且其中每个像素数据块113可以被表示为多个参考像素数据块114以及对应运动矢量的组合。此外,根据一帧图像的重建是否需要其他参考图像,可以将一组图像103分类为帧内编码图像

(intracodedpicture,i帧)、预测编码图像(predictedcodedpicture,p帧)和双向预测编码图像(bidirectionallypredictedpicture,b帧)。其中,i帧不参考其他图像,而仅利用本帧图像中包含的信息进行编码;p帧利用其显示顺序之前的图像来进行编码;而b帧既利用其显示顺序之前的图像还利用其显示顺序之后的图像来进行编码。

图2示出了根据本申请一个实施例的视频解码系统200的示意图。

如图2所示,该视频解码系统200包括视频解码器205、缓存存储器210以及外部存储器215。具体地,视频解码器205接收压缩视频数据并且对其进行解压缩,以生成解压缩视频数据。视频解码器205的解压缩处理是逐帧进行的,当一帧参考图像被解压缩后,视频解码器205将该参考图像存储到外部存储器215中。对于预测图像,其被划分为多个像素数据块,其中每个像素数据块可以由一帧或多帧参考图像中的一个或多个参考像素数据块预测得到。为了解压缩预测图像,视频解码器205发送数据请求以获取解压缩所需的参考像素数据块。一部分参考像素数据块可能缓存在缓存存储器210中,而另一部分参考像素数据块则可能存储在外部存储器215中。视频解码器205可以先检查缓存存储器210,以确定其中是否缓存有被请求的参考像素数据块。如果有,则视频解码器205即从缓存存储器210中读取参考像素数据块;但是如果没有,则视频解码器205会再访问外部存储器215,从中读取所需的参考像素数据块并将其缓存在缓存存储器210中,同时所读取的参考像素数据块还被提供给视频解码器205。

在一些实施例中,缓存存储器210可以包括多个缓存单元,其中每个缓存单元存储一个参考像素数据块。每个缓存单元以其缓存的参考像素数据块的参考运动矢量作为缓存标签。此外,数据请求中包括一个或多个参考运动矢量,而每个参考运动矢量对应于一个被请求的参考像素数据块。这样,在检查缓存存储器210中是否缓存有被请求的参考像素数据块时,可以通过比较数据请求中的参考运动矢量与作为缓存标签的参考运动矢量,如果相符合即可认为被请求的参考像素数据块已被缓存,相反,如果未找到相符合的参考运动矢量,则可以认为被请求的参考像素数据块未被缓存。

图3示出了根据本申请一个实施例的可以作为缓存标签存储的参考运动矢量300。

如图3所示,参考运动矢量300示出了一种示例性地址格式,其可以被缓存存储器的控制逻辑用来请求参考像素数据块。参考运动矢量300可以被存储作为缓存标签,并且对应于缓存存储器中的一个缓存单元。在一些实施例中,参考运动矢量300包括参考图像帧序号302、x方向偏移304、y方向偏移306以及数据块序号308。

具体地,参考图像帧序号302用于表示该参考运动矢量300对应的参考图像帧,也即该参考像素数据块所在的参考图像帧。x方向偏移304用于表示参考数据块所在的宏块310相对于参考图像帧中的原点位置的水平偏移,而y方向偏移306用于表示参考数据块所在的宏块相对于参考图像帧中的原点位置的竖直偏移。换言之,通过x方向偏移304和y方向偏移306,即可确定待处理的宏块的位置。数据块序号308则用于表示参考数据块在其所在的宏块中的位置。例如,对于采用4:4:4格式的宏块,每个宏块中包含有8个数据块,相应地,数据块序号308可以包括3位地址范围。可以看出,图3所示的参考运动矢量300可以唯一地识别参考像素数据块。

图4示出了根据本申请一个实施例的缓存存储器400的结构。

如图4所示,缓存存储器400包括序号为0至n-1的n个缓存单元402,以用于缓存从外部存储器获取的参考像素数据块。在一些实施例中,缓存存储器400可以是全相关缓存(fullassociativecache),也即参考像素数据块可以被缓存至缓存存储器400中的任意一个可用缓存单元402中。缓存存储器的控制逻辑可以包括n个缓存标签404,其与n个缓存单元402一一对应。因此,当检查缓存存储器中是否存在有数据请求所需的参考像素数据块时,只需要检查缓存标签404即可。

图6示出了根据本申请一个实施例的视频解码器的框图。

如图6所示,该视频解码器包括流处理模块601,其用于接收输入的视频数据流,并且将该视频数据流解码为像素数据块,从而生成游程、幅值预测、像素数据块信息,等等。反量化模块603、反变换模块605随后顺序地对流处理模块601输出的数据进行处理,以恢复残差像素采样值的像素数据块。之后,重构模块607接收这些被恢复的残差像素采样值的像素数据块,并且将其与帧内预测模块609或运动补偿模块611输出的预测数据块组合在一起,从而完成整个视频解码操作。解码得到的视频图像可以被存储在解码图像缓冲613中。在一些实施例中,取决于视频数据流中的信息,在被存储在解码图像缓冲613之前,解码得到的视频图像还可以被环路滤波器615滤波。此外,在一些情况下,例如采用解耦架构的情况下,流处理模块601还可以替代地将其处理得到的数据写入到工作数据缓冲617中,而反变换模块605以及参数生成模块619则从工作数据缓冲617中读出数据以用于后续处理。

参数生成模块619用于生成运动矢量的相关信息,而运动补偿模块611即利用该运动矢量信息来从解码图像缓冲613中获取参考数据块。

图7示出了图6中运动补偿模块的一个示例性框图。

如图7所示,该运动补偿模块包括运动矢量队列701,其从参数生成模块719(图3中的参数生成模块619)接收参考运动矢量的信息,并且将所述接收的参考运动矢量信息缓存起来。数据块信息生成模块703将参考运动矢量信息转换为用于定位参考图像中的参考像素数据块的参考像素数据块信息。参考像素数据块信息随后被发送给数据块信息队列705。

运动补偿模块还包括数据缓存存储器707,其对应于图2中的视频图像缓存存储器210。根据数据块信息队列705中的参考运动矢量,数据缓存存储器707首先查找其自身是否缓存有所需的参考像素数据块:如果有所需的参考像素数据块,即缓存命中发生,则数据缓存存储器707将找到的参考像素数据块发送给预测缓冲709;而如果没有所需的参考像素数据块,即缓存没有命中,则数据缓存存储器707根据参考运动矢量向解码图像缓冲711请求对应的参考像素数据块,并且在接收到该参考像素数据块后再将其发送给预测缓冲709。

数据块信息生成模块703还会生成预测信息,该预测信息通常是运动矢量的小数部分,涉及每个像素数据块内部非整数位置像素点的生成。预测信息由数据块信息生成模块703提供给预测信息队列713,进而再由预测信息队列713提供给预测插值模块715。预测插值模块715还从预测缓冲709接收参考像素数据块,从而利用参考像素数据块以及预测信息来计算预测像素数据块。在计算得到预测像素数据块之后,预测插值模块715将预测像素数据块发送给输出缓冲717,之后输出缓冲717再将预测像素数据块输出给重构模块719(图6中的重构模块607)。

通常来说,视频解码器所使用的缓存存储器可以是只读缓存存储器(readonlycache),影响只读缓存存储器效率的一个重要因素是命中率。命中率越高,则解码所需的带宽越小,而缓存数据块替换算法直接影响了缓存存储器的命令率。

最久未使用算法(least-recentlyused,lru)是一种常用的缓存数据块替换算法,其记录缓存存储器中每个数据块的相对使用情况,并且当所请求的参考数据块在缓存存储器中缺失时(也即未命中时),缓存存储器中最久没有被使用的数据块将被新数据替换。lru算法常常被用于中央处理器的缓存存储器中,这是因为难以预测将会被中央处理器执行的程序。

本申请的发明人发现,对于视频解码应用而言,像素数据块的使用情况可以根据运动矢量来确定,因而其在一定程度上是可以预测的。例如,可以分析运动矢量队列401中包括的参考运动矢量,从而统计并分析在未来一段处理时间内将会所需的参考像素数据块。因此,可以将数据缓存存储器中的像素数据块的历史使用情况与预期使用情况结合起来,共同确定数据缓存存储器中像素数据块的替换策略。

图8示出了根据本申请一个实施例的数据缓存方法的流程图。该数据缓存方法被用于重建视频图像中的一个像素数据块。在一些实施例中,该数据缓存方法可以被应用于图2和图6至7所示的视频解码系统中,作为视频解码方法的一个部分。该视频解码方法可以用于将视频数据进行解码处理,从而使得相应的视频图像被重建。

如图8所示,在步骤s802中,接收由视频解码器发送的数据请求,其中该数据请求用于请求一个或多个参考像素数据块以对一个当前像素数据块进行解码处理。其中,该数据请求中包括一个或多个参考运动矢量,并且每个参考运动矢量对应于一个参考像素数据块。

接着,在步骤s804中,对于该数据请求中的每个参考运动矢量:确定参考运动矢量对应的参考像素数据块是否已经被缓存在缓存存储器中,在缓存存储器中可缓存有多个参考像素数据块,例如如图4所示的缓存存储器400所示。缓存存储器中包括多个缓存单元,其中每个缓存单元中存储了一个参考像素数据块。这些已被缓存的参考像素数据块可能是在重建当前像素数据块之前的其他像素数据块时缓存起来的。正如前述,已缓存的参考像素数据块对应的参考运动矢量可以被作为缓存标签存储在缓存存储器中。因此,在步骤s804中,可以通过检查缓存标签中存储的参考运动矢量,来判断并确定所需的参考像素数据块是否已经缓存在缓存存储器中。

根据步骤s804的判断结果,如果参考运动矢量对应的参考像素数据块已被缓存在缓存存储器中,那么在步骤s806中,可以将该参考像素数据块提供给视频解码器,以用于当前像素数据块的解码处理。

相反,如果参考运动矢量对应的参考像素数据块未被缓存在缓存存储器中,那么在步骤s808中,可以确定缓存存储器中已缓存的参考像素数据块的预期使用次数和历史使用状况。

具体地,预期使用次数分别指示每个已缓存的参考像素数据块将被用于当前像素数据块之后的预定数量个后续像素数据块的解码处理的次数。在一些实施例中,预定数量可以是1个、2个、3个、5个、10个或更多个。在实际应用中,可以获取分别用于预定数量个后续像素数据块的解码处理的数据请求;并且基于这些数据请求中包括的参考运动矢量计算所述已缓存的参考像素数据块的预期使用次数。图9示出了根据本申请一个实施例的缓存存储器中缓存队列的存储情况。如图9所示,该缓存队列包括8个缓存单元0-7,其中每个缓存单元中存储有一个参考像素数据块。此外,每个参考像素数据块的预期使用次数已被计算并且被表示出来。例如,缓存单元3中存储的参考像素数据块将被使用2次;而缓存单元2中存储的参考像素数据块将被使用1次。

另一方面,历史使用状况指示缓存存储器中已缓存的参考像素数据块的最久未使用记录。例如图9所示,该缓存队列是按照lru算法进行排列,其中缓存单元3是最久未使用的缓存单元,而缓存单元4是最近未使用的缓存单元。

接下来,在步骤s810中,可以根据已缓存的参考像素数据块的预期使用次数以及历史使用状况,选择删除所述已缓存的参考像素数据块中的一个,并且基于参考运动矢量将外部存储器中对应的参考像素数据块存储到缓存存储器中。与此同时,新缓存的参考像素数据块对应的参考运动矢量也可以被存储到缓存存储器中,以便标识该参考像素数据块。

在一些实施例中,被删除的参考像素数据块可以是预期使用次数最少的一个。例如,在图9所示的例子中,缓存单元2和缓存单元4中缓存的参考像素数据块均将被使用一次。在一些例子中,可以从这缓存单元2和4中随机地挑选一个并删除其中存储的参考像素数据块;在另一些例子中,由于缓存单元2比缓存单元4的未使用时间更长,因此可以删除缓存单元2中的参考像素数据块。换言之,如果存在多个参考像素数据块具有相同的最少预期使用次数,则选择删除其中相对较久未使用的一个参考像素数据块。图10示出了图9的缓存队列中的缓存单元2被选择更新后的队列存储状态。如图10所示,由于缓存单元2被更新,因此其是最近使用的缓存单元,因而缓存单元2被排列到缓存队列的最近使用一端。相应地,缓存单元5和4被更新为朝向缓存队列的最久未使用一端靠近。

在实际应用中,预期使用次数的计算和统计可以按照缓存队列中的排列顺序进行,例如起始于最久未使用一端,结束于最近使用一端。在这种情况下,当确定一个缓存单元中参考视频数据块的预期使用次数为零后,即可停止对后续缓存单元的预期使用次数进行计算,因为预期使用次数最小即为零。相应地,可以选择删除该预期使用次数为零的缓存单元中存储的参考像素数据块,并且用获取自外部存储器的新的参考像素数据块对该缓存单元进行更新。

图11示出当确定了一个缓存单元中的参考视频数据块的预期使用次数为零时对缓存单元的数据更新。如图11所示,缓存单元3处于缓存队列的最久未使用一端,对每个缓存单元中存储的参考视频数据的预期使用次数的计算和统计始于该缓存单元3。经分析后确定该缓存单元3将被使用2次,接着确定缓存单元0将被使用4次,而缓存单元6将被使用0次。在此情况下,缓存单元6为第一个预期使用次数为零的缓存单元,因而即使有其他预期使用次数为零的缓存单元,缓存单元6相对于其也是较久未使用的缓存单元。因此,可以选择删除缓存单元6中缓存的参考视频数据块并且对其进行更新。更新后,缓存单元6转至缓存队列最新更新的一端,如图11右侧的缓存队列所示。

与步骤s812同时或之后,在步骤s812中,在步骤s810中缓存的参考像素数据块可以被提供给视频解码器,以用于视频图像的重建。

可以看出,对于上述实施例的数据缓存方法,由于缓存存储器中参考像素数据块的更新同时取决于预期使用次数和历史使用状况,因此缓存存储器中数据命中率高于现有技术。这提高了视频解码的速度和效率,并且降低了视频解码对系统带宽的需求。

图12示出了根据本申请一个实施例的当发生数据块未命中时缓存存储器中数据块更新的算法。该算法可以用于实现图8所示的方法。

如图12所示,该算法始于步骤s1202,经比较后,确定参考像素数据块未被缓存在缓存存储器中。其中,数据块队列是根据最久未使用算法缓存在缓存存储器中的,因而其被称为lru队列。在此情况下,在步骤s1204,设置参数lru_index为0以便从lru队列的头部开始处理数据块,其中参数lru_index表示当前被处理的数据块在lru队列中的序号。接着,在步骤s1206,从lru队列中获取参数lru_index指示的数据块。之后,在步骤s1208,针对所获取的数据块,检查其对应的参考运动矢量,以确定该数据块是否将在一定时间之内被使用。如果不会被使用,则在步骤s1210,从外部存储器获取新的参考像素数据块来更新该数据块所在的缓存单元。相反,如果在步骤s1208中确定该数据块将被使用,则在步骤s1212,获取该数据块的预期使用次数。接着,在步骤s1214,判断lru_index所指示的数据块是否处于lru队列的尾部,以确定是否已经处理完lru队列中的全部数据块。如果处于lru队列的尾部,则在步骤s1216,获取预期使用次数最少的数据块。接着,在步骤s1218,判断预期使用次数最少的数据块的数量是否多于一个。如果正好为一个,则在步骤s1220,选择该预期使用次数最少的数据块,并且在步骤s1222中,用新的数据块更新该数据块所在的缓存单元。相反,如果预期使用次数最少的数据块的数量多于一个,则在步骤s1224中,从多个预期使用次数最少的数据块中选择lru_index最小的数据块,并且在步骤s1222中,用新的数据块更新该数据块所在的缓存单元。另一方面,如果在步骤s1214中,判断lru_index所指示的数据块没有处于lru队列的尾部,则在步骤s1226中,将参数lru_index加1,并且继续重新执行步骤s1206,从lru队列中获取更新的lru_index所指示的数据块。之后,可以继续对该数据块进行上述类似的处理。经过多次循环处理后,可以实现对缓存存储器的数据块更新。

在实际应用中,本申请的数据缓存方法也可以应用于采用多路组相关(multi-wayset-associative)结构的缓存存储器。图13示出了该多路组相关的缓存存储器的结构示意图,其由s组(set)构成,每个组分为八路(way)。该缓存存储器包括缓存标签ram和缓存数据ram,这两个ram是相互关联的。

图14示出了用于根据缓存标签来确定如何对缓存存储器进行数据块更新的电路的模块示意图。

如图14所示,运动矢量生成器1401用于生成数据块信息。在一些实施例中,数据块信息可以包括下述信息:参考图像帧序号、运动矢量在水平方向的整数部分(由coordinate_x表示)、运动矢量在竖直方向的整数部分(由coordinate_y表示)、参考数据块的宽度和高度。

图15示出了数据coordinate_x和coordinate_y的数据结构。如图15所示,coordinate_x包括tag_data_x,set_x及cache_block_x,而coordinate_y包括tag_data_y,set_y及cache_block_y。

缓存存储器其中,tag_data_x和tag_data_y是实际地址标签内容的一部分;tag_data_x是参考像素数据块的水平坐标高位,tag_data_y是参考像素数据块竖直坐标高位。set_x,set_y是坐标中用来在s组中进行寻址并确定某一组的地址索引。cache_block_x和cache_block_y表示参考像素数据块在路内部的坐标,cache_block_x和cache_block_y所占用的空间由缓存单元块的大小决定,例如32x4的缓存单元块cache_block_x占用5比特,cache_block_y占用2比特。

仍参考图14,数据块信息队列1402存储由运动矢量生成器1401生成的数据块信息,并且将其提供给数据块-标签命令转换模块1403。其中,数据块-标签命令转换模块1403将数据块信息转换为一个或多个标签命令(tagcmd),进而将一个或多个标签命令存储在标签命令队列1404中。其中,标签命令可以包括下述信息:参考图像帧的序号、tag_data_x及set_x、tag_data_y及set_y。

图14中标签ram/寄存器1405是由ram或者寄存器实现的标签存储器,存储缓存存储器中的数据所对应的标签。lruram1407是用来存储每个组对应的lru队列。块检验单元1408是用来检查数据块队列中是否有与指定标签数据匹配的数据块,每个数据块可被转换成一个或者多个标签命令。只转换成一个标签命令时,比较确认指定标签数据的tag_data_x,tag_data_y是否与数据块中的tag_data_x,tag_data_y相同;在转换成多个标签命令时,数据块的tag_data_x,tag_data_y是一个区间范围,需要确定指定的标签命令的tag_data_x,tag_data_y在此范围之内,才能确定匹配发生。如果未发生匹配,则说明数据块队列中未包括了指定的数据块,需要对数据块队列进行数据更新。反之,则不需要更新。命令检验单元1409是用来确定标签命令队列中是否有与指定的标签数据匹配的标签命令。如果匹配,则说明该匹配的标签命令预期将被使用。上述匹配检验一般可以采用比较器来实现。块检验单元1408和命令检验单元1409经比较后得到的匹配结果(也即图中所示的匹配0和匹配1)将被提供给仲裁器1410。如果有匹配发生,则仲裁器1410选择匹配次数最少的路,或者如果有多路匹配次数最少的路,则仲裁器1410选择最久未使用的那一路。

判决模块1406从标签命令队列1404中获取标签命令,从仲裁器1410接收路的选择结果,并且执行预定算法来生成标签命中或未命中的结果,进而确定对缓存数据ram的选中缓存单元(对于图13所示的缓存存储器,缓存单元为路)进行数据块更新。

图16示出了图14的电路如何进行根据标签命令来确定标签是否命中、进而进行数据块更新的过程。

如图16所示,在步骤s1602,接收标签命令。接着,在步骤s1604,设置参数way_index为0,其中参数way_index指示标签ram中被处理的路。然后,可以用标签命令中包括的参数set_y和set_x生成标签ram的读取地址,其中读取地址可以例如为{set_y,set_x,way_index}。然后,在步骤s1606,利用该读取地址从标签ram中读出标签数据(tagdata),其中该标签数据的格式可以为{picture_index,tag_data_y,tag_data_x,valid}。其中,参数picture_index指示参考图像帧的序号,tag_data_y指示参考像素数据块竖直坐标的高位,tag_data_x指示参考像素数据块水平坐标的高位,而标志valid指示缓存单元块中的数据块是有效的数据块,即之前操作中参考像素数据块被写入此缓存单元块。

在步骤s1608,如果标志valid有效,并且tagdata中的所有其他信息picture_index、tag_data_y及tag_data_x均与标签命令中的对应参数picture_index、tag_data_y及tag_data_x相同,则说明该路与标签命令匹配。换言之,标签命令对应的数据块已经被存储在缓存存储器中(即,缓存命中),在这种情况下,不需要更新缓存存储器,而仅需要调整lru队列的顺序。相应地,在步骤s1610,将当前way_index设置为hit_way,也即命中的路。之后,在步骤s1612中,将hit_way移至lru队列的尾部,表明该路是最近被使用的路。

相反,如果步骤s1608的判断结果为否,也即tagdata中的至少一个参数picture_index、tag_data_y及tag_data_x与标签命令中的对应参数picture_index、tag_data_y及tag_data_x不同,或者标识valid无效,则在步骤s1614中,判断way_index是否等于参数max_way_index,其中参数max_way_index指示way_index的最大值。如果way_index不等于该最大值,则在步骤s1616中,将way_index加1,也即选择下一个待处理的路,之后继续对该路执行步骤s1606以及后续步骤。这样多次循环后,可以确定缓存存储器是否已经存储有tagcmd对应的数据块。

如果在步骤s1614中,确定way_index等于参数max_way_index且仍没有命中,也即缓存存储器中未存储tagcmd对应的数据块,则需要进行缓存存储器的数据更新。

具体地,在步骤s1618,利用tagcmd中包括的set_y及set_x信息,从lruram(也即缓存数据ram)中读出lru队列,其中最久未使用的路处于该lru队列的头部。之后,在步骤s1620中,设置lru_index=0以从lru队列的头部读出数据。接着,在步骤s1622中,利用lru_index从lru队列中读出候选路candidate_way。在步骤s1624中,利用candidate_way、set_y和set_x信息,从标签ram中读出tagdata。

接着,在步骤s1626判断所读出的tagdata数据中的标志valid是否有效。如果无效,则在步骤s1628中,将当前的candidate_way设置为待更新的路,即victim_way。之后,在步骤s1630中,将待更新的路移至lru队列的尾部。

相反,如果在在步骤s1626判断所读出的tagdata数据中的标志valid有效,则在步骤s1626中,继续比较tagdata中的参数picture_index、tag_data_y及tag_data_x与标签命令队列中所有标签命令中的对应参数picture_index、tag_data_y及tag_data_x是否相同,并且比较tagdata中的参数picture_index、tag_data_y及tag_data_x与数据块信息队列中数据块信息的对应参数picture_index、tag_data_y及tag_data_x不同,来判断是否存在相匹配的标签命令或数据块信息。如果步骤s1626确定不存在相匹配的标签命令或数据块信息,则继续执行步骤s1628。相反,如果在步骤s1626中确定存在相匹配的标签命令或数据块信息,则在步骤s1632中,获取该路对应的预期使用次数。之后,在步骤s1634中,确定lru_index是否达到lru队列的尾部。如果确定未达到lru队列的尾部,则在步骤s1636中,将lru_index加1,也即接着对下一路进行处理,并且继续执行步骤s1622及其后续步骤。

相反,如果在步骤s1632中确定已到达lru队列的尾部,则在步骤s1638中,选择具有最少预期使用次数的路。接着,在步骤s1640中,判断具有最少预期使用次数的路的数量是否多于一个。如果多于一个,则在步骤s1642中,选择lru_index最小的路,并且在步骤s1644中,将预期使用次数最少且lru_index最小的路设置为待更新的路victim_way。之后,将待更新的路victim_way移至lru队列的尾部。如果在步骤s1640中判断具有最少预期使用次数的路的数量等于一个,则在步骤s1646中,将该路设置为待更新的路victim_way。接着,继续执行步骤s1644,将待更新的路victim_way移至lru队列的尾部。

可以看出,通过上述步骤,当缓存存储器中未缓存所需的参考数据块时,可以结合缓存存储器中缓存的数据块的预期使用情况和历史使用情况来选择需要被更新参考数据块,提高了缓存存储器的使用效率。

需要说明的是,图12至图16所示的过程、方法、电路和/或数据结构仅仅示例性地说明了本申请的方法和装置可以采用一些具体方式,但是本申请并不限于此。

图17示出了根据本申请一个实施例的用于视频解码器的数据缓存装置1700。在一些实施例中,该数据缓存装置1700可以用于图2、图6和图7所示的视频解码系统及其组件。

如图17所示,该数据缓存装置1700包括:

缓存存储器1702,其用于缓存多个参考像素数据块;

缓存使用记录器1704,其用于记录缓存存储器1702中已缓存的参考像素数据块的历史使用状况,其中该历史使用状况指示已缓存的参考像素数据块的最久未使用记录;

缓存控制器1706,其用于接收由视频解码器发送的数据请求,该数据请求用于请求一个或多个参考像素数据块以对一个当前像素数据块进行解码处理,其中该数据请求中包括一个或多个参考运动矢量,并且每个参考运动矢量对应于一个参考像素数据块;

数据块使用次数计算器1708,其用于获取分别用于当前像素数据块之后的预定数量个后续像素数据块的解码处理的数据请求,并且基于这些数据请求确定缓存存储器中已缓存的参考像素数据块的预期使用次数,其中该预期使用次数分别指示每个已缓存的参考像素数据块将被用于预定数量个后续像素数据块的解码处理的次数;

其中,缓存控制器1708还用于:当用于当前像素数据块的一个参考运动矢量对应的参考像素数据块未被缓存在缓存存储器1702中时,根据已缓存的参考像素数据块的预期使用次数以及历史使用状况,选择删除已缓存的参考像素数据块中的一个,并且基于参考运动矢量将外部存储器中对应的参考像素数据块存储到缓存存储器1702中以及提供给视频解码器。

在一些实施例中,缓存控制器1706用于:当用于当前像素数据块的一个参考运动矢量对应的参考像素数据块未被缓存在缓存存储器1702中时,选择删除预期使用次数最少的一个参考像素数据块。

在一些实施例中,缓存控制器1706用于:当用于当前像素数据块的一个参考运动矢量对应的参考像素数据块未被缓存在缓存存储器1702中时,如果存在多个参考像素数据块具有相同的最少预期使用次数,则选择删除其中相对较久未使用的一个参考像素数据块。

在一些实施例中,缓存控制器1706用于:当用于当前像素数据块的一个参考运动矢量对应的参考像素数据块未被缓存在缓存存储器1702中时,选择删除预期使用次数为零且相对较久未使用的一个参考像素数据块。

在一些实施例中,缓存控制器1706还用于:当参考运动矢量对应的参考像素数据块被缓存在缓存存储器1702中时,将该参考像素数据块提供给视频解码器。

在一些实施例中,缓存存储器1702包括多个缓存单元,其中,已缓存的参考像素数据块被分别被缓存于缓存存储器1702中的缓存单元中,并且每个缓存单元以其中缓存的参考像素数据块的参考运动矢量作为缓存标签。

在一些实施例中,参考像素数据块是已被解码的像素数据块。

关于该数据缓存装置1700的运行,可以参考前述关于数据缓存方法的描述,在此不再赘述。

本技术领域的一般技术人员可以通过研究说明书、公开的内容及附图和所附的权利要求书,理解和实施对披露的实施方式的其他改变,上述实施方案仅仅是为了说明的目的而列举的示例,而不是对本申请的限制,本申请的实施方式可以通过硬件、软件或其组合的形式来实现。凡在本申请的教导和权利要求保护范围下所作的任何修改、等同替换等,均应包含在本申请要求保护的范围内。在权利要求中,措词“包括”不排除其他的元素和步骤,并且措辞“一”、“一个”不排除复数。在本申请的实际应用中,一个零件可能执行权利要求中所引用的多个技术特征的功能。权利要求中的任何附图标记不应理解为对范围的限制。

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