对最后有效系数标志的代码化的制作方法

文档序号:19735820发布日期:2020-01-18 04:26阅读:206来源:国知局
对最后有效系数标志的代码化的制作方法

背景技术
:数字视频流可以通过使用帧序列或者静止图像来表示视频。数字视频可以用于各种应用,包括:例如,视频会议、高清视频娱乐、视频广告或者共享用户生成的视频。数字视频流可以包括大量数据,并且消耗计算装置的大量计算资源或者通信资源来处理、发送或者存储视频数据。已经提出了各种方法来减少视频流中的数据量,包括压缩和其它编码技术。可以通过将帧或者图像分成基于参考帧的一个或者多个预测块预测的块来执行基于运动估计和补偿的编码。对块和预测块之间的差值(即,残余误差)进行压缩并编码在比特流中。解码器使用差值和参考帧来重新构建帧或者图像。技术实现要素:一个方面是一种用于在编码比特流中对系数的变换块中的最后一个非零系数的位置进行编码的方法,该方法:确定最后一个非零系数的位置,该位置包括列值和行值;对系数的该变换块中的非零系数进行编码。非零系数位于该变换块的系数列和系数行处。该方法还包括:响应于确定非零系数是要在系数列中编码的第一非零系数,对系数列是否等于最后一个非零系数的列值进行编码;以及响应于确定非零系数不是要在系数列中编码的第一非零系数,跳过对系数列是否等于最后一个非零系数的列值进行编码。该方法还包括:响应于确定非零系数是要在系数行中编码的第一非零系数,对系数行是否等于最后一个非零系数的行值进行编码;以及响应于确定非零系数不是要在系数行中编码的第一非零系数,跳过对系数行是否等于最后一个非零系数的行值进行编码。另一方面是一种用于在编码比特流中对系数的变换块中的最后一个非零系数的位置进行编码的方法。该方法包括:确定最后一个非零系数的位置,该位置包括列值和行值;根据扫描顺序对系数的该变换块中的一个或者多个非零系数进行编码,一个或者多个非零系数中的每个非零系数位于变换块的相应系数列和相应系数行处;响应于确定一个或者多个非零系数中的一非零系数是要在与最后一个非零系数的列值相等的列中编码的第一非零系数,编码:该非零系数的系数列等于最后一个非零系数的列值;以及响应于确定一个或者多个非零系数中的一非零系数是要在与最后一个非零系数的行值相等的行中编码的第一非零系数,编码:该非零系数的系数行等于最后一个非零系数的列值。另一方面是一种用于在编码比特流中对系数的变换块中的最后一个非零系数的位置进行编码的设备。该设备包括:存储器;以及处理器,该处理器配置为执行存储在存储器中的指令以:确定最后一个非零系数的位置,该位置包括列值和行值;对系数的变换块中的一个或者多个非零系数进行编码,每个非零系数位于变换块的相应系数列和相应系数行处;以及对于一个或者多个非零系数中的每个非零系数:(i)或则:响应于确定非零系数是要在系数列中编码的第一非零系数,对系数列是否等于最后一个非零系数的列值进行编码;或则响应于确定非零系数不是要在系数列中编码的第一非零系数,跳过对系数列是否等于最后一个非零系数的列值进行编码;以及(ii)或则:响应于确定非零系数是要在系数行中编码的第一非零系数,对系数行是否等于最后一个非零系数的行值进行编码;或则响应于确定非零系数不是要在系数行中编码的第一非零系数,跳过对系数行是否等于最后一个非零系数的行值进行编码。另一方面是一种用于对变换块的最后一个非零系数的位置进行解码的设备,包括:存储器;以及处理器。该处理器被配置为执行存储在存储器中的指令以:从编码比特流中解码变换块的第一系数是否为非零;以及响应于确定第一系数为非零,并且响应于确定第一系数是要针对第一维度的第一值解码的第一非零系数:从编码比特流中解码第一语法元素,该第一语法元素指示第一维度的第一值是否指示块结束系数;以及响应于第一语法元素指示块结束系数,使用第一值来确定最后一个非零系数的位置。另一方面是一种用于对系数变换块的最后一个非零系数的位置进行解码的方法。该方法包括:将变换块的系数映射至具有第一维度和第二维度的系数组坐标系,第一维度与变换系数组相对应,并且第二维度与在系数组中的一组内的偏移位置相对应。该方法还包括:从编码比特流中确定包括最后一个非零系数的系数组;从编码比特流中确定最后一个非零系数在最后一个非零系数的系数组中的偏移位置;以及从编码比特流中解码系数,直到与系数组和偏移位置相对应的系数。在对实施例、随附权利要求书和附图的以下详细描述中公开了本公开的这些以及其它方面。附图说明本文中的描述参考附图,其中,相似的附图标记在若干视图中指代相似的部分。图1是视频编码和解码系统的示意图。图2是可以实施发送站或者接收站的计算装置的示例的框图。图3是要对其进行编码并且随后对其进行解码的视频流的示意图。图4是根据本公开的实施方式的编码器的框图。图5是根据本公开的实施方式的解码器的框图。图6是图示了根据本公开的实施方式的量化变换系数的示意图。图7是根据本公开的实施方式的、可以用于对变换块进行熵代码化的系数令牌树的示意图。图8是根据本公开的实施方式的、用于将eob位置二值化的树的示例的示意图。图9是根据本发明的实施方式的、对系数变换块的最后一个非零系数的位置进行编码的过程的流程图。图10是根据本公开的实施方式的扫描顺序和块的示例。图11是根据本公开的实施方式的、通过使用笛卡尔坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程的流程图。图12是根据本公开的实施方式的、通过使用笛卡尔分组坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程的流程图。图13是根据本公开的实施方式的、通过使用极坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程的流程图。图14是根据本公开的实施方式的、通过使用系数组坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程的流程图。图15是根据本公开的实施方式的极坐标系的示例。图16是根据本公开的实施方式的系数组坐标系的示例。图17是根据本公开的实施方式的、对变换块的最后一个非零系数的位置进行解码的过程的流程图。图18是根据本公开的实施方式的、对变换块的最后一个非零系数的位置进行解码的另一过程的流程图。具体实施方式如上面提到的,涉及对视频流进行代码化的压缩方案可以包括:通过使用一种或者多种技术来将图像分成块并且生成数字视频输出比特流以限制包括在输出中的信息。可以对接收到的编码比特流进行解码以通过有限的信息重新创建块和源图像。对视频流或者其一部分(诸如,帧或者块)进行编码可以包括:使用视频流中的时间相似性或者空间相似性来提高代码化效率。例如,可以基于识别先前已代码化的像素值与当前块中的那些像素值之间的差值(残差)来对视频流的当前块进行编码。按照这种方式,只需要将残差和用于产生残差的参数添加至编码比特流。可以通过使用有损量化步骤来对残差进行编码。如下面进一步描述的,残差块可以在像素域中。可以将残差块变换到频域中,从而产生变换系数的变换块。可以使变换系数量化,从而产生量化变换系数的量化变换块。可以对量化系数进行熵编码,并且可以将其添加至编码比特流。解码器可以接收编码比特流,对量化变换系数进行熵解码以重新构建原始视频帧。熵代码化是用于“无损”代码化的技术,其依赖于对在编码视频比特流中出现的值的分布进行建模的概率模型。通过使用基于测得的或者估计的值分布的概率模型,熵代码化可以将表示视频数据所需的比特数减少到接近理论最小值。实际上,表示视频数据所需的比特数的实际减少可能取决于概率模型的精度,被执行代码化的比特的数量以及用于执行代码化的定点算术的计算精度。在编码视频比特流中,许多比特用于以下二者中的一者:内容预测(例如,帧间模式/运动矢量代码化、帧内预测模式代码化等)或者残差代码化(例如,变换系数)。编码器可以使用技术来减少在进行系数代码化时花费的比特的量/数量。例如,系数令牌树(该系数令牌树也可以被称为二进制令牌树)指定值的范围,其针对该令牌树中的每个分支,具有前向自适应概率。从待代码化的值中减去令牌基值以形成残差,然后以固定的概率对块进行代码化。具有较小变化(包括向后自适应性)的相似方案也是可能的。自适应技术可以在随着视频流进行编码而改变概率模型以适应数据的变化的特性。无论如何,都向解码器通知或者使解码器可获得用于对熵代码化的视频比特流进行编码的概率模型以对视频比特流进行解码。量化变换块可以包括零量化变换系数和非零量化变换系数。非零系数在本文中也被称为有效(significant)系数。对量化变换块进行编码和解码可以包括:根据扫描顺序来对变换块的变换系数进行编码和解码。对量化变换块进行编码和解码可以包括对有关有效系数的信息进行编码和解码,该有效系数是变换块中的最后一个非零量化变换系数(即,最后一个有效系数)。这被称为对块结束(eob)位置的代码化。哪个变换系数被指定为最后一个非零变换系数是基于扫描顺序来确定的。在一些代码化系统中,对最后一个非零系数的笛卡尔坐标(即,量化变换块中的列和行)进行代码化。这在本文中被称为用于对eob位置进行代码化的笛卡尔坐标方法。在其它代码化系统中,当根据扫描顺序访问每个量化变换系数时(即,对其进行代码化或者解码),对有关变换系数是否是最后一个非零系数的信息进行代码化。同样,与有效系数位置一起,按照交织方式来对eob位置进行代码化。这在本文中被称为用于对eob位置进行代码化的交织方法。如下面进一步说明的,当变换块稠密时,笛卡尔坐标方法会更有效率。稠密的变换块是这样的:非零系数(即,有效系数)的数量相对大。另一方面,当变换块稀疏时,交织方法会更有效率。稀疏的系数块是非零系数的数量相对小的块。根据本公开的实施方式可以组合笛卡尔坐标方法和交织方法的益处来对eob位置进行代码化,从而减少表示视频数据所需的比特数量。对于稠密的和稀疏的变换块两者,根据本文中的教导对eob位置进行代码化都可以很好地执行(例如,就对eob位置进行代码化所需的比特方面而言)。根据本公开的实施方式将变换块的变换系数映射至具有维度的坐标系。一维度的一些值包括有效(即,非零)变换系数。例如,在笛卡尔坐标系(下面描述的)中,维度可以是列维度。参照图10中的块1050(该块1050是变换块),维度值6(即,列索引6)包括有效系数,即,系数1052和系数1056;而维度值三(3)(即,列索引3)不包括非零系数。通过仅进行一次代码化,对于包括有效系数的维度值(无论该维度值是否包括最后一个非零系数),可以减少对eob位置进行代码化所需的比特数量。坐标系的示例包括笛卡尔坐标系、极坐标系、笛卡尔分组坐标系和系数组坐标系。根据本公开的实施方式,其它坐标系也是可能的。在本文所描述的坐标系中,针对坐标系描述了二个维度。然而,坐标系可以包括多个两个维度。如上面提到的,坐标系可以是笛卡尔坐标系,并且维度可以是变换块的列和行。坐标系可以是极坐标系,在该极坐标系中,dc系数(即,变换块的块位置(0,0))可以是中心,并且可以通过使用反对角线来测量与中心的距离。反对角线可以是第一维度,并且在反对角线上的位置可以是第二维度。坐标系可以是分组系,使得将变换系数分组成带编号的组,第一维度可以是组索引,并且第二维度可以是在该组内的变换系数的偏移位置。其它坐标系也是可能的。本文首先参照可以包含这些教导的系统来描述改进的、对视频压缩中的最后有效系数标志的代码化。图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时,发送站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,该应用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通信,图像感测装置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描述为单条总线,但是计算装置200的总线212可以由多条总线组成。进一步地,辅助存储214可以直接耦合至计算装置200的其它组件,或者可以经由网络来访问辅助存储214,并且辅助存储214可以包括单个集成单元(诸如,存储卡)或者多个单元(诸如,多个存储卡)。因此,可以按照各种配置来实施计算装置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的框图。解码器500可以实施在接收站106中,例如,通过提供存储在存储器204中的计算机软件程序。该计算机软件程序可以包括机器指令,这些机器指令在由处理器(诸如,cpu202)执行时使接收站106按照在下面的图8和图9中描述的方式来对视频数据进行解码。解码器500还可以实施在包括在例如,发送站102或者接收站106中的硬件中。与上面讨论的编码器400的重构路径相似,在一个示例中,解码器500包括以下级以执行各种功能来从压缩比特流420产生输出视频流516:熵解码级502、去量化级504、逆变换级506、帧内/帧间预测级508、重构级510、环路滤波级512和解块滤波级514。解码器500的其它结构变化可以用于对压缩比特流420进行解码。当呈现压缩比特流420以进行解码时,可以通过熵解码级502来对压缩比特流420内的数据元素进行解码以产生一组量化变换系数。去量化级504对量化变换系数进行去量化(例如,通过将量化变换系数乘以量化器值),并且逆变换级506通过使用所选择的变换类型来对去量化变换系数进行逆变换以产生推导残差,该推导残差可以与在编码器400中通过逆变换级412创建的推导残差相同。通过使用从压缩比特流420解码的报头信息,解码器500可以使用帧内/帧间预测级508来创建与在编码器400中(例如,在帧内/帧间预测级402)创建的预测块相同的预测块。在重构级510,可以对推导残差添加预测块以创建重构块。可以将环路滤波级512应用于重构块以减少构块伪像。可以向重构块应用其它滤波。在该示例中,将解块滤波级514应用于重构块以减少构块失真,并且将结果输出为输出视频流516。该输出视频流516还可以被称为解码视频流,并且这些术语在本文中将可互换使用。解码器500的其它变化可以用于对压缩比特流420进行解码。例如,解码器500可以产生输出视频流516,而无需解块滤波级514。在解码器500的一些实施方式中,在环路滤波级512之前应用解块滤波级514。此外,或者替选地,除了环路滤波级416之外,编码器400还包括解块滤波级。图6是图示了根据本公开的实施方式的量化变换系数的示意图600。图600描绘了当前块620、扫描顺序602、量化变换块604、非零图606、块结束图622和符号图626。当前块620被图示为4x4块。然而,任何块大小都是可能的。例如,当前块可以具有4×4、8×8、16×16、32×32的大小(即,尺寸)或者任何其它方形或者矩形块大小。当前块620可以是当前帧的块。在另一示例中,当前帧可以被分成区段(诸如,图3中的区段308)、区块等,每一个包括块的集合,其中,当前块是该分区的块。量化变换块604可以是与当前块620的大小相似大小的块。量化变换块604包括非零系数(例如,系数608)和零系数(例如,系数610)。如上所述,量化变换块604包括针对与当前块620相对应的残差块的量化变换系数。同样如上所述,通过熵代码化级(例如,图4中的熵代码化级408)来对量化变换系数进行熵代码化。对量化变换系数进行熵代码化可以涉及选择上下文模型(也被称为概率上下文模型、概率模型、模型和上下文),该上下文模型提供对二值化变换系数(例如,下面针对图7描述的)的二进制符标(symbol)进行代码化的条件概率的估计。当对量化变换系数进行熵代码化时,附加信息可以用作用于选择上下文模型的上下文。例如,先前代码化的变换系数的幅值可以至少部分地用于确定概率模型。为了对变换块进行编码,视频代码化系统可以按照扫描顺序来遍历变换块,并且随着量化变换系数分别被遍历(即,被访问)而对量化变换系数进行编码(例如,熵编码)。在之字形扫描顺序(诸如,扫描顺序602)中,首先遍历变换块的左上角(也被称为dc系数)并且对其进行编码,遍历扫描顺序中的下一系数(即,与被标记为“1”的位置相对应的变换系数)并且对其进行编码,依此类推。在之字形扫描顺序(即,扫描顺序602)中,首先遍历在当前量化变换系数(例如,待编码的变换系数)左上方的一些量化变换系数。其它扫描顺序也是可能的。可以通过使用扫描顺序遍历二维量化变换块来产生量化变换系数的一维结构(例如,阵列)。对量化变换块604进行编码可以包括:确定非零图606,该非零图606指示量化变换块604的哪些量化变换系数为零以及哪些为非零。可以在非零图中分别用值一(1)和零(0)来指示非零系数和零系数。例如,非零图606包括在与系数608相对应的笛卡尔位置(0,0)处的非零607和在与系数610相对应的笛卡尔位置(2,0)处的零608。对量化变换块604进行编码可以包括:生成块结束图622并且对其进行编码。块结束图指示:针对给定扫描顺序,量化变换块604的非零量化变换系数是否是最后一个非零系数。如果非零系数不是变换块中的最后一个非零系数,则可以在块结束图中用二进制位零(0)来指示该非零系数。另一方面,如果非零系数是变换块中的最后一个非零系数,则可以在块结束图中用二进制值1(一)来指示该非零系数。例如,由于与扫描位置11相对应的量化变换系数(即,最后一个非零量化变换系数628)是量化变换块604的最后一个非零系数,因此,用为1(一)的块结束值624来指示该量化变换系数;用零来指示所有其它非零变换系数。对量化变换块604进行编码可以包括:生成符号图626并且对其进行编码。符号图626指示量化变换块604的哪些非零量化变换系数具有正值以及哪些具有负值。不需要在符号图中指示为零的变换系数。符号图626图示了量化变换块604的符号图的示例。在符号图626中,用0来指示负量化变换系数,并且可以用1来指示正量化变换系数。如上面提到的,一些代码化系统可以使用交织方法来对最后一个非零量化变换系数628的eob位置进行编码和/或解码。现在给出交织方法的一个示例。在交织方法中,可以使用标志(例如,语法元素sig_coef_flag)来指示被编码或者解码的系数是否有效。对于变换系数,语法元素sig_coef_flag回答了以下问题:变换系数为零还是为非零。例如,如果语法元素sig_coef_flag为零(0),则当前变换系数为零;而如果sig_coef_flag为一(1),则当前变换系数为非零。在交织方法中,给定扫描顺序(诸如,扫描顺序602),另一标志指示正被代码化(即,被编码或者解码)的系数是否是变换块的最后一个有效标志。该标志可以是被称为last_sig_flag的语法元素。对于非零变换系数,语法元素last_sig_flag回答了以下问题:变换系数是否最后一个非零系数。值零(0)可以指示变换系数不是最后一个非零系数,而值一(1)可以指示变换系数是最后一个非零系数。可以在变换块的每个有效系数之后对语法元素last_sig_flag进行编码和解码。同样,当对指示当前系数为非零的语法元素sig_coef_flag(即,具有值一(1)的sig_coef_flag)进行编码或者解码时,对应的语法元素last_sig_flag指示当前非零系数是当前块中的最后一个有效系数(例如,last_sig_flag=1)或者不是当前块中的最后一个有效系数(例如,last_sig_flag=0)。因此,当对设置的标志last_sig_flag(例如,last_sig_flag=1)进行编码或者解码时,确定当前块的eob位置。可以用于对nxn变换块中的eob位置进行代码化的交织方法总结如下:在步骤1中,将扫描位置i初始化为零(即,i=0)。扫描位置i与扫描顺序位置相对应。在步骤2中,对在扫描顺序位置i处的语法元素sig_coef_flag进行编码/解码。在步骤3中,确定是否设置了语法元素sig_coef_flag(例如,sig_coef_flag=1),如果是,则对在扫描顺序位置i处的语法元素last_sig_flag进行编码/解码。在步骤4中,使i增加(即,i=i+1)。然后,重复步骤2至4,直到对eob位置进行了编码/解码(即,last_sig_flag=1),或者直到到达块的末尾(即,当i已经达到值n*n)。在步骤3中,如果到达了块的末尾(即,i=n*n-1),则不对在位置i处的语法元素last_sig_flag进行编码/解码。在这种情况下,将变换块的最后一个系数(即,在最后一个扫描顺序位置处的变换系数)设为eob。在上述方案的一个变型中,语法元素last_sig_flag可以由eob_flag代替,该eob_flag指示所有剩余系数(包括在当前块中的当前位置处的系数)都为零。在这种情况下,可以紧接在设置的sig_coef_flag之后对语法元素eob_flag进行代码化(编码/解码)。即,如果将sig_coef_flag设置在位置i,则在位置i+1处对eob标志进行代码化。现在针对图7提供使用交织方法的代码化系统的另一示例。在图7的示例中,使用系数二进制树。图7是根据本公开的实施方式的、可以用于对变换块进行熵代码化的系数令牌树700的示意图。系数令牌树700被称为二进制树,因为在树的每个节点处,必须采取(即,遍历)两个分支中的一个分支。系数令牌树700包括分别与被标记为a和b的节点相对应的根节点701和节点703。如上面针对图6描述的,当针对一个块检测到块结束(eob)令牌时,对当前块中的系数的代码化可以终止,并且可以推断块中的剩余系数为零。同样,对eob位置的代码化可以是视频代码化系统中的系数的必要部分。通过使用系数令牌树700,针对量化变换块(诸如,图6中的量化变换块604)的量化系数(例如,图6中的系数608、610)生成二进制数字的字符串。在示例中,nxn块(例如,量化变换块604)中的量化系数被组织成遵循规定的扫描顺序(例如,图6中的扫描顺序602)的1d(一维)阵列(在本文中,为阵列u)。n可以是4、8、16、32或者任何其它值。在1d阵列的第i位置处的量化系数可以被称为u[i],其中,i=0、...、n*n-1。u[i]、...、u[n*n-1]中的最后一个零位的起始位置可以被表示为eob。在1d阵列的最后一个位置(即,u[n*n-1])不为零的情况下,可以将eob设置为值n*n。即,如果1d阵列u的最后一个系数不为零,则可以将eob设置为1d阵列的最后一个位置(即,将eob设置为值n*n)。通过使用图6的示例,1d阵列u可以具有条目u[]=[-6,0,-1,0,2,4,1,0,0,1,0,-1,0,0,0,0]。在u[i]中的每一个处的值是量化变换系数。1d阵列u的量化变换系数在本文中还可以被简称为“系数”或者“变换系数”。在位置i=0处的系数(即,u[0]=-6)与dc系数对应。在图6的示例中,eob等于12,因为在1d阵列u的位置12处的零系数之后,没有非零系数。为了对系数u[i]、...、u[n*n-1]进行编码和解码,对于i=0至n*n-1,在i<=eob的每个位置处生成令牌t[i]。对于i<eob,令牌t[i]可以指示在u[i]处的对应量化变换系数的大小和/或大小范围。在eob处的量化变换系数的令牌可以是eob_token,其是指示1d阵列u在eob位置之后(包括eob位置)不包括任何非零系数的令牌。即,t[eob]=eob_token指示当前块的eob位置。下面的表i提供了根据本公开的实施方式的除了eob_token之外的令牌值及其对应名称的示例的列表。令牌令牌的名称0zero_token1one_token2two_token3three_token4four_token5dct_val_cat1(5,6)6dct_val_cat2(7-10)7dct_val_cat3(11-18)8dct_val_cat4(19-34)9dct_val_cat5(35-66)10dct_val_cat6(67-2048)在一个示例中,量化系数值被取为是带符号的12比特整数。为了表示量化系数值,可以将12比特带符号的值的范围划分为11个令牌(表i中的令牌0至10)以及块结束令牌(eob_token)。为了生成用于表示量化系数值的令牌,可以遍历系数令牌树700。然后,可以如针对图4的熵编码级408描述的那样通过编码器将遍历树的结果(即,比特串)编码成比特流(诸如,图4中的比特流420)。系数令牌树700包括令牌eob_token(令牌702)、zero_token(令牌704)、one_token(令牌706)、two_token(令牌708)、three_token(令牌710)、four_token(令牌712)、cat1(是表i中的dct_val_cat1的令牌714)、cat2(是表i中的dct_val_cat2的令牌716)、cat3(是表i中dct_val_cat3的令牌718)、cat4(是表i中的dct_val_cat4的令牌720)、cat5(是表i中的dct_val_cat5的令牌722)和cat6(是表i中的dct_val_cat6的令牌724)。如可以看出的,系数令牌树将单个量化系数值映射到单个令牌(诸如,令牌704、706、708、710和712中的一个)中。其它令牌(诸如,令牌714、716、718、720、722和724)表示量化系数值的范围。例如,可以用令牌dct_val_cat5—图7中的令牌722来表示值为37的量化变换系数。令牌的基值被定义为其范围内的最小数字。例如,令牌720的基值为19。熵代码化针对每个量化系数识别令牌,并且如果令牌表示范围,则可以通过从量化系数中减去基值来形成残差。例如,可以通过将令牌720和残差值1(即,20减去19)包括在编码视频比特流中来表示值为20的量化变换系数以允许解码器重新构建原始量化变换系数。块结束令牌(即,令牌702)用信号表示:在变换的块数据中,没有剩余的其它非零量化系数。为了通过使用二进制算术代码化引擎(诸如,通过图4中的熵编码级408)来对令牌t[i]进行编码或者解码,可以使用系数令牌树700。从根节点701(即,被标记为a的节点)开始遍历系数令牌树700。遍历系数令牌树生成比特字符串(码字),将使用例如二进制算术代码化将该比特字符串编码到比特流中。该比特字符串是对当前系数(即,正被编码的量化变换系数)的表示。如果当前系数为零,并且剩余变换系数不再有非零值,则将令牌702(即,eob_token)添加到比特流中。例如,对于在图6中的扫描顺序位置11处的变换系数,就是这种情况。另一方面,如果当前系数为非零,或者如果当前块的任何剩余系数之中存在非零值,则将“1”比特添加至码字,并且遍历前进到节点703(即,被标记为b的节点)。在节点b处,测试当前系数以了解其是否等于零。如果是,则采取左侧分支,使得将表示值zero_token的令牌704和比特“0”添加至码字。如果否,则将比特“1”添加至码字,并且遍历前进到节点c。在节点c处,测试当前系数以了解其是否大于1。如果当前系数等于1,则采取左侧分支,并且将表示值one_token的令牌706添加至比特流(即,将“0”比特添加至码字)。如果当前系数大于1,则遍历前进到节点d以与值4相比较来检查当前系数的值。如果当前系数小于或者等于4,则遍历前进到节点e,并且将比特“0”添加至码字。在节点e处,可以进行针对等于值“2”的测试。如果为真,则将表示值“2”的令牌706添加至比特流(即,将比特“0”添加至码字)。否则,在节点f处,对照值“3”或者值“4”测试当前系数,并且令牌710(即,将比特“0”添加至码字)或者令牌712(即,将比特“1”添加至码字)根据需要被添加到比特流等。本质上,在遍历到左边的子节点时,将“0”比特添加至码字,而在遍历到右边的子节点时,将“1”比特添加至码字。当从压缩比特流对码字进行解码时,解码器进行相似的过程。解码器从比特流读取一比特。如果该比特为“1”,则向右遍历系数令牌树,而如果该比特为“0”,则向左遍历该树。然后,解码器读取下一比特,并且重复该过程,直到对树的遍历到达叶节点(即,令牌)。作为一个示例,为了对令牌t[i]=three_token进行编码,从根节点(即,根节点701)开始,对二进制字符串111010进行编码。作为另一示例,对码字11100进行解码产生令牌two_token。注意,“0”比特和“1”比特与左边的子节点和右边的子节点之间的对应仅仅是用于描述编码过程和解码过程的约定。在一些实施方式中,可以使用不同的约定,例如,在一个约定中,“1”与左边的子节点相对应,而“0”与右边的子节点相对应。只要编码器和解码器都采用相同的约定,本文所描述的过程就适用。由于eob_token仅在非零系数之后有可能,因此,当u[i-1]为零时(即,当在1d阵列u的位置i-1处的量化变换系数等于零时),解码器可以推断第一比特一定是1。第一比特必须是1,因为在遍历树时,对于在零变换系数(例如,在图6中的之字形扫描顺序位置1处的变换系数)之后的变换系数(例如,在图6中的之字形扫描顺序位置2处的变换系数),遍历必定从根节点701移动至节点703。同样,可以使用二进制标志checkeob来指令编码器和解码器跳过对从系数令牌树700中的根节点开始的第一比特进行编码和解码。实际上,当二进制标志checkeob为0时(即,指示不应该检查根节点),跳过系数令牌树700的根节点701,并且节点703成为系数令牌树700的针对遍历要访问的第一个节点。即,当跳过根节点701时,编码器可以跳过编码,并且解码器可以跳过解码,并且可以推断出已编码的字符串的第一比特(即,二进制比特“1”)。在开始对块进行编码或者解码时,可以将二进制标志checkeob初始化为1(即,指示应该检查根节点)。以下步骤说明了对n×n的块中的量化变换系数进行解码的示例过程。在步骤1中,将二进制标志checkeob设置为零(即,checkeob=0),并且将索引i也设置为零(即,i=0)。在步骤2中,1)如果二进制标志checkeob等于1,则使用全系数令牌树(即,从系数令牌树700的根节点701开始)来解码令牌t[i],或者2)如果checkeob等于0,则使用跳过eob_token的部分树(例如,从节点703开始)来解码令牌t[i]。在步骤3中,如果令牌t[i]=eob_token,则将量化变换系数u[i]、...、u[n*n-1]全部设置为零,并且解码过程终止;否则,若必要(即,当t[i]不等于zero_token时),可以对额外的比特进行解码,并且重新构建u[i]。在步骤4中,如果u[i]等于零,则将二进制标志checkeob设置为1,否则,将checkeob设置为0。即,可以将checkeob设置为值u[i]!=0。在步骤5中,递增索引i(即,i=i+1)。在步骤6中,重复步骤2至5,直到已经对所有量化变换系数进行了解码(即,直到索引i=n*n),或者直到对eob_token进行了解码。在上面的步骤2中,对令牌t[i]进行解码可以包括以下步骤:确定上下文ctx,从上下文ctx确定二进制概率分布(即,模型),以及通过使用确定的概率分布使用布尔算术代码来对从系数令牌树700的根节点到叶节点的路径进行解码。可以通过使用上下文推导方法来确定上下文ctx。上下文推导方法可以使用以下中的一个或者多个来确定上下文ctx:块大小、平面类型(即,亮度或者色度)、位置i和先前被解码的令牌t[0]、...、t[i-1]。可以使用其它标准来确定上下文ctx。针对系数令牌树700的任何内部节点,当checkeob=1时可以从根节点701开始,或者当checkeob=0时从节点703开始确定二进制概率分布。在一些编码系统中,在给定上下文ctx的情况下用于对令牌t[i]进行编码或者解码的概率可以是固定的并且不适用于图片(即,帧)。例如,概率可以是针对给定上下文ctx定义的默认值,或者可以对概率进行代码化(即,信号表示)作为该帧的帧报头的一部分。在对帧进行代码化时对针对每个上下文的概率进行代码化会是昂贵的。同样,编码器可以针对每个上下文分析在帧报头中对上下文的关联概率进行代码化是否有益,并且通过使用二进制标志来向解码器以信号指示其决策。此外,对针对上下文的概率进行代码化可以使用预测来降低成本(例如,以比特率),其中,可以从先前被解码的帧中的相同上下文的概率导出预测。在一些编码系统中,当对新符标进行解码或者编码时,可以使在给定上下文ctx的情况下的概率适用于图片(即,帧)。可以使用各种适应方法。适应方法的示例包括:拉普拉斯估计器、krichevsky-trofimov估计器、good-turing估计器、基于iir(无限脉冲响应)滤波器的估计器和基于有限状态机的估计器。图8是根据本公开的实施方式的、用于将eob位置二值化的树800的示例的示意图。实施对eob位置进行代码化的笛卡尔坐标方法的代码化系统可以使用树800。在笛卡尔坐标方法中,可以将eob位置代码化为块位置。同样,但是与上面描述的交织方法不同,对eob位置进行代码化独立于扫描顺序。对于一个这样的大小为nxn的当前块:最后一个有效系数根据在当前块中的给定扫描顺序而在块位置(eob_x,eob_y),eob_x指示列编号,而eob_y指示行编号。例如,并且参照图6,最后一个非零量化变换系数628在块位置(2,2)。在交织方法中,一旦识别到eob块位置(eob_x,eob_y),对列编号eob_x和行编号eob_y进行代码化就独立于可以用于代码化过程的其它方面的任何扫描顺序。视频代码化系统可以使用树800,该视频代码化系统使用二值化、上下文建模和二进制算术代码化的步骤来对量化变换系数进行编码和解码。该过程可以被称为上下文自适应二进制算术代码化(cabac)。例如,为了对量化变换系数x进行代码化,代码化系统可以执行下面的步骤。量化变换系数x可以是图6中的量化变换块604的任何系数(例如,系数608)。类似地对列编号eob_x和行编号eob_y两者执行下面的步骤。为了简单起见,只描述针对列编号eob_x的步骤。在二值化步骤中,首先通过使用树800来将eob系数的列编号eob_x二值化为二进制字符串。遍历二进制树800以生成与列编号eob_x相对应的二进制字符串前缀。例如,对于为三(3)的列编号eob_x,通过遍历二进制树800产生的前缀为与节点802相对应的1110。作为另一示例,如果列编号eob_x为四(4)或者五(5),则所产生的前缀为与节点804相对应的11110。在节点804的情况下,还生成后缀以指示列编号eob_x为4(即,后缀0)还是5(即,后缀1)。同样,如果列编号eob_x为四,则代码为二进制字符串111100,并且如果列编号eob_x为五,则代码为二进制字符串111101。在上下文推导步骤中,对于要代码化的每个位元(bin),导出上下文。可以从诸如以下中的一个或者多个的信息导出上下文:块大小、平面类型(即,亮度或者色度)、系数x的块位置以及先前被解码的系数(例如,左边的和/或上面的相邻系数(若可用))。其它的、更多的或者更少的信息可以用于导出上下文。在二进制算术代码化步骤中,给定上下文,通过使用例如二进制算术代码化引擎来将位元连同与该上下文相关联的概率值一起代码化成二进制码字。如上所述,笛卡尔坐标方法和交织方法使用不同的方法来对eob位置进行代码化。笛卡尔坐标方法直接对块位置(eob_x,eob_y)进行代码化。交织方法将对last_sig_flag(指示有效系数是否是最后一个有效系数)的代码化与sig_flag_coding(指示系数是否是有效系数)交织。在变换块为稀疏并且具有相对少的非零系数的情况下,交织方法会更有效率。例如,如果变换块只包括在块位置(4,5)处的一个非零系数,则交织方法恰好对一个last_sig_flag进行编码和解码;另一方面,笛卡尔坐标方法对12个位元(即,二元决策)进行编码和解码。如上面针对图8描述的,12个位元与对二进制字符串111100(即,eob_x=4)和111101(即,eob_y=5)的编码相对应。另一方面,在块包括相对大数量的非零系数的情况下,笛卡尔坐标方法会更有效。例如,在最坏的情况下(即,在块的每个系数都不为零的情况下),对于16x16的块,待通过使用交织方法来对其进行代码化的last_sig_flag的数量为255。另一方面,通过使用笛卡尔坐标方法,针对16x16的块中的eob位置要代码化的位元的数量是与块位置(15,14)或者(14,15)相对应的位元的数量。注意,如上所述,如果eob处于(15,15),则不需要对last_sig_flag进行代码化。通过使用树800,值14和15分别被二值化为前缀字符串11111110以及后缀10和11或者二进制字符串1111111010和1111111011。这引起对总共20个位元进行代码化。由此,在最坏的情况下,笛卡尔坐标方法在计算上没有交织方法那么复杂。图9是根据本公开的实施方式的、对系数变换块的最后一个非零系数的位置进行编码的过程900的流程图。过程900可以根据扫描顺序来对变换块的系数进行编码。替选地,过程900可以由对变换块的系数进行编码的另一过程调用或者嵌入在该另一过程中。过程900对有关eob位置的信息进行编码。可以在编码器(诸如,图4中的编码器500)中实施过程900。例如,过程900可以实施为可以由计算装置(诸如,发送站102)执行的软件程序。该软件程序可以包括机器可读指令,这些机器可读指令可以存储在存储器(诸如,存储器204或者辅助存储214)中,并且可以由处理器(诸如,cpu202)执行以使计算装置执行过程900。在至少一些实施方式中,可以全部或者部分地通过图4中的编码器400的熵编码级408来执行过程900。参照图10来描述过程900。图10是根据本公开的实施方式的扫描顺序1000和块1050的示例。块1050可以是量化变换系数的块。扫描顺序1000可以如针对图6中的扫描顺序602所述。例如,扫描索引1002指示块1050的系数1052(即,在位置(6,0)处的系数)处于扫描索引值21,扫描索引1004指示块1050的系数1054(即,在位置(2,2)处的系数)处于扫描索引值12,并且扫描索引1006指示块1050的系数1056(即,在位置(6,2)处的系数)处于扫描索引值37。给定扫描顺序1000的情况下,系数1056是块1050的最后一个非零系数。即,与扫描索引1006相对应的系数(即,扫描索引值37)是最后一个非零系数。在902中,过程900确定最后一个非零系数的位置。如在本公开中使用的,“确定”是指选择、构造、确定、指定、识别、接收或者任何方式的其它确定。最后一个非零系数的位置可以如针对上述块位置(eob_x,eob_y)所述。同样,该位置包括列值(例如,指示eob系数的列编号的eob_x)。该位置包括行值(例如,指示eob系数的行编号的eob_y)。在本文中,列值和列编号可以互换使用;并且行值和行编号可以互换使用。在一个示例中,过程900可以根据扫描顺序(例如,扫描顺序1000)来扫描块(例如,块1050)的系数以确定最后一个非零系数。一旦识别到最后一个非零系数,就确定了最后一个非零系数的位置。在另一示例中,过程900可以通过从另一模块、代码化级、过程等接收最后一个非零系数的位置来确定该位置。在904中,过程900对系数变换块的非零系数进行编码。非零系数位于变换块的系数列和系数行。在一个示例中,过程900可以不对非零系数进行编码,而仅接收系数列和系数行。接收可以是指生成、确定或者以任何方式接收。例如,在对系数(例如,处于扫描顺序值23的系数)进行编码之后或者之前,过程900可以接收系数列(即,4)和系数行(即,2)。在906(下面针对图11中的序列1118至1126进一步描述的)中,响应于确定非零系数是要在系数列中编码的第一非零系数,过程900对该系数列是否等于最后一个非零系数的列值进行编码。在908(下面针对图11中的框1118进一步描述的)中,响应于确定非零系数不是要在系数列中编码的第一非零系数,过程900跳过对系数列是否等于最后一个非零系数的列值进行编码。在910(下面针对图11中的序列1128至1136进一步描述的)中,响应于确定非零系数是要在系数行中编码的第一非零系数,过程900对系数行是否等于最后一个非零系数的行值进行编码。在912(下面针对图11中的框1128描述的)中,响应于确定非零系数不是要在系数行中编码的第一非零系数,过程900跳过对系数行是否等于最后一个非零系数的行值进行编码。在过程900的一个示例中,系数变换块是通过使用帧内预测所预测的残差块的变换块。即,可以与帧内预测的块而不是帧间预测的块一起使用过程900。在一个示例中,系数变换块是亮度颜色分量块的变换块。即,该过程可以用于亮度块,但是不能用于色度。在一个示例中,可以与某些块大小而不是其它块大小一起使用过程900。例如,过程900可以用于大小为4×4的变换块,但是不能用于更大的变换块。如在图9中示出的改进的、对最后有效系数标志的代码化的其它实施方式是可用的。在实施方式中,可以添加改进的、对最后有效系数标志的代码化的附加元素,可以组合某些元素,和/或可以去除某些元素。图11是根据本公开的实施方式的、通过使用笛卡尔坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程1100的流程图。过程1100只对包括非零变换系数的列是否是包括最后一个非零系数的列进行一次代码化(即,编码或者解码)。过程1100只对包括非零变换系数的行是否是包括最后一个非零系数的行进行一次代码化(即,编码或者解码)。过程1100可以由根据扫描顺序来对变换块的系数进行代码化的过程使用,或者与该过程结合使用。过程1100中的笛卡尔坐标系可以使其原点位于变换块的dc系数处。笛卡尔坐标系的维度是行和列。变换块的变换系数遵循行值和列值被布置。例如,在变换块1050中,各个行具有行值0至7,并且各个列具有值0至7;系数1054处于列值2和行值2。最后一个非零系数(例如,图10中的系数1056)的位置包括列值(例如,列值6)和行值(例如,行值2)。如上所述,可以按照扫描顺序确定最后一个非零系数。即,如果根据扫描顺序1000来扫描变换块1050的系数,则系数1056是最后一个非零系数。如果例如,使用不同于扫描顺序1000的扫描顺序,则可以将不同的系数(即,不同于系数1056)识别为最后一个非零系数。可以在编码器(诸如,图4中的编码器400)中实施过程1100。例如,过程1100可以实施为可以由计算装置(诸如,发送站102)执行的软件程序。该软件程序可以包括机器可读指令,这些机器可读指令可以存储在存储器(诸如,存储器204或者辅助存储214)中,并且可以由处理器(诸如,cpu202)执行以使计算装置执行过程1100。在至少一些实施方式中,可以全部或者部分地通过图4中的编码器400的熵编码级408来执行过程1100。可以在解码器(诸如,图5中的解码器500)中实施过程1100。例如,过程1100可以实施为可以由计算装置(诸如,接收站106)执行的软件程序。该软件程序可以包括机器可读指令,这些机器可读指令可以存储在存储器(诸如,存储器204或者辅助存储214)中,并且可以由处理器(诸如,cpu202)执行以使计算装置执行过程1100。在至少一些实施方式中,可以全部或者部分地通过图5中的解码器500的熵解码级502来执行过程1100。当通过编码器实施时,“编码”是指在编码比特流(诸如,图4中的压缩比特流420)中进行编码。当通过解码器实施时,“编码”是指从编码比特流(诸如,图5中的压缩比特流420)中进行解码。在下面的描述中,假设大小为nxn的块(例如,变换块1050);然而,该块也可以是大小为mxn的矩形块,其中,m和n不相等。一维阵列u如针对图6所述。由此,u[i]指示在按照给定扫描顺序(例如,图10中的扫描顺序1000)的第i扫描位置处的变换系数。例如,u[21](即,在扫描位置21处的系数(即,扫描索引1002)的值)是系数值-1(即,系数1052)。对于扫描索引(即,扫描顺序1000的值),阵列扫描可以在块1050中提供对应的列编号和行编号。同样,scan[i]指示从扫描位置i到块位置的映射。块位置可以是包括系数的列编号和行编号的元组(即,(ci,ri),其中,ci表示列号或者列值;而ri表示行号或者行值)。例如,scan[37]可以提供元组(6,2)。可以通过不同于扫描阵列的手段来提供从扫描索引到块位置的映射。例如,将扫描索引当作输入的函数(等)可以提供(例如,返回)块位置。元组(eob_c,eob_r)表示按照给定扫描顺序的、当前块中的最后一个有效系数的块位置(即,列值和行值)。同样,并且参照图10,通过元组(6,2)给出(eob_c,eob_r)。在1102中,过程1100将行集合r初始化为空集合,并且将列集合c初始化为空集合。行集合r保持对过程1100已经访问过的行(即,行值)的追踪。列集合c保持对过程1100已经访问过的列(即,列值)的跟追。在该上下文中,被访问过的行意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数在与当前非零系数相同的行中。在该上下文中,被访问过的列意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数在与当前非零系数相同的列中。例如,在扫描顺序1000中,当处理扫描索引1010(即,扫描索引值3)(即,与系数1060相对应)时,确定已经访问了行0(即,行集合r包括行0),因为已经确定另一非零系数(即,与扫描索引1008相对应的系数1058)在相同的行(即,行0)中:系数1058和1060二者在相同的行0中,并且在扫描顺序中,在系数1060之前处理系数1058。在1104中,将扫描位置i初始化为零;并且将标志eob_c_found和eob_r_found设置为假(即,值零)。扫描位置i用作对一维阵列u的索引。标志eob_c_found指示是否已经处理了在与块结束系数相同的列中的变换系数(即,根据扫描顺序访问过)。标志eob_r_found指示是否已经处理了在与块结束系数相同的行中的变换系数。在1106中,过程1100对与扫描索引u[i]相对应的系数是零系数还是非零系数进行代码化,并且可以将sig[i]设置为该系数是零系数还是非零系数。sig数据结构(例如,阵列、标志等)指示在扫描索引i处的系数是否为零。在该示例中,用值一(1)来指示非零系数(即,sig[i]=1)。然后,其它值也是可能的。如上面指示的,当在编码器中实施时,对与扫描索引u[i]相对应的系数为零还是为非零进行代码化可以是指将指示系数为零还是为非零的语法元素(例如,0比特或者1比特)输出到编码比特流中。当在解码器中实施时,对与扫描索引u[i]相对应的系数为零还是为非零进行代码化可以是指从编码比特流读取指示系数为零还是为非零的语法元素(例如,0比特或者1比特)。在1108中,如果系数不是非零系数(即,sig[i]=1),则过程1100继续至1110;否则,过程1100继续至1116。换句话说,如果在扫描索引i处的系数为零,则过程1100在1110处进行确定是否要处理下一系数;否则,过程1100进一步处理当前系数。在1110中,如果已经处理了变换块的所有系数(即,扫描位置i=n*n-1),或者如果当前系数是块结束系数(即,如果ci=eob_c并且ri=eob_r),则过程1100终止;否则,过程在1112处继续。在1112中,过程1100使扫描位置i递增以处理下一系数。在1116中,过程1100确定在扫描位置i处的变换系数的列值(即,ci)和行值(即,ri)。可以通过使用上面描述的阵列扫描来确定列值和行值。由此,在1116中,确定元组(ci,ri)。在1117中,过程1100处理由序列1118至1126和序列1128至1136给出的两个分支。在一个示例中,可以按顺序处理这两个分支。在另一示例中,可以并行处理这两个分支。在1118中,如果尚未找到最后一个非零系数的列(即,eob_c_found=0)并且当前系数的列(即,列值ci)尚未被访问(即,列值ci不包括在列集合c)中,则过程1100继续至1120;否则,跳过序列1118至1126。在1120中,过程1100可以对标志last_eob_c_flag进行代码化。标志last_eob_c_flag指示当前非零系数的列是否是最后一个非零系数的列。例如,当由编码器实施时,过程1100可以对值ci=eob_c进行编码。由此,可以对与布尔值ci=eob_c相对应的比特进行编码。当在解码器中实施时,过程1100可以对通过其可以设置标志last_eob_c_flag的语法元素进行解码。当当前系数的列与最后一个非零系数的列不同时,可以对零(0)进行代码化。否则,对一(1)进行代码化。同样,如上所述,当由编码器实施时,进行代码化是指在编码比特流中进行编码;并且当由解码器实施时,进行代码化是指从编码比特流中进行解码。在1122中,将列值ci添加至列集合c以指示已经访问了列值ci,使得当访问具有列值ci的另一非零变换系数时/如果访问了具有列值ci的另一非零变换系数,过程1100可以跳过序列1118至1126,并且因此,跳过对指示列值ci是否包括块的最后一个非零变换系数的另一值进行代码化(在1120中)。在1124中,如果列值ci等于最后一个非零系数的列值(即,当ci=eob_c时,或者等效地,当last_eob_c_flag=1时),则过程1100将标志eob_c_found设置为真(例如,eob_c_found=1)(在1126中)。当由解码器实施时,在1126中,过程1100还可以记录列值ci是最后一个非零系数的列值(即,eob_c)。当完成1117的两个分支时,过程1100然后继续至1110。在序列1128至1136中,过程1100执行与分支1118至1136的那些步骤相似的步骤。除了分别使用eob_r_found、行值ri和行集合r来代替eob_c_found、列值ci和列集合c之外,框1128可以与框1118相同。除了以下之外框1130可以与框1120相同:代替对last_eob_c_flag进行代码化,过程1100对指示当前非零系数的行是否是最后一个非零系数的行的last_eob_r_flag进行代码化。除了使用行集合r和行值ri而不是列集合c和列值ci之外,框1132可以与框1122相同。除了以下之外框1134可以与框1124相同:代替将列值ci与eob_c相比较,将行值ri与最后一个非零系数的行值eob_r相比较。除了以下之外框1136可以与框1126相同:代替设置eob_c_found标志,设置eob_r_found标志,并且当由解码器实施时,过程1100还可以记录行值ri是最后一个非零系数的行值(即,eob_r)。替选地,可以如下陈述过程1100:步骤1:将两个空集合r和c初始化。此外,初始化i=0、eob_c_found=0和eob_r_found=0。步骤2:对(u[i]!=0)进行编码或者解码,即,在扫描位置i处的significant_coef_flagsig[i]。步骤3:如果sig[i]=1,则确定(ci,ri)=scan[i],并且进行以下操作。a.如果eob_c_found=0并且如果则对指示(eobc=ci)与否的last_eob_c_flag进行编码或者解码,并且设置c=c∪{ci}。如果eobc等于ci(即,last_eob_c_flag=1),则设置eob_c_found=1,并且记录eobc(在解码器中)。b.如果eob_r_found=0并且如果则对指示(eobc=ci)与否的last_eob_r_flag进行编码或者解码,并且设置r=r∪{ri}。如果eobr等于ri(即,last_eob_r_flag=1),则设置eob_r_found=1,并且记录eobr(在解码器中)。步骤4:使i增加1。步骤5:重复步骤2至4,直到满足以下两个条件中的任何一个:i=n*n,或者eobc=ci-1,并且eobr=ri-1下面的表1图示了过程1100的分支1117根据扫描顺序1000来处理块1050的非零系数的结果。如上面指示的,给定扫描顺序1000,最后一个非零系数是系数1056。通过使用扫描顺序1000,一维阵列u包括值u[0-37]={8,2,3,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,-1,2,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1}。值u[0-37]是u阵列的、直到且包括最后一个非零系数(即,系数1056)的子集。值u[0-37]包括11个非零系数。如从表1可以看出的,对last_eob_c_flag进行了四(4)次代码化,并且对last_eob_r_flag进行了四(4)次代码化。对比之下,实施交织方法的系统进行11次代码化,无论非零系数是否是最后一个非零系数;并且实施笛卡尔坐标方法的系统通过使用基于上下文的代码化来对七个位元1111100(即,列值6)和三个位元110(即,行值2)进行代码化。在一个实施方式中,当列集合c包括n-2个元素(即,列集合c的势|c|等于n-1)时,过程1100可以跳过在1120处对标志last_eob_c_flag进行代码化。如果列集合c包括n-1个元素,并且过程1100处于框1120,则必然列集合c中的n-1个列值都不包括最后一个非零系数。取决于扫描顺序,可能不一定按照相继顺序添加列集合c中的列索引。即,在一些扫描顺序中,可以在更小的索引之前添加更大的索引。此外,由于过程1100处于1120,因此,必然列值ci包括至少一个非零系数(因为在框1108中,sig[i]=1)。同样,可以推断当前列(该当前列也是在列集合c之外的最后一个剩余列)包括块的最后一个非零系数。由此,可以跳过对last_eob_c_flag进行代码化。同样,当行集合r包括n-1个元素(即,行集合r的势|r|等于n-1)时,过程1100可以跳过在1130中对标志last_eob_r_flag进行代码化。在nxn块的每个系数都是非零系数的情况下,根据本公开的实施方式对n-1个last_eob_c_flag(即,每一列一个标志)和n-1个last_eob_r_flag(即,每一行一个标志)进行代码化(编码和/或解码)。作为对比,交织方法对n*n-1个last_sig_flag(即,每一个非零系数一个标志)进行代码化。如果n=4,则笛卡尔坐标方法对6个位元(针对列值和行值中的每一个为3个位元)进行代码化;如果n=8,则对12个位元进行代码化;如果n=16,则对18个位元进行代码化;如果n=32,则对24个位元进行代码化。下面的表2总结了针对n的不同值的最坏情况复杂度(即,值的数量)。n交织方法笛卡尔坐标方法根据本公开的实施方式4156686312141625518303210232463如表2图示的,就如在nxn块中要编码和解码的最大数量的位元中测得的最坏情况复杂度而言,根据本公开的实施方式可以提供优于交织方法的改进。如上所述,表2指出:在最坏情况复杂度下,根据本公开的实施方式与交织方法之间的差异随着块大小的增加而增大。另外,如上所述,对于稀疏的变换块而言,交织方法更好地起作用。同样,根据本公开的实施方式可以选择性地选择编码方法(即,在本文公开的方法与交织方法之间)。例如,对于小的块(例如,4x4块),可以使用交织方法来对eob位置进行代码化(即,编码和/或解码),而对于更大的块(例如,8x8块或者更大),可以使用如本文公开的方法。在另一示例中,选择使用哪种方法可以取决于颜色分量。例如,对于亮度块,可以使用如本文公开的方法,而对于色度块(色度块通常是稀疏的),可以使用笛卡尔坐标方法或者交织方法。在再一示例中,选择可以取决于图片类型和/或代码化模式。例如,对于帧内编码的块,可以使用如本文公开的方法,而对于帧间编码的块,可以使用笛卡尔坐标方法或者交织方法。在另一示例中,选择可以取决于来自先前被解码的块的统计,从而使选择适应于数据本身。在另一示例中,可以在图片/帧报头中用信号指示选择,并且对于在图片/帧内的块,使用那些块的以信号指示的选择。图12是根据本公开的实施方式的、通过使用笛卡尔分组坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程1200的流程图。在笛卡尔分组坐标系中,将变换块的列值分组成列组,并且将变换块的行值分组成行组。过程1200可以通过指示在列值的组内包括列值和索引的列组来对最后一个非零系数的列值进行代码化。过程1200对包括非零变换系数的列组是否包括该非零变换系数进行代码化。过程1200可以共享过程1100的各个方面。对于过程1200中被编号为过程1100中的框的那些框,省略了描述。在一个示例中,在变换块包括相对大数量的非零变换系数的情况下,可以使用过程1200。即,当变换块较稠密时,可以使用过程1200。在一个示例中,当块中的非零变换系数的数量超过给定阈值时,可以执行过程1200以对变换块的最后一个非零系数的位置进行代码化;否则,可以执行过程1100或这本文公开的另一过程。替选地,一个实施例可以包含过程1100和1200。因此,当非零变换系数的数量超过给定阈值时,可以执行过程1200的独特方面;否则,可以实施过程1100的独特方面。在稠密的变换块的情况下,过程1200可以提供优于过程1100的代码化改进。过程1200可以在最坏情况复杂度上(上面描述的)匹配或者接近笛卡尔坐标方法的性能。为了说明列组和行组,对于大小为nxn的块,用p表示从编号{0,...,n-1}到组编号{0,1,...,g-1}的映射,其中,g是组的编号。在一个示例中,可以针对列值定义第一映射,并且可以针对行值定义第二映射。在n≤32的一个示例中,可以通过下式给出映射p:p(i)=iifi<4p(i)=4if4≤i<6p(i)=5if6≤i<8p(i)=6if8≤i<12p(i)=7if12≤i<16p(i)=8if16≤i<24p(i)=9if24≤i<32通过使用上述映射,可以将列值15(即,12≤i<16)映射至列组编号7(即,p(15)=7);可以将行值3(即,i<4)映射至行组编号3(即,p(3)=3)。更多的或者更少的组可以是可用的。组的数量可以取决于块大小。在n=64的一个示例中,可以将上述映射扩展为包括:p(i)=10if32≤i<48p(i)=11if48≤i<64通过使用上述映射,图10中的系数1056映射至列组编号5,并且在列组编号5内的第0列中。列组编号5包括块1050的列6和列7。不同的映射可以是可用的。就对与块结束系数有关的语法元素进行代码化的次数而言,不同的映射会引起不同的最坏情况复杂度。现在解释过程1200与过程1100之间的差异。虽然在图12中未示出,但是过程1200可以确定最后一个非零系数的列组eobc和行组eobr。在1202中,过程1200将列组集合c初始化为空集合,并且将行组集合r初始化为空集合。列组集合c保持对过程1200已经访问过的列组的追踪。在该上下文中,被访问过的列组意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数在与当前非零系数相同的列组中。例如,在扫描顺序1000中,当处理扫描索引值23(即,与在块位置(4,2)处的系数值1相对应)时,确定已经访问了列组编号4(即,列组集合c包括列组编号4),因为已经确定另一非零系数(即,在与扫描索引值22相对应的块位置(5,1)处的系数)在相同的列组(即,列组4)中。行组集合r保持对过程1200已经访问过的行组的追踪。在该上下文中,被访问过的行组意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数在与当前非零系数相同的行组中。在图12中的框1116之后,过程1200继续至1217。在1217中,过程1200处理由序列1218至1227和序列1228至1237给出的两个分支。在一个示例中,可以按顺序处理这两个分支。在另一示例中,可以并行处理这两个分支。在1218中,如果尚未找到最后一个非零系数的列组(即,eob_c_found=0)并且包括当前系数的列值的列组(即,列组p(ci))尚未被访问(即,列组值p(ci)不包括在列组集合c)中,则过程1200继续至1120。否则,跳过序列1220至1127。在1220中,过程1200可以对标志last_eob_c_flag进行代码化。标志last_eob_c_flag指示当前非零系数的列组是否是包括最后一个非零系数的列组。例如,当由编码器实施时,过程1200可以对值p(ci)=p(eobc)进行代码化。当在解码器中实施时,过程1100可以对通过其可以设置标志last_eob_c_flag的语法元素进行解码,。当当前系数的列组与最后一个非零系数的列组不同时,可以对零(0)进行代码化;否则,对一(1)进行代码化。此外,如上所述,当由编码器实施时,进行代码化是指在编码比特流中进行编码;并且当由解码器实施时,进行代码化是指从编码比特流中进行解码。在1222中,将列组值p(ci)添加至列集合c以指示已经访问了列组p(ci),使得当访问具有列组值p(ci)的另一变换系数时/如果访问了具有列值p(ci)的另一变换系数,过程1200可以跳过序列1220至1227,并且因此,跳过对指示列组p(ci)是否包括块的最后一个非零变换系数的另一值进行代码化(在1220中)。在1224中,如果列组值p(ci)等于最后一个非零系数的列组值(即,当p(ci)=p(eob_c)时,或者等效地,当last_eob_c_flag=1时),则过程1200将标志eob_c_found设置为真(例如,eob_c_found=1)(在1226中)。当由解码器实施时,在1226中,过程1200还可以记录列组值p(ci)是最后一个非零系数的列组值(即,p(eobc))。在1227中,过程1200在p(ci)≥4时对附加比特进行代码化以重新构建最后一个非零系数的列eobc。例如,并且参照图10,由于最后一个非零系数(即,系数1056)在列组编号5(根据上述映射,该列组编号5包括列值6和7)中,并且在该组内的第一列中,因此,过程1200可以对附加比特(例如,值零(0))进行代码化。在1227中被代码化的附加比特可以取决于组中的列的数量。当完成1217的两个分支时,过程1200然后继续至1110。在序列1228至1237中,过程1200执行与分支1218至1237的那些步骤相似的步骤。除了使用eob_r_found、行组p(ri)和行组集合r来代替eob_c_found、列组p(ci)和列组集合c之外,框1228可以与框1218相同。除了以下之外框1230可以与框1220相同:代替对last_eob_c_flag进行代码化,过程1200对指示当前非零系数的行组是否是最后一个非零系数的行组的last_eob_r_flag进行代码化。除了使用行组集合r和行组值p(ri)而不是列组集合c和列组值p(ci)之外,框1232可以与框1222相同。除了以下之外框1234可以与框1224相同:代替将列组值p(ci)与最后一个非零系数的列组值(p(eobc))相比较,将行组值p(ri)与最后一个非零系数的行组值(p(eobr))相比较。除了设置标志eob_r_found以代替设置标志eob_c_found之外,框1236可以与框1226相同。除了对附加比特进行代码化以重新构建最后一个非零系数的行之外,框1237可以与框1227相同。图13是根据本公开的实施方式的、通过使用极坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程1300的流程图。过程1300与上面描述的过程1100和1200相似。然而,过程1300使用极坐标系。针对图15和图10中的块1050进一步解释过程1300中的极坐标系。图15是根据本公开的实施方式的极坐标系1500的示例。图15复制了图10中的扫描顺序1000。极坐标系1500可以以原点和对角线为特征。在一个示例中,原点可以是块1050的dc系数(即,系数1058)。即,原点可以与扫描索引值0(即,扫描索引1504)相对应。如上面指示的,图10中的块1050的每个系数都位于笛卡尔位置(列、行)处。例如,系数1056在笛卡尔位置(6,2)处。极坐标系1500的反对角线可以是这样的线:块1050的具有相同的值col+row的系数被认为在同一反对角线上。例如,反对角线1502包括col+row=1的那些系数。由此,与扫描索引值一(1)(与在块位置(0,1)处的系数相对应)和扫描索引值二(2)(与在块位置(1,0)处的系数相对应)相对应的系数在同一反对角线上(即,反对角线1502)。作为另一示例,反对角线1506包括块1050的col+row=4的那些系数。由此,反对角线1506包括在扫描位置10、11、12、13和14处的系数,该扫描位置10、11、12、13和14分别与在笛卡尔位置(4,0)、(3,1)、(2,2)、(1,3)和(0,4)处的系数相对应。同样,反对角线1508包括块1050的col+row=8的那些系数。由此,反对角线1508包括在扫描位置36、37、38、39、40、41和42处的系数,该扫描位置36、37、38、39、40、41和42分别与在笛卡尔位置(7,1)、(6,2)、(5,3)、(4,4)、(3、5)、(2、6)和(1,7)处的系数相对应。在极坐标系1500中,通过反对角线来描述系数,该反对角线包括系数和系数在对角线上的位置。即,可以用元组(反对角线,位置)来描述系数。在一个示例中,可以通过系数行编号给出位置。在另一示例中,可以通过系数的列编号来给出位置。描述位置的其它选项也可以是可用的。由此,可以通过使用元组(eobd,eoba)来描述变换块中的最后一个非零系数(例如,与图10中的扫描索引1006相对应的系数1056)的位置。可以通过eobd=6+2=8给出系数1056的反对角线。在系数的列编号用于位置eoba的情况下,可以用元组(8,6)来描述系数1056。在系数的行编号用于位置eoba的情况下,可以用元组(8,2)来描述系数1056。在下面的描述中,假设通过系数行编号给出沿着反对角线的位置。针对dc位置作为原点,可以将极坐标系1500视为极坐标系的离散形式。虽然在图13中未示出,但是过程1300可以确定最后一个非零系数的反对角线eobd和位置eoba。在给定扫描顺序的情况下,过程1300对包括非零系数的反对角线是否是包括块的最后一个非零系数的反对角线进行一次代码化。对于在包括最后一个非零系数的反对角线上的当前非零系数,过程1300对当前非零系数是否是最后一个非零系数进行代码化(或者可以推断当前非零系数是否是最后一个非零系数)。过程1300包括一些与图11中的过程1100的那些框相同的框。为了简单起见,省略了对被类似地编号的框的描述。在1302中,过程1300将对角线集合d初始化为空集合。对角线集合d保持对过程1300已经访问过的反对角线的追踪。在该上下文中,被访问过的反对角线意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数包括在与当前非零系数相同的反对角线中。例如,在扫描顺序1000中,当处理扫描索引值2(即,与在块位置(1,0)处的系数值3相对应)时,确定已经访问了反对角线1(即,1+0)(即,对角线集合d包括具有值2的反对角线),因为已经确定另一非零系数(即,在与扫描索引值1相对应的块位置(0,1)处的系数)包括在反对角线中(即,反对角线值1)。在1304中,将扫描位置i初始化为零;并且分别将标志eob_d_found和eob_a_found设置为假(即,值零)。扫描位置i用作对一维阵列u的索引。标志eob_d_found指示是否已经处理了在与块结束系数相同的反对角线上的变换系数(即,根据扫描顺序访问过)。标志eob_a_found指示当前变换系数在最后一个非零系数的反对角线上的位置是否是最后一个非零系数的位置。在1317中,过程1300计算当前系数的反对角线值。当前系数是变换块的与扫描位置i的扫描索引值相对应的系数。通过使用在1116中确定的列值(即,ci)和行值(即,ri),过程1300将当前反对角线di计算为di=ci+ri。在1318中,如果过程1300确定:还未确定包括最后一个非零系数的反对角线(即,标志eob_d_found=0)并且还未访问当前反对角线di(即,值di不在集合d中),则过程1300继续至1320;否则,过程1300继续至1328。在1320中,过程1300对标志last_eob_d_flag进行代码化。标志last_eob_d_flag指示当前非零系数的反对角线是否是最后一个非零系数的反对角线。例如,当由编码器实施时,过程1300可以对值di=eobd进行代码化。当在解码器中实施时,过程1300可以对通过其可以设置标志last_eob_d_flag的语法元素进行解码。当当前系数的反对角线与最后一个非零系数的反对角线不同时,可以对零(0)进行代码化;否则,对一(1)进行代码化。此外,如上所述,当由编码器实施时,进行代码化是指在编码比特流中进行编码;并且当由解码器实施时,进行代码化是指从编码比特流中进行解码。在1322中,将当前系数的反对角线值di添加至反对角线集合d以指示已经访问了反对角线值di,使得当访问具有相同反对角线值di的另一变换系数时/如果访问了具有相同反对角线值di的另一变换系数,过程1300可以跳过序列1320至1326,并且因此,跳过对指示反对角线值di是否包括块的最后一个非零变换系数的另一值进行代码化(在1320中)。在1324中,如果反对角线值di等于最后一个非零系数的反对角线值(即,当di=eobd时,或者等效地,当last_eob_d_flag=1时),则过程1300将标志eob_d_found设置为真(例如,eob_d_found=1)(在1326中)。当由解码器实施时,在1326中,过程1300还可以记录反对角线值di是最后一个非零系数的反对角线值(即,eobd)。然后,过程1300继续至1328。在1328中,如果过程1300确定设置了eob_d_found(即,eob_d_found=1),则过程1300继续至1330;否则,过程1300继续至1112。在序列1330至1338中,过程1300对当前非零系数在反对角线上的位置是否是最后一个非零系数的位置进行代码化或者推断当前非零系数在反对角线上的位置是否是最后一个非零系数的位置。在1328中,如果设置了标志eob_d_found,则也意味着:反对角线值di是最后一个非零系数的反对角线值(即,eobd);也意味着:由于当前反对角线包括最后一个非零系数,因此,后续的反对角线只包括零系数。后续反对角线是任何反对角线di+k,其中,k是大于零(0)的任何值。在1330中,过程1300确定当前系数位置(ci,ri)是否是反对角线di的最后一个位置。如果否,则该过程继续至1334。如果是,则在1332中,过程1300可以推断(而不是通过编码器进行编码或者通过解码器进行解码)最后一个非零系数的位置(即,eoba)与当前系数的行值相同。即,可以推断eoba等于ri。在一个示例中,过程1330可以通过针对所有k>0,确定di+k不等于di来确定当前系数位置(ci,ri)是反对角线di的最后一个位置。然后,过程1300继续至1112。在1334中,过程1300对标志last_eob_a_flag进行代码化。标志last_eob_a_flag指示在当前非零系数的反对角线上的位置是否是最后一个非零系数的位置。例如,当由编码器实施时,过程1300可以对值ri=eoba进行编码。当在解码器中实施时,过程1300可以对通过其可以设置标志last_eob_a_flag的语法元素进行解码。当当前系数在反对角线上的位置与最后一个非零系数在反对角线上的位置不同时,可以对零(0)进行代码化;否则,对一(1)进行代码化。在1336中,过程1300确定位置值ri是否等于最后一个非零系数在反对角线di上的位置值(即,何时ri=eobr,或者等效地,何时last_eob_a_flag=1)。如果否,则过程1300继续至1112。如果是,则过程1300将标志eob_a_found设置(在1338处)为真(例如,eob_a_found=1)。当由解码器实施时,在1338中,过程1300还可以记录行值ri是沿着最后一个非零系数的反对角线的位置(即,eobr)。然后,过程1300继续至1112。在1312中,如果已经处理了变换块的所有系数(即,扫描位置i=n*n),或者如果已经访问了最后一个非零变换系数的反对角线(即,eob_d_found=1)并且已经找到最后一个非零位置在反对角线上的位置(即,eob_a_found=1),则过程1300终止;否则,该过程在1106处继续。如上所述,当eob_d_found=1(即,当前反对角线是包括最后一个非零系数的反对角线)并且当前系数位置(ci,ri)是反对角线的最后一个位置时,过程1300可以推断(而不是通过编码器进行编码或者通过解码器进行解码)当前系数是非零系数。同样,过程1300可以节省对值sig[i]进行编码或者解码的成本。图14是根据本公开的实施方式的、通过使用系数组坐标系来对系数变换块的最后一个非零系数的位置进行代码化的过程1400的流程图。系数组坐标系将变换块划分成变换系数组。系数组坐标系的第一维度可以是量化变换系数组,并且第二维度可以是在组内的位置。系数组坐标系可以将所有扫描位置{0,...,n*n-1}划分成若干非重叠组{g0,...,gk},其中,k是小于n*n-1的正整数。在下面的描述中,陈述组包括系数等同于陈述该组包括该系数的扫描索引。同样,非零系数的组编号等同于包括该非零系数的扫描索引的组编号。考虑到系数组{g0,...,gk},可以通过使用(eobg,eoba)来描述变换块中的最后一个非零系数的位置eob,其中,eobg指示包括块结束系数的组gk的索引k,并且eoba指示在组gk中的偏移位置。可以将偏移位置eoba确定为eoba=eob-gk,0。即,偏移位置eoba是块结束系数的扫描索引位置减去包括该块结束系数的组的第一扫描索引。图16是根据本公开的实施方式的系数组坐标系1600的示例。系数组坐标系1600将扫描位置划分成各个组gk,使得每个组包括扫描位置{16k,16k+1,...,16k+15}。即,每个组gk由16个连续的扫描位置组成。同样,系数组坐标系1600包括四(4)个组组g1(即,组1602)包括扫描位置{0,1,...,15}。组g2(即,组1604)包括扫描位置{16,17,...,31}。组g3(即,组1606)包括扫描位置{31,32,...,47}。组g4(即,组1608)包括扫描位置{48,49,...,63}。其它系数组也是可能的。例如,可以将扫描位置划分成以下组:g0={0}、g1={1}、g2={2,3}、g3={4,5,6,7}、g4={8,...,15}、g5={16,...,31}、g6={32,...,63}、g7={64,...,127}、g8={128,...,255}、g9={256,511}g10={512,...,1023}。系数组gk的再一示例可以是:g0={0}、g1={1}、g2={2,3}、g3={4,5,6,7}、g4={8,...,15}、g5={16,...,31}、对于k≥6有gk={32+16(k-6),...,47+16(k-6)}。过程1400是对块结束(eobg,eoba)的系数组和位置偏移进行代码化的示例。过程1400可以共享过程1100的各个方面。对于过程1400中被编号为过程1100中的块的各个块,省略了描述。在1402中,过程1400将组集合g初始化为空集合。组集合g保持对过程1400已经访问过的组的追踪。在该上下文中,被访问过的组意味着:当在给定扫描顺序的情况下访问了当前非零系数时,已经确定另一非零系数包括在与当前非零系数相同的组中。在1404中,将扫描位置i初始化为零,将标志eob_g_found设置为假(即,值零);并且将标志eob_a_found设置为假。扫描位置i用作对一维阵列u的索引。标志eob_g_found指示是否已经处理了在与块结束系数的扫描位置相同的组内的变换系数的扫描位置(即,根据扫描顺序访问过)。标志eob_a_found指示包括最后一个非零系数的组中的当前变换系数的位置偏移是否是最后一个非零系数的位置偏移。在1416中,过程1400确定当前系数所属的组编号。等效地,过程1400确定当前系数的扫描位置所属的组的当前组编号。过程1400可以确定扫描位置i(即,扫描位置i)的当前组编号ki,使得扫描位置i在组中。在1418中,如果过程1400确定还未确定包括最后一个非零系数的组(即,标志eob_g_found=0)并且当前组编号ki尚未被访问(即,值kii不在集合g中),则过程1400继续至1420;否则,过程1400继续至1428。在1420中,过程1400对标志last_eob_g_flag进行代码化。标记last_eob_g_flag指示当前组编号ki是否是最后一个非零系数的组编号。例如,当由编码器实施时,过程1400可以对值ki=eobg进行编码。当由解码器实施时,过程1400可以对通过其可以设置标志last_eob_g_flag的语法元素进行解码。当当前组编号与最后一个非零系数的组编号不同时,可以对零(0)进行代码化。否则,对一(1)进行代码化。在1422中,将当前组编号ki添加至组集合g以指示已经访问了组编号ki,使得当访问在相同的组内的另一非零变换系数时/如果访问了在相同的组内的另一非零变换,过程1400可以跳过序列1420至1426,并且因此,跳过对指示组编号ki是否包括块的最后一个非零变换系数的另一值进行代码化(在1420中)。在1424中,如果当前组编号ki等于最后一个非零系数的组编号(即,当ki=eobg时,或者等效地,当last_eob_g_flag=1时),则过程1400将标志eob_g_found设置(在1426处)为真(例如,eob_g_found=1);否则,过程1400继续至1428。当由解码器实施时,在1426中,过程1400还可以记录组编号ki是包括最后一个非零系数的组(即,eobg)。然后,过程1400继续至1428。在1428中,如果过程1400确定设置了eob_g_found(即,eob_g_found=1),则过程1400继续至1430;否则,过程1400继续至1112。在序列1430至1438中,过程1400对包括最后一个非零系数的组中的某一非零系数的偏移位置是否是最后一个非零系数的位置进行代码化或者推断包括最后一个非零系数的组中的某一非零系数的偏移位置是否是最后一个非零系数的位置。在1428中,如果设置了标志eob_g_found,则还意味着:被编号为ki的当前组是包括最后一个非零系数的扫描索引的组(即,eobg)。在1430中,如果扫描位置i是组中的最后一个位置,则过程1400继续至1432;否则,过程1400继续至1434。在一个示例中,过程1400可以通过测试下一扫描位置值(即,i+1)是否在该组之外来确定扫描位置i是否是该组中的最后一个位置。参照图16来进行说明,为了确定扫描索引15是否是组g1(即,组1602)的最后一个位置,过程1400测试扫描索引i+1=16是否在组g1中。如上面指示的,组g2(即,组1604)是包括扫描位置16的组。由此,(i+1)不在g1中,并且因此,扫描位置i是组g1中的最后一个位置。在1432中,过程1400可以推断(而不是通过编码器进行编码或者通过解码器进行解码)最后一个非零系数的位置偏移(即,eoba)与最后一个非零系数的偏移相同。即,可以推断eoba等于即,最后一个非零系数的偏移位置等于当前扫描索引(i)减去包括扫描索引i的组的第一扫描索引。例如,并且通过使用图16中的组,给定当前扫描位置i=39,包括扫描位置i的组的第一扫描位置是32。这是因为包括扫描位置39的组是组1604,并且组1604的第一扫描位置是扫描位置32。在1434中,过程1400对标志last_eob_a_flag进行代码化。标志last_eob_a_flag指示在组中的当前非零系数的位置偏移是否是最后一个非零系数的位置偏移。例如,当由编码器实施时,过程1400可以对值进行编码。当在解码器中实施时,过程1400可以对通过其可以设置标志last_eob_a_flag的语法元素进行解码。当在当前系数的组中的位置偏移与最后一个非零系数的位置偏移不同时,可以对零(0)进行代码化;否则,对一(1)进行代码化。在1436中,过程1400确定是否或者等效地,何时last_eob_a_flag=1。如果否,则过程1400继续至1112。如果是,则过程1400将标志eob_a_found设置为真(例如,eob_a_found=1)(在1438中)。当由解码器实施时,在1438中,过程1400还可以记录列值是最后一个非零系数的位置偏移(eoba)。然后,过程1400继续至1112。在1412中,如果已经处理了变换块的所有系数(即,扫描位置i=n*n),或者如果已经访问了最后一个非零变换系数的组(即,eob_g_found=1)并且已经找到在组内的最后一个非零位置的位置偏移(即,eob_a_found=1),则过程1400终止;否则,该过程在1106中继续。在一个实施方式中,过程1400可以在1106处推断(而不是通过编码器进行编码或者通过解码器进行解码):当eob_g_found=1(即,当前组是包括最后一个非零系数的组)并且当前扫描位置i是组的最后一个偏移位置(即,i是的最后一个位置)时,当前系数是非零系数。同样,过程1400可以节省对值sig[i]进行编码或者解码的成本。图17是根据本公开的实施方式的、对变换块的最后一个非零系数的位置进行解码的过程1700的流程图。可以在解码器(诸如,解码器500)中实施过程1700。该过程1700可以由接收站实施。例如,过程1700可以被实施为可以由计算装置执行的软件程序。该软件程序可以包括机器可读指令,这些机器可读指令可以存储在存储器(诸如,存储器204或者辅助存储214)中,并且可以由处理器(诸如,cpu202)执行以使计算装置执行过程1700。可以通过使用专用硬件或者固件来实施过程1700。一些计算装置可以具有多个存储器、多个处理器或者两者。可以通过使用不同的处理器、存储器或者两者来分布过程1700的步骤或者操作。以单数形式使用术语“处理器”或者“存储器”囊括具有一个处理器或者一个存储器的计算装置以及具有多个处理器或者多个存储器的装置,这些装置可以用于执行所叙述的步骤中的一些或者所有步骤。在1702中,过程1700从编码比特流(诸如,图5中的压缩比特流420)中解码变换块的第一系数是否为非零。在一个示例中,框1702可以如针对图11至图14中的框1108所述。在1704中,过程1700确定第一系数是否为非零以及第一系数是否是要针对第一维度的第一值解码的第一非零系数。如果是,则过程1700继续至1706;否则,该过程结束。在一个示例中,第一维度的第一值可以是如针对图11描述的笛卡尔坐标系的列维度的列值,并且确定可以如针对框1118所述。在一个示例中,第一维度的第一值可以是如针对图11描述的笛卡尔坐标系的行维度的行值,并且确定可以如针对框1128所述。在一个示例中,第一维度的第一值可以是如针对图12描述的笛卡尔分组坐标系的列组维度的列组值,并且确定可以如针对框1218所述。在一个示例中,第一维度的第一值可以是如针对图12描述的笛卡尔分组坐标系的行组维度的行组值,并且确定可以如针对框1228所述。在一个示例中,第一维度的第一值可以是如针对图13描述的极坐标系的反对角维度的反对角线值,并且确定如针对框1318所述。在一个示例中,第一维度的第一值可以是如针对图14描述的系数组坐标系的系数组维度的系数组值,并且确定可以如针对框1418所述。在框1706中,过程1700从编码比特流中解码指示第一维度的第一值是否指示块结束系数的第一语法元素。解码可以依赖于所使用的坐标系。在一个示例中,解码可以如针对图11中的1120或者1130所述。在一个示例中,解码可以如针对图12中的1220或者1230所述。在一个示例中,解码可以如针对图13中的1320所述。在一个示例中,解码可以如针对图14中的1420所述。在1708中,响应于第一语法元素指示块结束系数,过程1700使用第一值来确定最后一个非零系数的位置。在一个示例中,该块可以如针对图11中的序列1124至1126所述。在一个示例中,该块可以如针对图11中的序列1134至1136所述。在一个示例中,该块可以如针对图12中的序列1224至1227所述。在一个示例中,该块可以如针对图12中的序列1234至1237所述。在一个示例中,该块可以如针对图13中的序列1324至1326所述。在一个示例中,该块可以如针对图14中的序列1424至1426所述。在一个实施方式中,过程1700可以包括:响应于确定第一变换系数是要针对第二维度的第二值解码的第一非零系数,从编码比特流解码指示第二维度的第二值是否指示块结束系数的第二语法元素,以及响应于第二语法元素指示块结束系数,使用第二值来确定最后一个非零系数的位置。第一维度和第二维度可以是在包括变换块的列和行的坐标系中的维度。坐标系可以如针对图11中的笛卡尔坐标系所述。在一个实施方式中,第一维度和所述第二维度是在极坐标系中的维度。极坐标系可以如针对图7所述。极坐标系可以以变换块的dc系数为中心,第一维度可以与用于对变换块进行编码的扫描顺序的反对角线相对应,并且第二维度可以与第一维度的反对角线上的位置相对应。第一维度和第二维度可以是在系数组坐标系中的维度。系数组坐标系可以如针对图14所述。在一个示例中,系数组坐标系可以将扫描顺序中的扫描位置划分成扫描位置组,第一维度可以与扫描位置组相对应,并且第二维度可以与组内的扫描索引的偏移位置相对应。在一个示例中,系数组坐标系可以将变换块划分成变换系数组,第一维度可以与变换系数组相对应,并且第二维度可以与组内的位置相对应。在系数组坐标系的一个实施方式中,各个组可以包括相等数量的扫描位置。例如,相等数量的扫描位置可以是16个。在过程1700的一个实施方式中,第一维度和第二维度是在笛卡尔分组坐标系中的维度。笛卡尔分组坐标系可以如针对图12所述。第一维度可以与变换块的列组相对应,并且第二维度可以与变换块的行组相对应。系数变换块可以是通过使用帧内预测所预测的残差块的变换块。系数变换块可以是针对亮度颜色分量块的变换系数。图18是根据本公开的实施方式的、对变换块的最后一个非零系数的位置进行解码的另一过程1800的流程图。可以在解码器(诸如,图5中的解码器500)中实施过程1800。例如,过程1800可以实施为可以由计算装置(诸如,接收站106)执行的软件程序。该软件程序可以包括机器可读指令,这些机器可读指令可以存储在存储器(诸如,存储器204或者辅助存储214)中,并且可以由处理器(诸如,cpu202)执行以使计算装置执行过程1800。在至少一些实施方式中,可以全部或者部分地通过图5中的解码器502的熵解码级502来执行过程1100。在1802中,过程1800将变换块的系数映射至系数组坐标系。该系数组坐标系可以具有第一维度和第二维度。第一维度可以与变换系数组相对应。第二维度可以与在系数组中的某一个组内的偏移位置相对应。在一个示例中,一些组可以包括不等数量的系数。在1804中,过程1800从编码比特流中确定包括最后一个非零系数的系数组。例如,并且如针对图14和图16描述的,该过程可以通过对如针对1420描述的、指示组1606的语法元素或者标志进行解码来确定包括最后一个非零系数的系数组。在1806中,过程1800从编码比特流中确定最后一个非零系数在最后一个非零系数的系数组中的偏移位置。例如,该过程可以如针对图14描述的那样确定偏移位置。在1808中,过程1800从编码比特流中解码系数,直到与系数组和偏移位置相对应的系数。在一个示例中,可以如针对图14中的1412和1106描述的那样对系数进行解码。在过程1800的实施方式中,确定偏移位置可以包括:如例如,针对图14中的1434描述的那样从编码比特流中解码指示偏移位置的语法元素。在过程1800的实施方式中,确定偏移位置可以包括:响应于确定被解码的当前系数位于系数组中的最后一个偏移位置,推断最后一个非零系数的偏移位置是最后一个偏移位置。在一个示例中,可以如针对图14中的1430和1432描述的那样来推断偏移位置。在过程1800的实施方式中,解码系数,直到与系数组和偏移位置相对应的系数可以包括:响应于确定正被解码的当前系数位于系数组中的最后一个偏移位置处,推断当前系数是非零系数。该过程可以如针对图14中的1106描述的那样来推断当前系数是非零系数。现在公开根据实施方式的对系数变换块的最后一个非零系数的位置进行解码的再一过程。该过程包括:将变换块的系数映射至具有第一维度和第二维度的坐标系。系数中的第一一个或者多个系数布置在坐标系上的第一维度的第一值处,并且系数中的第二一个或者多个系数布置在坐标系上的第二维度的第二值处。该过程还包括:从编码比特流中仅对第一值进行一次解码,无论第一维度的第一值是否包括最后一个非零系数;以及从编码比特流中仅对第二值进行一次解码,无论第二维度的第二值是否包括最后一个非零系数;以及使用第一维度的已解码的第三值和第二维度的已解码的第四值来确定最后一个非零系数的位置。已解码的第三值和已解码的第四值可以指示最后一个非零系数。例如,在极坐标系的情况下,第一维度可以是反对角线,并且第二维度可以是在对角线上的位置。因此,仅对第一值进行一次解码,无论第一维度的第一值是否包括最后一个非零系数的示例包括:只可以对最后一个非零系数进行一次解码,无论图15中的反对角线1502(即,与row+col=0+1=1+0=1相对应)是否包括最后一个非零系数。在此情况下,反对角线维度(即,第一维度)的反对角线1502(即,第一值)不包括最后一个非零系数。在一个实施方式中,对第四值进行解码可以是指推断第四值。例如,在笛卡尔坐标系的情况下,可以如针对图11中的1120描述的那样推断第四值。例如,在极坐标系的情况下,可以如针对图13中的1332描述的那样推断第四值。例如,在系数组坐标系的情况下,可以如上面针对图14中的1432描述的那样推断第四值。例如,在第一维度只包括一个元素的情况下,可以将第四值推断为这一个值。例如,如果组坐标系中的某组只包括一个扫描位置(例如,g0={0},g1={1}),则可以将第四值推断为组的这一个扫描位置。例如,如果在极坐标系中,所确定的反对角线是包括dc系数的反对角线(即,与row+col=0+0=0相对应的反对角线),则可以推断出第四值。上面描述的编码和解码的各个方面说明了一些编码和解码技术。然而,要明白,编码和解码(如在权利要求书中使用的那些术语)可以是指压缩、解压缩、变换或者对数据的任何其它处理或者改变。本文使用词语“示例”或者“实施方式”来表示用作示例、实例或者说明。在本文中被描述为“示例”或者“实施方式”的任何方面或者设计都不必被解释为相对于其它方面或者设计优选或有利。相反,使用词语“示例”或者“实施方式”旨在具体地呈现构思。如在本申请中使用的,术语“或者”旨在表示包含性的“或者”而不是排斥性的“或者”。即,除非另有说明,否则通过上下文清楚的是:“x包括a或者b”旨在表示任何自然的包含性置换。即,如果x包括a;x包括b;或者x包括a和b,则在前述实例中的任何实例下,都满足“x包括a或者b”。另外,如在本申请和随附权利要求书中所使用的冠词“一”和“一个”应该被一般地解释为表示“一个或者多个”,除非另有说明或者从上下文中明确得知其是指单数形式。此外,贯穿全文,对术语“实施方式”或者“一个实施方式”的使用不旨在表示相同的实施例或者实施方式,除非如此描述。可以在硬件、软件或者其任何组合中实现发送站102和/或接收站106的实施方式(以及存储在发送站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