变换系数代码化中的高效上下文模型计算设计的制作方法

文档序号:22481039发布日期:2020-10-09 22:30阅读:135来源:国知局
变换系数代码化中的高效上下文模型计算设计的制作方法



背景技术:

数字视频流可以使用帧或静止图像的序列来表示视频。数字视频能够被用于各种应用,包括例如视频会议、高清晰度视频娱乐、视频广告或用户生成的视频共享。数字视频流能够包含大量数据并且消耗计算设备的大量计算或通信资源以进行视频数据的处理、传输或存储。已经提出各种方法(包括压缩和其它编码技术)来减少视频流中的数据量。



技术实现要素:

所公开的实现方式的一个方面是一种用于对变换系数的变换块进行编码的装置,该装置包括存储器和处理器。存储器包括指令,这些指令可由处理器执行以标识值的下平面,以向后或反向扫描顺序处理下平面,选择用于对下平面的值进行熵代码化的模板,并且,对于下平面的当前值,基于模板反对角线来选择两个或更多个线缓冲器,这两个或更多个线缓冲器中的每一个均与相应的扫描顺序反对角线相对应,使用两个或更多个线缓冲器来确定上下文,并且在压缩比特流中,使用上下文来对当前值进行熵编码。下平面的每个值是变换系数的相应的“到达”值。反向扫描顺序沿着扫描顺序反对角线访问下平面的值。模板对于待代码化值指示下平面的已经代码化的值的扫描位置。扫描位置在模板中布置在至少两个模板反对角线中。

所公开的实现方式的另一方面是一种用于对变换系数的变换块进行解码的装置,该装置包括存储器和处理器。存储器包括指令,这些指令可由处理器执行以选择用于对下平面的值进行熵解码的模板,以反向扫描顺序对下平面进行解码,并且对于下平面的当前值,基于模板反对角线来选择两个或更多个线缓冲器,这两个或更多个线缓冲器中的每一个均与相应的扫描顺序反对角线相对应,使用两个或更多个线缓冲器来确定上下文,并且在压缩比特流中,使用上下文来对当前值进行熵解码。模板对于待解码值指示下平面的解码值的扫描位置,扫描位置在模板中布置在至少两个模板反对角线中。下平面的每个值是变换系数的相应的“到达”值。反向扫描顺序沿着扫描顺序反对角线对下平面的值进行解码。

另一方面是一种用于对变换系数的变换块进行编码的方法。该方法包括:确定值的下平面;以反向扫描顺序处理下平面;以及选择用于对下平面的值进行熵代码化的模板。该方法也包括:对于下平面的当前值,基于模板反对角线来选择两个或更多个线缓冲器,这两个或更多个线缓冲器中的每一个均与相应的扫描顺序反对角线相对应;使用两个或更多个线缓冲器来确定上下文;以及在压缩比特流中,使用上下文来对当前值进行熵编码。下平面的每个值是变换系数的相应的“到达”值。反向扫描顺序沿着扫描顺序反对角线访问下平面的值。模板对于待代码化值指示下平面的代码化值的扫描位置,扫描位置在模板中布置在至少两个模板反对角线中。

在以下对实施例、所附权利要求和附图的详细描述中公开了本公开的这些和其它方面。

附图说明

本文的描述参考附图,其中,相似的附图标记在所有若干视图中自始至终指代相似的部分。

图1是视频编码和解码系统的简图。

图2是能够实现发送站或接收站的计算设备的示例的框图。

图3是要编码并随后解码的视频流的图。

图4是根据本公开的实现方式的编码器的框图。

图5是根据本公开的实现方式的解码器的框图。

图6是根据本公开的实现方式的用于使用级别图来在编码视频比特流中对变换块进行编码的过程的流程图。

图7是图示根据本公开的实施方式的使用级别图的变换系数代码化的各个级的图。

图8是根据本公开的实施方式的在非零图中的先前代码化的邻居的图。

图9是根据本公开的实施方式的用于使用级别图来代码化变换块的过程的流程图。

图10a-b是根据本公开的实施方式的用于确定代码化上下文的模板的示例的图。

图11是根据本公开的实施方式的用于使用级别图对变换块进行代码化的过程的流程图。

图12是根据本公开的实施方式的使用模板来确定上下文的图示的示例。

图13是根据本公开的实现方式的沿着反对角线对齐值的扫描顺序的示例的图。

图14是根据本公开的实施方式的用于上下文选择的高速缓存管理的过程的流程图。

图15是根据本公开的实施方式的用于将移动窗口用于上下文选择的过程的流程图。

图16是根据本公开的实施方式的用于对变换系数的变换块进行代码化的过程的流程图。

具体实施方式

如上提及,与对视频流进行代码化有关的压缩方案可以包括使用一种或多种技术来将图像分解成块并且生成数字视频输出比特流(即,编码比特流),以限制输出比特流中包括的信息。能够对接收到的比特流进行解码以从有限的信息中重新创建块和源图像。对视频流或其一部分例如帧或块进行编码能够包括使用视频流中的时间或空间相似度来改进代码化效率。例如,可以基于标识先前代码化的像素值与视频流的当前块中的像素值之间或先前代码化的像素值的组合与视频流的当前块中的像素值之间的差(残差)来对该当前块进行编码。

使用空间相似度的编码能够称为帧内预测。帧内预测试图使用视频帧的块周边的像素来预测该块的像素值;也就是说,使用在与该块相同的帧中但是在该块外的像素。由帧内预测产生的预测块在本文中被称为帧内预测器。能够沿着预测方向执行帧内预测,其中每个方向能够与帧内预测模式相对应。帧内预测模式能够由编码器用信号通知给解码器。

使用时间相似度的编码能够称为帧间预测。帧间预测试图使用来自一个或多个时间上接近的帧(即,参考帧)的一个或多个可能移位的块来预测块的像素值。时间上接近的帧是在时间上早于或晚于正在编码的块的帧出现在视频流中的帧。由帧间预测产生的预测块在本文中被称为帧间预测器。

使用运动矢量来执行帧间预测。用于生成预测块的运动矢量是指除当前帧以外的帧,即参考帧。参考帧在视频流的序列中能够位于当前帧之前或之后。一些编解码器使用至多八个参考帧,这些参考帧能够被存储在帧缓冲器中。运动矢量能够参考(即,使用)帧缓冲器的参考帧中的一个。因此,一个或多个参考帧能够可用于对当前帧进行代码化。

如上提及,可以基于标识先前代码化的像素值与当前块中的像素值之间的差(残差)对视频流的当前块进行编码。以这种方式,需要将仅残差和用于生成残差的参数添加到编码比特流。可以使用有损量化步骤来对残差进行编码。

残差块可以是在像素域中。能够将残差块变换到频域中,从而产生变换系数的变换块。能够对变换系数进行量化,从而产生量化变换系数的量化变换块。能够对量化系数进行熵编码并将其添加到编码比特流。解码器能够接收编码比特流,对量化变换系数进行熵解码以重建原始视频帧。

熵代码化是用于“无损”代码化的技术,其依靠对在编码视频比特流中出现的值的分布进行建模的概率模型。通过基于值的测量或估计分布使用概率模型,熵代码化能够将表示视频数据所需要的比特数减少为接近于理论最小值。在实践中,表示视频数据所需要的比特数的实际减少可以是概率模型的准确度、执行代码化遍及的比特数以及用于执行代码化的定点算术的计算准确度的函数。

在编码视频比特流中,许多比特被用于以下两种情况之一:内容预测(例如,帧间模式/运动矢量代码化、帧内预测模式代码化等)或残差代码化(例如,变换系数)。

编码器可以使用各个技术来减少在变换系数代码化上花费的比特量。例如,如下进一步描述的级别图能够被用于对变换系数进行代码化。在本文中,为了简洁并且除非另外从上下文中清楚,否则变换系数是指量化变换系数,并且变换块是指量化变换系数。

能够将变换系数的值分割成两个平面:下平面和上平面。最大级别与下平面相关联。下平面对于变换系数指示“直到系数是否小于或等于最大级别”的值。例如,如果最大级别是2,则下平面指示系数是0、1、2还是大于2。因此,“直到系数是否小于或等于2”意味着下平面指示系数的值是0、1、2或大于2。其值大于2(例如,最大级别)的任何系数能够在下平面中用指示“大于2”(即,3或以上)的一个值来表示。上平面与在此示例中为3或以上的系数值相对应。因此,下平面的值中的每一个均可以是四个值即0、1、2或“大于2”中的一个。在一个示例中,大于2的系数能够由下平面中的值3表示。

通常,下平面(即,下平面的值)比上平面频繁地出现多得多。这是因为对于上平面的每一值,在下平面中存在必要的对应值。然而,下平面的值中的一些可能不具有上平面中的对应值。例如,值为7的变换系数将具有下平面中的对应值(例如,由于7大于2所以值为3)和下平面中的值(例如,5)。然而,值为2的变换系数不具有上图中的对应值。因此,下平面的压缩性能(即,压缩速度)可能对整体压缩性能具有显著影响。

如上所述,通常通过如下方式实现对符号的序列进行熵代码化:使用概率模型来确定该序列的概率p,然后使用二进制算术代码化来在编码器处将序列映射到二进制码字并且在解码器处根据二进制码字对该序列进行解码。码字的长度(即,比特数)由-log(p)给出。熵代码化的效率可能与概率模型直接有关。贯穿本文档,除非另外指定,否则log表示以二(2)为底的对数函数。

如本文所用,模型可以是无损(熵)代码化,或者可以是无损(熵)代码化中的参数。模型可以是影响用于熵代码化的概率估计的任何参数或方法。

上下文建模的目的是为后续熵代码化引擎例如算术代码化、霍夫曼代码化和其它可变长度到可变长度代码化引擎获得概率分布。为了实现良好的压缩性能,可能需要大量的上下文模型。例如,一些视频代码化系统能够包括单独用于变换系数代码化的数百或甚至数千个上下文模型。每个上下文模型能够与概率分布相对应。

如已经提及的,视频块的残差被变换成变换系数的变换块。变换块在频域中并且可以为视频块生成一个或多个变换块。变换系数被量化和熵代码化成编码视频比特流。解码器使用编码变换系数和参考帧来重建块。对变换系数进行熵代码化涉及选择上下文模型(也称为概率上下文模型或概率模型),该上下文模型提供用于对二进制化变换系数的二进制符号进行代码化的条件概率的估计。

编解码器中的可用上下文模型可以作为列表、数组、文件或某个其它合适的数据结构获得。能够对上下文模型的列表进行排序。也就是说,能够使相应的上下文索引与每个上下文模型相关联。因此,选择上下文模型能够涉及确定上下文索引。然后使用上下文索引来选择(例如,检索、访问等)所对应的上下文模型。

对变换块的变换系数进行代码化,诸如对与变换块相对应的下平面的值进行代码化,能够包括访问下平面的每个值、为下平面的值确定上下文索引、检索与上下文索引相关联的上下文模型以及使用上下文模型来对值进行熵代码化。

沿着扫描顺序访问(例如,处理)下平面的值。也能够将扫描顺序称为处理顺序。沿着扫描顺序访问下平面的值能够包括生成一维数组。为变换块的当前变换系数确定上下文索引能够包括访问一维数组中的其它值。这些其它值是与在二维变换块中与当前变换系数相邻的其它变换系数相对应的值。虽然这些其它变换系数可以与二维块中的当前变换系数块相邻,但是所对应的值可能不是一维数组中的相邻值。下平面的值在维度数组中的布置取决于扫描顺序。

如下关于图12进一步说明的,访问每个变换系数的相应的其它值能够强加某个计算障碍,尤其是对于解码器速度。

本公开的实现方式能够通过以如优化存储器访问这样的方式布置并访问确定上下文索引所需要的下平面的值来产生改进的压缩性能。下平面的值能够沿着扫描顺序的反对角线布置在一个或多个线缓冲器中,使得为下平面的值确定上下文索引访问两个或更多个线缓冲器中的连续位置。描述了沿着反对角线对齐值的扫描顺序和用于从线缓冲器访问值的方法。

通过整合下平面的值的扫描顺序(例如,处理顺序)和上下文索引的计算方法,能够减少对线缓冲器的非连续位置的访问并且能够利用并行计算。因此,本公开的实现方式能够具有减少的计算。

在本文中首先参考可以并入教导的系统来描述变换系数代码化中的高效上下文模型计算设计。

图1是视频编码和解码系统100的简图。发送站102可以是例如具有硬件的内部配置的计算机,诸如关于图2中描述的计算机。然而,发送站102的其它合适的实现方式是可能的。例如,发送站102的处理能够分布在多个设备当中。

网络104能够连接发送站102和接收站106以用于对视频流进行编码和解码。具体地,能够在发送站102中对视频流进行编码,并且能够在接收站106中对编码视频流进行解码。网络104可以是例如因特网。网络104也可以是局域网(lan)、广域网(wan)、虚拟专用网(vpn)、蜂窝电话网络、或将视频流从发送站102在此示例中转移到接收站106的任何其它手段。

在一个示例中,接收站106可以是具有硬件的内部配置的计算机,诸如在图2中描述的计算机。然而,接收站106的其它合适的实现方式是可能的。例如,接收站106的处理能够分布在多个设备当中。

视频编码和解码系统100的其它实现方式是可能的。例如,一个实现方式能够省略网络104。在另一实现方式中,能够对视频流进行编码,然后存储编码视频流以供在以后的时间发送到接收站106或具有存储器的任何其它设备。在一个实现方式中,接收站106(例如,经由网络104、计算机总线和/或某种通信路径)接收编码视频流并且存储该视频流以供以后解码。在一个示例实现方式中,实时传输协议(rtp)被用于通过网络104发送编码视频。在另一实现方式中,可以使用除rtp以外的传输协议,例如,基于超文本传输协议(http)的视频流协议。

例如,当用在视频会议系统中时,发送站102和/或接收站106可以包括如下所述既对视频流进行编码又对视频流进行解码的能力。例如,接收站106可能是视频会议参与者,该视频会议参与者从视频会议服务器(例如,发送站102)接收编码视频比特流以解码和查看,并且进一步对它自己的视频比特流进行编码并发送到视频会议服务器以供由其它参与者解码和查看。

图2是能够实现发送站或接收站的计算设备200的示例的框图。例如,计算设备200能够实现图1的发送站102和接收站106中的一者或两者。计算设备200的形式可以为包括多个计算设备的计算系统,或者形式为单个计算设备,例如,移动电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机等。

计算设备200中的cpu202可以是中央处理单元。替换地,cpu202可以是任何其它类型的设备,或现存的或此后开发的能够操纵或处理信息的多个设备。尽管所公开的实现方式能够用如图所示的单个处理器(例如,cpu202)来实践,但是能够通过使用不止一个处理器来实现速度和效率上的优势。

在实现方式中,计算设备200中的存储器204可以是只读存储器(rom)设备或随机存取存储器(ram)设备。能够将任何其它合适类型的存储设备用作存储器204。存储器204能够包括由cpu202使用总线212来访问的代码和数据206。存储器204能够进一步包括操作系统208和应用程序210,应用程序210包括允许cpu202执行本文所述的方法的至少一个程序。例如,应用程序210能够包括应用1至应用n,这些应用进一步包括执行本文所述的方法的视频代码化应用。计算设备200也能够包括辅助存储214,该辅助存储214例如可以是与移动的计算设备200一起使用的存储卡。因为视频通信会话可以包含大量信息,所以能够将它们全部或部分地存储在辅助存储214中并且视需要加载到存储器204中以进行处理。

计算设备200也能够包括一个或多个输出设备,诸如显示器218。在一个示例中,显示器218可以是将显示器与可操作来感测触摸输入的触敏元件组合在一起的触敏显示器。显示器218能够经由总线212耦合到cpu202。除了显示器218之外或作为显示器218的替代方案,还能够提供允许用户对计算设备200进行编程或以其它方式使用计算设备200的其它输出设备。当输出设备是显示器或包括显示器时,能够以各种方式实现该显示器,包括通过液晶显示器(lcd);阴极射线管(crt)显示器;或发光二极管(led)显示器,诸如有机led(oled)显示器。

计算设备200也能够包括图像感测设备220或与之通信,该图像感测设备220例如为相机或现存的或此后开发的能够感测图像例如操作计算设备200的用户的图像的任何其它图像感测设备220。图像感测设备220能够被定位为使得它朝向操作计算设备200的用户定向。在一个示例中,图像感测设备220的位置和光轴能够被配置为使得视场包括与显示器218直接相邻并且显示器218可见的区域。

计算设备200也能够包括声音感测设备222或与之通信,该声音感测设备222例如为麦克风或现存的或此后开发的能够感测计算设备200附近的声音的任何其它声音感测设备。声音感测设备222能够被定位为使得它朝向操作计算设备200的用户定向,并且能够被配置成接收由该用户在该用户操作计算设备200的同时做出的声音,例如语音或其它话语。

尽管图2将计算设备200的cpu202和存储器204描绘为被集成到单个单元中,但是能够利用其它配置。cpu202的操作能够分布在能够直接或跨越局域网或其它网络耦合的多个机器(每个机器具有一个或多个处理器)之上。存储器204能够分布在多个机器例如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器之上。尽管在这里被描绘为单条总线,但是计算设备200的总线212能够由多条总线组成。另外,辅助存储214能够直接耦合到计算设备200的其它组件或者能够经由网络访问并且能够包括单个集成单元(诸如存储卡)或多个单元(诸如多个存储卡)。因此能够以各种广泛的配置实现计算设备200。

图3是要编码并随后解码的视频流300的示例的图。视频流300包括视频序列302。在下一个级别,视频序列302包括多个相邻帧304。虽然将三个帧描述为相邻帧304,但是视频序列302能够包括任何数目的相邻帧304。然后能够将相邻帧304进一步细分成单独帧,例如,帧306。在下一个级别,能够将帧306划分成一系列分段308或平面。例如,分段308可以是允许并行处理的帧的子集。分段308也可以是能够将视频数据分成单独颜色的帧的子集。例如,彩色视频数据的帧306能够包括亮度平面和两个色度平面。可以以不同的分辨率对分段308进行采样。

无论帧306是否被划分成分段308,都可以将帧306进一步细分成块310,这些块310能够包含与例如帧306中的16×16个像素相对应的数据。块310也能够被布置成包括来自像素数据的一个或多个分段308的数据。块310也可以具有任何其它合适的尺寸,诸如4×4个像素、8×8个像素、16×8个像素、8×16个像素、16×16个像素或更大。

图4是依照本公开的实现方式的编码器400的框图。如上所述,能够例如通过提供存储在存储器例如存储器204中的计算机软件程序来在发送站102中实现编码器400。计算机软件程序能够包括机器指令,这些机器指令当由诸如cpu202的处理器执行时,使发送站102以本文所述的方式对视频数据进行编码。也能够将编码器400实现为例如发送站102中包括的专用硬件。编码器400具有以下级来在(由实线连接线示出的)正向路径中执行各种功能以使用视频流300作为输入来产生编码或压缩比特流420:帧内/帧间预测级402、变换级404、量化级406和熵编码级408。编码器400也可以包括(由虚线连接线示出的)重构路径以重构用于将来块的编码的帧。在图4中,编码器400具有以下级来在重构路径中执行各种功能:去量化级410、逆变换级412、重构级414和环路滤波级416。编码器400的其它结构变型能够用于对视频流300进行编码。

当呈现视频流300以进行编码时,能够以块为单位处理帧306。在帧内/帧间预测级402处,能够使用帧内预测(也称作帧内预测)或帧间预测(也称作帧间预测)或两者的组合来对块进行编码。无论如何,都能够形成预测块。在帧内预测的情况下,预测块的全部或一部分可以由当前帧中的先前已经被编码和重构的样本形成。在帧间预测的情况下,预测块的全部或一部分可以由使用运动矢量确定的一个或多个先前构建的参考帧中的样本形成。

接下来,仍然参考图4,能够在帧内/帧间预测级402处从当前块减去预测块以产生残差块(也称作残差)。变换级404使用基于块的变换来在例如频域中将残差变换成变换系数。此类基于块的变换包括例如离散余弦变换(dct)和非对称离散正弦变换(adst)。其它基于块的变换是可能的。另外,可以对单个残差应用不同变换的组合。在应用变换的一个示例中,dct将残差块变换成其中变换系数值基于空间频率的频域。最低频率(dc)系数在矩阵的左上部,而最高频率系数在矩阵的右底部。值得注意的是,预测块以及因此所产生的残差块的尺寸可以与变换块的尺寸不同。例如,可以将预测块分割成应用单独变换的更小块。

量化级406使用量化器值或量化水平来将变换系数转换成离散量子值,这些离散量子值被称为量化变换系数。例如,可以将变换系数除以量化器值并截断。量化变换系数然后由熵编码级408进行熵编码。可以使用包括令牌树和二叉树的任何数目的技术来执行熵代码化。然后将经熵编码的系数与用于对块进行解码的其它信息(其可以包括例如所用的预测类型、变换类型、运动矢量和量化器值)一起输出到压缩比特流420。可以将用于对块进行解码的信息熵代码化成压缩比特流420内的块、帧、分片和/或段报头。压缩比特流420也能够被称为编码视频流或编码视频比特流,并且将在本文中互换地使用这些术语。

图4中的(由虚线连接线示出的)重构路径能够用于确保编码器400和解码器500(在下面描述)都使用相同的参考帧和块来对压缩比特流420进行解码。重构路径执行与在解码过程期间进行的功能类似的在下面更详细地讨论的功能,包括在去量化级410处对量化变换系数进行去量化和在逆变换级412处对去量化变换系数进行逆变换以产生导数残差块(也称作导数残差)。在重构级414处,能够将在帧内/帧间预测级402处预测的预测块添加到导数残差以创建重构块。能够对重构块应用环路滤波级416以减少失真,诸如块伪像。

编码器400的其它变型能够用于对压缩比特流420进行编码。例如,基于非变换的编码器400能够针对某些块或帧在没有变换级404的情况下直接对残差信号进行量化。在另一实现方式中,编码器400能够使量化级406和去量化级410被组合成单个级。

图5是依照本公开的实现方式的解码器500的框图。能够例如通过提供存储在存储器204中的计算机软件程序来在接收站106中实现解码器500。计算机软件程序能够包括机器指令,这些机器指令当由诸如cpu202的处理器执行时,使接收站106以下述方式对视频数据进行解码。也能够在例如发送站102或接收站106中包括的硬件中实现解码器500。

与上面讨论的编码器400的重构路径类似,解码器500在一个示例中包括以下级来执行各种功能以从压缩比特流420产生输出视频流516:熵解码级502、去量化级504、逆变换级506、帧内/帧间预测级508、重构级510、环路滤波级512和后置滤波级514。解码器500的其它结构变型能够用于对压缩比特流420进行解码。

当呈现压缩比特流420以进行解码时,压缩比特流420内的数据元素能够由熵解码级502解码以产生一组量化变换系数。去量化级504(例如,通过将量化变换系数乘以量化器值)对量化变换系数进行去量化,并且逆变换级506使用所选择的变换类型来对去量化变换系数进行逆变换以产生导数残差,该导数残差可以与在编码器400中由逆变换级412创建的导数残差相同。使用从压缩比特流420解码的报头信息,解码器500能够使用帧内/帧间预测级508来创建与在编码器400中例如在帧内/帧间预测级402处创建的相同的预测块。在重构级510处,能够将预测块添加到导数残差以创建重构块。能够对重构块应用环路滤波级512以减少块伪像。能够对重构块应用其它滤波。在一个示例中,对重构块应用后置滤波级514以减少块失真,并且结果作为输出视频流516被输出。也能够将输出视频流516称为解码视频流,并且将在本文中互换地使用这些术语。

解码器500的其它变型能够用于对压缩比特流420进行解码。例如,解码器500能够在没有后置滤波级514的情况下产生输出视频流516。在解码器500的一些实现方式中,在环路滤波级512之后应用后置滤波级514。环路滤波级512能够包括可选的去块滤波级。附加地或替换地,编码器400在环路滤波级416中包括可选的去块滤波级。

一些编解码器可以使用级别图来对变换块进行代码化(即,由编码器编码或由解码器解码)。也就是说,一些编解码器可以使用级别图来对变换块的变换系数进行代码化。在级别图代码化中,变换块被分解成多个级别图,使得级别图将每个变换系数值的代码化分解(即,减少)成一系列二元判决,每个二元判决与一幅度级别(即,图级别)相对应。分解能够通过使用多轮过程来完成。因此,根据以下等式将变换块的变换系数分解成一系列级别二进制数和残差:

其中

residue[r][c]=absolute(coefficient[r][c])-t-1

在以上等式中,coefficient[r][c]是在位置(行=r,列=c)处的变换块的变换系数,t是最大级别,levelk是与图级别k相对应的级别图,residue是系数残差图,并且sign是变换系数的符号图。在下面关于图7进一步描述这些术语。变换块的变换系数能够例如由解码器使用同一等式从编码levelk图、残差图residue和符号图sign重新组成。

零轮能够用于确定非零图(也称为级别0图),该非零图指示变换块的哪些变换系数是零并且哪些是非零。以从级别1到最大级别t的升序生成与轮1至最大(即,阈值)级别t相对应的级别图(即,级别1图、级别2图、...、级别t图)。级别k的级别图(称为级别k图)指示变换块的哪些变换系数具有大于或等于k的的绝对值。级别图是二元图。最后轮生成系数残差图。如果变换块包含高于最大级别t的变换系数值,则系数残差图指示这些系数大于最大级别t的程度(即,残差)。

当生成(即,代码化)级别k图时,需要处理仅与等于1(即,levelk-1[r][c]=1)的级别(k-1)图的位置(r,c)相对应的位置(r,c)—级别(k-1)的其它位置被确定为小于k,并且因此,对于级别k图无需处理它们。这降低了处理复杂性并且减少了二进制代码化操作的量。

由于级别图包含二进制值,所以待编码值的上方和左侧邻居是二进制值。能够确定基于任何数目的先前代码化的邻居的二进制值的上下文模型。上下文模型能够完全地利用来自所有这些邻居的信息。先前代码化的邻居可以是同一级别图或在前级别图例如紧接在前级别图中的邻居。级别k(例如,级别2)图的紧接在前图是级别(k-1)(例如,级别1)图。根据本公开的上下文可能不太复杂,从而产生用于对级别图进行代码化的高效模型。

当对级别k图进行编码时,能够将完全地代码化的级别(k-1)图和部分地代码化的级别k图用作用于上下文建模的上下文信息。如与在移动到下一个变换系数之前一次对一个系数值进行代码化的其它视频系统的变换系数代码化相比较,本公开的实现方式能够减小参考样本集的基数。这是因为,如本文进一步描述的,来自级别(k-1)图和部分地代码化的级别k图的信息是二进制信息。该二进制信息使得能够将复杂的空间相邻模板用于对二进制信息进行上下文建模。此类空间相邻模板能够更好地捕获变换块尤其是具有较大变换块大小的那些变换块的统计特性。

图6是根据本公开的实现方式的用于使用级别图来在编码视频比特流中对变换块进行编码的过程600的流程图。能够在诸如编码器400的编码器中实现过程600。编码视频比特流可以是图4的压缩比特流420。

能够将过程600例如实现为能够由诸如发送站102的计算装置执行的软件程序。该软件程序能够包括机器可读指令,这些机器可读指令能够被存储在诸如存储器204或辅助存储装置214的存储器中,并且能够由诸如cpu202的处理器执行,以使计算装置执行过程600。在至少一些实现方式中,过程600能够全部或部分地由编码器400的熵编码级408执行。

能够使用专用硬件或固件来实现过程600。一些计算装置能够具有多个存储器、多个处理器或两者。能够使用不同的处理器、存储器或两者来分发过程600的步骤或操作。以单数对术语“处理器”或“存储器”的使用包含具有一个处理器或一个存储器的计算装置以及具有能够在所记述的步骤中的一些或全部的执行中使用的多个处理器或多个存储器的装置。

现在参考图7说明过程600。图7是图示依照本公开的实现方式的使用级别图的变换系数代码化的各个级的图。更具体地,图7将各个级图示为系数代码化树700。图7包括之字形前向扫描顺序702、变换块704、非零图706、级别1图707、级别2图709、块结束(eob)图726、符号图732和系数残差图734。也可以将扫描顺序称为扫描方向。

过程600能够接收变换块,诸如图7的变换块704。能够从编码器的量化步骤例如图4的编码器400的量化级406接收变换块。变换块704包括零变换系数和非零变换系数。非零系数中的一些可以是负值。

在602处,对非零图进行编码。非零图指示包含非零变换系数的变换块的位置。也能够将非零图称为级别0图。

图6的非零图706图示了非零图。能够通过以扫描顺序例如图7的之字形前向扫描顺序702遍历变换块704并且使用二进制值来在非零图706中指示所对应的变换系数是零还是非零来生成非零图。在非零图706中,变换块704的非零变换系数用二进制值1(一)指示,而零变换系数用二进制值0(零)指示。然而,指示能够颠倒(即,零用于指示非零变换系数,而一(1)用于指示零变换系数)。

在一个实现方式中,在非零图中未指示基于变换块的扫描顺序超过最后非零变换系数(即,在最后非零变换系数之后出现)的零变换系数。例如,使用之字形前向扫描顺序702来扫描变换块704,与扫描位置11相对应的最后非零变换系数708是在非零图706中处于最后非零系数710处的最后指示的变换系数。对于与之字形前向扫描顺序702的扫描位置12-15相对应的变换系数在非零图706中不指示值。

在604处,过程600对相应的下范围级别图进行编码。每个下范围图具有直到最高级别的图级别。下范围级别图指示非零变换系数的哪些值等于下范围图的图级别并且非零变换系数的哪些值大于图级别。

对于每个图级别k,直到最大级别t,对下范围级别图levelk进行编码。每个下范围级别图指示变换块的哪些值等于下范围级别图的图级别并且变换块的哪些值大于图级别。因此,过程600使用多个轮(即,每个轮与级别k=1、2、...、t相对应),将对变换系数的代码化分解成一系列二元判决,每个二元判决与一幅度级别相对应。对级别k下变换块中的行和列(r,c)处的系数的二元判定能够由以下等式定义:

levelk[r][c]=1如果absolute(coefficient[r][c])>k

=0如果absolute(coefficient[r][c])≤k

例如,对于k=1(即,对于级别1图707),过程600对于变换块704的每个变换系数确定变换系数的绝对值是大于k(即,1)还是小于或等于k。对于变换系数720(即,在r=0、c=0处),因为-7的绝对值(即,|-7|=7)大于1,所以过程600将级别1图707的对应值722设定为1。对于最后非零变换系数708(即,在r=2、c=2处),因为-1的绝对值(即,|-1|=1)等于k(即,1),所以过程600将级别1图707的对应值716设定为0。能够将变换块中的最后非零变换系数(例如,最后非零变换系数708)称为最高ac系数。

在一个实现方式中,为了生成下平面,过程600能够从先前级别图的最后1值开始向后或相反扫描在前级别图。对于级别k图,在前级别图是与在前图级别(k-1)相对应的级别(k-1)图。也就是说,对于k=2,在前级别图是级别1图。对于k=1,在前级别图是级别0图(即,非零图)。对于级别1图707,非零图706的扫描从最后非零系数710开始。对于级别2图709,级别1图707的扫描从最后非零系数724开始。在生成级别k图时,过程600仅需要处理与级别(k-1)中的1值相对应的变换系数。过程600不需要处理与非1值相对应的变换系数,因为那些值已被确定为等于k-1(即,级别(k-1)图的零值)或小于k-1(即,级别(k-1)图的空白值)。

在一个实现方式中,最大级别t可以是固定的。例如,能够将最大级别t作为配置提供给过程600,能够将最大级别t硬代码化在实现过程600的程序中,或者能够基于编码视频比特流的先前代码化的变换块或其它块统计地或自适应地设定最大级别t。或者,最大级别t由过程600确定。也就是说,过程600能够对于最大级别t(即,t=1、2、3、4、...)测试不同值并且确定哪个值提供最好的压缩性能。能够将产生最佳压缩的最大级别t的值编码在视频比特流中,诸如图5的解码器500的解码器能够对该视频比特流进行解码和使用。如与最大级别t的其它值相比较,已经将2或3的最大级别t确定为提供可接受的压缩。

在606处,过程600对系数残差图进行编码。系数残差图的每个残差系数均与具有超过最大级别的绝对值的变换块的相应的(即,同位)非零变换系数相对应。能够使用公式(1)来计算出在变换块的位置(r,c)处的变换系数的残差系数:

residue[r][c]=absolute(coefficient[r][c])-t-1(1)

图7图示系数残差图734。在图7的示例中,最大级别t等于二(2)。因此,系数残差图734包含绝对值大于2的变换块704的变换系数的残差。残差系数是变换系数的绝对值超过最大级别t的程度。变换块704的两个值的绝对值大于最大级别t(即,2)的值,即变换系数720(即,|-7|=7>2)和变换系数739(即,|4|=4>2)。分别地,系数残差图734包括残差736和残差738。使用公式(1),将残差736设定为5(即,absolute(-7)–3=4)并且将残差738设定为1(即,absolute(4)–3=1)。

能够使用二进制代码化来将系数残差图734的残差系数编码在编码视频比特流中。能够使用拟合系数残差图的残差系数的统计的概率分布。概率分布可以是几何分布、拉普拉斯分布、帕雷托分布或任何其它分布。

将残差系数编码在视频比特流中提供若干益处,诸如优于对变换系数进行编码的视频编码系统。由于每个残差系数在幅度上比其对应的变换系数小,所以需要较少的比特来对残差系数进行编码。附加地,由于与非零变换系数(例如,图7的变换块704中的7)比有较少的残差系数要编码(例如,在图7的系数残差图734中为2个),所以能够产生附加压缩。

在过程600的一个实现方式中,也能够对符号图进行编码。符号图指示变换块的哪些变换系数具有正值并且哪些变换系数具有负值。不需要在符号图中指示为零的变换系数。图7的符号图732图示变换块704的符号图的示例。在该符号图中,负变换系数用-1指示而正变换系数用1指示。在一些实现方式中,正系数的符号可以用0指示而负系数的符号可以用1指示。

在过程600的一个实现方式中,在602处对非零图进行编码也能够包括生成变换块的eob图并且在编码视频比特流中交织非零图和eob图。

eob图指示变换块的非零变换系数相对于给定扫描顺序是否为最后非零系数。如果非零系数不是变换块中的最后非零系数,则它能够在eob图中用二进制值0(零)指示。另一方面,如果非零系数是变换块中的最后非零系数,则它能够在eob图中用二进制值1(一)指示。

例如,当变换块704的变换系数720后面是另一非零变换系数(例如,与扫描位置2相对应的变换系数-1)时,变换系数720不是最后非零变换系数,它用零的eob值728指示。另一方面,当与扫描位置11相对应的变换系数(即,最后非零变换系数708)是变换块704的最后非零系数时,它用1(一)的eob值730指示。

过程600能够通过以同一扫描顺序遍历非零图和eob图,在编码比特流中交织来自非零图706和eob图726的值。过程600能够使用之字形前向扫描顺序702或任何任意扫描顺序。对于每个位置(r,c),首先对非零图706的那行和那列处的值(即,nz_map[r][c])进行代码化。如果值nz_map[r][c]是1,则接下来对来自eob图726的对应值(即,eob_map[r][c])进行代码化,以指示变换块704的位置(r,c)是否包含最后非零变换系数。当eob_map[r][c]等于1时或者当达到了变换块中的最后位置(例如,之字形前向扫描顺序702的扫描位置15)时,过程600结束对非零图(例如,非零图706)的代码化。也就是说,当对来自非零图706的1值进行编码时,该值后面是来自对应的(即,同位)eob图726值的另一语法元素(即,要在编码视频比特流中编码的值)以指示1值是否为非零图706的最后1值。

在一个实现方式中,在602处对非零图进行编码也能够包括为非零图的值(即,待代码化值)确定代码化上下文。当前位置(r,c)处的待代码化值的代码化上下文能够基于非零图中的待代码化值的先前代码化的非零相邻值。代码化上下文也能够基于待代码化值在非零图内的位置。

如上提及,能够基于当前位置的非零先前代码化的邻居的数目来确定上下文信息,并且能够使用和来计算出上下文信息:

non_zero_map_sum(r,c)=∑(r′,c′)∈nb(r,c)nz_map(r′,c′)(2)

在等式(2)中,non_zero_map_sum(r,c)是位置(r,c)处的非零块的待代码化值的非零先前代码化的邻居的数目,nb(r,c)是在非零图的位置(r,c)处的待代码化值的先前代码化的邻居的集合,并且nz_map(r′,c′)是在非零图中的位置(r′,c′)处的值。参考图8进一步说明等式(1)。

图8是根据本公开的实现方式的非零图800中的先前代码化的邻居的图。图8包括待编码值、当前值802、不可用上下文邻居806(即,上下文信息不可用的相邻值)和代码化上下文邻居,诸如代码化上下文邻居808。图示了十个代码化上下文邻居。在邻居集中包括哪些值取决于扫描顺序。例如,使用图7的之字形前向扫描顺序702,图8中图示的邻居集包括代码化上下文邻居804,其包括在当前值802上方和左侧的邻居。对于当前值802,non_zero_map_sum(2,2)=5。此值(即,5)能够作为上下文信息用于确定用于对非零图800的当前值802进行代码化的概率模型。

如上指示,代码化上下文也能够基于待代码化值在非零图内或等效地在变换块中的位置。能够将变换块的位置分组成上下文组。例如,能够设定四个上下文组:与dc系数相对应的第一组(即,r=0且c=0)、与除ac系数外的顶部行相对应的第二组(即,r=0且c>0)、与除ac系数外的最左侧列相对应的第三组(即,r>0且c=0)以及与所有其它系数相对应的第四组(即,r>0且c>0)。因此,当前值802与第四上下文组相对应。

在一个实现方式中,在602处对非零图进行编码也能够包括为eob图的每个值确定代码化上下文。过程600能够基于待编码值相对于变换块的频率信息的位置来为eob图的待编码值确定上下文模型。也就是说,能够将变换系数在变换块中的位置用作用于确定用于对eob图的对应的(即,同位)待编码值进行编码的上下文模型的上下文。能够将变换块分区成区域,使得每个区域与上下文相对应。分区能够基于如下基本原理:eob位于变换块的dc位置处的可能性非常低,但是可能性远离dc系数增加。

在一些实现方式中,下范围级别图可以是具有与变换块的尺寸和如上指示图级别k相对应的尺寸的二元图。当在前级别图(即,如下所述的级别图k-1)中的对应值是一(1)并且所对应的变换系数大于下范围级别图的图级别k时,能够将下范围级别图的位置设定为一(1)。当在前级别图中的对应值具有一值并且所对应的变换系数等于下范围级别图的图级别k时,能够将下范围级别图的位置设定为零值。当在前级别图中的对应值具有零值时,下范围级别图的位置可能没有值。

在过程600的一个实现方式中,在604处对级别的下范围级别图进行编码也能够包括:基于下范围级别图的扫描顺序,为下范围级别图的值确定级别图代码化上下文。如上指示,对下范围级别图k的值进行编码相当于对二进制值即变换块的所对应的(即,同位)变换系数等于k还是高于k进行编码。对二进制值的编码产生简单上下文。因此,能够将一个值的多个相邻值用作用于为该值确定上下文模型的上下文。

如上另外指示,对下范围级别图的扫描能够以反向扫描顺序进行。因此,当对值进行编码时,在待编码值下方和右侧的相邻值(例如,如果扫描顺序是图7的之字形前向扫描顺序或702)将已经被编码。因此,能够将下范围级别图中的第一相邻值(例如,下方和右侧相邻值)用作上下文。附加地,也能够将紧接在前级别(k-1)图中的第二相邻值(例如,顶部和左侧相邻值)用作上下文。对于k>2,下范围级别k图的在前级别图是下范围级别(k-1)图;并且级别1图的在前级别图是非零图。

如上所述,对变换系数的代码化是多遍过程。在第一遍中,遵循前向扫描顺序对描述非零系数在变换块中的位置的非零图706进行代码化。在后续遍中,对遵循反向扫描顺序(即,从最高ac系数的位置到dc系数的位置)的非零系数的值进行代码化。能够使用以下步骤来实现对非零图706进行代码化:

1.初始化i=0,其中i表示扫描位置,并且i=0与dc位置(例如,变换系数720)相对应。

2.对指示扫描位置i处的量化变换系数是否为零的二进制非零标志nz[i]进行代码化。例如,当量化变换系数为零(即,扫描位置i处的非零图706中的值为零)时,能够对零值(nz[i]=0)进行代码化;否则(扫描位置i处的非零图706中的值为1),对一值(nz[i]=1)进行代码化。在另一示例中,当量化变换系数不为零时,能够对零值(nz[i]=0)进行代码化;否则,对一值(nz[i]=1)进行代码化。

3.如果nz[i]指示扫描位置i处的变换系数为非零(例如,nz[i]=1),则对指示高于i的扫描位置处的所有系数是否全部为零的二进制标志进行代码化。也就是说,当对非零图706的1值进行代码化时,那么然后对eob图726中的同一扫描位置处的值进行代码化。

4.将i设定为下一个扫描位置(i=i+1)。

5.重复步骤2-4直到满足eob为止(即,直到eob值730被代码化为止)。

6.对于所有j>eob设定nz[j]=0。也就是说,将在eob值730之后的所有变换系数设定为0。

在诸如关于图4的量化级406所描述的量化过程期间,对于变换块的变换系数,速率失真优化量化(rdoq)过程根据量化变换系数中的每一个的速率失真成本来确定(例如,计算出、选择等)相应的量化变换系数。

例如,响应于接收到变换系数值x,rdoq可以最初提供量化变换系数q(x)。可以通过使失真(例如,视频质量的损失)最小化来首先获得量化变换系数q(x)。然而,当rdoq除了考虑失真之外还考虑对量化变换系数q(x)进行代码化的速率(例如,比特数)时,rdoq可以获得提供更好的总体速率失真成本的另一量化变换系数q′(x)。此过程能够继续直到对于变换系数值x获得了最佳量化变换系数为止。因此,变换系数的量化系数值可以在变换系数和/或包括该变换系数的变换块的代码化过程期间改变。

如上所述,对非零图706进行代码化使用前向扫描顺序,而对后续级别图进行代码化使用反向扫描顺序。因此,由于代码化的第一遍和第二(或后续)遍使用不同的扫描顺序:一个前向和一个反向,所以估计改变变换系数值的速率成本可能是困难的。

更具体地,在扫描顺序为前向(从dc系数到最高ac系数)的第一遍中,扫描位置i处的量化系数值的变化可能影响对紧跟扫描位置i之后的扫描位置j(即,j>i)处的系数进行代码化的速率成本;而在扫描顺序为向后或反向(从最高ac系数到dc系数)的第二遍中,扫描位置i处的量化系数的变化可能影响对在扫描位置i之前的扫描位置j′(即,j′>i)处的系数进行代码化的速率成本。

因此,为了估计对扫描位置i处的系数进行代码化的成本,需要来自扫描位置j>i处的变换系数和扫描位置j’<i处的变换系数的信息,从而创建双向依赖性。这种双向依赖性可以显著地使rdoq过程复杂化。

为了避免双向依赖性,根据本公开的实现方式不是在非零图706的非零值之后交织eob指示(即,eob图726的eob值),而是能够首先对eob符号进行代码化并且继续以反向扫描顺序处理非零图706。因此,能够将反向扫描顺序用于使用级别图对变换块进行代码化的所有遍。通过在所有遍中使用反向扫描顺序,仅来自紧跟当前变换系数的扫描位置i之后的扫描位置j(即,j>i)处的变换系数的信息是估计对扫描位置i处的系数进行代码化的速率成本所需要的。因此,降低了复杂性,这进而导致rdoq的更高效实现。因此,能够使用以下步骤来实现使用级别图来对变换块进行代码化:

1.对eob进行代码化。

2.对于所有j>eob设定nz[j]=0,并且设定nz[eob]=1。如果eob<1则终止该过程。

3.初始化i=eob-1。

4.对指示扫描位置i处的量化变换系数为零(nz[i]=0)还是不为零(nz[i]=1)的nz[i]进行代码化。

5.设定i=i-1。

6.重复步骤3-5直到i=-1为止。

在以上步骤中,eob如关于图6和图7所描述的。也就是说,eob指示变换块的最后非零系数的位置。然而,eob的其它语义是可能的。例如,在一个实现方式中,eob能够指示紧接在变换块的最后非零系数之后的位置。因此,并且参考图7以进行说明,eob将指示扫描位置12(而不是如关于图6-7所描述的扫描位置11)。

当eob指示紧接在最后非零系数之后的位置时,那么能够通过以下步骤给出以上步骤:

1.对eob进行代码化。

2.对于所有j≥eob设定nz[j]=0,并且设定nz[eob-1]=1。如果eob≤1则终止该过程。

3.初始化i=eob-2。

4.对指示扫描位置i处的量化变换系数为零(nz[i]=0)还是不为零(nz[i]=1)的nz[i]进行代码化。

5.设定i=i-1。

6.重复步骤3-5直到i=-1为止。

图9是根据本公开的实现方式的用于使用级别图来对变换块进行代码化的过程900的流程图。过程900能够由诸如图4的编码器400的编码器实现。当由编码器实现时,代码化是指在诸如图4的压缩比特流420的编码比特流中编码。例如,过程900能够全部或部分地由编码器400的熵编码级408执行。过程900能够由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化是指从诸如图5的压缩比特流420的编码比特流中解码。例如,过程900能够全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。

例如,能够通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行来执行过程900的实现方式。

能够使用专用硬件或固件来实现过程900。一些计算装置能够具有多个存储器、多个处理器或两者。能够使用不同的处理器、存储器或两者来分发过程900的步骤或操作。为了说明的简单,将过程900描绘并描述为一系列步骤或操作。然而,依照本公开的教导能够以各种顺序和/或同时发生。附加地,依照本公开的步骤可以与本文未呈现和描述的其它步骤一起发生。此外,并非所有图示的步骤或操作都可以用于实现依照所公开的主题的方法。

在902处,过程900对变换块的eob指示符进行代码化。在一个实现方式中,能够对eob的扫描位置进行代码化。例如,并且参考图7,能够对与最后非零变换系数708相对应的扫描位置11进行代码化。在另一示例中,对与以前向扫描顺序紧跟最后非零变换系数708之后的系数相对应的扫描位置12进行代码化。在一个实现方式中,能够使用上下文模型来对eob指示符进行代码化。

在904处,过程900从变换块的最后非零系数开始以反向扫描顺序对非零图进行代码化。非零图指示变换块的哪些变换系数具有零值并且变换块的哪些变换系数具有非零值。过程900对与图7的非零图706类似的非零图进行代码化。过程900对指示在扫描顺序的扫描位置处的量化变换系数是零还是非零的二进制值进行代码化。例如,对于扫描位置i,如果扫描位置i处的量化变换系数为零,则过程900能够对零进行代码化;否则对1进行代码化。

在906处,过程900对具有相应图级别直到最大级别t的相应下范围级别图进行代码化。具有图级别的下范围级别图指示变换块的变换系数在绝对值方面等于相应的图级别并且变换块的哪些变换系数在绝对值方面大于相应的图级别。当由解码器实现时,过程900从编码视频比特流中对值进行解码以重建像关于过程600的604所描述的那样编码的下范围级别k图。

例如,为了重建级别1图,过程900从向后遍历的最高非零变换系数开始以确定哪些变换系数等于1并且哪些大于1。也就是说,使用图7的非零图706的经重建的非零图,并且从最后非零系数710开始并向后遍历到值740,过程900重建图7的级别1图707。对于经重建的非零图的每个1值,过程900从编码视频比特流中对值进行解码并且重建级别1图707。由过程900解码的值是零和一(1)值。

为了重建级别2图,过程900使用与用于生成级别1图的程序相同的程序,只是过程900使用经重建的级别1图,而不是遍历经重建的非零图。过程900重复所有步骤直到最大级别数目的级别图被重建为止。

在一个实现方式中,能够经由配置将最大级别t提供给过程900。在另一实现方式中,能够由编码器在编码视频比特流中用信号通知最大级别t。因此,过程900从编码视频比特流中对最大级别t进行解码。

在908处,过程900对系数残差图进行代码化。系数残差图的每个残差系数与具有超过最大级别的绝对值的变换块的相应的变换系数相对应。当由解码器实现时,过程900重建例如图7的系数残差图734。对于级别t图的每个一(1)值,过程900从编码比特流中对对应的残差值进行解码以重建图7的系数残差图734。

在一些实现方式中,过程900能够包括在910处对符号图进行代码化。符号图可以是诸如关于图7的符号图732所描述的符号图。符号图指示变换块的哪些变换系数具有正值并且哪些变换系数具有负值。

对于大小n×n的变换块,在最坏情况下可能需要对n×n-1个二进制位(二进制符号)进行上下文代码化以确定eob位置。例如,当n=32时,以最坏代价,可以对总共1023个二进制位进行上下文代码化(即,使用上下文模型来代码化)以确定eob位置。

一些实现方式能够使用扫描位置组来减少对eob位置进行代码化所需要的上下文代码化的二进制位的数目。因此,对与eob位置相对应的扫描位置进行代码化能够包括对包括扫描位置的扫描位置组的索引进行代码化并且对扫描位置组内的偏移进行代码化,该偏移与扫描位置在扫描位置组内的位置相对应。

在级别图的实现方式中,能够保留值eob=0以用于指示块的所有变换系数都为零。也就是说,当eob=0时,那么块是全零块。

在此类实现方式的一个示例中,能够将扫描位置分区(例如,分组)成11个扫描位置组:1、2,[3,4]、[5-8]、[9-16]、[17-32]、[33-64]、[65-128]、[129-256]、[257-512]、[513-1024]。也就是说,具有索引0的组包括仅扫描位置1;具有索引1的组包括仅扫描位置2;具有索引4的组包括扫描位置9-16;依此类推。例如,假定与eob相对应的扫描位置50将被代码化,那么包括扫描位置50的扫描位置组[33-64]的索引6被代码化并且扫描位置组[33-64]内的偏移17(即,50-33=17)被代码化。

在一个实现方式中,包括与eob相对应的代码化扫描位置的组的索引被上下文代码化(即,使用上下文模型来利用算术代码化进行代码化),并且能够在旁路模式下对扫描位置组内的偏移进行代码化。也可以被称为文字模式的旁路模式意味着不使用上下文模型来对待代码化值进行代码化。例如,当范围内的偏移值是同等可能的时,能够使用旁路模式。为了对偏移17进行代码化,需要五(5)个比特。因此,在此示例中,用于eob的上下文代码化的二进制位的数目至多为与组索引{0,1,...,10}相对应的10。

在一个实现方式中,包括与eob相对应的代码化扫描位置的组的索引被上下文代码化(即,使用上下文模型来代码化)并且也能够对扫描位置组内的偏移的最高有效比特中的至少一些进行上下文代码化。也就是说,能够认为偏移值包括前缀比特(即,最高有效比特)和后缀比特(即,最低有效比特)。能够对前缀比特进行上下文代码化并且能够使用旁路模式来对后缀比特进行代码化。能够将偏移值的任何数目的比特认为是最高有效比特。例如,偏移值17与二进制串10001相对应。如果前2个比特被认为是最高有效比特,则对比特10进行上下文代码化并且对比特001进行旁路代码化(即,使用旁路模式来代码化)。如果前3个比特被认为是最高有效比特,则对比特100进行上下文代码化并且对比特01进行旁路代码化。

能够以任何数目的方式将扫描位置分组成扫描位置组。在一个实现方式中,并且如由以上组所图示的,每个组能够包括2次幂个扫描位置。2次幂可以是索引扫描位置组减去1(即,索引-1)。例如,索引5处的扫描位置组(即,组[17-32])包括25-1(=24=16)个扫描位置。因此,为了对具有索引inx的扫描位置组内的偏移进行代码化,需要仅(inx-1)个比特。例如,需要一(1)个比特来对具有索引2的组(组[3,4])中的偏移进行代码化,需要两(2)个比特来对具有索引3的组(组[9-16])中的偏移进行代码化,依此类推。

在一个实现方式中,能够将每个扫描位置组中的扫描位置的数目限制为最大预定数目(即,上限)。例如,能够将组大小限制为不大于16。因此,能够修改以上组如下:1、2、[3,4]、[5-8]、[9-16]、[17-32]、[33-48]、[49-64]、…、[1009-1024]。因此,对偏移进行代码化需要不超过4个比特。为了使用经修改的组来对50的eob位置进行代码化,能够与上下文模型一起使用算术代码化来对与扫描位置组[49-64]相对应的索引7进行代码化。能够通过使用4个比特即0001在旁路模式下对偏移1(=50-49)进行代码化。

在一些实现方式中,不保留值eob=0以用于指示块的所有变换系数为零。在此类实现方式中,扫描位置组能够从0开始并且在1023结束,诸如0、1、[2,3]、[4-7]、[8-15]、[16-31]、[32-63]、[64-127]、[128-255]、[256-511]、[512-1023]。

如上所述,非零图706的值包括二进制值。二进制值指示在变换块的给定位置处的变换系数是零还是非零。因此,能够将非零图的值认为是非零标志。二进制值使得能够将复杂的空间相邻模板用于上下文建模。此类空间相邻模板能够更好地捕获变换块尤其是具有较大变换块大小的那些变换块的统计特性。因此,能够通过在确定用于选择上下文模型的上下文时完全地利用相邻非零标志的信息来改进对非零标志的代码化(以及对变换系数的代码化)。

模板捕获在当前非零标志之前代码化的非零标志(即,非零图的值)的代码化历史。对于当前扫描位置,模板能够定义(例如,指定、选择、设定或以任何方式定义)将被用于确定用于对当前值进行代码化的上下文的非零图值的扫描位置。等效地,能够按在非零图内要用于确定上下文的非零值的笛卡尔坐标而定义模板。

图10a-10b是根据本公开的实现方式的用于确定代码化上下文的模板的示例1000的图。在图10a-10b中,使用图案1004遮蔽的值(即,表示非零图的值的圆圈)是待代码化值;而用图案1002遮蔽的值是上下文信息可用的值,因为这些值在待代码化值1032之前被编码(例如,它们是上下文邻居)。在图10a-10b的示例中,待代码化值1032描绘待代码化非零图的当前值。图10a-10b的示例是非限制性示例。具有其它形状和/或大小的模板也是可能的。

在一个示例中,能够将与模板位置相对应的非零值的数目用作用于对当前值进行代码化的上下文。例如,能够添加与模板位置相对应的值并且能够将和用作上下文。在一些情况下,模板邻居(位置)可能不可用,诸如例如,如果上下文位置在块的边界外。在一个示例中,能够将不可用值假定为零(0)。在另一示例中,能够将不可用值假定为一(1)。

编解码器能够使用多种变换类型。例如,变换类型可以是由图4的变换级404使用来生成变换块的变换类型。例如,变换类型(即,逆变换类型)可以是要由图5的去量化级504使用的变换类型。可用的变换类型能够包括一维离散余弦变换(1ddct)或其近似值、一维离散正弦变换dst(1ddst)或其近似值、二维dct(2ddct)或其近似值、二维dst(2ddst)或其近似值和恒等变换。其它变换类型可能是可用的。在一个示例中,能够在一个维度(例如,行或列)上应用一维变换(1ddct或1ddst),而在另一个维度上应用恒等变换。

在使用1d变换(例如,1ddct、1ddst)(例如,将1ddct应用于变换块的列(或行))的情况下,能够通过使用逐行(即,光栅)扫描顺序或逐列扫描顺序来对量化系数进行代码化。在使用2d变换(例如,2ddct)的情况下,可以使用不同的扫描顺序来对量化系数进行代码化。如上指示,能够使用不同的模板来导出用于基于所用变换的类型对非零图的非零标志进行代码化的上下文。因此,在一个实现方式中,能够基于用于生成变换块的变换类型来选择模板。如上指示,变换类型的示例包括:应用于行(或列)的1ddct和应用于列(或行)的恒等变换;应用于行(或列)的1ddst和应用于列(或行)的恒等变换;应用于行(或列)的1ddct和应用于列(或行)的1ddst;2ddct;以及2ddst。变换的其它组合能够包括变换类型。

如以上关于图9所指示的,能够从变换块的最后非零系数开始(即,从最高ac变换系数开始)以反向扫描顺序对非零图进行代码化。因此,非零图的当前值(即,当前非零标志)的代码化历史包括在二维非零图例如非零图706中在当前值右侧和下方的值。

当应用1d垂直变换类型时,待代码化值1032与垂直邻居值比与水平邻居值更相关。因此,能够在将1d变换(例如,1ddct)应用于列的情况下使用模板1010。假定待代码化值1032在非零图的位置(x,y)处,则模板1010包括七个位置(x+1,y)、(x+2,y)、(x+3,y),(x+4,y)、(x,y+1)、(x+1,y+1)和(x+1,y+2)处的值。

当应用1d水平变换类型时,待代码化值1032与水平邻居值比与垂直邻居值更相关。因此,能够在将1d变换(例如,1ddct)应用于行的情况下使用模板1020。假定待代码化值1032在非零图的位置(x,y)处,则模板1020包括七个位置(x+1,y)、(x,y+1)(x+1,y+1)、(x,y+2)、(x+1,y+2)、(x,y+3)和(x,y+4)处的值。

当应用2d变换类型(例如,2ddct、2dstt)时,能够使用模板1030。假定待代码化值1032在非零图的位置(x,y)处,则模板1030包括七个位置(x+1,y)、(x+2,y)、(x,y+1)、(x+1,y+1)、(x+2,y+1)、(x,y+2)和(x+1,y+2)处的值。

在模板的一些示例中,在模板中不包括紧接在待代码化值1032之前扫描的非零值。也就是说,如果待代码化值1032在扫描位置i处,则在模板中不包括扫描位置(i-1)处的非零值。即使以反向扫描顺序对非零图进行代码化,反向扫描顺序的扫描顺序也可能取决于变换类型。反向扫描顺序的扫描顺序是从最高ac值到dc值访问非零图的非零值的顺序。在一个示例中,能够在使用1d水平变换类型时使用垂直扫描顺序。因此,扫描顺序以逐列顺序(例如,自下向上)进行。在一个示例中,能够在使用1d垂直变换类型时使用水平扫描顺序。因此,扫描顺序以逐行顺序(例如,从右向左)进行。

模板1040是当对列应用1d变换类型时能够使用的模板的另一示例。在模板1040中,在模板中不包括紧接在待代码化值1032之前扫描的非零值。假定待代码化值1032在非零图的位置(x,y)处,那么模板1040包括七个位置(x+1,y)、(x+2,y)、(x+3,y)、(x+4,y)、(x+1,y+1)、(x+1,y+1)和(x+1,y+2)处的值。

模板1050是当对行应用1d变换类型时能够使用的模板的另一示例。在模板1050中,在模板中不包括紧接在待代码化值1032之前扫描的非零值。假定待代码化值1032在非零图的位置(x,y)处,那么模板1040包括七个位置(x,y+1)、(x+1,y+1)、(x,y+2)、(x+1,y+2)、(x,y+3)、(x+1,y+3)和(x,y+4)处的值。

模板1060是当使用2d变换(例如,2ddct、2ddst)时能够使用的模板的示例。假定待代码化值1032在非零图的位置(x,y)处,那么模板1040包括七个位置(x+1,y)、(x+2,y)、(x+3,y)、(x,y+1)、(x+1,y+1)、(x,y+2)和(x,y+3)处的值。

模板1010-1060中的每一个均包括七(7)个位置。然而,模板能够包括更多或更少的位置和/或能够具有其它形状。例如,模板1070是当使用2d变换类型时能够使用的模板的另一示例。模板1070包括八(8)个位置。假定待代码化值1032在非零图的位置(x,y)处,那么模板1040包括八个位置(x+1,y)、(x+2,y)、(x+3,y)、(x,y+1)、(x+1,y+1)、(x,y+2)、(x+1,y+2)和(x,y+3)处的值。

在其它示例中,模板能够包括五(5)个位置。例如,图10b的包括位置(x+1,y)、(x,y+1)、(x+2,y)、(x,y+2)、(x+1,y+1)的模板1088能够被用于2d变换类型。例如,模板1080、1082、1083能够被用于垂直1d变换类型。模板1080包括位置(x+1,y)、(x+2,y)、(x+3,y)、(x+4,y)和(x,y+1)。模板1082包括位置(x+1,y)、(x+2,y)、(x+3,y)、(x+4,y)和(x+1,y+1)。模板1083包括位置(x,y+1)、(x,y+2)、(x,y+3)、(x+1,y)、(x+1,y+1)。例如,模板1084、1086和1087能够被用于水平1d变换类型。模板1084包括位置(x+1,y)、(x+2,y)、(x+3,y)、(x,y+1)、(x+1,y+1)。模板1086包括位置(x,y+1)、(x,y+2)、(x,y+3)、(x,y+4)和(x+1,y+1)。模板1087包括位置(x,y+1)、(x,y+2)、(x,y+3)、(x,y+4)和(x+1,y)。在一些实现方式中,位置(x+1,y)和(x,y+1)分别能够用位置(x+1,y+2)和(x+2,y+1)替换。

在一些实现方式中,对级别k图(其中k>0)的代码化也能够根据变换类型使用不同的模板(例如,如上所述的模板)。例如,如上所述,一个模板可以被用于2d变换类型,一个模板可以被用于垂直1d变换类型,并且另一模板可以被用于水平1d变换类型。

在一些实现方式中,用于对非零标志进行代码化的上下文可能取决于非零标志的位置(即,扫描位置或块位置)。因此,在一些实现方式中,上述的变换类型相关模板能够与非零标志的位置组合以确定上下文。为了避免使用太多的上下文,这可以导致所谓的上下文稀释问题,能够将位置分类成区域。例如,分类可以取决于变换类型。

如以上关于图7所描述的,依次对级别图进行代码化。也就是说,对非零图706进行代码化,然后对级别1图进行代码化,然后对级别2图进行代码化,并且然后对系数残差图734进行代码化。然而,在一些实现方式中,能够使用不同的代码化结构。

如以上关于图10a-10b所描述的,对级别k图(其中k>0)的代码化也能够根据变换类型使用不同的模板(例如,如上所述的模板)。也就是说,如上所述的模板能够用于确定用于对(x,y)处的系数是大于1(例如,使用级别1图例如图7的级别1图707的对应值)还是大于2(例如,使用级别2图例如图7的级别2图709的对应值)进行代码化的上下文。

因此,能够对每个系数进行代码化直到该系数是否大于最大级别。在图7的示例中,最大级别是2。因此,能够在进行到对下一个系数的代码化之前对每个系数进行代码化直到该系数是否大于2(使用级别图的对应值)。在一个实现方式中,大于2的系数值(即,大于最大级别的系数值)能够由值3(即,最大级别+1)表示。因此,对系数进行代码化“直到该系数是否大于最大级别(例如,2)”(即,对“到达”值进行代码化)能够是指对分别并在最大级别为2的情况下与具有等于0、等于1、等于2和大于2的值的系数相对应的值0、1、2、...、(最大级别+1)(例如,3)进行代码化。为了简洁,并且如上提及,在本文中将由对系数进行代码化“直到该系数是否大于最大级别”产生的值称为“到达”值。

能够将变换块的系数的“到达”值统称为“下平面”或第一平面。也在本文中将系数残差图例如图7的系数残差图734称为“上平面”或第二平面。

图11是根据本公开的实现方式的用于使用级别图来对变换块进行代码化的过程1100的流程图。与依次对级别图进行代码化(即,在进行到对下一个图进行代码化之前对每个图进行代码化)的过程900不同,过程1100对于每个非零系数使用模板并且在最大级别为2(即,t=2)的情况下对系数是0、1、2还是大于2(由值3表示)进行代码化。也就是说,过程1100以扫描顺序在进行到下一个系数之前对系数的下平面的“到达”值进行代码化。过程1100能够包括与过程900的框类似的框。省略了类似框(例如,902、908和910)的描述。过程1100的一些实现方式能够在框908之前包括框910。

过程1100能够由诸如图4的编码器400的编码器实现。当由编码器实现时,代码化是指在诸如图4的压缩比特流420的编码比特流中编码。例如,过程1100能够全部或部分地由编码器400的熵编码级408执行。过程1100能够由诸如图5的解码器500的解码器执行。当由解码器实现时,代码化是指从诸如图5的压缩比特流420的编码比特流中解码。例如,过程1100能够全部或部分地由解码器500的熵解码级502执行,并且编码视频比特流可以是图5的压缩比特流420。

例如,能够通过将指令存储在诸如接收站106的存储器204的存储器中以由诸如cpu202的处理器执行来执行过程1100的实现方式。

能够使用专用硬件或固件来实现过程1100。一些计算装置能够具有多个存储器、多个处理器或两者。能够使用不同的处理器、存储器或两者来分发过程1100的步骤或操作。为了说明的简单,将过程1100描绘并描述为一系列步骤或操作。然而,依照本公开的教导能够以各种顺序和/或同时发生。附加地,依照本公开的步骤可以与本文未呈现和描述的其它步骤一起发生。此外,并非所有图示的步骤或操作都可以用于实现依照所公开的主题的方法。

在1102处,过程1100确定是否有更多的非零系数要代码化。如果是这样的话,则过程1100进行到1104以对(x,y)处的当前量化变换系数进行代码化;否则,过程1100进行到908,后面是910。在1104处,过程1100选择用于对当前量化变换系数进行代码化的模板。如本公开中所用,“选择”意在以任何方式标识、构造、确定、指定、生成或另外选择。模板可以是如关于图10a-10b所描述的模板。在一个示例中,同一模板被用于对变换块的所有系数进行代码化。因此,能够为过程1100选择一次模板并且在框1102之前执行该模板。

在1106处,过程1100使用模板来确定上下文。过程1100能够以任何数目的方式使用模板来确定上下文。每个模板位置与下平面值(例如,0、1、...、t+1)相对应。值的组合能够用于确定上下文。例如,能够使用这些值的和。例如,加权和能够用于确定上下文。能够基于到“原点”的距离来设定指派给位置的权重。在一个示例中,原点可以是正在确定上下文的当前变换系数的位置(x,y)。距离的示例包括扫描位置距离(例如,当前系数的扫描位置与模板的位置之间的差)或笛卡尔距离。然而,设定权重的其它方式可以是可用的。在又一示例中,能够使用非线性函数。例如,模板中的最大值或最小值能够被用于确定上下文。在又一示例中,能够使用和与最大值的组合来确定上下文。其它方法和/或值或方法和/或值的组合能够被用于根据模板确定上下文。

现在给出使用模板的各位置处的值的和(即,加法)来确定上下文。应该理解的是,下文能够与用于使用模板来确定上下文的任何方法一起使用。

过程1100能够将与模板的各位置相对应的值相加(求和)。当将模板用于导出用于对系数进行代码化的上下文时,模板的位置中的每一个均能够具有值0、1、2或3(即,当t=2时)中的一个。因此,如果模板包括n个位置,则最大和可以是3*n。例如,如果在1104处选择了包括5个位置的模板,则最大和可以是15(=3*5);如果选择了包括7个位置的模板,则最大和可以是21(=3*7)。

在一个实现方式中,在使用如关于图7所描述的级别图来确定模板的位置的值的情况下,能够对在非零图和级别k图中的相同位置处的值进行相加或计数。例如,假定最后非零变换系数708的位置是模板的位置,则能够将该位置处的模板的值确定为非零图706的710处的值(即,1)和级别1图707的716处的值(即,0)之和。因此,值是1。另外,假定变换系数739的位置是模板的位置,则能够将在该位置处的模板的值确定为非零图706、级别1图707和级别2图709的对应位置处的值的和。因此,值是3。因此,能够使用与模板的各位置相对应的值的和来确定上下文索引,其中模板的每个值是通过对级别图中的至少一些的相应值进行求和来确定的。

在另一实现方式中,不生成包括零图并且如关于图7所描述的级别图。替代地,能够使用下平面一维数组level来指示变换系数是否为0、1、...、t+1中的一个。鉴于上述下平面是与变换块相对应的二维结构,作为扫描顺序的结果生成了下平面一维数组level。下平面一维数组level被称为下平面数组。

给定扫描位置i,level[i]={0,1,...,t+1}。下平面数组level能够包括变换块的所有变换系数的值。或者,下平面数组能够包括直到eob系数的系数的值。也就是说,下平面数组level能够包括直到并包括变换块的最后非零系数的每个变换系数的值。

在编码器的情况下,能够在将下平面数组值代码化在比特流中之前先验地生成下平面数组level。或者,能够在对系数进行编码时生成下平面数组level。例如,能够使用以下步骤来生成下平面数组:1)对于扫描位置,确定对应的“到达”值,2)对“到达”值进行代码化,并且3)将“到达”值存储/放置在下平面级别level中的扫描位置处。步骤2和3能够颠倒。在解码器的情况下,能够在从比特流中对值进行解码时用值填充下平面数组level。

能够通过将下平面数组level的相应值相加来计算出用于确定上下文索引的和。例如,假定模板包括与扫描位置l1、l2、l3、l4和l5相对应的5个位置,那么能够将和确定为和=level[l1]+level[l2]+level[l3]+level[l4]+level[l5]。

使用和,过程1100能够确定上下文索引(例如,变量ctx)。能够使用与如上所述的运算((计数+1)>>1)类似的运算来确定上下文索引。然而,不是使用“计数”,而是使用“和”。因此,过程1100将((和+1)>>1)用于确定上下文索引。

上下文索引ctx可能超出范围。例如,假定和是15,变换类是tx_class_2d,并且(x,y)是(1,2),则上下文索引是((和+1)>>1)+6=((15+1)>>1)+6=14。然而,使用以上示例的tx_class_2d的可用上下文的数目是11。因此,上下文索引超出范围。等效地,产生超出范围的上下文索引的和本身可能被认为超出范围。如果上下文索引超出范围,则过程1100能够将上下文索引设定为预定数。因此,过程1100能够使用诸如min(((和+1)>>1),预订数)的公式来确定上下文索引。因此,值((和+1)>>1)的上限是预定数。在一个示例中,预定数可以是4。在一个示例中,预定数可能取决于变换类类型。能够以任何其它方式选择预定数。

上下文索引ctx能够用于选择用于对当前变换系数进行代码化的上下文;更具体地,用于对当前变换系数的“到达”值进行代码化。在1108处,过程1100使用上下文来对系数进行代码化。

能够使用以下程序来概括将下平面数组level用于对变换块的变换系数进行代码化的过程1100的实现方式:

能够对于每个变换系数重复步骤1-10直到变换块的最后非零系数。对于扫描位置i处的变换系数,步骤2-9对“到达”值进行代码化。即,步骤2-9对“直到变换块的变换系数是否大于级别图的最大级别”进行代码化。例如,假定最大级别t=2且i<eob-1,如果level[i]=3,则步骤2-9对比特111进行代码化;如果level[i]=0,则步骤2-9对比特0进行代码化;而如果level[i]=2,则步骤2-9对比特110进行代码化。步骤11-14对非零变换系数的符号比特(例如,图7的符号图732的值)进行代码化直到最后非零系数。对于大于最大级别t(即,level[i]>t)的每个非零系数,步骤15-17对变换系数的残差进行代码化。也就是说,步骤15-17对来自上平面的值进行代码化。残差的值可以如关于系数残差图734所描述的。对符号比特和残差进行代码化可以颠倒。

图11的框1102-1108与对下平面进行代码化相对应并且框908与对上述上平面进行代码化相对应。

将图11中描述的代码化结构用于对变换系数(即,量化变换系数)进行代码化,如与关于图9描述的代码化结构相比较,能够获得更好的吞吐量。更好的吞吐量可能意味着使用过程1100的代码化结构与使用过程900的代码化结构比能够更快地对变换块进行解码。

图12是根据本公开的实现方式的使用模板来确定上下文的图示1200的示例。图示1200使用如关于图10a-10b所描述的模板来为待代码化值1032确定上下文索引。在图示1200中使用的模板是图10b的模板1088。然而,能够使用其它模板,诸如模板1070。待代码化值可以是图10a-10b的待代码化值1032。在图10b中,待代码化值1032的邻居被示出为具有实际值。在图12中,为了参考的容易,待代码化值1032的邻居是数字(即,1-5)。

如关于图11所描述的,代码化以反向扫描顺序进行并且能够创建下平面数组level。在编码器的情况下,“代码化”是指编码,而“待代码化”值是指将被添加到诸如图4的压缩比特流420的压缩比特流的值。在解码器的情况下,“代码化”是指解码,而“待代码化”值是指将从诸如图5的压缩比特流420的压缩比特流中读取或解码的值。下平面数组level的值根据扫描顺序布置。

扫描顺序确定从一维下平面数组level的扫描顺序位置(即,位置)到变换块的笛卡尔位置或下平面的映射;等效地,扫描顺序确定从笛卡尔位置到扫描顺序位置的映射。

如上所述,模板对于下平面的待代码化值指示下平面的代码化级别的扫描位置。等效地,当对于给定扫描顺序在扫描位置与笛卡尔坐标之间存在一对一对应时,模板能够指示笛卡尔坐标。坐标可以是使用dc系数作为原点的绝对坐标。或者,坐标可以是相对坐标(例如,被定义为与待代码化值的垂直和水平偏移)。由模板指定的邻居沿着模板反对角线布置。例如,并且再次参考图12的模板1088,邻居1和3沿着模板反对角线1202布置;并且邻居2、4和5沿着模板反对角线1204布置。因此,并且根据模板的相邻位置的数目,由模板指示的扫描位置在模板中布置在至少两个模板反对角线中。例如,虽然由模板1088指示的扫描位置沿着两个模板反对角线布置,但是由图10a的模板1070指示的扫描位置沿着三个模板反对角线布置。

现在给出按不同的扫描顺序使用模板1088的图示。图示使用4×4块;然而,本公开不限于任何块大小。使用反向垂直扫描顺序1208来处理4×4下平面1216,扫描位置1210(即,扫描顺序中的扫描位置14)处的一维下平面的值与和变换块的笛卡尔位置(1,0)处的变换系数相对应的下平面值相对应。假定扫描位置1210是待代码化值1032,并且将模板1088叠加在反向垂直扫描顺序1208上,那么模板1088的相邻位置1-5分别与扫描位置10、6、13、9和12相对应。以升序排序,相邻扫描位置是6、9、10、12和13。如能够看到的,扫描位置不是连续的。也就是说,扫描位置不是顺序的。

作为另一示例,使用反向水平扫描顺序1212,同一笛卡尔位置(1,0)与扫描位置11(扫描顺序中的扫描位置11)相对应。假定扫描位置1214是待代码化值1032,并且将模板1088叠加在反向水平扫描顺序1212上,那么模板1088的相邻位置1-5分别与扫描位置10、9、7、6和3相对应。以升序排列,相邻扫描位置是3、6、7、9和10。再次,相邻位置的扫描位置不是连续的(即,顺序的)。

下平面数组1206图示根据假想扫描顺序的下平面(未示出)的值的假想排序。如能够在下平面数组1206、反向垂直扫描顺序1208的示例和反向水平扫描顺序1212的示例中看到的,使用模板1088的待代码化值1032的相邻值1-5稀疏地(即,不连续地)位于一维下平面数组level中。因此,使用模板1088的五个邻居来导出上下文模型需要访问一维数组中的稀疏点。

注意,对于几乎所有的计算平台,包括x86、arm和硬件实现的编解码器,二维数组变换系数被存储在1-d数组(也称为线缓冲器)中。也能够将下平面数组存储在线缓冲器中。因为从线缓冲器访问非连续(即,非邻接)数据使数据缓存性能降级,所以使用相邻值连续地位于线缓冲器中的扫描顺序和/或技术能够改进代码化性能。

图13是根据本公开的实现方式的沿着反对角线对齐值的扫描顺序的示例1300的图。示例1300包括块1302。块1302可以是能够据此确定下平面值的变换块。也就是说,不生成下平面块,而是根据变换系数推理下平面块的值。或者,块1302能够表示下平面。也就是说,能够从变换系数生成下平面并且将其存储在存储器中。为了说明的简单,块1302被假定为二维下平面。

块1302被示出为8×8块。然而,本公开不限于任何特定块大小。如上指示,下平面将在笛卡尔位置处包括在变换块的同一笛卡尔位置处的变换系数的值。然而,出于图示目的,块1302的单元格示出了相应单元格的扫描位置,而不是该单元格处的特定值。如上指示,能够将诸如块1302的下平面生成为在比特流中编码的值。因此,块1302可能未完全地填充有值。例如,如果当前扫描位置是x,则块1302可以仅包括低于(或低于并包括)扫描位置x的扫描位置的值。

能够将示例1300的扫描顺序称为反对角对齐的扫描顺序。使用反对角对齐的扫描顺序,编解码器能够使用高效并行计算来有利地处理一条扫描顺序反对角线中的所有值(以确定上下文索引),从而改进高速缓存性能。

在示例1300中指示了四条扫描顺序反对角线。扫描顺序反对角线1304包括扫描位置54-57;扫描顺序反对角线1306包括扫描位置49-53;扫描顺序反对角线1308包括扫描位置43-48;并且扫描顺序反对角线1310包括扫描位置36-42。

每条扫描顺序反对角线是这样的线使得在块1302中具有相同值col+row的级别被认为在同一扫描顺序反对角线上。例如,扫描顺序反对角线1304包括具有col+row=3的值。因此,扫描顺序反对角线1304包括与扫描位置54(与块1302位置(0,3)处的值相对应)、扫描位置55(与块1302位置(1,2)处的值相对应)、扫描位置56(与块1302位置(2,1)处的值相对应)和扫描位置57(与块1302位置(3,0)处的值相对应)相对应。

如上提及,相邻位置的模板能够被用于确定用于对块1302的特定扫描位置处的值进行代码化的上下文。图10b的模板1088被再次用于图示目的。如上另外提及,相邻位置的值的组合能够用于确定用于选择上下文模型的上下文索引(即,ctx)。出于图示目的,在本文中使用和组合(即,加法)。

将模板1088叠加在扫描顺序反对角线1306的扫描位置中的每一个上指示图12的模板反对角线1202与扫描顺序反对角线1308重合并且图12的模板反对角线1204与扫描顺序反对角线1310重合。因此,当前扫描顺序反对角线(例如,扫描顺序反对角线1306)的(例如,扫描位置49-53的)代码化值使用紧接在当前扫描顺序反对角线之前代码化的第一扫描顺序反对角线(例如,扫描顺序反对角线1308)的值和紧接在第一扫描顺序反对角线之前代码化的第二扫描顺序反对角线(例如,扫描顺序反对角线1310)的值。扫描顺序反对角线1310据说比扫描顺序反对角线1308“旧”,因为其值被首先代码化。

在下文中,表示法(即,在上面具有波浪号的数字)是指“在扫描位置x处的下平面的值”。例如,是指在扫描位置31处的下平面(即,块1302)的值。也就是说,并且参考图11的下平面数组level,附加地,表示法o(x)指代要用于对扫描位置x处的值进行代码化的上下文的上下文索引。o(x)是使用诸如加法运算的运算来利用模板中标识的相邻值来计算出的。

参考块1302,用于对扫描位置50、51和52处的值进行代码化的上下文的上下文索引分别是如果值不可用,如以上关于10a-10b所指示的,则能够将它假定为零。因此,用于对扫描位置11处的值进行代码化的上下文的上下文索引是因为扫描位置1312不可用(即,扫描位置1312在块1302的变换块的界限外)。

如能够从o(5)、o(51)和o(52)看到的,用于确定扫描顺序反对角线中的两个连续位置的上下文模型的值重叠。例如,来自扫描顺序反对角线1308的一个值(例如,)和来自扫描顺序反对角线1310的两个值(例如,)被重新用于确定上下文索引o(50)和o(51);而来自扫描顺序反对角线1308的一个值(例如,)和来自扫描顺序反对角线1310的两个值(例如,)被重新用于确定上下文索引o(51)和o(52)。针对扫描顺序反对角线的所有值重复此图案。

为了重申,沿着同一扫描顺序反对角线(例如,扫描顺序反对角线1306)的两个连续扫描位置(例如,扫描位置50和51)共享先前代码化的值(例如,)以用于计算上下文索引。共享值沿着与模板反对角线(例如,模板反对角线1202、1204)相对应的先前代码化的扫描顺序反对角线(例如,扫描顺序反对角线1308、1310)。

附加地,注意,对当前待代码化值进行代码化所需要的每条先前代码化的扫描顺序反对角线的值沿着相应的扫描顺序反对角线是连续的。例如,为了确定上下文索引o(50),所需要的值沿着扫描顺序反对角线1308是连续的,并且所需要的值沿着扫描顺序反对角线1310是连续的。因此,通过将每条扫描顺序反对角线的值存储在单独的线缓冲器中,能够通过访问每个线缓冲器中的连续位置来执行确定上下文索引,从而改进代码化性能。

线缓冲器的最小数目取决于模板反对角线的数目。例如,由于模板1088包括两个模板反对角线(即,模板反对角线1202、1204),所以需要维护两个线缓冲器。例如,如果使用图10a的模板1070,则需要维护三个线缓冲器。

对于大小n×n(其中m>n)的变换块,每个线缓冲器能够包括最多n个值。因此,对于块1302(其大小为8×8),并且使用模板1088,能够使用大小8的两个线缓冲器中的每一个。线缓冲器lb1能够与扫描顺序反对角线1310相对应。线缓冲器lb2能够与扫描顺序反对角线1308相对应。

大小n×n的下平面的扫描顺序反对角线的总数是2n-1。例如,块1302包括2*8-1=15条扫描顺序反对角线。在一个实现方式中,每条扫描顺序反对角线能够具有索引l,其中l=0、1、...、2n-2。扫描顺序反对角线l中的值的数目num(l)能够由下式给出:

例如,扫描顺序反对角线1314具有索引l=0,并且包括(l+1)=(0+1)=1值。扫描顺序反对角线1310的索引为l=8。因此,扫描顺序反对角线1310包括(2*8-8-1)=7个值。

由于扫描顺序反对角线中的一些可能不包括n个值,所以能够将所对应的线缓冲器的一些位置假定为零。线缓冲器的假定为零的位置的数目等于(n-num(l))。例如,由于扫描顺序反对角线1308的索引为l=9,所以对应线包括2(即,8-num(9)=8-(2*8-9-1)=8-6=2)个假定为零的位置。

在一个实现方式中,能够将线缓冲器的假定为零的位置假定为在线缓冲器的头部。在另一实现方式中,假定为零的位置能够在线缓冲器的尾部。

在一个实现方式中,能够参考变换块的边缘来布置线缓冲器中的值。例如,能够将底边缘用作参考。也就是说,更靠近参考边缘(例如,底边缘)的扫描顺序反对角线的值被存储到线缓冲器的前面。在这样的情况下,如果扫描顺序反对角线从块的顶部朝向块的底部访问位置,则扫描顺序反对角线的扫描位置被以遍历顺序的反向顺序布置在所对应的线缓冲器中;而如果扫描顺序反对角线从块的底部朝向块的顶部访问位置,则扫描顺序反对角线的扫描位置被以遍历顺序布置在所对应的线缓冲器中。

因此,能够将线缓冲器lb1布置为并且能够将线缓冲器lb2布置为也能够将当前扫描顺序反对角线的值布置在线缓冲器curr_lb中。因此,curr_lb能够与扫描顺序反对角线1306相关联。在对扫描顺序反对角线1306的所有值进行代码化之后,能够将curr_lb布置为因此,能够在curr_lb中的索引y处找到扫描位置x处的值。例如,能够在curr_lb[3]处找到扫描位置49处的值,能够在curr_lb[7]处找到扫描位置53处的值,依此类推。

能够使用以下公式来执行计算出要用于对扫描位置x处的值进行代码化的上下文的上下文索引o(x),其中扫描位置x与curr_lb中的位置y相对应:

o(curr_lb[y])=(lb2[y-1]+lb2[y])+(lb1[y-2]+lb1[y-1]+lb1[y])

也就是说,为扫描位置y处的值确定上下文索引使用:1)与最近代码化的扫描顺序反对角线相对应的线缓冲器的扫描位置(y-1)和(y)处的值以及2)与最旧代码化的扫描顺序反对角线相对应的线缓冲器的扫描位置(y-2)、(y-1)和(y)处的值。因此,访问仅每个线缓冲器中的连续位置。虽然描述了线缓冲器中的值的一种布置和索引方案,但是本领域的技术人员能够领会其它布置和索引方案是可能的。

如上指示,并且当使用模板1088时,扫描顺序反对角线的值的上下文模型取决于在前两个扫描顺序反对角线。因此,能够将用于上下文参考建模的缓存数据(即,下平面的值)定位到两个扫描顺序反对角线,每条线的大小为n,而不是例如散布在整个n×n变换块之上。

图14是根据本公开的实现方式的用于上下文选择的高速缓存管理的过程1400的流程图。能够将过程1400例如实现为可以由诸如发送站102或接收站106的计算装置执行的软件程序。该软件程序能够包括机器可读指令,这些机器可读指令可以被存储在诸如存储器204或辅助存储装置214的存储器中,并且当由诸如cpu202的处理器执行时,可以使计算装置执行过程1400。可以将过程1400全部或部分地实现在编码器400的熵编码级408和/或解码器500的熵解码级502中。能够使用专用硬件或固件来实现过程1400。可以使用多个处理器、存储器或两者。

能够在对变换块进行代码化(即,编码或解码)时使用过程1400。变换块的大小可以为n×n。过程1400能够与使用下平面和上图来对变换块进行代码化的变换块代码化过程一起使用。具体地,能够在对下平面的代码化中使用过程1400。下平面和上图能够如上所述。

在1402处,过程1400维护用于扫描顺序反对角线的线缓冲器。维护能够是指以任何其它方式生成、计算、存储、确定、分配或维护。由过程1400维护的线缓冲器的数目可能取决于模板反对角线的数目。例如,过程1400能够对于模板反对角线中的每一条维护相应的线缓冲器。例如,如果所用模板是诸如图10b的模板1088的模板,则过程1400能够维护两个线缓冲器:如上所述的lb1和lb2。线缓冲器中的每一个的大小可以为n。在描述过程1400时,使用模板1088。然而,能够使用不同大小的或具有不止两个模板对角线的模板。

在1404处,过程1400在lb1中存储第一代码化反对角系数级别。反对角系数级别可以是如关于图13所描述的扫描顺序反对角线的值。例如,如上所述,过程1400在lb1中存储扫描顺序反对角线1310的值。

在1406处,过程1400在lb2中存储第二代码化反对角系数级别。例如,如上所述,过程1400在lb2中存储扫描顺序反对角线1308的值。

在1408处,过程1400参考lb1和lb2来计算第三反对角线中的每个系数级别的上下文索引。例如,第三反对角线可以是扫描顺序反对角线1306。过程1400如上所述参考lb1和lb2。第一线缓冲器lb1能够与到第三反对角线(即,正在代码化的当前扫描顺序反对角线,诸如扫描顺序反对角线1306)比第二扫描顺序反对角线(例如,扫描顺序反对角线1308)更远的第一扫描顺序反对角线(例如,扫描顺序反对角线1310)相对应。

在1410处,过程1400确定是否有更多的扫描顺序反对角线要代码化。或者,过程1400在1410处确定是否有模式下平面值要代码化或者有变换系数要代码化。如果是这样的话,则过程1400进行到1412;否则,过程1400结束。

在1412处,过程1400用第三反对角线替换lb1。当第三反对角线的所有系数级别都被代码化时,不再需要存储在lb1中的值。也就是说,存储在lb1中的值不用于确定用于在对第三反对角线进行代码化之后对任何其它值进行代码化的上下文索引。

然而,在为下一条反对角线确定上下文时使用第三反对角线的值和第二反对角线的值。例如,在对扫描顺序反对角线1306的值进行代码化之后,编解码器继续对下一条扫描顺序反对角线即扫描顺序反对角线1304的值进行代码化。在对扫描顺序反对角线1304的值进行代码化时,使用扫描顺序反对角线1306、1308的值。因此,过程1400保留lb2并用扫描顺序反对角线1306替换lb1。也就是说,过程1400用最后代码化的扫描顺序反对角线替换最旧代码化的扫描顺序反对角线。

过程1400重复以上步骤。然而,在重复步骤时,互换lb1和lb2。也就是说,在对新扫描顺序反对角线进行代码化之前,过程1400用最后代码化的(即,最近代码化的)扫描顺序反对角线替换最旧的线缓冲器(被首先代码化的lb1和lb2中的一个)。过程1400重复直到下平面的所有扫描顺序反对角线都被代码化为止。

如以上关于o(50)和o(51)所描述的,确定扫描顺序反对角线中的位置的上下文模型与其最近的邻居重叠。本公开的实现方式能够利用这种重复图案来通过使用移动窗口更高效地计算上下文索引。

图15是根据本公开的实现方式的用于将移动窗口用于上下文选择的过程1500的流程图。过程1500能够利用编解码器的硬件能力来改进代码化性能。过程1500将两个线缓冲器的数据交织到一个目标缓冲器中。目标缓冲器的值用于像关于累积和所描述的那样实现移动窗口。

在1502处,过程1500在第一线缓冲器lb1中存储第一代码化反对角系数级别并且在第二线缓冲器lb2中存储第二代码化反对角系数级别。线缓冲器lb1和lb2能够如以上关于过程1400所描述的。

在1504处,过程1500将第一线缓冲器lb1和第二线缓冲器lb2的值交织到目标缓冲器dest_buf中。例如,假定如上所述则目标缓冲器更一般地,如果lb1=[b2,b4,b6,b8,...]并且lb2=[b1,b3,b5,b7,...],则dest_buf=[b1,b2,b3,b4,b5,b6,b7,b8,...]。

一些硬件平台例如x86和arm支持两个缓冲器之间的直接交织运算(例如,经由运算unpacklo、unpackhi)。此类运算通常能够将两个线缓冲器(例如,lb1和lb2)视为输入,交织两个线缓冲器的数据,并且将结果写入到目标缓冲器(例如,dest_buf)中。因此,能够经由硬件指令执行在此类平台上实现的编解码器,从而获得dest_buf。

在1506处,过程1500计算累积和。在一个实现方式中,能够将累积和存储在累积和数组cum_sum中。累积和是通过目标缓冲器获得的。累积和的数目能够等于目标缓冲器中的值的总数加1。第一累积和值是零并且每个后续累积和值加上来自目标缓冲器的后续值。因此,能够使用以下公式来计算累积和数组cum_sum的值:

cum_sum[i+1]=cum_sum[i]+dest_buf[i],其中cum_sum[0]=0。

使用以上公式,累积和数组能够包括以下值:

cum_sum[0]=0

cum_sum[1]=0+b1

cum_sum[2]=0+b1+b2

cum_sum[3]=0+b1+b2+b3

cum_sum[4]=0+b1+b2+b3+b4

cum_sum[9]=0+b1+b2+b3+b4+...+b9

在1508处,过程1500使用累积和来确定上下文索引。所计算出的上下文索引能够用于确定上下文。能够使用以下公式来计算当前扫描顺序反对角线的索引i处的值的上下文索引:

上下文索引[i]=cum_sum[i+4]–cum_sum[(i+4)-5]

图16是根据本公开的实现方式的用于对变换系数的变换块进行代码化的过程1600的流程图。能够将过程1600例如实现为可以由诸如发送站102或接收站106的计算装置执行的软件程序。该软件程序能够包括机器可读指令,这些机器可读指令可以被存储在诸如存储器204或辅助存储装置214的存储器中,并且当由诸如cpu202的处理器执行时,可以使计算装置执行过程1600。可以将过程1600全部或部分地实现在编码器400的熵编码级408和/或解码器500的熵解码级502中。能够使用专用硬件或固件来实现过程1600。可以使用多个处理器、存储器或两者。

在1602处,过程1600标识下平面。下平面能够如以上关于图11-13所描述的。也就是说,下平面的值对变换块的变换系数中的一些的“到达”值进行代码化。在一个实现方式中,下平面包括变换块的变换系数直到最后非零系数的值。

在编码器的情况下,以任何方式创建、形成、产生、选择、构造、确定、指定、生成或另外标识。在编码器的情况下,下平面的值将被编码在诸如图4的压缩比特流420的编码比特流中。在解码器的情况下,标识能够是指标识将对下平面值进行解码的变换块。

在1604处,过程1600根据扫描顺序处理下平面。扫描可以是如上所述的反对角对齐的扫描顺序。扫描顺序可以是示例1300的扫描顺序,如关于图13所描述的。

在1606处,过程1600选择用于对下平面的值进行熵代码化的模板。对于下平面的待代码化值,模板指示下平面的已经代码化的值的扫描位置。扫描位置在模板中布置在至少两个模板反对角线中。例如,模板可以是如关于图12所描述的模板1088。因此,模板反对角线可以是模板反对角线1202、1204。

在1608处,过程1600确定是否有下平面的更多值要代码化。如果是这样的话,则过程进行到1610;否则,过程在1614处终止。

在1610处,过程基于模板反对角线来选择两个或更多个线缓冲器。如本公开中所用,“选择”意在以任何方式创建、形成、产生、标识、构造、确定、指定、生成或另外选择。两个或更多个线缓冲器中的每一个均与相应的扫描顺序反对角线相对应。例如,如关于图13所描述的,在对扫描顺序反对角线13-6的值进行代码化时,使用了与扫描顺序反对角线1310相对应的第一线缓冲器lb1并且选择了与扫描顺序反对角线1308相对应的第二线缓冲器lb2。

在1612处,过程1600使用两个或更多个线缓冲器来确定上下文。如以上关于图10a-10b和图13所描述的,过程1600使用由模板标识的相邻值来确定上下文索引。上下文索引使用值的组合来确定。在一个实现方式中,组合是值的和。使用上下文索引,上下文被标识、检索、访问等以用于对当前值进行代码化。

在1614处,过程1600使用所确定的上下文来对值进行代码化。在1614之后,过程1600继续回到1608以确定是否有附加值要代码化。当在1608处没有更多值时,过程1600结束。

过程1600能够附加地包括用于对包括残差系数的上平面进行代码化的操作。最大级别能够与下平面相关联,并且上平面的每个残差系数与具有超过最大级别的绝对值的变换块的相应的非零变换系数相对应。

在过程1600的示例中,模板包括沿着两个模板反对角线布置的五个扫描位置。例如,模板可以是图12的模板1088。第一模板反对角线(例如,模板反对角线1202)包括五个扫描位置中的至少两个并且第二模板反对角线(例如,模板反对角线1204)包括至少三个扫描位置。至少三个扫描位置中的每一个均与至少两个扫描位置中的每一个不同。

在过程1600的示例中,模板包括沿着三个模板反对角线布置的七个扫描位置。例如,模板可以是图10a的模板1070。第一模板反对角线包括七个扫描位置中的至少两个扫描位置,第二模板反对角线包括七个扫描位置中的至少三个扫描位置,并且第三模板反对角线包括七个扫描位置中的至少四个扫描位置。至少两个扫描位置、至少三个扫描位置和至少四个扫描位置中的每一个均是不同的扫描位置。

在又一示例中,过程1600附加地包括:维护第一线缓冲器和第二线缓冲器以用于对当前扫描顺序反对角线的值进行代码化。第一线缓冲器和第二线缓冲器可以如关于图14所描述的。因此,第一线缓冲器能够与紧接在当前反对角线之前使用反向扫描顺序扫描的第一扫描顺序反对角线相对应;并且第二线缓冲器与紧接在第一反对角线之前使用反向扫描顺序扫描的第二扫描顺序反对角线相对应。如关于图14所描述的,过程1600也包括:用第一线缓冲器替换第二线缓冲器并且用与当前反对角线相对应的线缓冲器替换第一线缓冲器,以用于对紧接在当前扫描顺序反对角线之后的扫描顺序反对角线的系数进行代码化。

在又一示例中,过程1600能够包括在目标缓冲器中交织第一线缓冲器和第二线缓冲器。目的缓冲器能够被用于确定用于对当前值进行代码化的上下文。目的缓冲器可以如关于图15所描述的。

在过程1600的实现方式中,确定用于使用目标缓冲器来对当前值进行代码化的上下文可以包括:对于目标缓冲器的每个位置计算相应的累积和;以及使用第一累积和与第二累积和之间的差来确定上下文。能够基于当前值的位置来选择第一累积和和第二累积和。

为了说明的简单,过程600、900、1100、1400、1500、以及1600均被描绘并描述为一系列框、步骤或操作。然而,依照本公开的框、步骤或操作能够以各种顺序和/或同时地发生。附加地,可以使用本文未呈现和描述的其它步骤或操作。此外,可能不需要所有图示的步骤或操作来实现依照所公开的主题的技术。

上述编码和解码的各方面图示了一些编码和解码技术。然而,应当理解的是,“编码”和“解码”如在权利要求书中使用那些术语一样,可能意指数据的压缩、解压缩、变换或任何其它处理或变化。

词语“示例”或“实现方式”在本文中用于是指用作示例、实例或说明。在本文中描述为“示例”或“实现方式”的任何方面或设计不一定被解释为优于其它方面或设计为优选的或有利的。相反,词语“示例”或“实现方式”的使用旨在以具体方式呈现构思。如本申请中使用的,术语“或”旨在是指包括性“或”而不是排他性“或”。也就是说,除非另外指定或由上下文另外清楚地指示,否则“x包括a或b”旨在是指其自然包括性置换中的任一个。也就是说,如果x包括a;x包括b;或x包括a和b两者,则在前述实例中的任一个下满足“x包括a或b”。此外,除非另外指定或从上下文中清楚为针对单数形式,否则如本申请和所附权利要求中使用的冠词“一”和“一个”通常应该被解释成是指“一个或多个”。此外,除非如此描述,否则术语“实现方式”或“一个实现方式”在各处的使用不旨在是指同一实现例或实现方式。

发送站102和/或接收站106的实现方式(以及存储在其上和/或由此包括由编码器400和解码器500执行的算法、方法、指令等)能够用硬件、软件或它们的任何组合加以实现。硬件能够包括例如计算机、知识产权(ip)核心、专用集成电路(asic)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器或任何其它合适的电路。在权利要求书中,术语“处理器”应该被理解为单独地或以组合方式包括前述硬件中的任一个。术语“信号”和“数据”被互换地使用。另外,不一定必须以相同的方式实现发送站102和接收站106的各部分。

另外,在一个方面中,例如,能够使用具有计算机程序的通用计算机或通用处理器来实现发送站102或接收站106,该计算机程序当被执行时,执行本文所述的相应的方法、算法和/或指令中的任一种。此外或替换地,例如,能够利用专用计算机/处理器,该专用计算机/处理器能够包含用于执行本文所述的方法、算法或指令中的任一种的其它硬件。

例如,能够在视频会议系统中的计算机上实现发送站102和接收站106。替换地,能够在服务器上实现发送站102,并且能够在诸如手持通信设备的与服务器分开的设备上实现接收站106。在此实例中,发送站102使用编码器400能够将内容编码成编码视频信号并且将该编码视频信号发送到通信设备。进而,通信设备然后能够使用解码器500来对编码视频信号进行解码。替换地,通信设备能够对在本地存储在通信设备上的内容例如未由发送站102发送的内容进行解码。其它发送站102和接收站106的实现方式方案是可用的。例如,接收站106可以是通常不动的个人计算机而不是便携式通信设备,并且/或者包括编码器400的设备也可以包括解码器500。

另外,本公开的实现方式的全部或部分能够采取可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是能够例如有形地包含、存储、传送或运输程序以供由任何处理器使用或连同任何处理器一起使用的任何设备。介质可以是例如电子、磁性、光学、电磁或半导体设备。其它合适的介质也是可用的。

已经描述了上述实施例、实现方式和方面以便允许容易地理解本公开并且不限制本公开。相反,本公开旨在涵盖所附权利要求的范围内包括的各种修改和等效布置,该范围将被赋予如在法律下许可的最泛解释,以便包含所有此类修改和等效结构。

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