修改扫描顺序以限制扫描距离的制作方法

文档序号:19735789发布日期:2020-01-18 04:26阅读:270来源:国知局
修改扫描顺序以限制扫描距离的制作方法

背景技术
:数字视频流可以使用一系列帧或静止图像来表示视频。数字视频可用于各种应用,包括例如视频会议、高清视频娱乐、视频广告或共享用户生成的视频。数字视频流可以包含大量数据,并且消耗计算设备的大量计算或通信资源来处理、传输或存储视频数据。已经提出了各种方案来减少视频流中的数据量,包括压缩和其他编码技术,并减少压缩和编码技术中涉及的硬件的复杂性和成本。技术实现要素:本公开的一方面是一种用于编码系数变换块的方法。该方法包括识别用于编码系数的原始扫描顺序,从原始扫描顺序生成新扫描顺序,使得新扫描顺序的最大扫描距离小于或等于预定距离,并且基于新扫描顺序编码系数。另一方面是一种用于编码系数变换块的装置。该装置包括存储器和处理器。存储器包括可由处理器执行的指令,以识别用于编码系数的原始扫描顺序,从原始扫描顺序生成新扫描顺序,使得新扫描顺序的最大扫描距离小于或等于预定距离,并且基于新扫描顺序在编码比特流中编码系数。又一方面是一种用于解码系数变换块的装置。该装置包括存储器和处理器。存储器包括可由处理器执行的指令,以识别用于解码系数的原始扫描顺序,从原始扫描顺序生成新扫描顺序,使得新扫描顺序的最大扫描距离小于或等于预定距离,以及基于新扫描顺序从编码比特流来解码该系数。这些和其他方面的变化将在下文中进一步详细描述。附图说明本文的描述参考了附图,其中贯穿多个视图,相同的附图标记指代相同的部件。图1是视频编码和解码系统的示意图。图2是可以实施发射站或接收站的计算设备的示例的框图。图3是要编码和随后解码的视频流的示例的图。图4是根据本公开实施方式的编码器的框图。图5是根据本公开实施方式的解码器的框图。图6是根据本公开的实施方式的帧的一部分的表示的框图。图7示出了根据本公开的实施方式的变换块的示例和熵编码扫描顺序的示例的图。图8是根据本公开的实施方式的使用用于熵编码的上下文自适应扫描顺序进行编码的流程图。图9是根据本公开的实施方式识别用于熵编码的上下文自适应扫描顺序的流程图。图10示出了根据本公开的实施方式的变换块的估计的非零系数概率矩阵的示例、相应的基于量值的扫描顺序的示例以及相应的上下文自适应扫描顺序的示例的图。图11是根据本公开实施方式的使用用于熵编码的上下文自适应扫描顺序进行解码的流程图。图12是根据本公开的实施方式的在算术编码中使用有效上下文处理进行编码和解码的变换系数扫描模式的一部分的表示的示例图。图13是根据本公开的实施方式的用于编码系数的量化变换块的过程的流程图。图14是根据本公开的实施方式的可以存在于队列中的系数的最大数量的示例的图示具体实施例视频压缩方案可以包括将每个图像或帧分成更小的部分,诸如块,并且使用限制输出中每个块所包含的信息的技术来生成输出比特流。编码比特流可以被解码以从有限的信息中重建块和源图像。编码视频流可以包括量化变换块的量化变换系数的熵编码。熵编码是一种无损压缩技术,它可以包括用令牌或码字代替输出数据流中的比特图案或符号。在一些实施方式中,可以基于诸如正被编码的当前系数的紧左侧的系数、当前系数紧邻上方的系数或者两者的组合的上下文系数来确定符号的令牌。可以使用其他上下文系数。量化变换块的变换系数可以根据扫描顺序编码。扫描顺序指定了遍历变换系数的顺序。扫描顺序倾向于在扫描顺序结束时聚集零值系数。扫描顺序结束时的零值系数簇可以称为零系数尾部。零系数尾部可以用来提高压缩性能。如上所述,量化变换块的系数可以根据扫描顺序遍历。然后,访问(即遍历)系数被熵编码。用于熵编码非零变换系数的概率分布可以基于上下文来识别。例如,变换块的系数的熵编码可以将二维变换系数块映射成一维序列(即扫描顺序)。扫描顺序可以是硬编码的(即,预定的)扫描顺序。预定扫描顺序的示例包括之字形顺序和列偏置之字形顺序。选择的扫描顺序取决于应用于变换块的变换类型。例如,当应用二维离散余弦变换(2d-dct)时,可以选择之字形扫描顺序。例如,当应用不对称离散正弦变换(adst)-dct组合变换时,可以选择列偏置之字形扫描顺序。在一些实施方式中,用于熵编码的上下文自适应扫描顺序可以用于通过生成上下文自适应扫描顺序来提高编码效率。例如,自适应扫描顺序可以是上下文约束的非零概率自适应扫描顺序,其中上下文自适应扫描顺序中变换系数的位置基于相应系数是非零系数的降概率。上下文自适应扫描顺序可以使用例如拓扑排序来基于扫描顺序位置包含非零量化变换系数的可能性对扫描顺序位置进行(例如,以降序、升序或其他顺序)排位。得到的扫描顺序然后可以用于下一帧的变换系数块编码。生成上下文自适应扫描顺序可以包括通过向变换系数分配高于上下文系数的上下文自适应扫描顺序位置来保持变换系数与相对应上下文系数之间的对应关系,其中上下文系数可以具有较低的非零系数概率。基于定义的扫描顺序,诸如之字形扫描顺序,或者基于向上下文系数递归地或拓扑地分配上下文自适应扫描顺序位置,上下文系数可以被包括在上下文自适应扫描顺序中。上下文自适应扫描顺序可以增加系数与它们的上下文邻居之间的扫描距离。系数的扫描距离可以定义为系数的扫描索引与用作系数上下文的系数的扫描索引之间的最大差值。扫描顺序的最大扫描距离可以定义为使用该扫描顺序的所有系数中的最大扫描距离。在一些实施方式中,解码器可以将块的每个解码系数存储在上下文系数寄存器中,用于解码后续系数。上下文系数寄存器的大小可以是用于编码的系数矩阵的大小的函数。例如,系数矩阵可以是n×m矩阵,例如32×32矩阵,使用非连续编码顺序编码,诸如图9中部分示出的编码顺序,并且上下文系数寄存器可以包括n*m个系数,例如1024(32*32=1024)个系数。在一些实施方式中,每个系数可以使用诸如3比特的b比特来存储,并且上下文系数寄存器的大小可以是b*n*m比特,诸如3072比特(1024*3比特)。该系数缓冲器集合可以被称为行缓冲器。硬件实施的编解码器(即编码器和/或解码器)可以使用行缓冲器来缓存遵循扫描顺序的解码的变换系数。在编码变换系数的当前系数时,编解码器获取变换系数,这些变换系数被用作当前系数的上下文信息。为了高效地做到这一点,期望将所需的上下文系数(即上下文系数)缓存在行缓冲器中。这样,行缓冲器的长度由给定扫描顺序的最大扫描距离界定下限(即,应该具有的最小大小)。为了硬件效率,期望保持小的线路缓冲器。此外,为了降低实施成本(例如,硬件编解码器的成本),期望限制行缓冲器的大小。然而,如上所述,上下文自适应扫描顺序可以增加系数与它们的上下文邻居之间的扫描距离。其他扫描顺序也可以具有大的扫描距离。大的扫描距离又会导致行缓冲器大小增加,从而增加硬件实施成本。本公开的实施方式可以生成将扫描距离限制到最大扫描距离的扫描顺序。最大扫描距离可以是预定的扫描距离。例如,给定扫描顺序,本公开的实施方式可以从扫描顺序生成新扫描顺序,使得新扫描顺序中的最大扫描距离由特定(例如,预定)值限定。因此,可以限制行缓冲器的大小,并且优化硬件实施。图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的其他输出设备。当输出设备是或包括显示器时,可以以各种方式实施显示器,包括通过液晶显示器(lcd)、阴极射线管(crt)显示器或发光二极管(led)显示器诸如有机led(oled)显示器。计算设备200还可以包括图像感测设备220或者与图像感测设备220通信,图像感测设备220例如是相机或者现在有的或者以后开发的能够感测图像诸如操作计算设备200的用户的图像的任何其他图像感测设备220。图像感测设备220可以被定位成使得它朝向操作计算设备200的用户。在示例中,图像感测设备220的位置和光轴可以被配置成使得视野包括直接邻近显示器218并且从其可以看到显示器218的区域。计算设备200还可以包括声音感测设备222或者与声音感测设备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的框图。如上所述,编码器400可以在发射站102中实施,诸如通过提供存储在例如存储器204的存储器中的计算机软件程序。计算机软件程序可以包括机器指令,该机器指令当由诸如cpu202的处理器执行时,使得发射站102以这里描述的方式编码视频数据。编码器400也可以实施为包括在例如发射站102中的专用硬件。编码器400具有用于在(由实连接线示出的)前向路径中执行各种功能,以使用视频流300作为输入来产生编码或压缩比特流420的以下阶段:帧内/帧间预测阶段402、变换阶段404、量化阶段406和熵编码阶段408。编码器400还可以包括(由虚连接线示出的)重建路径,以重建用于编码未来块的帧。在图4中,编码器400具有具有用于在重构路径中执行各种功能的以下阶段:去量化阶段410、逆变换阶段412、重建阶段414和环路滤波阶段416。编码器400的其他结构变化可以用于编码视频流300。当视频流300被呈现用于编码时,可以以块为单位处理帧306。在帧内/帧间预测阶段402,可以使用帧内预测(也称为intra-prediction)或帧间预测(也称为inter-prediction)或两者的组合来编码块。在任何情况下,都可以形成预测块。在帧内预测的情况下,预测块的全部或一部分可以由当前帧中先前已经编码和重建的样本形成。在帧间预测的情况下,预测块的全部或部分可以由使用运动矢量确定的一个或多个先前构建的参考帧中的样本形成。接下来,仍然参考图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中的计算机软件程序,解码器500可以在接收站106中实施。计算机软件程序可以包括机器指令,该机器指令当由诸如cpu202的处理器执行时,使得接收站106以下面图8和9中描述的方式解码视频数据。解码器500也可以实施在包括于例如发射站102或接收站106中的硬件中。类似于上面讨论的编码器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的一些实施方式中,去块滤波阶段514在环路滤波阶段512之前被应用。附加地或替代地,除了环路滤波阶段416之外,编码器400还包括去块滤波阶段。图6是根据本公开的实施方式的对诸如图3所示的帧306的帧的一部分600的表示的框图。如图所示,帧的部分600包括在矩阵或笛卡尔平面中为两行和两列中的四个64×64的块610。在一些实施方式中,64×64块可以是最大编码单元,n=64。每个64×64块可以包括四个32×32块620。每个32×32块可以包括四个16×16块630。每个16×16块可以包括四个8×8块640。每个8×8块640可以包括四个4×4块650。每个4×4块650可以包括16个像素,其可以在笛卡尔平面或矩阵中的每个相应块中以四行四列来表示。像素可以包括表示在帧中捕获的图像的信息,例如亮度信息、颜色信息和位置信息。在一些实施方式中,诸如所示的16×16像素块的块可以包括亮度块660,该亮度块660可以包括亮度像素662;和两个色度块670、680,诸如u或cb色度块670,以及v或cr色度块680。色度块670、680可以包括色度像素690。例如,亮度块660可以包括16×16亮度像素662,并且每个色度块670、680可以包括8×8色度像素690,如图所示。尽管示出了块的一种布置,但是可以使用任何布置。尽管图6示出了n×n块,但是在一些实施方式中,可以使用n×m块。例如,可以使用32×64块、64×32块、16×32块、32×16块或任何其他大小的块。在一些实施方式中,可以使用n×2n块、2n×n块或它们的组合。在一些实施方式中,视频编码可以包括有序块级编码。有序块级编码可以包括以诸如光栅扫描顺序的顺序对帧的块进行编码,其中块可以从帧或帧的部分的左上角中的块开始被识别和处理,并且沿着行从左到右并且从上部行向下部行前进,识别每个块继而进行处理。例如,帧的上部行和左列中的64×64块可以是被编码的第一块,紧挨着第一块右侧的64×64块可以是被编码的第二块。从顶部开始的第二行可以是被编码的第二行,使得第二行左列中的64×64块可以在第一行最右列中的64×64块之后进行编码。在一些实施方式中,对块进行编码可以包括使用四叉树编码,该四叉树编码可以包括以光栅扫描顺序对块内的较小块单元进行编码。例如,可以使用四叉树编码来编码图6所示的帧部分的左下角所示的64×64块,其中可以编码左上32×32块,然后可以编码右上32×32块,然后可以编码左下32×32块,然后可以编码右下32×32块。每个32×32块可以使用四叉树编码来编码,其中左上16×16块可以被编码,然后右上16×16块可以被编码,然后左下16×16块可以被编码,然后右下16×16块可以被编码。每个16×16块可以使用四叉树编码来编码,其中左上8×8块可以被编码,然后右上8×8块可以被编码,然后左下8×8块可以被编码,然后右下8×8块可以被编码。可以使用四叉树编码来编码每个8×8块,其中可以编码左上4×4块,然后可以编码右上4×4块,然后可以编码左下4×4块,然后可以编码右下4×4块。在一些实施方式中,对于16×16块,可以省略8×8块,并且可以使用四叉树编码来编码16×16块,其中可以编码左上4×4块,然后可以以光栅扫描顺序来编码16×16块中的其他4×4块。在一些实施方式中,视频编码可以包括通过例如从相应的编码帧中省略原始帧中的信息中的一些信息来压缩原始帧或输入帧中包括的信息。例如,编码可以包括减少频谱冗余、减少空间冗余、减少时间冗余或其组合。在一些实施方式中,减少频谱冗余可以包括使用基于亮度分量(y)和两个色度分量(u和v或者cb和cr)的颜色模型,其可以被称为yum或ycbcr颜色模型或颜色空间。使用yum颜色模型可以包括使用相对大量的信息来表示帧的部分的亮度分量,并且使用相对少量的信息来表示帧的该部分的每个对应的色度分量。例如,帧的部分可以由高分辨率亮度分量和两个较低分辨率色度分量来表示,高分辨率亮度分量可以包括16×16像素块,两个较低分辨率色度分量中的每一个将帧的部分表示为8×8像素块。像素可以指示例如0到255范围内的值,并且可以使用例如八个比特来被存储或传输。尽管本公开是参考yum颜色模型描述的,但是可以使用任何颜色模型。在一些实施方式中,减少空间冗余可以包括使用例如离散余弦变换(dct)将块变换到频域。例如,诸如图4所示的变换阶段404的编码器的单元可以使用基于空间频率的变换系数值来执行dct。在一些实施方式中,减少时间冗余可以包括使用帧之间的相似性来基于一个或多个参考帧使用相对少量的数据来编码帧,该参考帧可以是视频流的先前编码、解码和重建的帧。例如,当前帧的块或像素可以类似于参考帧的空间上对应的块或像素。在一些实施方式中,当前帧的块或像素可以类似于不同空间位置处的参考帧的块或像素,并且减少时间冗余可以包括生成指示当前帧中的块或像素的位置与参考帧中的块或像素的相应位置之间的空间差异或平移的运动信息。在一些实施方式中,减少时间冗余可以包括识别参考帧的与当前帧的当前块或像素对应的部分。例如,可以搜索可能存储在存储器中的参考帧或参考帧的一部分,以识别用于生成预测器的一部分,以用于以最大效率编码当前帧的当前块或像素。例如,搜索可以识别参考帧的一部分,对于该部分,当前块和基于该参考帧的部分生成的预测块之间的像素值的差异被最小化,并且可以被称为运动搜索。在一些实施方式中,被搜索的参考帧的该部分可能是有限的。例如,被搜索的参考帧的可被称为搜索区域的部分可包括参考帧的有限数量的行。在示例中,识别参考帧的用于生成预测器的部分可以包括计算成本函数,诸如搜索区域的部分的像素与当前块的像素之间的绝对差的和(sad)。在一些实施方式中,用于在参考帧中生成预测器的参考帧部分的位置与当前帧中的当前块之间的空间差异可以表示为运动矢量。预测器块与当前块之间像素值的差异可以被称为差分数据、残差数据、预测误差或残差块。在一些实施方式中,生成运动矢量可以被称作运动估计,并且当前块的像素可以使用笛卡尔坐标诸如fx,y基于其位置来指示。类似地,参考帧的搜索区域的像素可以使用笛卡尔坐标诸如rx,y基于其位置来指示。可以基于例如当前帧的像素与参考帧的相应像素之间的sad来确定当前块的运动矢量(mv)。尽管为了清楚起见,在本文中参考帧的矩阵或笛卡尔表示来描述,但是帧可以以任何数据结构来存储、传输、处理或其任意组合,使得可以为帧或图像有效地表示像素值。例如,帧可以以诸如如所示的矩阵的二维数据结构或诸如如矢量阵列的一维数据结构中被存储、传输、处理或其任意组合。在一个实施方式中,诸如所示的二维表示的帧的表示,可以与将帧作为图像渲染时的物理位置相对应。例如,在帧左上角的块的左上角的位置可以与将帧作为图像渲染的左上角的物理位置相对应。在一些实施方式中,基于块的编码效率可以通过将输入块分区为一个或多个预测分区来提高,该预测分区可以是用于预测编码的包括正方形的矩形分区。在一些实施方式中,使用预测分区的视频编码可以包括从多个候选预测分区方案中选择预测分区方案。例如,在一些实施方式中,64×64编码单元的候选预测分区方案可以包括矩形预测分区,该矩形预测分区大小范围从4×4到64×64,诸如4×4、4×8、8×4、8×8、8×16、16×8、16×16、16×32、32×16、32×32、32×64、64×32或64×64。在一些实施方式中,使用预测分区的视频编码可以包括完整的预测分区搜索,其可以包括通过使用每个可用的候选预测分区方案对编码单元进行编码来选择预测分区方案,然后选择最佳方案,诸如产生最小速率失真误差的方案。在一些实施方式中,编码视频帧可以包括识别用于编码诸如块610的当前块的预测分区方案。在一些实施方式中,识别预测分区方案可以包括确定是将块编码为如图所示可以是64×64的最大编码单元大小的单个预测分区,还是将块分区成诸如如所示出的32×32块620、16×16块630或8×8块640的对应于子块的多个预测分区,并且可以包括确定是否将预测分区分区成一个或多个更小的预测分区。例如,64×64的块可以被分区成四个32×32的预测分区。四个32×32预测分区中的三个可作为32×32预测分区被编码,第四32×32预测分区可被进一步分区成四个16×16预测分区。四个16×16预测分区中的三个可做为16×16预测分区被编码,第四16×16预测分区可被进一步分区成四个8×8预测分区,这四个8×8预测分区中每一个可作为8×8预测分区被编码。在一些实施方式中,识别预测分区方案可以包括使用预测分区判定树。在一些实施方式中,当前块的视频编码可以包括从多个候选预测编码模式中识别最佳预测编码模式,这可以在处置具有各种统计性质的视频信号时提供灵活性,并且可以提高压缩效率。例如,视频编码器可以评估每个候选预测编码模式以识别最佳预测编码模式,该最佳预测编码模式可以是例如最小化当前块的诸如率失真成本的误差度量的预测编码模式。在一些实施方式中,可以通过基于当前块与相应预测块之间的相似性来限制可用候选预测编码模式的集合来降低搜索候选预测编码模式的复杂性。在一些实施方式中,通过执行指向细化模式搜索,可以降低搜索每个候选预测编码模式的复杂性。例如,可以为诸如16×16、8×8和4×4的有限的的有限的候选块大小集合生成度量;与每个块大小相关联的误差度量可以是降序;并且可以评估附加的候选块大小,诸如4×8和8×4块大小。在一些实施方式中,可以通过将当前残差块分区成一个或多个变换分区来提高基于块的编码效率,变换分区可以是用于变换编码的包括正方形的矩形分区。在一些实施方式中,使用变换分区的视频编码可以包括选择统一的变换分区方案。例如,诸如块610的当前残差块可以是64×64块,并且可以使用64×64变换在不进行分区的情况下进行变换。尽管在图6中没有明确示出,但是残差块可以使用统一变换分区方案来进行变换分区。例如,可以使用包括四个32×32变换块的统一变换分区方案、使用包括十六个16×16变换块的统一变换分区方案、使用包括六十四个8×8变换块的统一变换分区方案或者使用包括256个4×4变换块的统一变换分区方案来对64×64残差块进行变换分区。在一些实施方式中,使用变换分区的视频编码可以包括使用多种形式的变换分区编码来识别残差块的多个变换块大小。在一些实施方式中,多种形式变换分区编码可以包括递归地确定是使用当前块大小变换还是通过对当前块进行分区以及对每个分区进行多形式变换分区编码来变换当前块。例如,图6中示出的左下块610可以是64×64残差块,并且多种形式的变换分区编码可以包括确定是使用64×64变换来编码当前的64×64残差块,还是通过将64×64残差块分区成诸如四个32×32块620的分区以及对每个分区进行多种形式的变换分区编码来编码64×64残差块。在一些实施方式中,确定是否对当前块进行变换分区可以基于将使用当前块大小变换编码当前块的成本与使用分区大小变换编码每个分区的成本的和进行比较。图7示出了根据本公开的实施方式的变换块700的示例和熵编码扫描顺序702-708的示例的图。在一些实施方式中,编码器的元件,诸如图4所示的编码器400的变换阶段404,可以生成变换块700。在一些实施方式中,编码器的元件,诸如图4所示的编码器400的量化阶段406,可以量化变换块700以生成量化的变换块。如本文所用,除非另有明确指示,术语“变换块”可以指变换系数或量化变换系数的块、矩阵或其他数据结构。虽然为了简单起见,示出了4×4块,但是可以使用任何大小的块。例如,可以使用64×64块、64×32块、32×64块、32×32块、32×16块、16×16块、16×8块、8×16块、8×8块、8×4块或4×8块。在图7所示的变换块700中,每个位置所示的值指示相应位置的变换系数值。为了清楚起见,块的变换系数的位置可以被称为变换系数的“位置”、“定位”或其变型。如本文所使用的,对变换系数之间的“接近度”、“空间接近度”或“距离”的引用可以指示块的变换系数的变换系数矩阵表示中的接近度或距离。在一些实施方式中,变换块700可以以扫描顺序被处理,以提高熵编码效率。例如,扫描顺序可以倾向于将块结束处的零值系数分组,并且可以从输出比特流中省略以扫描顺序的块结束处的连续零值系数(即,零值尾部),而不会丢失数据。在一些实施方式中,熵编码可以包括以诸如水平扫描顺序702、竖直扫描顺序704、对角扫描顺序706或之字形扫描顺序708的扫描顺序对变换块700的系数进行编码。扫描顺序的每个块中显示的值表示相应系数被熵编码的顺序。虽然为了简单起见,示出了4×4块,但是可以使用任何大小的块。例如,可以使用64×64块、64×32块、32×64块、32×32块、32×16块、16×16块、16×8块、8×16块、8×8块、8×4块或4×8块。在一些实施方式中,以扫描顺序编码变换系数矩阵的系数可以包括通过以扫描顺序在矢量中包括每个变换系数来生成变换系数的一维阵列,诸如矢量。例如,可以是在变换系数矩阵左上角的系数的dc系数可以是扫描顺序矢量的第一元素,可以具有(0,0)的变换系数矩阵位置,并且可以具有(0)的扫描顺序位置。如这里所使用的,变换系数的术语“顺序”、“扫描位置”、“矢量位置”或其变型表示扫描顺序或扫描顺序矢量中变换系数的相对位置或索引。尽管图7示出了顺序扫描模式的示例,但是可以使用非连续扫描模式来编码系数。图8是根据本公开的实施方式的使用上下文自适应扫描顺序进行熵编码800的编码的流程图。在一些实施方式中,使用用于熵编码的上下文自适应扫描顺序的编码可以在诸如图4所示的编码器400的编码器中实施。例如,图4所示编码器400的熵编码阶段408可以使用熵编码的上下文自适应扫描顺序来实施编码。在一些实施方式中,使用用于熵编码的上下文自适应扫描顺序(可以是上下文约束的非零概率自适应扫描顺序)进行编码可以包括在810识别当前块、在820编码当前块、在830传输或存储输出比特流,或者其任意组合。在810识别当前块。当前块可以是残差块或其分区。例如,当前块可以被识别为64×64残差块,诸如图6所示的左下64×64残差块610。在另一示例中,当前块可以被识别为残差块的子块,诸如图6中所示的左下32×32块620、图6中所示的左下16×16子块630、图6中所示的左下8×8子块640、图6中所示的左下4×4子块650或另一大小块。尽管在图8中没有明确示出,但是在一些实施方式中,在810识别当前块可以包括诸如由图4所示的帧内/帧间预测阶段402从输入视频帧中识别当前块、为当前块生成一个或多个预测块、基于预测块生成一个或多个残差块、或者它们的组合。在820编码当前块。例如,当前块可以由诸如图4所示的编码器400的编码器进行编码,其可以包括在822通过诸如由图4所示的变换阶段404变换残差或其一部分而生成变换块,在824识别扫描顺序,以及在826对变换块(或量化的变换块)进行熵编码。在822生成变换块。在822生成变换块可以包括将当前残差块分区成一个或多个变换分区,该变换分区可以是用于变换编码的包括正方形的矩形分区。在一些实施方式中,使用变换分区的视频编码可以包括选择统一变换分区方案或多种形式变换分区方案,如图6所示。在822生成变换块可以包括诸如由变换单元,诸如图4所示的变换阶段404,将残差块或残差块分区变换成变换系数。尽管在图8中没有明确表达,但是在一些实施方式中,量化的变换块可以通过诸如由图4中示出的量化阶段406量化变换块来生成。在824识别扫描顺序,诸如上下文自适应扫描顺序。扫描顺序用于对在822识别的变换块或量化的变换块进行熵编码。在824识别上下文自适应扫描顺序可以包括基于非零系数概率识别扫描顺序,同时保留上下文,如图9所示。所识别的扫描顺序可以指示扫描模式、扫描模式内的方向或两者。基于在824识别的上下文自适应扫描顺序,在826对变换块(或量化的变换块)进行熵编码。例如,对变换块进行熵编码可以包括以在824识别的上下文自适应扫描顺序进行对来自变换块的变换系数进行顺序编码,包括编码输出数据流诸如图4所示的压缩比特流420中的熵编码的变换系数,或其组合。在一些实施方式中,当前变换系数可以是零值变换系数,变换系数的当前块可以不包括后续非零值变换系数,并且当前块的熵编码可以完成。在830,输出比特流被传输或存储。例如,输出可以作为信号经由诸如图1所示的网络104的网络传输,使得诸如图2所示的计算设备200或图1的发射站102或接收站106的设备(其可以包括诸如图5所示的解码器500的解码器),可以经由网络接收信号,可以解码编码的视频比特流,并且可以生成对应于当前帧的重建帧或重建帧的一部分。在另一示例中,编码视频比特流可以作为存储的编码视频存储在诸如图2所示的计算设备200或图1的发射站102或接收站106这样的设备的存储器(例如图2所示的存储器204)中,使得该设备或能够访问存储器的任何其他设备可以检索存储的编码视频,使得诸如图5所示的解码器500的解码器,,可以对编码的视频进行解码,并且可以生成对应于当前帧的重建帧或重建帧的一部分。使用如图8所示的用于熵编码的上下文自适应扫描顺序进行编码的其他实施方式是可用的。在实施方式中,可以添加使用用于熵编码的上下文自适应扫描顺序进行编码的附加元素,可以组合某些元素,和/或可以移除某些元素。图9是根据本公开的实施方式识别用于熵编码900的上下文自适应扫描顺序的流程图。在一些实施方式中,对变换块进行编码,诸如图8中820处所示的编码,可以包括基于上下文自适应扫描顺序从变换块中识别未编码的当前变换系数,识别当前变换系数的熵编码概率分布,基于熵编码概率分布将当前变换系数表示为代码,其包括编码输出数据流中的代码,或者其组合。在一些实施方式中,熵编码概率分布可以基于符号将出现在输入数据流中的估计概率、计算概率或者估计概率和计算概率的组合,并且可以被排序,使得最短的代码可以与最频繁出现的符号(系数)相关联。识别熵编码900的上下文自适应扫描顺序可以在诸如图4所示的编码器400的编码器中实施。例如,图4所示编码器400的熵编码阶段408可以识别熵编码的上下文自适应扫描顺序。在一些实施方式中,在图9中的900识别熵编码的上下文自适应扫描顺序可以类似于在图8中的824所示的识别熵编码的上下文自适应扫描顺序。在一些实施方式中,识别熵编码900的上下文自适应扫描顺序可以包括在910识别变换系数概率、在920识别当前变换系数位置、在930识别上下文位置、在940识别上下文位置扫描顺序、在950识别当前位置扫描顺序或其任意组合。在910识别变换系数概率。对于变换块中的每个位置或定位,变换系数概率或非零系数概率可以指示相对应的变换系数是非零系数的相应概率。在一些实施方式中,当前变换系数可以是零值变换系数,变换系数的当前块可以不包括后续非零值变换系数,并且当前块的熵编码可以被完成。在910识别非零系数概率可以包括生成、维持、跟踪指示对于变换块中相应位置或者这些操作的组合,该位置包括非零系数的概率的统计。例如,当前块的非零系数概率可以是更新的非零系数概率,更新的非零系数概率可以是用于编码基于先前编码块的非零系数计数更新的先前编码块的非零系数概率。可以在910基于一个或多个先前编码的帧、当前帧的估计概率或其组合来识别变换系数概率。在一些实施方式中,对于先前编码的帧(第i帧),(r)可以指示竖直方向上的频率索引,其可以对应于变换系数矩阵中的行号,(c)可以指示水平方向上的频率索引,其可以对应于变换系数矩阵中的列号,并且可以为变换块中的每个位置或定位(r,c)确定非零系数的计数。可以为帧中的每个变换块确定相应变换系数位置的非零系数的计数c[i][r][c],变换块可以由变换块号(m)来指示。变换块号(m)可以指示帧中定义的大小的变换块的数量或基数。帧可以包括两个或多个变换块大小。对于每个块大小(t),可以指示帧的t大小变换块的基数m(m(t)),并且可以确定相应变换系数位置的非零系数的计数c[t][i][r][c]。在先前编码帧(i)中相应变换块(m)的每个位置处观察到的非零系数概率pc[i][r][c]可以通过将相应变换系数位置的非零系数计数c[i][r][c]除以变换块号(m)来确定,这可以表达为pc[i][r][c]=c[i][r][c]/m。在某些实施方式中,可以识别先前识别的帧(i)的相应变换块中每个位置处的非零系数的估计概率pe[i][r][c]。估计的概率pe[i][r][c]可以指示为编码先前编码的帧而生成的概率。在一些实施方式中,(a)可以指示更新速率,并且当前帧(i+1)的变换块的非零概率pe[i+1][r][c]可以基于先前编码帧(i)的非零系数的估计概率pe[i][r][c]和先前编码帧(i)的非零系数的观察概率pc[i][r][c]的组合来估计,其可以被表达为pe[i+1][r][c]=(1-a)*pe[i][r][c]+a*pc[i][r][c]。在920识别当前变换系数位置。识别当前变换系数位置可以包括从在910识别的变换系数概率中识别最大非零系数概率。例如,最大非零系数概率可以是在910识别的变换系数概率中具有最高值的概率,其可以对应于变换块中最可能包括非零系数的位置。在920识别当前变换系数位置可以包括从变换块中识别最大未分配变换系数位置,并且从当前变换系数位置的识别中省略在上下文自适应扫描顺序中具有分配位置的变换系数位置。在一些实施方式中,识别用于熵编码900的上下文自适应扫描顺序可以包括如960的虚线所示的顺序地或迭代地进行的,在920识别当前变换系数位置,在930识别上下文位置,在940识别上下文位置扫描顺序,以及在950识别当前块中每个位置的当前位置扫描顺序。例如,识别当前变换系数位置可以包括对当前变换块的估计非零概率pe[i+1][r][c]进行排序,并以排定的顺序选择当前变换系数位置。在一些实施方式中,可以基于一个或多个熵编码上下文位置,诸如当前块的一个或多个先前编码的变换系数,来识别或调适用于熵编码当前变换系数的熵编码概率分布。在930识别熵编码上下文位置。在一些实施方式中,熵编码上下文位置可以包括来自当前块的在空间上接近当前系数的先前熵编码的系数。在一些实施方式中,可以基于扫描顺序来识别空间上接近的熵编码上下文位置,该扫描顺序可以不同于上下文自适应扫描顺序。例如,可以基于诸如图7所示的水平扫描顺序702的光栅扫描顺序,来识别空间上接近的熵编码上下文位置。例如,熵编码上下文位置可以包括在空间上接近变换系数当前块中的当前系数的先前熵编码的变换系数,诸如当前系数的左侧紧邻的系数、当前系数的紧邻上方的系数或者当前系数的紧邻下方和左侧的系数。在一些实施方式中,用于对当前变换系数进行熵编码的熵编码上下文位置可以包括与当前系数相邻的系数,并且可以包括与当前系数相邻的系数的熵编码上下文位置。例如,图7的水平扫描顺序702中标记为6的系数的熵编码上下文位置可以包括标记为1、2和5的系数,并且图7的水平扫描顺序702中标记为11的系数的熵编码上下文位置可以包括标记为1、2、3、5、6、7、9和10的系数。在940识别熵编码上下文位置扫描顺序。上下文自适应扫描顺序可以包括在930识别的熵编码上下文位置中一个或多个的分配的扫描顺序(分配的熵编码上下文位置),并且在940来自在上下文自适应扫描顺序中具有分配的扫描顺序的熵编码上下文位置的上下文自适应扫描顺序的熵编码上下文位置扫描顺序可以被识别为熵编码上下文位置扫描顺序。在一些实施方式中,上下文自适应扫描顺序可以省略在930识别的熵编码上下文位置(未分配的熵编码上下文位置)中一个或多个的分配的扫描顺序,并且在940识别熵编码上下文位置扫描顺序可以包括使用诸如之字形扫描顺序的定义的扫描顺序,对未分配的熵编码上下文位置进行排序,或者对未分配的熵编码上下文位置进行拓扑排序。在950识别当前位置的上下文自适应扫描顺序中的扫描顺序位置。例如,可以大于用于在930识别的熵编码上下文位置的在940识别的相应分配扫描顺序位置的上下文自适应扫描顺序中的最小未分配扫描顺序位置可以在950被识别为用于在920识别的当前位置的上下文自适应扫描顺序中的分配的扫描顺序位置。识别上下文自适应扫描顺序可以包括使用以下作为输入:(len)指示当前变换块的长度或大小,诸如4×4块为4,8×8块为8;(ci)指示对应于位置(r,c)的系数索引,其可以被表达为ci=r*len+c;(n)指示变换块中系数位置的数量或基数,对于正方形(len×len)块,其可以被表达为n=len*len;scan[si]指示扫描顺序(si)与系数索引(ci)之间的相关性,诸如从扫描顺序(si)到系数索引(ci)的映射;dep[ci]指示具有索引ci的当前系数的熵编码上下文位置的系数索引列表;并且visit[ci]指示可以指示具有索引ci的系数是否是先前扫描和编码的系数的表或其他数据存储结构。在一些实施方式中,floor()是将实数映射到最大先前整数的函数,系数索引ci的位置(r,c)可以被表达为r=floor(ci/len),c=cimodulo(%)len。识别上下文自适应扫描顺序可以包括生成以下输出:new_scan[si],其指示扫描顺序(si)和系数索引(ci)之间的更新或修改的相关性,诸如从扫描顺序(si)到系数索引(ci)的更新映射。例如,在4×4正方形变换块中,识别可以是扫描顺序3的第四扫描系数的系数索引ci可以被表达为ci=new_scan[3]。第四扫描系数的系数索引ci可以是7(ci=new_scan[3]=7),并且系数索引为5(ci=5)的系数可以被第四扫描。系数索引为7的系数的位置(r,c)可以基于相应的系数索引ci(ci=7)来识别,其可以被表达为r=floor(7/4)=1和c=7%4=3,这指示第二行和第四列处的系数可以被第四扫描。生成new_scan[si]可以被表达如下:图10示出了根据本公开的实施方式的变换块的估计的非零系数概率矩阵1000的示例、相应的基于量值的扫描顺序1010的示例以及相应的上下文自适应扫描顺序1020–1028的示例的图。在一些实施方式中,估计的非零系数概率矩阵1000可以是估计的非零系数概率矩阵。例如,估计的非零系数概率矩阵1000可以是如图9中910所示的识别的估计的非零系数概率矩阵。如图10所示的,对于变换块中的每个系数位置,估计的非零系数概率矩阵1000指示变换块中的相应系数具有非零值的估计概率。为了清楚起见,变换系数的位置和相应的估计概率可以使用笛卡尔坐标来参考。在图10所示的示例中,估计的非零系数概率矩阵1000指示:a.在相应变换块中左上位置(0,0)处的变换系数是变换块的最高估计的非零系数概率(0.51)的估计概率;b.在相应变换块中第三行和第三列(2,2)处的变换系数是变换块的第二高估计的非零系数概率(0.47)的估计概率;c.在相应变换块中第一行和第三列(0,2)处的变换系数是变换块的第三高估计的非零系数概率(0.45)的估计概率;d.在相应变换块中第一行和第四列(0,3)处的变换系数是变换块的第四高估计的非零系数概率(0.42)的估计概率;e.在相应变换块中第二行和第一列(1,0)处的变换系数是变换块的第五高估计的非零系数概率(0.41)的估计概率;f.在相应变换块中第一行和第二列(0,1)处的变换系数是变换块的第六高估计的非零系数概率(0.39)的估计概率;g.在相应变换块中第三行和第一列(2,0)处的变换系数是变换块的第七高估计的非零系数概率(0.33)的估计概率;h.在相应变换块中第四行和第一列(3,0)处的变换系数是变换块的第八高估计的非零系数概率(0.31)的估计概率;i.在相应变换块中第二行和第三列(1,2)处的变换系数是变换块的第九高估计的非零系数概率(0.28)的估计概率;j.在相应变换块中第三行和第二列(2,1)处的变换系数是变换块的第十高估计的非零系数概率(0.26)的估计概率;k.在相应变换块中第二行和第二列(1,1)处的变换系数是变换块的第十一高估计的非零系数概率(0.21)的估计概率;l.在相应变换块中第四行和第二列(3,1)处的变换系数是变换块的第十二高估计的非零系数概率(0.19)的估计概率;m.在相应变换块中第二行和第四列(1,3)处的变换系数是变换块的第十三高估计的非零系数概率(0.18)的估计概率;n.在相应变换块中第四行和第三列(3,2)处的变换系数是变换块的第十四高估计的非零系数概率(0.14)的估计概率;o.在相应变换块中第三行和第四列(2,3)处的变换系数是变换块的第十五高估计的非零系数概率(0.11)的估计概率;而且p.在相应变换块中右下位置(3,3)处的变换系数是变换块的最低估计的非零系数概率(0.06)的估计概率。熵编码扫描顺序可以基于估计的非零系数概率矩阵1000中的估计的非零系数概率的量值来识别,诸如从最大、最高或最大值估计的非零系数概率到最小、最低或最小值估计的非零系数概率的顺序,如按量值顺序的熵编码扫描顺序1010所示的。例如,在估计的非零系数概率矩阵1000中,相应变换块中左上位置(0,0)处的变换系数是变换块的最高估计的非零系数概率(0.51)和最小或最低(1)未分配的熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的左上位置(0,0)所示的左上位置(0,0)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第三行和第三列(2,2)处的变换系数是变换块的第二高估计的非零系数概率(0.47),并且第二低(2)未分配的熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第三行和第三列(2,2)所示的第三行和第三列(2,2)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第一行和第三列(0,2)处的变换系数是变换块的第三高估计的非零系数概率(0.45),并且第三低(3)未分配熵编码扫描顺序位置的估计概率可以被识别为或被分配为在如按量值顺序的熵编码扫描顺序1010的第一行和第三列(0,2)所示的第一行和第三列(0,2)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第一行和第四列(0,3)处的变换系数是变换块的第四高估计的非零系数概率(0.42),并且第四低(4)未分配熵编码扫描顺序位置的估计概率可以被识别为或被分配为在如按量值顺序的熵编码扫描顺序1010的第一行和第四列(0,3)中所示的第一行和第四列(0,3)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第二行和第一列(1,0)处的变换系数是变换块的第五高估计的非零系数概率(0.41),并且第五低(5)未分配熵编码扫描顺序位置的估计概率可以被识别为或被分配为在如按量值顺序的熵编码扫描顺序1010的第二行和第一列(1,0)所示的第二行和第一列(1,0)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中的第一行和第二列(0,1)处的变换系数是变换块的第六高估计的非零系数概率(0.39),并且第六低(6)未分配熵编码扫描顺序位置的估计概率可以被识别为或被分配为在如按量值顺序的熵编码扫描顺序1010的第一行和第二列(0,1)所示第一行和第二列(0,1)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第三行和第一列(2,0)处的变换系数是变换块的第七高估计的非零系数概率(0.33),并且第七低(7)未分配熵编码扫描顺序位置的估计概率可以被识别为或被分配为在如按量值顺序的熵编码扫描顺序1010的第三行和第一列(2,0)所示的第三行和第一列(2,0)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第四行和第一列(3,0)处的变换系数是变换块的第八高估计的非零系数概率(0.31),并且第八低(8)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第四行和第一列(3,0)所示的第四行和第一列(3,0)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第二行和第三列(1,2)处的变换系数是变换块的第九高估计的非零系数概率(0.28),并且第九低(9)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第二行和第三列(1,2)所示的第二行和第三列(1,2)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第三行和第二列(2,1)处的变换系数是变换块的第十高估计的非零系数概率(0.26),并且第十低(10)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为如按量值顺序的熵编码扫描顺序1010的第三行和第二列(2,1)所示的第三行和第二列(2,1)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第二行和第二列(1,1)处的变换系数是变换块的第十一高估计的非零系数概率(0.21),并且第十一低(11)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为如按量值顺序的熵编码扫描顺序1010的第二行和第二列(1,1)处所示的第二行和第二列(1,1)的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第四行和第二列(3,1)处的变换系数是变换块的第十二高估计的非零系数概率(0.19),并且第十二低(12)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第四行和第二列(3,1)所示的第四行和第二列(3,1)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第二行和第四列(1,3)处的变换系数是变换块的第十三高估计的非零系数概率(0.18),并且第十三低(13)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第二行和第四列(1,3)所示的第二行和第四列(1,3)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第四行和第三列(3,2)处的变换系数是变换块的第十四高估计的非零系数概率(0.14),并且第十四最低(14)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第四行和第三列(3,2)所示的第四行和第三列(3,2)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中第三行和第四列(2,3)处的变换系数是变换块的第十五高估计的非零系数概率(0.11),并且第十五低(15)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的第三行和第四列(2,3)所示的第三行和第四列(2,3)处的熵编码上下文位置的熵编码扫描顺序位置。相应变换块中右下位置(3,3)处的变换系数是变换块的最低估计的非零系数概率(0.06),并且最高或最大值(16)未分配熵编码扫描顺序位置的估计概率可以被识别为或分配为在如按量值顺序的熵编码扫描顺序1010的右下位置(3,3)所示的右下位置(3,3)处的熵编码上下文位置的熵编码扫描顺序位置。在一些实施方式中,可以基于估计的非零系数概率矩阵1000中的估计的非零系数概率的量值和上下文自适应扫描顺序1020–1028所示的上下文顺序来识别上下文自适应扫描顺序。例如,在估计的非零系数概率矩阵1000中,相应变换块中左上位置(0,0)处的变换系数是变换块的最高估计的非零系数概率(0.51),并且最小或最低(1)未分配的上下文自适应扫描顺序位置的估计概率可以被识别为或分配为在如第一上下文自适应扫描顺序1020的左上位置(0,0)所示的左上位置(0,0)处的熵编码上下文位置的上下文自适应扫描顺序位置。在估计的非零系数概率矩阵1000中,相应变换块中第三行和第三列(2,2)处的变换系数是变换块的第二高估计的非零系数概率(0.47),并且第三行和第三列(2,2)处的非零系数概率位置的估计概率用交叉影线示出,以指示相对于第一上下文自适应扫描顺序1020,第三行和第三列(2,2)处的非零系数概率位置是当前非零系数概率位置。对于当前非零系数概率位置,识别熵编码上下文位置。例如,可以为当前非零系数概率位置识别熵编码上下文位置,如图9中的920所示。熵编码上下文位置可以基于定义的上下文选择方案来识别。例如,在图10所示的估计的非零系数概率矩阵1000中,当前非零系数概率位置(2,2)的上方、左侧、以及上方和左侧的位置——(0,0)、(0,1)、(0,2)、(1,0)、(1,1)、(1,2)、(2,0)和(2,1)——可以被识别为当前非零系数概率位置(2,2)的熵编码上下文系数,如估计的非零系数概率矩阵1000中的点状背景所示。上下文自适应扫描顺序可以包括针对熵编码上下文位置中一个或多个分配的上下文自适应扫描顺序位置。例如,第一上下文自适应扫描顺序1020包括针对左上熵编码上下文位置(0,0)分配的上下文自适应扫描顺序位置(1)。上下文自适应扫描顺序可以省略针对熵编码上下文位置中一个或多个分配的上下文自适应扫描顺序位置。例如,第一上下文自适应扫描顺序1020省略了针对熵编码上下文位置(0,1)、(0,2)、(1,0)、(1,1)、(1,2)、(2,0)和(2,1)而不是左上熵编码上下文位置(0,0)分配的上下文自适应扫描顺序位置。为简单起见,上下文自适应扫描顺序省略了分配的上下文自适应扫描顺序位置的熵编码上下文位置可以被称为未分配的熵编码上下文位置。可以针对未分配的熵编码上下文位置识别分配的上下文自适应扫描顺序位置。例如,如图9中的940所示的,可以针对未分配的熵编码上下文位置识别分配的上下文自适应扫描顺序位置。在一些实施方式中,可以基于定义的扫描顺序或基于拓扑或递归地对未分配的熵编码上下文位置进行排序,针对未分配的熵编码上下文位置识别分配的上下文自适应扫描顺序位置,该未分配的熵编码上下文位置可以是未分配的熵编码上下文位置的集合。在图10中,第二上下文自适应扫描顺序1022包括针对当前非零系数概率位置识别的熵编码上下文位置的分配的上下文自适应扫描顺序位置。在第二上下文自适应扫描顺序1022中用交叉影线背景指示的位置对应于当前非零系数概率位置(2,2)。第二上下文自适应扫描顺序1022中的左上熵编码上下文位置(0,0)指示基于相应估计概率的量值分配的分配上下文自适应扫描顺序位置(1)。由第二上下文自适应扫描顺序1022中的点状背景指示的熵编码上下文位置(0,1)、(0,2)、(1,0)、(1,1)、(1,2)、(2,0)和(2,1),包括基于之字形扫描顺序分配的分配上下文自适应扫描顺序位置(2-8)。在一些实施方式中,可以使用例如二维(2d)dct来生成变换块,并且之字形扫描顺序可以对应于基于上升变换频率的扫描顺序。第三上下文自适应扫描顺序1024包括针对熵编码上下文位置分配的上下文自适应扫描顺序位置,熵编码上下文位置通过基于非零系数概率量值对熵编码上下文位置进行拓扑或递归排序来识别。在第三上下文自适应扫描顺序1024中用交叉阴影背景指示的位置对应于当前非零系数概率位置(2,2)。第三上下文自适应扫描顺序1024中的左上熵编码上下文位置(0,0)指示基于相应估计概率的量值分配的分配上下文自适应扫描顺序位置(1)。由第三上下文自适应扫描顺序1024中的点状背景指示的熵编码上下文位置(0,1)、(0,2)、(1,0)、(1,2)、(2,1)包括通过基于非零系数概率量值对熵编码上下文位置拓扑或递归地排序而分配的分配上下文自适应扫描顺序位置(2-8)。在一些实施方式中,基于非零系数概率量值拓扑地或递归地对熵编码上下文位置进行排位可以包括识别当前熵编码上下文位置、识别当前熵编码上下文位置的上下文位置、识别上下文位置扫描顺序、识别当前位置扫描顺序或其组合。识别当前熵编码上下文位置可以类似于识别如图9中920所示的当前变换系数位置,除了当前熵编码上下文位置可以是具有最大量值的熵编码上下文位置。例如,在图10中,在第三上下文自适应扫描顺序1024中由点状背景指示的熵编码上下文位置中,具有最大量值(0.45)的熵编码上下文位置(0,2)可以被识别为当前熵编码上下文位置。识别当前熵编码上下文位置的上下文位置可以类似于识别如图9中930所示的上下文位置,除了可以基于当前熵编码上下文位置来识别上下文位置。例如,在图10中,在第三上下文自适应扫描顺序1024中,当前熵编码上下文位置可以是熵编码上下文位置(0,2),并且当前熵编码上下文位置(0,2)的上下文位置可以被识别为上下文位置(0,0)和(0,1)。识别上下文位置扫描顺序可以类似于图9中940所示的上下文扫描顺序识别,除了可以针对当前熵编码上下文位置(0,2)的上下文位置(0,0)和(0,1)识别上下文位置扫描顺序。如第三上下文自适应扫描顺序1024所示,第三上下文自适应扫描顺序1024中的左上熵编码上下文位置(0,0)指示基于相应估计概率的量值分配的分配上下文自适应扫描顺序位置(1)。最小或最低(2)未分配的上下文自适应扫描顺序位置可以被识别为或被分配为熵编码上下文位置(0,1)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。识别当前熵编码上下文位置(0,2)的当前位置扫描顺序可以类似于在图9所示的950识别当前位置扫描顺序,除了可以为当前熵编码上下文位置(0,2)识别当前位置扫描顺序。例如,最小或最低(3)未分配的上下文自适应扫描顺序位置可以被识别为或分配为当前熵编码上下文位置(0,2)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。在1024所示的示例中,诸如在将第三扫描顺序分配给熵编码上下文位置(0,2)之后,在由第三上下文自适应扫描顺序1024中的点状背景指示的未分配熵编码上下文位置中具有最大量值(0.41)的熵编码上下文位置(1,0)可以被识别为当前熵编码上下文位置,当前熵编码上下文位置(1,0)的上下文位置可以被识别为上下文位置(0,0),熵编码上下文位置(0,0)可以具有分配的上下文自适应扫描顺序位置(1),并且最小或最低(4)未分配的上下文自适应扫描顺序位置可以被识别为或分配为当前熵编码上下文位置(1,0)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。在1024所示的示例中,诸如在将第四扫描顺序分配给熵编码上下文位置(1,0)之后,在由第三上下文自适应扫描顺序1024中的点状背景指示的未分配熵编码上下文位置中具有最大量值(0.33)的熵编码上下文位置(2,0)可以被识别为当前熵编码上下文位置,当前熵编码上下文位置(2,0)的上下文位置(0,0)和(1,0)可以具有分配的上下文自适应扫描顺序位置,并且最小或最低(5)未分配的上下文自适应扫描顺序位置可以被识别为或分配为当前熵编码上下文位置(2,0)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。在1024所示的示例中,诸如在将第五扫描顺序分配给熵编码上下文位置(2,0)之后,在由第三上下文自适应扫描顺序1024中的点状背景指示的未分配熵编码上下文位置中具有最大量值(0.28)的熵编码上下文位置(1,2)可以被识别为当前熵编码上下文位置,当前熵编码上下文位置(2,0)的上下文位置(0,0)、(0,1)、(0,2)和(1,0)可以具有分配的上下文自适应扫描顺序位置,当前熵编码上下文位置(2,0)的上下文位置(1,1)可以是未分配的上下文位置,最小或最低(6)未分配的上下文自适应扫描顺序位置可以被识别为或被分配为未分配的上下文位置(1,1)的上下文自适应扫描顺序位置,并且下一个最小的或最低(7)未分配的上下文自适应扫描顺序位置可以被识别为或被分配为当前熵编码上下文位置(1,2)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。在1024所示的示例中,诸如在将第七扫描顺序分配给熵编码上下文位置(1,2)之后,在由第三上下文自适应扫描顺序1024中的点状背景指示的未分配熵编码上下文位置中具有最大量值(0.26)的熵编码上下文位置(2,1)可以被识别为当前熵编码上下文位置,当前熵编码上下文位置(2,0)的上下文位置(0,0)、(0,1)、(1,0)、(1,1)和(2,0)可以具有分配的上下文自适应扫描顺序位置,并且下一个最小的或最低的(8)未分配的上下文自适应扫描顺序位置可以被识别为或被分配为当前熵编码上下文位置(2,1)的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示。第四上下文自适应扫描顺序1026包括针对估计的非零系数概率矩阵1000分配的上下文自适应扫描顺序位置,如第二上下文自适应扫描顺序1022所示的,并且包括针对基于相应的估计概率的量值分配的熵编码上下文位置(2,2)、(0,3)、(3,0)、(3,1)、(1,3)、(3,2)、(2,3)和(3,3)分配的上下文自适应扫描顺序位置(9-16)。第五上下文自适应扫描顺序1028包括针对估计的非零系数概率矩阵1000分配的上下文自适应扫描顺序位置,如第三上下文自适应扫描顺序1024所示,并且包括针对基于相应的估计概率的量值分配的熵编码上下文位置(2,2)、(0,3)、(3,0)、(3,1)、(1,3)、(3,2)、(2,3)和(3,3)分配的上下文自适应扫描顺序位置(9-16)。图11是根据本公开实施方式的使用熵编码1100的上下文自适应扫描顺序进行解码的流程图。在一些实施方式中,可以在诸如图5所示的解码器500的解码器中实施使用用于熵编码的上下文自适应扫描顺序的解码。例如,图5所示的解码器500的熵解码阶段502可以使用用于熵编码的上下文自适应扫描顺序来实施解码。使用用于熵编码的上下文自适应扫描顺序的解码可以包括在1110接收编码比特流或其一部分,在1120解码当前块,以及在1130呈现或存储解码视频。在一些实施方式中,在1120解码当前块包括在1122识别上下文自适应扫描顺序,并在1124熵解码变换系数(或量化的变换系数)。在1122识别上下文自适应扫描顺序可以类似于如图9中的900所示的识别用于熵编码的上下文自适应扫描顺序。如图11所示的上下文熵解码图的其他实施方式是可用的。可以添加上下文熵解码的附加元素,可以组合某些元素,和/或可以移除某些元素。例如,在实施方式中,上下文熵解码可以包括涉及生成熵编码模型的附加元素。上下文熵解码可以包括将块的每个解码系数存储在解码器系数寄存器中,解码器系数寄存器可以存储在诸如图2所示的存储器204的数据存储单元中,并且在1120识别上下文系数可以包括从解码器系数寄存器读取上下文系数。上下文系数寄存器的大小可以是用于编码的系数矩阵的大小的函数。例如,系数矩阵可以是使用诸如图9中部分示出的编码顺序的非连续编码顺序编码的n×m矩阵,诸如32×32矩阵,,并且上下文系数寄存器可以包括n*m个系数,诸如1024(32*32=1024)个系数。在一些实施方式中,每个系数可以使用诸如3比特的b比特来存储,并且上下文系数寄存器的大小可以是b*n*m比特,诸如3072比特(1024*3位)。图12是根据本公开实施方式的用于在算术编码中使用高效上下文处理进行编码和解码的变换系数扫描模式的一部分1200的表示的示例图。扫描模式可以是参考图13描述的原始扫描顺序或新扫描顺序。在一些实施方式中,算术编码中的高效上下文处理可以包括基于减小大小的上下文系数寄存器来解码当前系数。例如,算术编码中的高效上下文处理可以包括基于包括87个系数的上下文系数寄存器,对使用诸如图9中部分示出或图12中1200处示出的非连续编码顺序的非连续编码顺序编码的32×32矩阵的当前系数进行解码。在示例中,可以使用诸如扫描顺序位置6处的系数1220的当前系数左侧的系数、诸如扫描顺序位置7处的系数1230的当前系数上方的系数,或者它们的组合来解码扫描顺序位置11处的当前系数1210。在图12中,对应于当前编码系数的当前扫描顺序位置用加粗边框示出,对应于解码系数的扫描顺序位置用白色背景示出,对应于编码系数的扫描顺序位置用线条背景示出。示出了上下文系数寄存器的一部分1250a的示例,其包括扫描顺序位置10、9、8、7、6、5、4、3、2、1和0处的系数。移位操作之后的上下文系数寄存器的部分在1250b处示出,并且包括扫描顺序位置11、10、9、8、7、6、5、4、3、2和1处的系数。图13是根据本公开的实施方式的用于编码系数的量化变换块的过程1300的流程图。过程1300从原始扫描顺序生成新扫描顺序。新扫描顺序使得新扫描顺序中的最大扫描距离小于或等于预定距离。新扫描顺序可以通过限制行缓冲器的大小来优化编解码器硬件实施方式。过程1300包括识别1302用于编码量化变换块的系数的原始扫描顺序,从原始扫描顺序生成1304新扫描顺序,以及基于新扫描顺序编码1306系数。在此上下文中,“量化变换块”和“变换块”都涵盖量化和非量化变换块;“量化变换系数”和“变换系数”都涵盖量化和非量化变换系数。也就是说,例如,对“变换系数”的引用可以是对量化的变换系数的引用,也可以是对非量化的变换系数的引用,这取决于编解码器是对量化的变换系数进行编码还是对非量化的变换系数进行编码。过程1300可以在诸如解码器500的解码器中实施。在实施方式中,过程1300可以至少部分地由图5的解码器500的熵解码阶段502来实施。过程1300可以由诸如图1的接收站106的接收站来实施。过程1300可以在诸如图4的编码器400的编码器中实施。在实施方式中,过程1300可以至少部分地由图4的编码器400的熵编码阶段408来实施。过程1300可以由诸如图1的发射站102的发射站来实施。过程1300可以被实施为例如可以由计算设备执行的软件程序。软件程序可以包括机器可读指令,这些指令可以存储在诸如存储器204或辅助存储器214之类的存储器中,并且可以由诸如cpu202之类的处理器执行,以使计算设备执行过程1300。过程1300可以使用专用硬件或固件来实施。一些计算设备可以具有多个存储器、多个处理器或两者。过程1300的步骤或操作可以使用不同的处理器、存储器或两者来分发。单数形式的术语“处理器”或“存储器”的使用涵盖可用于执行一些或所有列举的步骤或操作的具有一个处理器或一个存储器的计算设备以及具有多个处理器或多个存储器的设备。当由编码器实施时,过程1300可以接收(未示出)量化变换块,诸如由图4的量化阶段406生成的量化变换块,并且将量化变换块编码在诸如图4的压缩比特流420的编码比特流中。当由编码器实施时,“编码”意味着在压缩比特流中编码。当由解码器实施时,过程1300从诸如图5的压缩比特流420的编码比特流解码量化变换系数块。当由解码器实施时,“编码”意味着从压缩比特流解码。在1302,过程1300识别用于编码量化变换块的系数的原始扫描顺序。扫描顺序可以以任何方式识别。例如,原始扫描顺序可以被识别为关于图8的824所描述的,关于图9的940所描述的,或者关于图11的1124所描述的。在1304,过程1300从原始扫描顺序生成新扫描顺序。新扫描顺序使得新扫描顺序的最大扫描距离小于或等于最大距离。最大距离可以是预定义的最大距离。在示例中,过程1300可以通过重写(例如,替换)原始扫描顺序来生成新扫描顺序。在另一示例中,过程1300可以生成新扫描顺序,作为单独于原始扫描顺序的数据结构。在1306,过程1300基于(即,使用)新扫描顺序对变换系数进行编码。当由编码器实施时,编码1306可以是或可以类似于在图8的830的传输或存储所输出的比特流。当由解码器实施时,编码1306可以是或可以类似于在图11的1120的解码当前块。回到从原始扫描顺序生成新扫描顺序,在1304,可以从原始扫描顺序生成新扫描顺序。如上所描述的,系数的扫描距离(即,scan_distance)可以被定义为系数的扫描索引(即,scan_idx)与系数的上下文邻居(即,neighbor_scan_idx)的扫描索引之间的最大差值。上下文邻居是变换块的系数,该系数可以用作确定对系数进行熵编码的概率模型的上下文。系数的扫描索引可以使用方程式1来确定:scan_distance=scan_idx-neighbor_scan_idx(1)例如,并且参考图12,当前系数1210的扫描距离是相对于系数1220和1230,当前系数1210的扫描距离的最大值,其中系数1220和1230是用于编码当前系数1210的上下文系数。这样,当前系数1210的扫描距离可以由max(11-7,11-6)=max(4,5)=5给出。新扫描顺序的最大扫描距离是新扫描顺序中系数中一些的扫描距离的最大值(即,系数中的至少一些的相应扫描距离的最大值);并且,如上所述,系数的扫描距离是该系数与其上下文系数中的每一个之间的扫描距离的最大值(即,该系数与该系数的上下文系数中的每一个之间的相应扫描距离的最大值)。在实施方式中,小于所有变换系数的扫描距离被用于确定扫描顺序的最大扫描距离。例如,不使用超出块结束变换系数的零变换系数的扫描距离。在实施方式中,可以使用变换块的系数中的每一个的扫描距离来确定最大扫描距离。从原始扫描顺序生成新扫描顺序可以包括向系数中的至少一些分配新扫描顺序中的新的相应扫描索引。也就是说,过程1300可以向变换系数中的每一个分配新扫描顺序中的新扫描索引。新扫描索引可以是与原始扫描顺序中的扫描索引相同或不同的扫描索引。在示例中,过程1300可以将原始扫描顺序(例如,org_scan_arr[])修改为新扫描顺序(例如,new_scan_arr[]),使得每个系数与其上下文邻居之间的扫描距离小于或等于预定距离(例如,max_distance)。原始扫描顺序(例如,org_scan_arr[])和新扫描顺序(例如,new_scan_arr[])可以是将扫描索引(scan_idx)映射到系数索引(coeff_idx)的一维阵列。例如,参考图7,可以使用以下公式根据光栅扫描顺序将变换块700的系数转换成系数索引:coeff_idx=coefficient_row*transform_block_width+coefficient_col例如,图7的系数701的系数索引(coeff_idx)(其在变换块700的列索引1和行索引2处)可以由coeff_idx=2*4+1=9给出。因此,当使用竖直扫描顺序704时,org_scan_arr[6]=9(即,扫描位置705)。即,扫描位置6(即,扫描位置705)包含具有coeff_idx9的系数(即,系数701)。在实施方式中,过程1300可以顺序地(即,从0到变换块中系数的数量)访问原始扫描顺序的扫描位置,以生成新扫描顺序。过程1300可以使用队列,队列保持跟踪具有至少一个已被扫描的上下文邻居的系数(包括对其引用)。上下文邻居如上文关于上下文系数所描述。也就是说,“上下文邻居”和“上下文系数”可以在过程1300的上下文中可互换地使用。“已经被扫描的上下文邻居”意指已经被分配了新扫描顺序中的扫描位置的变换系数。当将系数分配给新扫描顺序中的扫描索引时(即,当处理该系数时),是其上下文邻居的系数被推入队列。例如,并且参考图12,并且在系数的左邻居和上邻居被用作上下文邻居的情况下,系数1230是系数1210和1231的上下文邻居。这是因为系数1230是系数1210的上邻居,并且是系数1231的左侧邻居。换句话说,系数1210是紧接在系数1230下面的系数,而系数1231是紧接在系数1230右侧的系数。这样,当过程1300给系数1230分配新的索引时,过程1300可以将系数1210和1231推(即添加)到队列中。同样,出于说明的目的,上邻居和右侧邻居被用作上下文系数。然而,本公开不限于此。上下文系数可以是任何其他系数。该队列可用于监控队列中的系数相对于待分配给新扫描顺序中的系数的下一扫描位置的扫描距离。如上所描述,顺序处理原始扫描顺序的扫描位置。然而,在将新扫描顺序中的新扫描位置分配给系数之前,过程1300确定队列头部系数(即队列头部的系数)是否具有超过限制的扫描距离(即保守最大距离)。该限制可以是小于预定距离的安全限制。如果将超过保守最大距离,则过程1300可以在处理原始扫描顺序所建议的系数之前,处理队列中将超过保守最大距离的那些系数。保守最大距离可用于说明多个系数可能从队列中弹出的情况。如下文进一步描述的,从队列中弹出系数意味着从队列中移除系数,并在新扫描顺序中为其分配新的扫描位置。队列中共享相同上下文邻居的系数(即,同父系数(co-parentcoefficient))一起从队列中弹出。将同父系数一起弹出防止新扫描顺序的最大扫描距离超过预定距离。随着每个同父系数从队列中弹出,新扫描顺序中的最大扫描距离以1接近预定距离。这样,保守最大距离被用来开始向队列中的系数分配新的扫描位置,以规避如果稍后向这些系数分配新的扫描位置,这些系数的扫描距离(在新扫描顺序中)将超过预定距离的情况。再次重申,当超过安全限制(保守最大距离)时,可能需要将下一个扫描位置值(以及潜在的后续扫描位置值)分配给队列中的系数,而不是将下一个扫描位置值(即,准备分配的下一个扫描位置)分配给不在队列中的一个系数。与队列中的其前一个系数共享同一个neighbor_scan_idx的系数的最大数量(即max_increased_scan_distance)可以由方程式(2)给出:max_increased_scan_distance=ceiling(max_unscanned_neighbors*(max_context_neighbors-1)/max_context_neighbors)(2)过程1300可以根据原始扫描顺序遍历每个系数,并且在给系数分配增量扫描索引(即,新扫描顺序中的下一个扫描位置,scan_idx)之前,过程1300给队列中扫描距离等于或大于保守最大距离的系数分配新扫描顺序中的下一个扫描位置(scan_idx)。生成新扫描顺序可以包括将新扫描索引分配给当前系数,该当前系数紧接着的是原始扫描顺序中的下一个系数并且是用于熵编码另一系数的上下文系数,在另一系数的扫描距离大于或等于保守最大距离的条件下,在将下一个扫描索引分配给下一个系数之前,将下一个扫描索引分配给另一系数。生成新扫描顺序可以包括将新扫描索引分配给当前系数,该当前系数前面是原始扫描顺序中的前一个系数,识别该前一个系数是其上下文系数的系数,并且在该系数的扫描距离大于或等于保守最大距离的条件下,在将下一个扫描索引分配给当前系数之后的又一系数之前,将下一个扫描索引分配给该系数。保守最大距离可以由以下方程式(3)给出:conserve_max_distance=max_distance-ceiling(max_unscanned_neighbors*(max_context_neighbors-1)/max_context_neighbors)(3)在方程式(3)中,max_context_neighbors是使用相同系数作为上下文信息的系数的最大数量;max_distance是如上所描述的预定距离;max_unscanned_neighbors是队列中可以包含的系数的最大数量。也就是说,max_unscanned_neighbors是其至少一个上下文系数已经被扫描(即,处理)的未扫描(即,尚未处理)系数的最大数量。例如,在上面和左侧系数被用作上下文系数的情况下,max_unscanned_neighbors可以由方程式(4)给出:max_unscanned_neighbors=tx_width+tx_height-2(4)在方程式(4)中,tx_width是变换块的宽度,tx_height是变换块的高度。方程式(4)反映了原始扫描顺序的约束,即,当扫描系数时,先前已经扫描了它的左侧和上面的邻居。也就是说,期望在当前系数被编码之前扫描上下文系数。图14是根据本公开的实施方式的可以在队列中的系数的最大数量的示例1400和1410的图示。示例1400和1410描绘了宽度(tx_width)为8、高度(tx_height)为4的变换块。在示例1400中,如块1402带阴影的块是扫描(即,处理)过的系数,并且如块1404带阴影的块是具有至少一个扫描上下文邻居的未扫描系数(即,队列中的系数)。从示例1400中可以看出,总共存在9个未扫描的系数。另一方面,在示出未扫描系数的最大数量的示例1410中,存在21个扫描系数1412和10(即,8+4-2)个未扫描系数1414。现在给出修改扫描顺序以限制扫描距离的示例函数(limit_neighbor_distance)的伪代码。该函数将原始扫描顺序(org_scan_arr)、变换块的宽度(tx_width)、变换块的高度(tx_height)、使用相同相邻系数作为上下文信息的系数的最大数量(max_context_neighbors)以及预定距离(max_distance)作为输入,该预定距离是每个系数与其上下文邻居的扫描索引之间期望最大差值。该函数生成新扫描顺序阵列(new_scan_arr)作为输出。该函数使用变换块中系数的数量(coeff_num)、新扫描顺序(new_scan_arr)中要分配的扫描索引(new_scan_idx)、用于存储系数的队列(queue)作为变量,使得每个系数具有至少一个已扫描的上下文邻居、指示变换块的系数的处理状态的阵列(已访问)、如上文参考图14所述的max_unscanned_neighbors以及如上文参考图13所述的conserve_max_distance。在队列中,系数被存储为“项目(item)”对象,其包含新扫描顺序(neighbor_scan_idx)中系数的父扫描索引(即系数的上下文系数的扫描索引)和系数自身的系数索引;queue.top指示要从队列中弹出的项目(即队列的头);queue.pop()从队列中弹出(即移除并返回)头部项目;queue.push(item)推(添加到队列的头部)项目。对于已访问的阵列,系数索引处的not_visited值指示该系数未被扫描且不在队列中,而“in_queue”值指示该系数在队列中,而“scanned”值指示该系数已被分配了新扫描顺序中的新扫描索引。limit_neighbor_distance()函数可以如下所示:函数limit_neighbor_distance()使用辅助函数assign_scan_index()。函数assign_scan_index将新扫描顺序中的new_scan_index分配给对应于系数索引(coeff_idx)的位置。分配scan_id后,该函数将使用coeff_idx处的系数作为上下文信息的系数推到队列中。使用coeff_idx处的系数作为上下文信息的系数在assign_scan_index中被称为邻居。函数assign_scan_index()将系数索引(coeff_idx)、新扫描顺序中的待分配扫描索引(new_scan_idx)、新扫描顺序阵列(new_scan_arr)、变换块宽度(tx_width)和变换块高度(tx_height)作为输入。assign_scan_index()作为输出生成或修改要分配的扫描索引(new_scan_idx)、新扫描顺序阵列(new_scan_arr)、队列(queue)和已访问阵列。assign_scan_index()函数可以如下所示:根据本公开的实施方式可以生成新扫描顺序,使得新扫描顺序中的最大扫描距离小于或等于期望预定距离(例如,max_distance)。由于队列中可能有一个以上的系数共享相同的邻居扫描索引,如上所讨论的保守最大距离可以用于确保可以将扫描位置分配给队列上的项目(即,处理队列上的系数),使得最大扫描距离不超过期望的预定距离。照此,保守最大距离可以用作触发和安全限制,以开始向队列中的项目分配扫描位置。下表1给出了队列条目的假设示例。表1的示例假定使用相同邻居系数作为上下文信息的系数的最大数量(max_context_neighbors)是2,其至少一个上下文系数已经被扫描的未扫描(即,尚未处理)系数的最大数量是8(因此,队列被认为是满的,因为它包括8个条目),保守最大距离(conserve_max_distance)是10,并且期望的预定距离(max_distance)是14(根据方程式(3)计算)。弹出顺序0123456neighbor_scan_idx77889910scan_idx17181920212223scan_distance10111112121313“弹出顺序”列示出了队列位置。弹出顺序0指队列的头部(第一个条目)。队列的头部是从队列中弹出的下一个条目。表i的阴影列指示与其左侧的系数共享相同上下文系数的系数(neighbor_scan_idx)。例如,队列弹出顺序位置0和1处的系数共享相同的上下文系数,即,在新扫描顺序中具有扫描位置7的上下文系数。根据本公开的实施方式将扫描位置分配给队列上的系数,使得最大扫描距离不超过预定距离。当队列头部系数的扫描距离超过或等于保守最大距离时,处理队列中的系数。因此,按照新扫描顺序分配扫描位置,如行scan_idx所示。队列位置0(弹出顺序=0)处的系数被分配给新扫描顺序中的扫描位置17(scan_idx=17);队列位置1处的系数(poporder=1)接着从队列中弹出,并被分配给下一个扫描位置18;以此类推。表1的行scan_distance示出了基于分配的扫描位置的扫描距离(即scan_idx–neighbor_scan_idx)。可以看出,最小扫描距离对应于保守最大距离(即10),因为在弹出位置0的系数是第一个弹出队列的。还可以看出,最大扫描距离(即14)被分配给弹出位置7处的系数。最大扫描距离不超过预定距离(max_distance=14)。这里使用的词语“示例”或“实施方式”意味着用作示例、实例或说明。这里描述为“示例”或“实施方式”的任何方面或设计不一定被解释为优选于或优于其他方面或设计。相反,使用词语“示例”或“实施方式”是为了以具体的方式呈现概念。如在本申请中所使用的,术语“或”旨在表示包含性的“或”而不是排他性的“或”。也就是说,除非另有说明,或者上下文清楚,“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 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1