视频处理装置及相应视频处理方法与流程

文档序号:15395258发布日期:2018-09-08 02:02阅读:123来源:国知局
本申请要求2016.2.24提交的美国临时申请号为62299067的美国临时申请案的优先权,其全部内容也一并引用于此。【
技术领域
:】本发明涉及熵编码/解码,更具体地,涉及用于在硬件熵引擎(例如,硬件熵编码器/解码器)的外部存储设备中生成计数表(counttable)的视频处理装置(例如,视频编码器/解码器)和相关的视频处理方法。
背景技术
::传统的视频编解码标准通常采用基于块的编解码技术来利用空间和时间冗余。例如,基本方法是将整个源帧划分为多个块,对每个块执行帧内预测/帧间预测(intraprediction/interprediction),对每个块的残差进行变换,并执行量化和熵编码。此外,在编解码循环(codingloop)中生成重建帧(reconstructedframe)以提供用于编解码后面的块的参考像素数据。对于某些视频编解码标准,可以使用环路滤波器(in-loopfilter)来增强重构帧的图像质量。视频解码器用于执行由视频编码器执行的视频编码操作的逆操作。例如,视频编码器中的熵编码器用于生成编码比特流,而视频解码器中的熵解码器用于解码编码比特流。算术编解码可以由熵编码器使用。因此,熵编码器参考概率表执行熵编码,并且视频解码器也参考相同的概率表来执行熵解码。由于视频内容本质上是不稳定的,对于视频编码器和视频解码器中的每一个,概率表的适应性对于统计数据的变化至关重要。技术实现要素:依据本发明的示范性实施例,提出一种视频处理装置及相应视频处理方法以解决上述问题。依据本发明的一个实施例,提出一种视频处理装置,包括外部存储设备;在外部存储设备外部的硬件熵引擎,其中硬件熵引擎被布置为执行当前图像的熵处理,并且还被布置成在当前图像的熵处理期间将计数信息输出到外部存储设备;以及在外部存储设备外部的软件执行引擎,其中当软件执行引擎装载和执行时,软件程序指令软件执行引擎将计数信息转换为多个计数表内容,并且至少根据多个计数表内容在外部存储设备中生成计数表,其中,引用计数表来对由硬件熵引擎选择性地使用的概率表应用后向适应来执行下一图像的熵处理。依据本发明的另一实施例,提出一种视频处理方法,包括通过硬件熵引擎执行当前图像的熵处理,并且在当前图像的熵处理期间将计数信息输出到硬件熵引擎的外部存储设备;以及执行软件程序以将计数信息转换为多个计数表内容,并且至少根据多个计数表内容在外部存储设备中产生计数表,其中引用计数表来对由硬件熵引擎选择性地使用的概率表应用后向适应来执行下一图像的熵处理。本发明的视频处理装置及相应视频处理方法可以降低硬件的内部存储设备的成本。【附图说明】图1是根据本发明的实施例的视频处理系统的框图示意图。图2是根据本发明的实施例的硬件熵引擎的框图的示意图。图3是根据本发明的实施例为一组符号创建的二叉树的示意图。图4是根据本发明的实施例的第一后向概率表更新方法的流程图。图5是示出根据本发明的实施例的第二后向概率表更新方法的流程图。图6是基于硬件的计数表维护设计的后向概率表更新操作与使用所提出的混合计数表维护设计的后向概率表更新操作之间的比较的示意图。图7是根据本发明的实施例的将由标识符组成的计数信息转换为计数表的操作的示意图。图8是根据本发明的实施例的将由坐标组成的计数信息转换为计数表的操作的示意图。图9是根据本发明的实施例的第一后向适应设计的示意图。图10是根据本发明的实施例的第二后向适应设计的示意图。图11是根据本发明的实施例的概率表加载方法的流程图。图12是根据本发明的实施例的完整概率表和部分概率表的示意图。图13是根据本发明的实施例的另一概率表加载方法的流程图。【具体实施方式】在说明书及权利要求书当中使用了某些词汇来指称特定的组件。所属领域中的技术人员应可理解,制造商可能会用不同的名词来称呼同样的组件。本说明书及权利要求书并不以名称的差异异来作为区分组件的方式,而是以组件在功能上的差异异来作为区分的基准。在通篇说明书及权利要求书当中所提及的「包含」是开放式的用语,故应解释成「包含但不限定于」。另外,「耦接」一词在此包含任何直接及间接的电气连接手段。因此,若文中描述第一装置耦接于第二装置,则代表第一装置可直接电气连接于第二装置,或透过其它装置或连接手段间接地电气连接至第二装置。图1是根据本发明的实施例的视频处理系统的框图示意图。视频处理系统100包括软件执行引擎(例如,中央处理单元(cpu)102)、多个视频处理装置(例如,视频解码器104和视频编码器106)、存储控制器(例如,存储器控制器)108和显示引擎(例如,显示驱动电路)110。视频解码器104、视频编码器106、存储控制器108和显示引擎110可以经由cpu总线120与cpu102通信。cpu102、视频解码器104、视频编码器106和显示引擎110可以经由存储数据总线130与存储控制器108进行通信。视频解码器104支持熵解码功能,视频编码器106支持熵编码功能。在该示例中,视频解码器104具有硬件熵引擎(例如,硬件熵解码器)113和可由硬件熵引擎113访问的内部存储设备(例如,片上静态随机存取存储器(staticrandomaccessmemory,简写为sram))112,并且视频编码器106具有硬件熵引擎(例如,硬件熵编码器)115和可由硬件熵引擎115访问的内部存储设备(例如,片上sram)114。例如,硬件熵引擎113及其内部存储设备112可以在相同的芯片中实现,并且硬件熵引擎115及其内部存储设备114可以在相同的芯片中实现。外部存储设备116可以是cpu102,视频解码器104和视频编码器106外部的片外(off-chip)动态随机存取存储器(dynamicrandomaccessmemory,简写为dram)。因此,关于视频解码器104和视频编码器106,硬件熵引擎113和115可经由存储控制器108访问外部存储设备116。关于视频解码器104,硬件熵引擎113被布置为执行当前图像的熵处理(即,熵解码),并且还被布置为在当前图像的熵处理(即熵解码)期间将计数信息输出到外部存储设备116。cpu102用作软件执行引擎。当cpu102装载并执行时,软件程序prog指示cpu102将计数信息转换为计数表内容,并根据至少计数表内容在外部存储设备116中生成计数表。在本实施例中,参考为当前图像的熵解码生成的计数表,以对硬件熵引擎113选择性地使用的概率表应用后向适应(backwardadaptation),以执行下一图像的熵处理(即熵解码)。关于视频编码器106,硬件熵引擎115被布置为执行当前图像的熵处理(即,熵编码),并且还被布置为在当前图像的熵处理(即熵编码)期间将计数信息输出到外部存储设备116。如上所述,cpu102用作软件执行引擎。当cpu102装载并执行时,软件程序prog指示cpu102将计数信息转换为计数表内容,并且至少根据计数表内容在外部存储设备116中生成计数表。在本实施例中,参考为当前图像的熵编码生成的计数表,以对硬件熵引擎115选择性地使用的概率表应用后向适应,以执行下一图像的熵处理(即熵编码)。简而言之,硬件熵引擎115/113不创建并存储计数表(其被引用为对熵编码/解码使用的概率表应用后向适应)在内部存储设备114/112中。使用内部存储设备114/112来存储概率表的后向适应所需的计数表是相当昂贵的。例如,当计数表存储在内部存储设备114/112中时,分配存储空间以存储可能具有12.2k字节(即3066×32比特)的表大小的计数表。因此,本发明提出了硬件和软件分区优化,使得软件引擎(例如,cpu102)可以根据由硬件引擎(例如,硬件熵引擎115/113)提供的提议的计数信息创建和存储计数表(其被引用以对熵编码/解码使用的概率表应用后向适应)在外部存储设备116中。稍后将描述计数信息的更多细节。图2是根据本发明的实施例的硬件熵引擎的框图的示意图。硬件熵引擎113和115中的每一个可以被配置为采用与图2所示相同的硬件结构。在本实施例中,硬件熵引擎115/113包括多个电路,例如熵处理单元202、流量控制单元204、相邻数据更新单元206、概率表选择单元208、概率表访问单元210、计数信息收集单元212和直接存储器访问(directmemoryaccess,简写为dma)单元214。专用于对应的硬件熵引擎115/113的内部存储设备114/112可以具有分配在其中的相邻数据缓冲器216和概率表缓冲器218。外部存储设备116用于存储由硬件熵引擎115/113提供的计数信息cnt_info和由软件执行引擎(例如,cpu102)生成的计数表cnt_table,该计数表基于从计数信息cnt_info转换的计数表内容。vp9是由开发的开放及免版税视频编解码标准。为了清楚和简单起见,假定硬件熵引擎115/113被配置为执行符合vp9编解码标准的熵编码/解码。然而,这仅仅是为了说明的目的,并不意味着对本发明的限制。使用硬件熵引擎115/113的任何视频编码器/解码器(特别是所提出的计数信息收集单元212)都属于本发明的范围。概率表缓冲器218用于存储用于语法编码/解码的概率表prob_table。相邻数据缓冲器216用于存储为概率表prob_table的概率模型选择而引用的上相邻块的信息。存储在外部存储设备116中的计数表cnt_table基于当前图像的熵处理(例如布尔(boolean)编码/解码)期间由计数信息收集单元212收集的计数信息cnt_info而生成。例如,计数表cnt_table记录当前图像中所有编码/解码语法的实际计数,并被引用用于概率表prob_table的后向适应。在当前图像的熵编码/解码期间,dma单元214可以将由计数信息收集单元212收集的计数信息cnt_info发送到外部存储设备116。流量控制单元204控制整个图像编码/解码流程。熵处理单元202是硬件熵引擎115/113的核心部分。例如,熵处理单元202可以执行模式处理、运动向量差(motionvectordifference,简写为mvd)处理、令牌处理等。模式处理用于对模式相关的语法元素进行编码/解码。mvd处理用于对运动矢量差进行编码/解码。令牌处理用于执行系数编码/解码,从而对令牌进行编码/解码。概率表访问单元210是用于访问存储在概率表缓冲器218中的概率表prob_table的接口模块。相邻数据更新单元206用于根据当前块的语法类型和一些语法元素执行相邻数据选择。概率表选择单元208用于参考相邻数据更新单元206提供的相邻信息,以执行用于确定语法熵编码/解码(例如模式处理、mvd处理和令牌处理)所使用的概率模型的概率模型选择。在外部存储设备116中可获得用于当前图像的熵编码/解码产生的最终计数表cnt_table之后,cpu102(特别是在cpu102上运行的软件程序prog)根据语法边信息(sideinformation)(例如,语法类型)、旧概率表(即,使用的当前概率表prob_table)和计数表cnt_table执行后向概率更新功能来生成新的概率表(即,更新的概率表)。除了被直接编码为原始值(rawvalue)的很少的报头位(headerbit)之外,大部分压缩的vp9数据值是使用布尔算术编码器进行编码的,该算术编码器充当底层的二进制算术编码器。一般来说,给定任何n字母(n-aryalphabet)的符号,使用(n-1)非叶(non-leaf)节点(或称为父节点)和(n)叶节点来构造静态二叉树(binarytree),并且当树被遍历时,二进制算术编码器在每个非叶节点上进行操作以对特定符号(其可以是语法类型的一个上下文的一个语法设置)进行编码。图3是根据本发明的实施例为一组符号创建的二叉树(binarytree)的示意图。在这个例子中,有四个非叶节点np_0、np_1、np_2、np_3由圆圈表示,5个叶节点nl_0、nl_1、nl_2、nl_3、nl_4用方形表示。字母表中的任何符号可以由通过从根节点np_0到相应的叶节点遍历二叉树生成的一系列二进制值来表示。二叉树中的每个非叶节点具有基于采用左(0)分支进行遍历的可能性分配的概率(例如,p0、p1、p2、p3)。将用于编码特定语法的可能符号的概率p0-p3的集合称为要编码的特定语法的熵编解码上下文(或称为概率模型)。视频内容本质上是非固定的,并且任何视频编码器/解码器的关键元素是用于跟踪各种符号的统计信息并更新概率表中符号的熵编解码上下文(概率模型),以匹配符号的实际分配的机制。例如,可以采用后向适应来在每个图像的编码/解码结束时更新熵编解码上下文(概率模型)。换句话说,一旦当前图像中的所有符号已被处理(例如,编码或解码),则进行后向适应步骤,以根据当前图像中的每个符号的实际计数进一步更新下一图像中使用的概率。基于这些实际计数,可以获得相应二叉树中各种非叶节点的概率。取图3所示的二叉树为例。对于每个非叶节点np_0-np_3,记录在计数表中的信息可以指示0的发生次数和1的发生次数。因此,基于与所有非叶节点np_0-np_3相关联的计数表信息,可以获得概率集合p0-p3的新值,然后由后向适应步骤使用以设置概率集合p0-p3的更新值,其可以被选择用于对下一个图像进行编码/解码。如上所述,计数信息收集单元212收集与由熵处理单元202执行的语法编码/解码相关联的计数信息cnt_info,并且经由dma单元214将收集的计数信息cnt_info输出到外部存储设备116;并且基于从计数信息cnt_info转换的计数表内容生成计数表cnt_table(其用于概率表prob_table的后向适应)。在一个示例性设计中,软件执行引擎(例如,cpu102)不开始将计数信息cnt_info转换为计数表内容,直到当前图像被熵处理(即,熵编码/解码)完全处理,其中计数信息cnt_info是当前图像的整个熵处理过程(即,熵编码/解码过程)由计数信息收集单元212收集的当前图像的全部计数信息。图4是根据本发明的实施例的第一后向概率表更新方法的流程图。如果结果基本相同,则不需要按照图4所示的确切顺序执行步骤。在步骤402,硬件熵引擎115/113被触发以启动图像的熵处理。因此,流量控制单元204指示熵处理单元202开始图像的熵处理。在步骤404中,熵处理单元202执行图像的熵处理,并且计数信息收集单元212在图像的熵处理期间收集从熵处理单元202生成的计数信息cnt_info。在步骤406,检查图像的熵处理是否完成。也就是说,步骤406检查图像是否被完全熵编码/解码。如果图像没有被完全熵编码/解码,则流程进行到步骤404,使得熵处理单元202继续执行图像的熵处理,并且计数信息收集单元212继续收集与图像的熵处理相关联的计数信息cnt_info。如果图像被完全熵编码/解码,则流程进行到步骤408。在步骤408,cpu102(特别地,在cpu102上运行的软件程序prog)开始将存储在外部存储设备116中的计数信息cnt_info(其是图像的全部计数信息)转换成存储在外部存储设备116中的计数表cnt_table。换句话说,cpu102(特别是在cpu102上运行的软件程序prog)仅执行计数信息转换操作一次,从而获得图像的完整计数表cnt_table。在步骤410,cpu102(特别是在cpu102上运行的软件程序prog)至少根据计数表cnt_table执行概率表prob_table的后向适应。例如,外部存储设备116可以具有分配在其中的工作缓冲器,使得后向概率表更新可以使用工作缓冲器基于旧概率表(即,目前使用的概率表prob_table)和计数表cnt_table来计算新的概率表(即,更新的概率表)。在更新概率表被计算之后,更新的概率表可以被选择性地加载到内部存储设备114/112的概率表缓冲器218中,以对下一个图像进行熵处理。在另一个示例性设计中,软件执行引擎(例如,cpu102)在当前图像被完全熵处理之前开始将计数信息cnt_info转换为计数表内容,其中计数信息cnt_info是当前图像的部分计数信息,并且由计数信息收集单元212收集用于当前图像的一部分的熵处理(即,熵编码/解码)。图5是示出根据本发明的实施例的第二后向概率表更新方法的流程图。如果结果基本相同,则不需要按照图5所示的确切顺序执行步骤。在步骤502,控制参数pic_end被初始化为第一值。例如,pic_end=0。在步骤504,硬件熵引擎115/113被触发以开始当前图像的熵处理。因此,流量控制单元204指示熵处理单元202开始当前图像的熵处理。在步骤506,熵处理单元202执行图像的熵处理,并且还输出计数信息cnt_info。此外,计数信息收集单元212收集计数信息cnt_info,并且在当前图像的熵处理期间将收集的计数信息cnt_info转移到外部存储设备116。在步骤508,检查当前图像的熵处理是否结束。也就是说,步骤508检查当前图像是否被完全熵编码/解码。如果当前图像未被完全熵编码/解码,则控制参数pic_end保持不变(即,pic_end=0)。如果当前图像被完全熵编码/解码,则控制参数pic_end被更新为第二值。例如,pic_end=1。在步骤514,cpu102(特别是cpu102上运行的软件程序prog)从硬件熵引擎115/113(特别是熵处理单元202)获得硬件状态,其中硬件状态指示要转换的计数信息cnt_info的数量。在一个示例性设计中,cpu102(特别是在cpu102上运行的软件程序prog)在当前图像的熵处理期间执行多个转换迭代(conversioniteration)。在pic_end=0的情况下,cpu102(特别是cpu102上运行的软件程序prog)检查硬件状态,判定要转换的计数信息cnt_info的数量是否达到预定值,并在当计数信息cnt_info的量达到预定值时,执行转换迭代之一以将计数信息cnt_info转换为计数表内容。因此,当pic_end=0时,在一个转换迭代(不是最后的转换迭代)中要转换的计数信息的总数n等于预定值,其中在步骤514由n设置控制参数cnt。在pic_end=1的另一情况下,cpu102(特别是cpu102上运行的软件程序prog)检查硬件状态以确定要转换的剩余计数信息cnt_info的量,并执行最后的迭代转换,以将剩余计数信息cnt_info转换为计数表内容。因此,当pic_end=1时,在最后的转换迭代中要转换的计数信息的总数n等于待转换的剩余计数信息cnt_info的量,其中在步骤514中控制参数cnt由n设置。关于当前图像的计数表的生成,执行除了最后的转换迭代之外的所有转换迭代以转换等于预定值的相同数目的计数信息cnt_info,并且执行最后的转换迭代以转换尚未转换的剩余计数信息cnt_info。控制参数cnt初始化为n,用于指示是否完成了一次转换迭代的计数信息cnt_info的转换。在步骤516,检查控制参数cnt是否等于零。如果控制参数cnt不等于零,则流程继续步骤518。在步骤518,cpu102(特别是在cpu102上运行的软件程序prog)通过尚未转换的计数信息cnt_info之一的转换结果来更新外部存储设备116中的计数表cnt_table。在步骤520,将控制参数cnt减1,以反映外部存储设备116中可用的计数信息cnt_info中的一个的转换的完成,并且流程进行到步骤516以检查是否已经执行将n个计数信息cnt_info转换为计数表内容的n个转换迭代。如果控制参数cnt等于零,则流程继续步骤522以检查控制参数pic_end是否被设置为第二值(例如,pic_end=1)。当控制参数pic_end仍然被设置为第一值(例如,pic_end=0)时,这意味着该图像尚未被完全熵编码/解码。因此,流程继续步骤506。当控制参数pic_end被设置为第二值(例如,pic_end=1)时,这意味着图像被完全熵编码/解码。因此,流程继续步骤524。在步骤524,cpu102(特别是在cpu102上运行的软件程序prog)获得硬件熵引擎115/113当前使用的概率表prob_table,并且根据通过当前图像的熵编码/解码产生的计数表cnt_table对概率表prob_table执行后向适应,使得可以通过对下一图像的熵编码/解码来选择性地使用更新的概率表prob_table。在另一示例性设计中,cpu102(特别是在cpu102上运行的软件程序prog)在当前图像的熵处理期间执行多次转换迭代。在每次转换迭代期间,不管当前可用于转换迭代的计数信息cnt_info的数量,cpu102(特别是在cpu102上运行的软件程序prog)将计数信息cnt_info转换为计数表内容。例如,cpu102(特别是cpu102上运行的软件程序prog)周期性地执行一次转换迭代,使得在每次转换迭代中要转换的计数信息cnt_info的量可以变化。在步骤514,cpu102(特别是在cpu102上运行的软件程序prog)检查硬件状态以确定当前转换迭代可用的计数信息cnt_info的量。当pic_end=0时,在一次转换迭代(不是最后一次转换迭代)中要转换的计数信息的总数n等于由当前转换迭代检查的硬件状态指示的计数信息cnt_info的数量,其中在步骤514由n设置控制参数cnt。当pic_end=1时,在最后一次转换迭代中要转换的计数信息的总数n等于由当前转换迭代(其是最后的转换迭代)检查的硬件状态指示的计数信息cnt_info的量,其中在步骤514由n设置控制参数cnt。关于生成当前图像的计数表,可以通过用于不同转换迭代(包括最后的转换迭代)的不同值来初始化控制参数cnt。控制参数cnt由n初始化,用于指示是否完成了一次转换迭代的计数信息cnt_info的转换。在步骤516,检查控制参数cnt是否等于零。如果控制参数cnt不等于零,则流程继续步骤518。在步骤518,cpu102(特别是在cpu102上运行的软件程序prog)通过尚未转换的计数信息cnt_info之一的转换结果来更新外部存储设备116中的计数表cnt_table。在步骤520,将控制参数cnt减1,以反映外部存储设备116中可用的计数信息cnt_info中的一个的转换的完成,并且流程进行到步骤516以检查是否已经执行n个转换迭代,以将n个计数信息cnt_info转换为计数表内容。如果控制参数cnt等于零,则流程继续步骤522以检查控制参数pic_end是否被设置为第二值(例如,pic_end=1)。当控制参数pic_end仍然被设置为第一值(例如,pic_end=0)时,这意味着该图像尚未被完全熵编码/解码。因此,流程继续步骤506。当控制参数pic_end被设置为第二值(例如,pic_end=1)时,这意味着图像被完全熵编码/解码。因此,流程继续步骤524.在步骤524,cpu102(特别是在cpu102上运行的软件程序prog)获得硬件熵引擎115/113当前使用的概率表prob_table,并且根据通过当前图像的熵编码/解码产生的计数表cnt_table,对概率表prob_table执行后向适应,使得可以通过对下一图像的熵编码/解码来选择性地使用更新的概率表prob_table。图6是基于硬件的计数表维护设计的后向概率表更新操作与使用所提出的混合计数表维护设计的后向概率表更新操作之间的比较的示意图。为了清楚和简单起见,假设在视频解码器处执行后向概率表更新。图6的顶部s1显示了基于硬件的计数表维护设计的后向概率表更新操作。因此,软件(sw)执行语法解析(由“sp”表示),然后硬件(hw)执行熵解码。应当注意,hw还负责根据熵解码在hw的内部存储设备中生成和存储计数表。在完成图像的熵解码之后,在hw的内部存储设备中可以看到图像的计数表。sw从hw获得旧概率表(由“pt”表示)和计数表(由“ct”表示),然后根据获得的旧的概率表和计数表生成新概率表(由“npt”表示)。图6的中间部分s2示出了图4所示的提出的混合计数表维护设计的后向概率表更新操作。软件(sw)执行语法解析(syntaxparsing)(用“sp”表示),然后硬件(hw)执行熵解码。应该注意的是,hw还负责在熵解码期间向hw的外部存储设备生成计数信息(countinformation)(由“ci”表示)。在图6的中间部分s2所示的一个示例性设计中,hw不需要在hw的内部存储设备中生成并存储计数表。以这种方式,可以有效地降低hw的成本(特别是hw的内部存储设备的成本)。在图像的熵解码完成之后,sw从外部存储设备获取计数信息(由“ci”表示),并且根据计数信息在外部存储设备中生成图像的计数表(由“ct”表示)到。接下来,sw从hw获得旧概率表(由“pt”表示),然后根据旧概率表和计数表生成新概率表(由“npt”表示)。在替代设计中,hw可以保留用于存储计数表的一部分的内部存储设备的一部分(例如,由少量对应于上下文的计数值和用于某些语法类型(例如mvd和/或模式)的相关语法设置组成的一个部分计数表,),而计数表的剩余部分(例如,由对应于上下文的大量计数值和用于剩余语法类型(例如系数)的相关语法设置组成的另一个部分计数表,)不需要存储在内部存储设备中。由于内部存储设备仅需要存储小型部分计数表而不是整个计数表,所以可以降低hw的内部存储设备的成本。在图像的熵解码完成之后,小型部分计数表被存储在内部存储设备中。因此,sw从内部存储设备获取小型部分计数表,从外部存储设备获取计数信息,并根据小型部分计数表以及计数信息在外部存储设备中生成图像的计数表,其中通过组合小型部分计数表和基于计数信息生成的大型部分计数表来获得计数表。接下来,sw从hw获得旧概率表,然后根据旧概率表和计数表生成新的概率表。图6的底部s3示出了图5所示的提出的混合计数表维护设计的后向概率表更新操作。与图4所示的混合计数表维护设计相比,图5所示的提出的混合计数表维护设计具有较短的处理时间。理想地,利用图5所示的所提出的混合计数表维护设计,通过使用后向概率表更新操作来生成计数表所需的处理时间等于通过使用基于硬件的计数表维护设计的后向概率表更新操作来生成计数表所需的处理时间。如图6所示,软件(sw)执行语法解析,然后硬件(hw)执行熵解码。应该注意的是,hw还负责在熵解码期间向hw的外部存储设备生成计数信息(由“ci”表示)。具体地说,在一个图像的熵解码期间,sw执行多次转换迭代,其中在除了最后的转换迭代之外的所有转换迭代中转换的计数信息的量可以相同,或者在不同的转换迭代(包括最后的转换迭代)中转换的计数信息的量可能会有所不同。在图6的底部s3所示的一个示例性设计中,hw不需要在hw的内部存储设备中生成并存储计数表。在每个转换迭代中,计数表(由“ct”表示)由计数信息(由“ci”表示)更新。以这种方式,由于基于hw的熵解码和基于sw的计数表更新的并行处理,生成一个图像的计数表所需的处理时间可以减少。如图6所示,在图像的熵解码完成之后,计数表即将准备就绪。接下来,sw从hw获得旧概率表(由“pt”表示),然后根据旧概率表和计数表生成新概率表(由“npt”表示)。在替代设计中,hw可以保留内部存储设备的一部分以存储计数表的一部分(例如,由对应于上下文的少量计数值和对于某些语法类型(例如mvd和/或模式)的相关联的语法设置组成的一个部分计数表),以及计数表的剩余部分(例如,由对应于上下文的大量计数值和对于剩余语法类型(例如系数)的相关联的语法设置组成的另一个部分计数表)不需要存储在内部存储设备中。由于内部存储设备仅需要存储小型部分计数表而不是整个计数表,所以可以降低hw的内部存储设备的成本。每个转换迭代中的计数信息更新大型部分计数表。以这种方式,由于基于hw的熵解码和基于sw的部分计数表更新的并行处理,可以减少生成大型部分计数表所需的处理时间。在图像的熵解码完成之后,大型部分计数表即将准备就绪。sw从内部存储设备获取小型部分计数表,并通过组合小型部分计数表和大型部分计数表,在外部存储设备中生成图像的计数表。接下来,sw从hw获得旧概率表,然后根据旧概率表和计数表生成新的概率表。如上所述,图2所示的计数信息收集单元212收集从熵处理单元202生成的计数信息cnt_info,其中计数信息cnt_info被转换为用于生成计数表cnt_table的计数表内容。在该实施例中,计数表cnt_table记录分别对应于不同上下文和不同语法类型的相关联的不同语法设置的多个计数值,其中每个计数值记录一个对应上下文的发生次数和一个相应的语法类型的一个对应的相关语法设置。在该实施例中,计数信息cnt_info被设计为包括指示一个上下文的指示值和一个语法类型的一个相关联的语法设置。在一个示例性计数信息实现中,包括在计数信息cnt_info中的每个指示值由一个标识符(id)设置。因此,当生成计数信息cnt_info时,硬件熵引擎115/113的熵处理单元202为不同的语法类型分别分配不同的上下文和不同的相关语法设置。应当注意,术语“语法设置”可以意味着一个特定语法值,或者可以表示特定语法值范围内的任何语法值,这取决于实际的设计考虑。为了清楚和简单起见,在以下计数信息转换示例中提到的一个“语法设置”可以是一个特定的语法值。然而,这仅仅是为了说明的目的,并不意味着对本发明的限制。图7是根据本发明的实施例的将由标识符组成的计数信息转换为计数表的操作的示意图。假设不同语法类型之一是inter_mode。因此,用于inter_mode语法类型的计数表cnt_table具有多个帧间模式(intermode)上下文[0,1,2,3,4,5,6],每个帧间模式上下文与多个帧间模式值[0,1,2,3]相关联。在该示例中,硬件熵引擎115/113的熵处理单元202将7×4标识符分配给inter_mode语法类型的7×4上下文和语法设置组合,其中7×4上下文和语法设置组合被inter_mode[inter_mode_context][inter_mode_value]索引。例如,将inter_mode[0][0]的上下文和语法设置组合分配给标识符“0”,将inter_mode[0][1]的上下文和语法设置组合分配给标识符“1”,将inter_mode[0][2]的上下文和语法设置组合分配给标识符“2”,将inter_mode[0][3]的上下文和语法设置组合分配为标识符“3”,依此类推。考虑其中inter_mode[2][2]、inter_mode[3][0]、inter_mode[3][3]、inter_mode[5][0]、inter_mode[5][0]、inter_mode[2][3]、inter_mode[3][1]、inter_mode[0][0]、inter_mode[0][0]、inter_mode[0][2]、inter_mode[0][2]、inter_mode[0][3]以及inter_mode[5][0]的上下文和语法设置组合由硬件熵引擎115/113的熵处理单元202进行熵处理(例如,熵编码/解码)的情况,从熵处理单元202生成并由计数信息收集单元212收集的计数信息cnt_info包括标识符“10”、“12”、“15”、“20”、“20”、“11”、“13”、“0”、“0”、“2”、“2”、“3”及“20”。在获得计数信息cnt_info之后,cpu102(特别是在cpu102上运行的软件程序prog)将计数信息cnt_info转换为计数表cnt_table的计数表内容。每个计数表内容是计数值,其记录一个对应的上下文的出现次数和一个对应的语法类型的相应的一个语法设置。具体地,记录在计数表cnt_table中的一个计数值根据包含在计数信息cnt_info中的相同标识符的数量来设置。由于计数信息cnt_info包含两个标识符“0”,因此将inter_mode[0][0]的计数值设置为2。由于计数信息cnt_info包括两个标识符“2”,所以inter_mode[0][2]的计数值被设置为2。由于计数信息cnt_info包括一个标识符“3”,所以inter_mode[0][3]的计数值被设置为1。由于计数信息cnt_info包括一个标识符“10”,所以inter_mode[2][2]的计数值被设置为1。由于计数信息cnt_info包括一个标识符“11”,所以计数值inter_mode[2][3]设置为1。由于计数信息cnt_info包含一个标识符“12”,因此将inter_mode[3][0]的计数值设置为1。由于计数信息cnt_info包含一个标识符“13”,所以将inter_mode[3][1]的计数值设置为1。由于计数信息cnt_info包含一个标识符“15”,因此inter_mode[3][3]设置为1。由于计数信息cnt_info包括三个标识符“20”,所以inter_mode[5][0]的计数值被设置为“3”。由于没有对应的上下文和语法设置进行编码/解码,计数表cnt_table的剩余计数值由0设置。在图7所示的示例中,包含在计数信息cnt_info中的指示值是标识符。然而,这仅仅是为了说明的目的,并不意味着对本发明的限制。在另一示例性计数信息实现中,包括在计数信息cnt_info中的每个指示值由一个坐标设置。图8是根据本发明的实施例的将由坐标组成的计数信息转换为计数表的操作的示意图。硬件熵引擎115/113的熵处理单元202将7×4坐标(例如,(x,y)=(inter_mode_value,inter_mode_context))分配给inter_mode语法类型的7×4上下文和语法设置组合,其中7×4上下文和语法设置组合由inter_mode[inter_mode_context][inter_mode_value]索引。例如,inter_mode[0][0]的上下文和语法设置组合被分配一个坐标(0,0),inter_mode[0][1]的上下文和语法设置组合被分配一个坐标(1,0),inter_mode[0][2]的上下文和语法设置组合被分配一个坐标(2,0),inter_mode[0][3]的上下文和语法设置组合被分配一个坐标(3,0),等等。考虑其中inter_mode[2][2]、inter_mode[3][0]、inter_mode[3][3]、inter_mode[5][0]、inter_mode[5][0]、inter_mode[2][3]、inter_mode[3][1]、inter_mode[0][0]、inter_mode[0][0]、inter_mode[0][2]、inter_mode[0][2]、inter_mode[0][3]及inter_mode[5][0]的上下文和语法设置组合由硬件熵引擎115/113的熵处理单元202进行熵处理(例如,熵编码/解码)的情况,从熵处理单元202生成的计数信息cnt_info由计数信息收集单元212收集,包括坐标(2,2)、(0,3)、(3,3)、(0,5)、(0,5)、(3,2)、(1,3)、(0,0)、(0,0)、(2,0)、(2,0)、(3,0)和(0,5)。在获得计数信息cnt_info之后,cpu102(特别是在cpu102上运行的软件程序prog)将计数信息cnt_info转换为计数表cnt_table的计数表内容。每个计数表内容是记录一个对应上下文的出现次数和一个对应的语法类型的一个对应的相关语法设置的计数值。具体地,记录在计数表cnt_table中的一个计数值根据包含在计数信息cnt_info中的相同坐标数来设定。由于计数信息cnt_info包含两个坐标(0,0),所以将inter_mode[0][0]的计数值设置为2。由于计数信息cnt_info包含两个坐标(2,0),因此inter_mode[0][2]的计数值设置为2。由于计数信息cnt_info包括一个坐标(3,0),所以inter_mode[0][3]的计数值被设置为1。由于计数信息cnt_info包括一个坐标(2,2),所以inter_mode[2][2]的计数值设置为1。由于计数信息cnt_info包括一个坐标(3,2),所以将inter_mode[2][3]的计数值设置为1。由于计数信息cnt_info包括一个坐标(0,3),将inter_mode[3][0]的计数值设置为1。由于计数信息cnt_info包括一个坐标(1,3),所以将inter_mode[3][1]的计数值设置为1。由于计数信息cnt_info包含一个坐标(3,3),因此将inter_mode[3][3]的计数值设置为1。由于计数信息cnt_info包含三个标识符(0,5),所以将inter_mode[5][0]的计数值设置为“3”。由于没有对应的上下文进行编码/解码,计数表cnt_table的剩余计数值设置为0。如图2所示,概率表prob_table存储在分配在内部存储设备114/112中的概率表缓冲器218中,计数表cnt_table存储在外部存储设备116中。当执行基于软件的后向概率表更新时,需要将概率表prob_table加载到外部存储设备116中进行处理。图9是根据本发明的实施例的第一后向适应设计的示意图。cpu102可以将内部存储设备114/112的概率表缓冲器218中的概率表prob_table直接读取到外部存储设备116,其中当前使用的概率表prob_table可以作为要更新的旧概率表prob_table_old。后向更新器902是软件程序prog的模块。当由cpu102执行后向更新器902时,根据外部存储设备116中的计数表cnt_table和语法边信息(例如语法类型),对外部存储设备116中的旧概率表prob_table_old执行后向适配,使得在外部存储设备116中生成新的概率表prob_table_new,并且可以由硬件熵引擎115/113选择性地使用用于下一图像的熵处理(例如,熵编码/解码)的新概率表prob_table_new。图10是根据本发明的实施例的第二后向适应设计的示意图。视频处理装置(例如,视频编码器106/视频解码器104)还可以包括直接存储器访问(dma)电路1002。dma电路1002被布置为从内部存储设备114/112的概率表缓冲器218发送概率表prob_table到外部存储设备116,而不需要cpu102的干预。当前使用的概率表prob_table可以作为要更新的旧概率表prob_table_old。后向更新器902是软件程序prog的模块。当由cpu102执行后向更新器902时,根据外部存储设备116中的计数表cnt_table和语法边信息(例如语法类型),对外部存储设备116中的旧概率表prob_table_old执行后向适应,使得在外部存储设备116中生成新的概率表prob_table_new,并且可以由硬件熵引擎115/113选择性地使用新概率表prob_table_new用于下一图像的熵处理(例如,熵编码/解码)。在本发明的一些实施例中,概率表prob_table被完全加载到内部存储设备114/112中用于熵编码/解码。将整个概率表prob_table加载到内部存储设备114/112可能需要较大的缓冲区大小。然而,可能的是,一个图像的熵编码/解码不需要概率表prob_table中的所有表内容。本发明还提出仅将概率表prob_table的所需部分加载到内部存储设备114/112中用于熵编码/解码。以这种方式,当一个图像被熵编码/解码时,可以减少分配在内部存储设备114/112中的概率表缓冲区的大小,从而允许内部存储设备114/112具有可用于视频编码器106/视频解码器104的其他功能的更多空闲存储空间。图11是根据本发明的实施例的概率表加载方法的流程图。在步骤1102,检查当前图像是否为key_frame或intra_only。当当前帧不是key_frame或intra_only时,流程继续步骤1106。在步骤1106,加载完整概率表。当当前帧是key_frame或intra_only时,流程继续步骤1104。在步骤1104,加载部分概率表(例如,仅包含帧内语法的概率表)。图12(a)和图12(b)是根据本发明的实施例的完整概率表和部分概率表的示意图。图12(a)示出了包括帧内语法和帧间语法的概率内容的完整概率表prob_table,例如“partition_mode”、“tx_related”、“intra_mode”、“inter_mode相关”、“filter_mode”、“ref_frame_mode”和“运动矢量相关”。图12(b)示出了仅包含诸如“partition_mode”,“tx_mode”和“intra_mode”的帧内语法的概率内容的部分概率表prob_table_intra。当当前图像是帧内图像时,加载部分概率表prob_table_intra用于帧内图像(intrapicture)的熵编码/解码。由于不需要为帧内图像的熵编码/解码而加载完整概率表prob_table,所以可以减少对帧内图像熵编码/解码的概率表存储要求。如图12(b)所示,部分概率表prob_table_intra是完整概率表prob_table的一部分。然而,这仅仅是为了说明的目的,并不意味着对本发明的限制。例如,仅包含帧内语法的概率表可以具有不包括在仅包含帧间语法的概率表中的表内容。对于另一示例,仅包含帧间语法的概率表可以具有不包括在仅包含帧内语法的概率表中的表内容。对于另一个示例,仅包含帧内语法的概率表和仅包含帧间语法的概率表可以是部分相同的并且部分地不同。图13是根据本发明的实施例的另一概率表加载方法的流程图。在步骤1302,检查当前图像是否是帧内图像。当当前帧是帧内图像时,流程进行到步骤1304。在步骤1304,加载仅包含帧内语法的概率表,用于帧内图像的熵编码/解码。当当前帧是帧间图像时,流程进行到步骤1306。在步骤1306,加载仅包含帧间语法的概率表,用于帧间图像的熵编码/解码。简而言之,可以检查帧类型和/或帧级语法以决定熵编码/解码当前图像实际需要的概率表内容。因此,基于帧类型和/或帧级语法,加载仅包含对当前图像进行熵编码/解码所需的概率表内容的概率表。由于没有加载包含熵编码/解码当前图像所需的概率表内容的完整概率表和对当前图像进行熵编码/解码所不需要的概率表内容,所以对当前图像的熵编码/解码的概率表存储要求可以减少。文中描述的主题有时示出了包含在其它不同部件内的或与其它不同部件连接的不同部件。应当理解:这样描绘的架构仅仅是示例性的,并且,实际上可以实施实现相同功能的许多其它架构。在概念意义上,实现相同功能的部件的任何布置是有效地“相关联的”,以使得实现期望的功能。因此,文中被组合以获得特定功能的任意两个部件可以被视为彼此“相关联的”,以实现期望的功能,而不管架构或中间部件如何。类似地,这样相关联的任意两个部件还可以被视为彼此“可操作地连接的”或“可操作地耦接的”,以实现期望的功能,并且,能够这样相关联的任意两个部件还可以被视为彼此“操作上可耦接的”,以实现期望的功能。“操作上可耦接的”的具体示例包含但不限于:实体地可联结和/或实体地相互、作用的部件、和/或无线地可相互作用和/或无线地相互作用的部件、和/或逻辑地相互作用的和/或逻辑地可相互作用的部件。此外,关于文中基本上任何复数和/或单数术语的使用,只要对于上下文和/或应用是合适的,本领域普通技术人员可以将复数变换成单数,和/或将单数变换成复数。本领域普通技术人员将会理解,通常,文中所使用的术语,特别是在所附权利要求(例如,所附权利要求中的主体)中所使用的术语通常意在作为“开放性”术语(例如,术语“包含”应当被解释为“包含但不限干”,术语“具有”应当被解释为“至少具有”,术语“包含”应当被解释为“包含但不限干”等)。本领域普通技术人员还将理解,如果意在所介绍的权利要求陈述对象的具体数目,则这样的意图将会明确地陈述在权利要求中,在缺乏这样的陈述的情况下,不存在这样的意图。例如,为了帮助理解,所附权利要求可以包含使用介绍性短语“至少一个”和“一个或更多个”来介绍权利要求陈述对象。然而,这样的短语的使用不应当被解释为:用不定冠词“一个(a或an)”的权利要求陈述对象的介绍将包含这样介绍的权利要求陈述对象的任何权利要求限制为只包含一个这样的陈述对象的发明,即使在同一权利要求包含介绍性短语“一个或更多个”或“至少一个”以及诸如“一个(a)”或“一个(an)”之类的不定冠词的情况下(例如,“一个(a)”和/或“一个(an)”应当通常被解释为意味着“至少一个”或“一个或更多个”)也如此;上述对以定冠词来介绍权利要求陈述对象的情况同样适用。另外,即使明确地陈述了介绍的权利要求陈述对象的具体数目,但本领域普通技术人员也会认识到:这样的陈述通常应当被解释为意味着至少所陈述的数目(例如,仅有“两个陈述对象”而没有其他修饰语的陈述通常意味着至少两个陈述对象,或两个或更多个陈述对象)。此外,在使用类似于“a、b和c中的至少一个等”的惯用语的情况下,通常这样的结构意在本领域普通技术人员所理解的该惯用语的含义(例如,“具有a、b和c中的至少一个的系统”将包含但不限于具有单独的a、单独的b、单独的c、a和b—起、a和c一起、b和c一起和/或a、b和c一起的系统等)。在使用类似于“a、b或c中的至少一个等”的惯用语的情况下,通常这样的结构意在本领域普通技术人员所理解的该惯用语的含义(例如,“具有a、b或c中的至少一个的系统”将包含但不限于具有单独的a、单独的b、单独的c、a和b—起、a和c一起、b和c一起和/或a、b和c一起的系统等)。本领域普通技术人员将进一歩理解,不管在说明书、权利要求书中还是在附图中,表示两个或更多个可替换的术语的几乎任意析取词和/或短语应当理解成考虑包含术语中的一个、术语中的任一个或所有两个术语的可能性。例如,短语“a或b”应当被理解成包含“a”、“b”、或“a和b”的可能性。尽管已经在文中使用不同的方法、设备以及系统来描述和示出了一些示例性的技术,但是本领域普通技术人员应当理解的是:可以在不脱离所要求保护的主题的情况下进行各种其它修改以及进行等同物替换。此外,在不脱离文中描述的中心构思的情况下,可以进行许多修改以使特定的情况适应于所要求保护的主题的教导。因此,意在所要求保护的主题不限制于所公开的特定示例,而且这样的要求保护的主题还可以包含落在所附权利要求的范围内的所有实施及它们的等同物。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1