动态比特集代码化的制作方法

文档序号:32668033发布日期:2022-12-24 01:36阅读:29来源:国知局
动态比特集代码化的制作方法
动态比特集代码化


背景技术:

1.图像内容(例如,静止图像或视频帧)表示大量在线内容。例如,网页可以包括多个图像,并且花费在渲染网页上的大部分时间和资源专用于渲染这些图像以进行显示。接收并渲染图像以进行显示所需的时间和资源量部分地取决于压缩图像的方式。因此,能够通过使用压缩技术和解压缩技术减小图像的总数据大小来更快地渲染图像。
2.对于不同类型的数据,不同压缩技术能够被用于(在编码器处)压缩并且在解码器处使用对应的解压缩技术。例如,能够使用诸如huffman代码化、lempel-ziv-welch压缩、行程长度编码、golomb代码化、算术代码化等的技术。


技术实现要素:

3.第一方面是一种用于对比特集进行解码的装置,比特集中的每个比特对应于在最小值到最大值的范围中的相应值。该装置包括处理器。处理器被配置成:从压缩比特流中对比特集中的比特的索引进行解码,比特中的每个比特具有第一值;以及将比特集中未从压缩比特流中解码的所有其它比特设置成第二值。对比特集中的比特的索引进行解码包括:从压缩比特流中对比特集中的比特的索引的数目进行解码;对在具有第一下限和第一上限的第一范围中的索引中的第一索引进行解码;以及对在具有第二下限和第二上限的第二范围中的索引中的最后索引进行解码。第一下限等于最小值。第一上限等于最大值减去比特集中具有第一值的比特的索引的数目减去1。第一索引对应于比特集中具有第一值的第一比特。第二下限等于第一索引加上索引的数目减去一。第二上限等于最大值。最后索引对应于比特集中具有第一值的最后比特。
4.第二方面是一种用于对比特集进行解码的方法,比特集中的每个比特对应于在最小值到最大值的范围中的相应值。该方法包括:从压缩比特流中对比特集中具有第一值的比特的相应索引进行解码,其中,相应索引包括第一索引和第二索引;以及将比特集中在第一索引与第二索引之间的每个比特设置成第二值,第二值是第一值的补数。对比特的相应索引进行解码包括:获得比特集中具有第一值的第一比特的第一索引;将在比特集的第一索引处的第一比特设置成第一值;从压缩比特流中对第一索引差进行解码;将第一索引差添加到第一索引以获得第二索引;以及将在比特集的第二索引处的第二索引设置成第一值。
5.第三方面是一种用于对具有一长度的比特集进行解码的方法。该方法包括:从压缩比特流中对比特集中具有第一值的第一比特的第一数目进行解码;将第一变量设置成比特集中具有第一值的第一比特的第一数目;将第二变量设置成比特集中具有第一值的补数的第二比特的数目;以及当具有第一值的更多比特保持待读取并且具有第一值的补数的更多比特保持待读取时执行操作,操作包括:从压缩比特流中读取比特;如果比特等于第一值,则将第一变量递减;以及如果比特等于第一值的补数,则将第二值递减。
6.第四方面是一种用于对比特集进行解码的装置。该装置包括处理器。处理器被配置成:从压缩比特流中对比特集的代码化模式进行解码;以及根据代码化模式从压缩比特
流中对比特集进行解码。当代码化模式是第一值时,处理器如第一方面中所述的对比特集进行解码。当代码化模式是第二值时,处理器使用第二方面的第一方法对比特集进行解码。当代码化模式是第三值时,处理器使用第三方面的第二方法对比特集进行解码。
7.在实施例的以下详细描述、所附权利要求书和附图中公开本公开的这些和其它方面。
8.将认识到,能够以任何方便的形式实现各方面。例如,可以通过适当的计算机程序来实现各方面,计算机程序可以承载在适当的载体介质上,载体介质可以是有形载体介质(例如,磁盘)或无形载体介质(例如,通信信号)。各方面也可以使用合适的装置来实现,装置可以采用运行计算机程序的可编程计算机的形式,计算机程序被布置成实现本文公开的方法和/或技术。各方面能够被组合使得在一个方面的上下文中描述的特征可以在另一方面中实现。
附图说明
9.图1是根据本公开的实施方式的计算设备的图。
10.图2是根据本公开的实施方式的计算和通信系统的图。
11.图3是根据本公开的实施方式的用于在编码和解码中使用的视频流的图。
12.图4是根据本公开的实施方式的编码器的框图。
13.图5是根据本公开的实施方式的解码器的框图。
14.图6是根据本公开的实施方式的用于对比特集进行解码的技术的流程图的示例。
15.图7是根据本公开的实施方式的使用很少值、大范围技术解码的压缩比特流的部分的示例。
16.图8是根据本公开的实施方式的用于使用很少值、大范围对比特集进行解码的技术的流程图的示例。
17.图9是根据本公开的实施方式的用于对比特集进行解码的技术的流程图的示例。
18.图10是根据本公开的实施方式的使用很少值、小范围技术解码的压缩比特流的部分的示例。
19.图11是根据本公开的实施方式的用于使用很少值、小范围对比特集进行解码的技术的流程图的示例。
20.图12是根据本公开的实施方式的用于使用很多值、小范围对比特集进行解码的技术的流程图的示例。
21.图13是根据本公开的实施方式的用于使用很多值、大范围对比特集进行解码的技术的流程图的示例。
22.图14是根据本公开的实施方式的用于说明与很多值、大范围一起使用的压缩比特流格式的图的示例。
23.图15是根据本公开的实施方式的压缩比特流的部分的示例。
具体实施方式
24.图像(例如,独立图像或视频帧)代码化包括对许多不同类型的数据进行代码化。数据类型能够意指具有不同语义的数据。数据类型的示例能够包括由图像的块的预测产生
的残余值的变换系数、变换系数的水平图信息、(诸如图像中或图像的一个或多个块中的颜色值的分布的)直方图等。水平图能够是指变换块的一维阵列,其中每个比特描述对应变换系数的特性。能够使用扫描顺序从变换块生成一维阵列。在示例中,水平图能够是非零图,非零图指示哪些变换系数为零以及哪些变换系数为非零。在另一示例中,水平图能够指示哪些系数大于某个值(例如,1、2或某一其它值)以及哪些系数等于该值。
25.比特集能够被用于对此类数据类型进行代码化,或在此类数据类型的代码化中使用。可以称为比特串的比特集是比特序列,其中每个比特能够被解读为例如暗/亮、不存在/存在、有效/无效、是/否等等。
26.出于说明的目的,参考对表示占用(或存在)信息的比特集进行代码化(编码和解码)来描述本文描述的技术。也就是说,比特集中的每个比特指示由该比特表示的值是否存在。在此上下文中,“存在”能够意味着值的计数为非零。比特不指示对应值存在的水平。然而,本公开不限于此。
27.例如,假设要从压缩比特流中对亮度值的直方图进行解码。进一步假设亮度值用4比特值表示。因此,每个像素能够具有在范围[0,15]中的亮度值。进一步假设在大小8
×
8的图像块中,存在分别具有亮度值0、2、4和14的10、20、30和4个像素。在图像块中不存在其它亮度值。因此,所有可能亮度值的存在(占用)的比特集(表示为bitset)是bitset=101010000000010,其中bitset[i](即,在比特集bitset内的位置i处的比特)是到亮度值的范围中的索引并且对应于亮度值i。
[0028]
比特集bitset能够简单地由比特集内的非零比特的索引的阵列表示。因此,比特集101010000000010能够由阵列[0,2,4,14]表示。知道比特集中的哪些比特具有一个值(例如,1或0),能够容易地确定比特集中的剩余比特具有互补值(例如0或1)。
[0029]
尽管为了简化说明,可以使用亮度值的直方图来说明本文公开的技术,但本公开不受限制。
[0030]
根据本公开的实施方式能够被用于以最佳方式对比特集进行代码化,以便减少压缩比特集所需的比特数目。取决于比特集的特性,能够使用不同的方法对表示数据类型的比特集进行代码化。特性能够包括哪些比特具有特定值、此类比特的索引以及它们在比特集内的相对位置、比特集的长度。当使用根据本公开的实施方式对比特集进行代码化时,能够提高代码化效率。
[0031]
在本文中首先参考能够在其中实现本文的教导的系统来描述动态比特集代码化的细节。
[0032]
图1是根据本公开的实施方式的计算设备100的图。所示的计算设备100包括存储器110、处理器120、用户接口(ui)130、电子通信单元140、传感器150、电源160和总线170。如本文所使用,术语“计算设备”包括本文公开的能够执行任何方法或其任何一个或多个部分的任何单元或单元的组合。
[0033]
计算设备100可以是:固定计算设备,诸如个人计算机(pc)、服务器、工作站、小型计算机或大型计算机;或移动计算设备,诸如移动电话、个人数字助理(pda)、膝上型计算机或平板pc。尽管示为单个单元,但是计算设备100的任何一个或多个元件能够被集成在任何数量的单独物理单元中。例如,用户接口130和处理器120能够被集成在第一物理单元中,并且存储器110能够被集成在第二物理单元中。
[0034]
存储器110能够包括任何非暂时性计算机可用或计算机可读介质,诸如能够例如包含、存储、传送或传输数据112、指令114、操作系统116或与其相关联的任何信息以供计算设备100的其它组件使用或结合计算设备100的其它组件使用的任何有形设备。非暂时性计算机可用或计算机可读介质能够是例如固态驱动器、存储器卡、可移除介质、只读存储器(rom)、随机存取存储器(ram)、包括硬盘、软盘、光盘的任何类型的磁盘、磁卡或光卡、专用集成电路(asic)、或适合于存储电子信息的任何类型的非暂时性介质、或其任何组合。
[0035]
尽管示为单个单元,但是存储器110可以包括多个物理单元,诸如一个或多个主要存储器单元,诸如随机存取存储器单元;一个或多个次级数据存储单元,诸如磁盘;或其组合。例如,数据112或其一部分、指令114或其一部分、或两者可以被存储在次级存储单元中并且可以结合处理相应数据112、执行相应指令114或两者加载到或以其他方式传递到主要存储单元。在一些实施方式中,存储器110或其一部分可以是可移除存储器。
[0036]
数据112能够包括信息,诸如输入音频和/或视觉数据、编码音频和/或视觉数据、解码音频和/或视觉数据等。视觉数据能够包括静止图像、视频序列帧、和/或视频序列。指令114能够包括用于执行本文公开的任何方法或其任何一个或多个部分的指示,诸如代码。指令114能够以硬件、软件、或其任何组合来实现。例如,指令114可以实现为存储在存储器110中的信息,诸如可以由处理器120执行以执行如本文所描述的相应方法、算法、方面、或其组合中的任一个的计算机程序。
[0037]
尽管示为包括在存储器110中,但是在一些实施方式中,指令114或其一部分可以实现为能够包括用于执行如本文所描述的方法、算法、方面或其组合中的任一个的专用硬件的专用处理器或电路。指令114的部分能够跨相同机器或不同机器上的多个处理器或跨诸如局域网、广域网、互联网或其组合的网络分布。
[0038]
处理器120能够包括现有或以后开发的能够操纵或处理数字信号或其它电子信息的任何设备或系统,包括光学处理器、量子处理器、分子处理器或其组合。例如,处理器120能够包括专用处理器、中央处理单元(cpu)、数字信号处理器(dsp)、多个微处理器、与dsp核心相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列、可编程逻辑控制器、微代码、固件、任何类型的集成电路(ic)、状态机、或其任何组合。如本文所使用,术语“处理器”包括单个处理器或多个处理器。
[0039]
用户接口130能够包括能够与用户接口连接的任何单元,诸如虚拟或物理小键盘、触摸板、显示器、触摸显示器、扬声器、麦克风、视频相机、传感器、或其任何组合。例如,用户接口130可以是视听显示设备,并且计算设备100可以使用用户接口130视听显示设备诸如结合显示诸如解码视频的视频呈现诸如解码音频的音频。尽管示为单个单元,但是用户接口130可以包括一个或多个物理单元。例如,用户接口130可以包括用于与用户执行音频通信的音频接口,以及用于与用户执行基于视觉和触摸的通信的触摸显示器。
[0040]
电子通信单元140能够通过诸如射频(rf)通信介质、紫外线(uv)通信介质、可见光通信介质、光纤通信介质、有线通信介质或其组合的有线或无线电子通信介质180来发射、接收、或发射并接收信号。例如,如图所示,电子通信单元140可操作地连接到被配置成经由无线信号进行通信的诸如天线的电子通信接口142。
[0041]
尽管电子通信接口142示为图1中的无线天线,但是电子通信接口142能够是如图所示的无线天线、诸如以太网端口、红外端口、串行端口的有线通信端口、或能够与有线或
无线电子通信介质180接口连接的任何其它有线或无线单元。尽管图1示出了单个电子通信单元140和单个电子通信接口142,但是能够使用任何数量的电子通信单元和任何数量的电子通信接口。
[0042]
传感器150可以包括例如音频感测设备、可见光感测设备、运动感测设备或其组合。例如,传感器150可以包括诸如麦克风的声音感测设备或现有或以后开发的任何其它声音感测设备,其能够感测由操作计算设备100的用户发出的在计算设备100附近的声音,诸如语音或其它话语。在另一示例中,传感器150可以包括相机或现有或以后开发的任何其它图像感测设备,其能够感测图像,诸如操作计算设备的用户的图像。尽管示出了单个传感器150,但是计算设备100可以包括多个传感器150。例如,计算设备100可以包括以指向计算设备100的用户的视场定向的第一相机,以及以远离计算设备100的用户的视场定向的第二相机。
[0043]
电源160能够是用于为计算设备100供电的任何合适的设备。例如,电源160能够包括:有线外部电源接口;一个或多个干电池,诸如镍镉(nicd)、镍锌(nizn)、镍金属氢化物(nimh)、锂离子(li-ion);太阳能电池;燃料电池;或能够为计算设备100供电的任何其它设备。尽管在图1中示出单个电源160,但是计算设备100可以包括多个电源160,诸如电池和有线外部电源接口。
[0044]
尽管示为单独的单元,但是电子通信单元140、电子通信接口142、用户接口130、电源160或其一部分可以被配置为组合单元。例如,电子通信单元140、电子通信接口142、用户接口130和电源160可以被实现为能够与外部显示设备接口连接、提供通信、电力、或与外部显示设备接口连接并提供通信、电力的通信端口。
[0045]
存储器110、处理器120、用户接口130、电子通信单元140、传感器150或电源160中的一个或多个可以经由总线170可操作地耦合。尽管图1中示出单个总线170,但是计算设备100可以包括多个总线。例如,存储器110、处理器120、用户接口130、电子通信单元140、传感器150和总线170可以经由总线170从电源160接收电力。在另一示例中,存储器110、处理器120、用户接口130、电子通信单元140、传感器150、电源160或其组合可以诸如通过经由总线170发送和接收电子信号来传送数据。
[0046]
尽管图1中未单独地示出,但是处理器120、用户接口130、电子通信单元140、传感器150或电源160中的一个或多个可以包括内部存储器,诸如内部缓冲器或寄存器。例如,处理器120可以包括内部存储器(未示出),并且可以将数据112从存储器110读取到内部存储器(未示出)中以进行处理。
[0047]
尽管示为单独的元件,但是存储器110、处理器120、用户接口130、电子通信单元140、传感器150、电源160和总线170、或其任何组合能够集成在一个或多个电子单元、电路或芯片中。
[0048]
图2是根据本公开的实施方式的计算和通信系统200的图。所示的计算和通信系统200包括计算和通信设备100a、100b、100c、接入点210a、210b、以及网络220。例如,计算和通信系统200能够是多址系统,多址系统将诸如语音、音频、数据、视频、消息传递、广播或其组合的通信提供到一个或多个有线或无线通信设备,诸如计算和通信设备100a、100b、100c。尽管为简单起见,图2示出三个计算和通信设备100a、100b、100c、两个接入点210a、210b、以及一个网络220,但是能够使用任何数量的计算和通信设备、接入点、以及网络。
[0049]
计算和通信设备100a、100b或100c能够是例如计算设备,诸如图1中所示的计算设备100。例如,计算和通信设备100a、100b可以是用户设备,诸如移动计算设备、膝上型计算机、瘦客户端或智能电话,并且计算和通信设备100c可以是服务器,诸如大型机或集群。尽管将计算和通信设备100a以及计算和通信设备100b描述为用户设备,并且将计算和通信设备100c描述为服务器,但是任何计算和通信设备都可以执行服务器的一些或全部功能、用户设备的一些或全部功能、或服务器和用户设备的一些或全部功能。例如,服务器计算和通信设备100c可以接收、编码、处理、存储、发射音频数据或其组合;并且计算和通信设备100a以及计算和通信设备100b中的一个或两者可以接收、解码、处理、存储、呈现音频数据或其组合。
[0050]
可以包括用户设备(ue)、移动台、固定或移动订户单元、蜂窝电话、个人计算机、平板计算机、服务器、消费型电子产品、或任何类似设备的每个计算和通信设备100a、100b、100c能够被配置成诸如经由网络220执行有线或无线通信。例如,计算和通信设备100a、100b、100c能够被配置成发射或接收有线或无线通信信号。尽管每个计算和通信设备100a、100b、100c示为单个单元,但是计算和通信设备能够包括任何数目的互连元件。
[0051]
每个接入点210a、210b能够是被配置成经由有线或无线通信链路180a、180b、180c与计算和通信设备100a、100b、100c、网络220或两者通信的任何类型的设备。例如,接入点210a、210b能够包括基站、基站收发台(bts)、node-b,增强型node-b(enode-b)、家庭node-b(hnode-b)、无线路由器、有线路由器、集线器、中继器、交换机、或任何类似的有线或无线设备。尽管每个接入点210a、210b被示为单个单元,但是接入点能够包括任何数量的互连元件。
[0052]
网络220能够是被配置成通过有线或无线通信链路提供诸如语音、数据、应用、互联网协议语音(voip)、或任何其它通信协议或通信协议的组合的服务的任何类型的网络。例如,网络220能够是局域网(lan)、广域网(wan)、虚拟专用网(vpn)、移动或蜂窝电话网络、互联网或任何其它电子通信手段。网络能够使用通信协议,诸如传输控制协议(tcp)、用户数据报协议(udp)、互联网协议(ip)、实时传输协议(rtp)、超文本传输协议(http)、或其组合。
[0053]
计算和通信设备100a、100b、100c能够使用一个或多个有线或无线通信链路或经由有线和无线通信链路的组合经由网络220彼此通信。例如,如图所示,计算和通信设备100a、100b能够经由无线通信链路180a、180b通信,并且计算和通信设备100c能够经由有线通信链路180c通信。计算和通信设备100a、100b、100c中的任一个可以使用任何一个或多个有线或无线通信链路通信。例如,第一计算和通信设备100a能够使用第一类型的通信链路经由第一接入点210a通信,第二计算和通信设备100b能够使用第二类型的通信链路经由第二接入点210b通信,并且第三计算和通信设备100c能够使用第三类型的通信链路经由第三接入点(未示出)通信。类似地,接入点210a、210b能够经由一种或多种类型的有线或无线通信链路230a、230b与网络220通信。尽管图2示出经由网络220进行通信的计算和通信设备100a、100b、100c,但是计算和通信设备100a、100b、100c能够经由任何数量的通信链路(诸如直接有线或无线通信链路)彼此通信。
[0054]
在一些实施方式中,计算和通信设备100a、100b、100c中的一个或多个之间的通信可以省略经由网络220的通信,并且可以包经由诸如数据存储设备的另一介质(未示出)传
递数据。例如,服务器计算和通信设备100c可以将诸如编码音频数据的音频数据存储在诸如便携式数据存储单元的数据存储设备中,并且计算和通信设备100a或计算和通信设备100b中的一个或两者可以诸如通过将数据存储设备与服务器计算和通信设备100c物理地断开连接以及将数据存储设备物理地连接到计算和通信设备100a或计算和通信设备100b来从数据存储单元访问、读取或检索存储的音频数据。
[0055]
计算和通信系统200的其它实施方式是可能的。例如,在实施方式中,网络220能够是自组织网络,并且能够省略接入点210a、210b中的一个或多个。计算和通信系统200可以包括图2中未示出的设备、单元或元件。例如,计算和通信系统200可以包括更多的通信设备、网络和接入点。
[0056]
图3是根据本公开的实施方式的用于在编码和解码中使用的视频流300的图。诸如由视频相机捕获的视频流或由计算设备生成的视频流的视频流300可以包括视频序列310。视频序列310可以包括相邻帧320的序列。尽管示出三个相邻帧320,但是视频序列310能够包括任何数量的相邻帧320。
[0057]
来自相邻帧320的每个帧330可以表示来自视频流的单个图像。尽管在图3中未示出,但是帧330可以包括一个或多个片段、图块或平面,一个或多个片段、图块或平面可以被独立地(诸如并行地)进行代码化或以其他方式进行处理。帧330可以包括块340。尽管在图3中未示出,但是块能够包括像素。例如,块能够包括16
×
16像素组、8
×
8像素组、8
×
16像素组、或任何其它像素组。除非本文另外指示,否则术语“块”能够包括帧的超级块、宏块、片段、切片、或任何其它部分。帧、块、像素或其组合能够包括显示信息,诸如亮度信息、色度信息、或能够被用于存储、修改、传送或显示视频流或其一部分的任何其它信息。
[0058]
在一些实施方式中,根据本公开的实施方式对不是视频流的一部分的帧进行编码和解码。
[0059]
图4是根据本公开的实施方式的编码器400的框图。在诸如图1中所示的计算设备100或图2中所示的计算和通信设备100a、100b、100c的设备中,编码器400能够实现为例如存储在诸如图1中所示的存储器110的数据存储单元中的计算机软件程序。计算机软件程序能够包括可以由处理器(诸如图1中所示的处理器120)执行的机器可读指令,并且可以使设备如本文所述的对视频数据进行编码。编码器400能够实现为例如包括在计算设备100中的专用硬件。
[0060]
编码器400能够对输入视频流402(诸如图3中所示的视频流300)进行编码以生成编码(压缩)比特流404。在一些实施方式中,编码器400可以包括用于生成压缩比特流404的前向路径。输入视频流402能够是单个图像或图像集合。前向路径可以包括帧内/帧间预测单元410、变换单元420、量化单元430、熵编码单元440、或其任何组合。在一些实施方式中,编码器400可以包括重构路径(由断开的连接线指示),以重构帧以用于对其它块进行编码。重构路径可以包括去量化单元450、逆变换单元460、重构单元470、滤波单元480、或其任何组合。编码器400的其它结构变化能够被用于对视频流402进行编码。
[0061]
为了对视频流402进行编码,能够以块为单位处理视频流402内的每个帧。因此,可以从帧中的块中识别出当前块,并且可以对当前块进行编码。
[0062]
在帧内/帧间预测单元410处,能够使用可以在单个帧内的帧内预测或可以在帧之间的帧间预测对当前块进行编码。帧内预测可以包括根据先前已经编码和重构的当前帧中
的样本来生成预测块。帧间预测可以包括根据一个或多个先前重构的参考帧中的样本来生成预测块。为当前帧中的当前块生成预测块可以包括执行运动估计以生成指示参考帧的适当参考部分的运动向量。在对单个图像(例如,不是视频序列和/或图像序列的一部分的图像)进行编码的情况下,帧内/帧间预测单元410能够使用帧内预测对图像进行编码。
[0063]
帧内/帧间预测单元410可以从当前块(原始块)减去预测块以产生残余块。变换单元420可以执行基于块的变换,其可以包括在例如频域中将残余块变换为变换系数。基于块的变换的示例包括karhunen-lo
è
ve变换(klt)、离散余弦变换(dct)、奇异值分解变换(svd)、傅立叶变换(ft)、离散正弦变换(dst)和非对称离散正弦变换(adst)。在示例中,dct可以包括将块变换到频域中。dct可以包括使用基于空间频率的变换系数值,其中在矩阵的左上方处具有最低频率(即,dc)系数并且在矩阵的右下方处具有最高频率系数。
[0064]
量化单元430可以将变换系数转换成离散量子值,离散量子值可以被称为量化变换系数或量化等级。量化变换系数能够由熵编码单元440进行熵编码以产生熵编码系数。熵编码能够包括使用概率分布度量。能够将用于对块进行解码的熵编码系数和信息输出到压缩比特流404,熵编码系数和信息可以包括所使用的预测的类型、运动向量和量化器值。能够使用诸如行程长度编码(rle)和零行程代码化的各种技术来格式化压缩比特流404。
[0065]
重构路径能够被用于维持编码器400与对应的解码器(诸如图5中所示的解码器500)之间的参考帧同步。重构路径可以类似于下面讨论的解码过程,并且可以包括对编码帧或其一部分进行解码,对编码帧或其一部分进行解码可以包括对编码块进行解码,对编码块进行解码可以包括在去量化单元450处对量化变换系数进行去量化并且在逆变换单元460处对去量化变换系数进行逆变换,以产生导数残余块。重构单元470可以将由帧内/帧间预测单元410生成的预测块添加到导数残余块,以创建解码块。滤波单元480能够被应用到解码块以生成重构块,这可以减少失真,诸如块伪像。尽管在图4中示出一个滤波单元480,但是对解码块进行滤波可以包括环路滤波、去块滤波、或其它类型的滤波、或滤波的类型的组合。如由482处的虚线所指示,重构块可以作为用于对当前帧的另一部分、另一帧或两者进行编码的重构块进行存储或以其他方式变得可访问,重构块可以是参考帧的一部分。如由484处的虚线所指示,帧的代码化信息(诸如去块阈值索引值)可以被编码、包括在压缩比特流404中、或两者。
[0066]
编码器400的其它变型能够被用于对压缩比特流404进行编码。例如,基于非变换的编码器400能够在不具有变换单元420的情况下直接量化残余块。在一些实施方式中,量化单元430和去量化单元450可以组合成单个单元。
[0067]
图5是根据本公开的实施方式的解码器500的框图。在诸如图1中所示的计算设备100或图2中所示的计算和通信设备100a、100b、100c的设备中,解码器500能够实现为例如存储在诸如图1中所示的存储器110的数据存储单元中的计算机软件程序。计算机软件程序能够包括可以由处理器(诸如图1中所示的处理器120)执行的机器可读指令,并且可以使设备如本文所述的对视频数据进行解码。解码器500能够实现为例如包括在计算设备100中的专用硬件。
[0068]
解码器500可以接收压缩比特流502,诸如图4中所示的压缩比特流404,并且可以对压缩比特流502进行解码以生成输出视频流504。解码器500可以包括熵解码单元510、去量化单元520、逆变换单元530、帧内/帧间预测单元540、重构单元550、滤波单元560、或其任
何组合。解码器500的其它结构变型能够被用于对压缩比特流502进行解码。
[0069]
熵解码单元510可以使用例如上下文自适应二进制算术解码对压缩比特流502内的数据元素进行解码,以产生一组量化变换系数。去量化单元520能够对量化变换系数进行去量化,并且逆变换单元530能够对去量化变换系数进行逆变换以产生导数残余块,导数残余块可以对应于由图4中所示的逆变换单元460生成的导数残余块。使用从压缩比特流502中解码的标头信息,帧内/帧间预测单元540可以生成与在编码器400中创建的预测块相对应的预测块。在重构单元550处,能够将预测块添加到导数残余块以创建解码块。滤波单元560能够被应用于解码块以减少诸如块伪像的伪像,其可以包括环路滤波、去块滤波、或其它类型的滤波或滤波的类型的组合,并且其可以包括生成重构块,重构块可以输出为输出视频流504。
[0070]
解码器500的其它变型能够被用于对压缩比特流502进行解码。例如,解码器500能够在不具有去块滤波单元570的情况下产生输出视频流504。
[0071]
图6是根据本公开的实施方式的用于对比特集进行解码的技术600的流程图的示例。比特集表示范围内的值的占用或存在信息。在范围中存在相对较小数目的所有可能值并且范围相对较大的情况下,能够使用技术600。为了给出说明性示例,范围能够是[0,255]并且存在值的数目能够是四。因此,比特集可以是例如bitset=001111000...00,其中比特集长度是256个比特并且存在值的索引是indexes=[2,3,4,5]。为了便于参考,图6的技术被称为“很少值、大范围”(fv_br)技术。技术600从压缩比特流中读取(例如解码)索引并且根据索引进行重组(例如重建比特集)。
[0072]
范围中的最大值(max_val)和比特集的长度(len)能够通过公式len=max_val+1相关。例如,如果范围是[0,1023],则max_val=1023。比特集的长度是max_val+1=1023+1=1024。
[0073]
技术600能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术600。技术600能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术600能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0074]
参考压缩比特流描述技术600,压缩比特流诸如为包括如参考图7描述的数据的图5的压缩比特流502。图7是根据本公开的实施方式的使用很少值、大范围(fv_br)技术解码的压缩比特流的部分700的示例。
[0075]
部分700对数据结构indexes的值进行编码。字段702对索引的数目(即,indexes数据结构的大小)进行编码。字段703对数据结构indexes的所有索引进行编码。字段703以头尾交替的方式包括索引。也就是说,对来自indexes数据结构的头部的索引(例如,在位置0处的索引704)进行编码,然后对来自indexes数据结构的尾部的索引(例如,在位置n-1处的索引706)进行编码,然后对来自indexes数据结构的头部的索引(例如,在位置1处的索引708)进行编码,然后对来自indexes数据结构的尾部的索引(例如,在位置n-2处的索引710)进行编码,直到对所有索引进行编码,如由省略号712所指示。
[0076]
诸如图4的编码器400的编码器将部分700编码成压缩比特流,诸如图4的压缩比特
流404。例如,编码器或其中实现的技术能够接收直方图,从直方图构建比特集,通过确定比特集中的哪些比特具有第一值(例如,1)来构建indexes数据结构,对indexes数据结构的值的数目进行编码以获得字段702,并且在压缩比特流中交替地对索引值704-712进行编码。
[0077]
如下文进一步所述,使用索引的可能范围中的比特的数目对每个索引进行编码。能够使用范围代码化器(即,在编码器处的范围编码器和在解码器处的范围解码器)使用索引的可能范围中的比特的数目对每个索引进行代码化(即,由编码器编码和由解码器解码)。例如,如果已知索引仅在范围[0,255]的子范围[20,40]中,则与用于对范围[0,255]中的值进行编码将需要的7个比特相比,仅需要5个比特对索引进行编码。因此,代码化为00000的索引将对应于值20,代码化为00001的索引将对应于值21,以此类推。也就是说,必须将代码化值添加到子范围的最小界限,以获得索引的真实值。在另一示例中,如果范围不是二的幂,则能够使用算术代码化将比特数目优化为浮点值。例如,能够使用非对称数字系统(ans)熵代码化技术。
[0078]
返回图6,在602处,技术600从压缩比特流中读取非零索引的数目(num_non_zero)。也就是说,技术600读取图7的字段702。尽管利用对一的数目进行编码的字段702描述技术600,但是能够容易地认识到,能够修改技术600以对字段702中的比特集的零比特的数目进行解码。
[0079]
在604处,技术600将变量last_value_from_front初始化为-1(例如,比范围的最小可能值小1),将变量last_value_from_end初始化为比范围的最后可能值大一(max_val),并且将变量num_left初始化为要读取的总索引数目(即,字段702的值)。变量last_value_from_front和last_value_from_end被用于分别设置包括要从压缩比特流中读取的下一索引的值的子范围的下限和上限。
[0080]
在606处,如果存在要读取的更多索引(例如,如果num_left不等于0),则技术600前进到608;否则,技术600结束。
[0081]
在608处,技术600设置要从indexes数据结构的头部读取的下一索引的下限和上限。技术600将下限lower_bound设置成比要从indexes的头部读取的最后索引的值大一。因此,将lower_bound设置成last_value_from_front+1。技术600将上限upper_bound设置成last_value_from_end

num_left。
[0082]
为了说明并且假设存在要读取的4个索引(即,num_non_zero=4),当读取最先索引(例如,索引704)时,关于索引704能够讨论的所有内容是它必须在子范围[0,252]中。索引704不能够是253;否则,剩余三个索引将必须是254、255和256。然而,由于范围是[0,255],因此值256是不可能的。
[0083]
在610处,技术600读取子范围[lower_bound,upper_bound]中的下一索引(例如,indexes[0])。例如,对于indexes[0],读取ceiling(log2(upper_bound-lower_bound))个比特,其中函数ceiling(x)将x映射到大于x的最小整数。在另一示例中并且如上所提及,能够使用算术代码化。例如,比特数目不需要是整数并且能够使用算术代码化。
[0084]
在612处,技术600将变量last_value_from_front更新成等于在610处读取的索引。在614处,由于在610处读取了索引,因此技术600将保持待读取的索引的数目(num_left)递减1。
[0085]
在616处,技术600执行如关于606描述的相同测试。如果要读取的索引的数目为奇
数,则技术600将从614开始,直到读取所有索引之后结束。另一方面,当要读取的索引的数目为偶数时,技术600将从606开始,直到读取所有索引之后结束。
[0086]
在618处,技术600设置要从indexes数据结构的尾部(即末尾)读取的下一索引的下限和上限。技术600将下限lower_bound设置成等于来自前面的最后索引值(last_value_from_front)加上要读取的剩余索引的数目(num_left)。技术600将上限upper_bound设置成比从尾部读取的最后值小一(即last_value_from_end

1)。
[0087]
为了说明并且从以上示例继续,当从尾部读取最先索引(例如,索引706)时,关于索引706能够讨论的所有内容是它必须在子范围[5,255]中。索引706不能够是3或4,因为技术600知道还有小于索引706的两个索引要读取。因此,索引706不能够具有小于5的值。
[0088]
在620处,技术600读取子范围[lower_bound,upper_bound]中的下一索引(例如,indexes[n-1]),其能够是如关于610所述的。在622处,技术600将变量last_value_from_end更新成等于在620处读取的索引。在624处,由于在620处读取了索引,因此技术600将保持待读取的索引的数目(num_left)递减1。从624,技术600返回到606。
[0089]
为了说明技术600的操作,给定范围[0,255]中的值以及其中将对索引2、60、200和255处的比特进行解码的比特集,然后技术600读取范围[0,252]中的索引2、范围[5,255]中的索引255、范围[3,253]中的索引60、以及范围[61,254]中的索引200。
[0090]
作为另一示例,给定范围[0,255]中的值以及其中设置(即,将对其进行解码)索引20、250、251、254和255处的比特的比特集,然后技术600读取范围[0,251]中的索引20、范围[24,255]中的索引255、范围[21,252]中的索引250、范围[252,254]中的索引254、以及范围[251,253]中的索引251。
[0091]
在示例中,在读取索引之后,技术600能够基于从压缩比特流中读取的索引来重组比特集。例如,能够将对应于索引的比特设置成一个值(例如,1),并且能够将比特集中的所有其它比特设置成相反值(例如,0)。
[0092]
图8是根据本公开的实施方式的用于使用很少值、大范围(fv_br)对比特集进行解码的技术800的流程图的示例。比特集能够是如参考图6所述的。比特集中的每个比特对应于在最小值(例如,0)到最大值(例如,255)的范围中的相应值。技术800从压缩比特流中对比特集中的比特的索引进行解码。比特集中的每个比特具有第一值(例如,1或0)。
[0093]
技术800能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中,并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术800。技术800能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术800能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0094]
在802处,技术800从压缩比特流中对比特集中的比特的索引的数目进行解码。索引的数目能够是如关于图7的字段702所述的。
[0095]
在804处,技术800对在具有第一下限和第一上限的第一范围中的索引中的第一索引进行解码。第一下限能够等于最小值;第一上限能够等于最大值减去比特集中具有第一值的比特的索引的数目减去1;并且第一索引能够对应于比特集中具有第一值的第一比特。也就是说,如上文关于读取图7的索引704所述,技术800能够对第一索引进行解码。
[0096]
在806处,技术800对在具有第二下限和第二上限的第二范围中的索引中的最后索引进行解码。第二下限能够等于第一索引加上索引的数目减去一;第二上限能够等于最大值;并且最后索引能够对应于比特集中具有第一值的最后比特。如上文关于读取图7的索引706所述,技术800能够对最后索引进行解码。
[0097]
在808处,技术800能够将未从压缩比特流中解码的比特集的所有其它比特设置成第二值(例如,0或1)。第二值是第一值的二进制补数。
[0098]
在示例中,技术800能够进一步包括从压缩比特流中对指示比特集的比特的索引的范围和数目的代码化模式进行解码。例如,技术800能够使用许多不同的解码技术对比特集进行解码。因此,压缩比特流能够包括(即,由编码器包括)代码化模式,代码化模式向技术800指示fv_br技术将被用于对比特集进行解码。在示例中,代码化模式能够在图7的字段702之前。
[0099]
在示例中,技术800能够包括在从压缩比特流中对索引进行解码之后将剩余索引的数目递减一,诸如关于图6的614和624所述。
[0100]
在示例中,技术800能够包括紧接在对先前索引进行解码之后从压缩比特流中对下一索引进行解码,先前索引是紧接在对下一先前索引进行解码之后被解码的。
[0101]
下一索引能够是头部索引。例如,下一索引能够是字段708。因此,先前索引能够是字段706(即,尾部索引),并且下一先前索引能够是字段704(即,头部索引)。因此,对下一索引进行解码能够包括:将剩余范围的下限设置成下一先前索引加上1,如关于图6的608所述;将剩余范围的上限设置成先前索引减去剩余索引的数目,还如关于图6的608所述;以及从压缩比特流中对剩余范围中的下一索引进行解码,如关于图6的610所述。
[0102]
下一索引能够是尾部索引。例如,下一索引能够是图7的字段710。因此,先前索引能够是字段708(即,头部索引),并且下一先前索引能够是字段706(即,尾部索引)。因此,对下一索引进行解码能够包括将剩余范围的下限设置成先前索引加上剩余索引的数目,如关于图6的618所述;将剩余范围的上限设置成下一先前索引减去1,还如关于图6的618所述;并且从压缩比特流中对剩余范围中的下一索引进行解码,如关于图6的620所述。
[0103]
图9是根据本公开的实施方式的用于对比特集进行解码的技术900的流程图的示例。比特集表示范围内的值的占用或存在信息。在范围中存在相对较小数目的所有可能值并且范围相对较小的情况下,能够使用技术900。为了给出说明性示例,范围能够是[0,15]并且存在值的数目能够是四。因此,比特集可以是例如bitset=001111000...00,其中比特集长度是16个比特并且将索引[2,3,4,5]处的比特设置成1。为了便于参考,图9的技术被称为“很少值、小范围”(fv_sr)技术。
[0104]
技术900能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中,并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术900。技术900能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术900能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0105]
参考压缩比特流描述技术900,压缩比特流诸如为包括如参考图10描述的数据的图5的压缩比特流502。图10是根据本公开的实施方式的使用很少值、小范围(fv_sr)技术解
码的压缩比特流的部分1000的示例。
[0106]
部分1000包括指示字段1003中的比特集中具有特定值(即,0或1)的比特的数目的字段1002。字段1003包括一系列比特。字段1004包括比特集中的第一比特(即,bitset[0]),字段1006包括比特集中的第二比特(即,bitset[1]),以此类推。也就是说,字段1004至1012各自是比特序列。
[0107]
在902处,技术900从压缩比特流中读取一的数目(例如,num_of_ones)。也就是说,技术900能够读取图10的字段1002。一的数目指示比特集中设置成1的比特的数目。尽管利用对一的数目进行编码的字段1002描述技术900,但是能够容易地认识到,能够修改技术900以对字段1002中的零的数目进行编码。
[0108]
在904处,技术904将变量num_not_zero初始化为从压缩比特流中读取的一的数目;将变量num_zero初始化为比特集中的零比特的数目;并且将变量i初始化为0。变量i是用作到比特集中的索引的循环变量。
[0109]
变量num_not_zero被用于跟踪比特集中尚未从压缩比特流中读取的1比特的数目。每次从压缩比特流中读取1比特时,将变量num_not_zero递减1。
[0110]
变量num_zero被用于跟踪比特集中尚未从压缩比特流中读取的0比特的数目。每次从压缩比特流中读取0比特时,将变量num_zero递减1。将变量num_zero初始化为比特集中的总比特数目减去一比特的数目(即,num_of_ones)。因此,例如,如果比特集表示范围[0,31]中的值并且num_of_ones是3,则存在为0的总共29个比特(即,max_val-num_of_ones+1=31

3+1=29)。等效地,能够将num_zero计算为比特集的长度减去1比特的数目。
[0111]
在906处,技术900测试是否已经读取了所有1比特或已经读取了所有0比特,这相当于测试是否仍有未读取的0比特(即num_zero!=0)以及仍有未读取的1比特(即,num_not_zero!=0)。如果是,则技术900前进到908,否则技术900前进到914。
[0112]
在908处,技术900从压缩比特流中读取比特集中的下一比特(即,bitset[i])。在910处,如果在908处读取的比特是0,则技术900将变量num_zero递减1;否则,技术900将变量num_not_zero递减。在912处,将循环变量i递增1。从912,技术900返回到906。
[0113]
在914处,如果变量num_zero不等于零,则必定没有从比特流中读取比特集的所有0比特。因此,如果在914处,num_zero不等于零,则技术900前进到916以将比特集的所有剩余比特(即,从索引i到max_val)设置为0并且结束;否则,技术900前进到918。另一方面,如果在914处,num_zero等于零,则技术900前进到918。
[0114]
在918处,技术900将比特集的所有剩余比特(即,从索引i到max_val,如果有的话)设置成1。技术900然后结束。
[0115]
应注意,当在906处的测试失败时,能够将比特集中的剩余未读取比特(如果有的话)设置成要在908处读取的最后比特的补数。因此,在实施方式中,步骤914至918能够由以下步骤代替:对于j=i,maxval,设置bitset[j]=~bitset[i-1],其中~是比特补数运算符。
[0116]
为了说明,假设比特集是00110000。也就是说,范围是[0,7]并且一的数目是2。因此,编码器将仅编码字段1002中的2、字段1004中的0、字段1006中的0、字段1008中的1和字段1010中的1。编码器需要对压缩比特流中的任何其它比特进行编码。技术900(在902处)读取2;(在904处)将num_not_zero初始化为2,将num_zero初始化为6并且将i初始化为0;(在
908处)读取第一个0(即,字段1004,bitset[0]);(在910处)将num_zero递减1,使得num_zero现在为5;(在908处)读取第二个0(即,字段1006,bitset[1]);(在910处)将num_zero递减1,使得num_zero现在为4;(在908处)读取第一个1(即,字段1008,bitset[2]);(在910处)将num_not_zero递减1,使得num_not_zero现在为1;(在908处)读取第二个1(即,字段1010,bitset[3]);并且(在910处)将num_not_zero递减1,使得num_not_zero现在为0。此时,技术906从906移动到914。当num_zero为4(即,不为0)时,技术(在916处)将比特集的剩余4个比特设置成零。
[0117]
作为另一示例,假设比特集是00111111。也就是说,范围是[0,7]并且一的数目是8。因此,编码器将仅编码字段1002中的6、字段1004中的0、字段1006中的0。编码器需要对压缩比特流中的任何其它比特进行编码。技术900(在902处)读取6;(在904处)将num_not_zero初始化为6,将num_zero初始化为2并且将i初始化为0;(在908处)读取第一个0(即,字段1004,bitset[0]);(在910处)将num_zero递减1,使得num_zero现在为1;(在908处)读取第二个0(即,字段1006,bitset[1]);并且(在910处)将num_zero递减1,使得num_zero现在为0。此时,技术906从906移动到914。当num_zero为0时,技术900移动到918。当num_not_zero为6(即,不为0)时,技术(在920处)将比特集的剩余6个比特设置成1。
[0118]
编码器能够通过包括以下各项的步骤来编码由技术900解码的比特集:对压缩比特流中的字段1002进行编码;维持与上述num_not_zero和num_zero类似的变量;以及将比特集中的每个比特写入到压缩比特流,直到num_no_zero变成零或num_zero变成零。
[0119]
图11是根据本公开的实施方式的用于使用很少值、小范围(fv_sr)对比特集进行解码的技术1100的流程图的示例。能够参考图9描述比特集。在示例中,比特集中的每个比特能够对应于在最小值(例如,0)到最大值(例如,7、15、31或某一其它值)的范围中的相应值。技术1100从压缩比特流中对比特集中的比特进行解码,直到满足一定条件。比特集中的每个比特具有第一值(例如,1或0)。如果第一值是1(0),则第一值的补数是0(1)。
[0120]
技术1100能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中,并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术800。技术1100能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术1100能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0121]
在1102处,技术1100从压缩比特流中对比特集中具有第一值的第一比特的第一数目进行解码。压缩比特流能够是图5的压缩比特流502。第一比特的第一数目能够是如关于图10的字段1002所述。在示例中,第一值能够是1并且值的补数能够是0。在另一示例中,第一值能够是0并且值的补数能够是1。
[0122]
在1104处,技术1100将第一变量设置成具有第一值的比特集中的第一比特的第一数目。在示例中,第一变量能够是如关于图9的变量num_not_zero所述。在1106处,技术1100将第二变量设置成具有第一值的补数的比特集中的第二比特的数目。在示例中,第二变量能够是如关于图9的变量num_zero所述。因此,将第二变量设置成比特集中具有第一值的补数的第二比特的数目能够包括将第二变量设置成长度减去比特集中具有第一值的第一比特的第一数目。
[0123]
在1106处,技术1100测试是否具有第一值的更多比特保持待读取以及具有第一值的补数的更多比特保持待读取,如关于图9的906所述。当测试成功(如由循环箭头1109所指示)时,技术1100执行步骤1110至1114,如关于图9的908至910所述。
[0124]
在1110处,技术1100从压缩比特流中读取比特(即,比特集中的下一比特)。在1112处,如果比特等于第一值,则技术1100将第一变量递减。在1114处,如果比特等于第一值的补数,则技术1100将第二值递减。从1114,技术1100返回到1108。
[0125]
在示例中,技术1100能够包括在不再有具有第一值的比特保持待读取或不再有具有第一值的补数的比特保持待读取之后将比特集中的剩余比特设置成第一值,如关于图9的918至920所述。在示例中,技术1100能够包括在不再有具有第一值的比特保持待读取或不再有具有第一值的补数的比特保持待读取之后将比特集中的剩余比特设置成第一值的补数,如关于图9的914至916所述。在示例中,技术1100能够包括在不再有具有第一值的比特保持待读取或不再有具有第一值的补数的比特保持待读取之后将比特集中的剩余比特设置成从压缩比特流中读取的最后比特值的补数。
[0126]
比特集中的每个比特能够指示范围中的相应值的存在。在示例中,技术1100能够进一步包括从压缩比特流中对指示第一比特的范围和第一数目的代码化模式进行解码。例如,技术1100能够使用许多不同的解码技术对比特集进行解码。因此,压缩比特流能够包括(即,由编码器包括)代码化模式,代码化模式向技术1100指示fv_sr技术将被用于对比特集进行解码。在示例中,代码化模式能够在图10的字段1002之前。
[0127]
在一些情况下,比特集能够表示小范围中的许多值。为了便于参考,用于对此类比特集进行解码的技术在本文中被称为很多值、小范围(mv_sr)。
[0128]
诸如熵代码化的一些代码化技术依赖于对出现的值的分布进行建模的概率模型。通过使用基于所测量或所估计的值的分布的概率模型(即,概率分布),熵代码化能够将表示数据(例如,图像或视频数据)所需的比特数目减少到接近理论最小值。诸如算术代码化、huffman代码化和其它可变长度到可变长度代码化引擎的熵代码化引擎能够使用概率分布。
[0129]
图12是根据本公开的实施方式的用于使用很多值、小范围(mv_sr)对比特集进行解码的技术1200的流程图的示例。技术1200能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中,并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术1200。技术1200能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术1200能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0130]
mv_sr技术使用渐进概率以从压缩比特流中对下一比特进行解码。在诸如参考图12描述的渐进算术代码化方法中,能够在对比特集中的每个比特进行代码化之后调整概率分布。调整后的概率分布能够被用于对下一比特进行代码化。例如,编码器能够首先发送具有第一值(例如,1)的比特数目的计数。“发送”能够意指经由压缩比特流传输到解码器、编码在稍后能够由解码器解码的存储的比特流中等。具有第一值的比特的数目能够编码在比特流中且(由解码器)从比特流中解码。
[0131]
比特集的长度能够由解码器先验已知,或者能够由编码器在压缩比特流中发送。
在示例中,长度能够对应于在范围[0,max_val]中的最大值加上1(即,max_val+1)。如上所述,比特集中的每个比特能够指示范围中的对应值的存在。更一般地,如果范围是[min,max],则比特集的长度由max-min+1给出。
[0132]
为了说明,假设比特集的长度是l并且存在具有第一值的m个比特。对于比特集中的最先比特,比特具有第一值(例如,具有值1)的概率由等式(1)给出:
[0133][0134]
对于所有后续比特,具有第一值(例如等于1)的比特的最佳概率估计由等式(2)给出
[0135][0136]
解码器能够更新概率估计,而无需来自编码器的额外信息(例如,压缩比特流中的语法元素)。
[0137]
参考调整作为第一值的补数的下一比特的概率进一步描述技术1200,其中,技术1200对比特集中具有第一值的比特的数目进行解码(例如,读取)。
[0138]
在1202处,技术1200从压缩比特流中读取比特集中设置成1(例如,第一值)的比特的数目。在示例中,第一值能够是0。在1204处,技术1200对变量num_zero、num_not_zero和i进行初始化,如关于图9的904所述。
[0139]
在1206处,技术1200确定是否已经从压缩比特流中读取了所有1比特。如果是,则技术1200前进到1214;否则,技术1200前进到1208以读取下一比特(即,bitset[i])。在1208处,以由等式(3)给出的概率读取下一比特(即,bitset[i])。
[0140]
p(bitset[i]=0)=num_zero/(num_zero+num_not_zero)
ꢀꢀ
(3)
[0141]
也就是说,概率等于比特集中保持未读取的零的数目除以未读取比特的总数目(num_zero+num_not_zero)。或者,技术1200能够使用等式(4)的概率以比特为1的概率读取下一比特。
[0142]
p(bitset[i]=1)=num_not_zero/(num_zero+num_not_zero)
ꢀꢀ
(4)
[0143]
在1210处,技术1200更新num_zero或num_not_zero,如关于图9的910所述。在1212处,技术1200更新变量i以准备读取比特集的下一比特。
[0144]
由于技术1200循环直到读取了所有1比特,因此当技术1200到达1214时,可能仍有一些未读取的0比特。因此,在1214处,技术1200将任何剩余未读取比特设置成0。剩余比特是从索引i到比特集的长度减去1的那些比特。同样,剩余比特是从索引i到范围的最大值(max_val)的那些比特。
[0145]
为了说明,假设要解码的比特集是0011011011011。因此,1比特的数目是8并且比特集的长度是13(或者,等效地,范围能够是[0,12])。因此,零比特的数目是5。
[0146]
技术1200以比特为0的5/13概率读取bitset[0]。由于比特确实为0,因此num_zero递减到4并且保持待读取的比特的总数目是12。技术1200然后以比特为0的4/12概率读取bitset[1]。由于比特确实为0,因此num_zero递减到3并且保持待读取的比特的总数目是11。技术1200然后以比特为0的3/11概率读取bitset[2]。由于比特为1,因此技术1200将num_not_zero递减到7。技术1200然后以比特为0的3/10概率读取bitset[3]。以此类推。
[0147]
图13是根据本公开的实施方式的用于对比特集进行解码的技术1300的流程图的示例。比特集表示范围内的值的占用或存在信息。在范围中存在相对较大数目的所有可能值并且范围相对较大的情况下,能够使用技术1300。为了给出说明性示例,范围能够是[0,255]并且存在值的数目能够是74。为了便于参考,图13的技术被称为“许多值、大范围”(mv_br)技术。
[0148]
技术1300能够例如实现为可以由计算和通信设备(诸如图1的计算和通信设备100a、100b、100c中的一个)执行的软件程序。软件程序能够包括机器可读指令,机器可读指令可以存储在诸如图1的存储器110的存储器中,并且当由诸如图1的处理器120的处理器执行时能够使计算和通信设备执行技术1300。技术1300能够在图5的解码器500的熵解码单元510中全部地或部分地实现。技术1300能够使用专用硬件或固件实现。可以使用多个处理器、存储器、或两者。
[0149]
为了说明技术1300,并且在不失一般性的情况下,使比特集bitset为00000111110...011000

0,其中比特集的长度是256个比特并且将索引[5,6,7,8,9,23,24]处的比特设置成1。
[0150]
技术1300从比特流中读取索引差。也就是说,代替读取索引[i0,i1,i2,i3,...,i
n-2
,i
n-1
],技术1300读取[i0,i
1-i0,i
2-i1,i
3-i2,...,i
n-2-i
n-3
,i
n-1-i
n-2
],这需要比索引本身更少的比特来存储在压缩比特流中。因此,代替[5,6,7,8,9,23,24],技术1300读取[5,1,1,1,1,14,1]。由于索引与下一索引之间的差为至少一,因此在一些实施方式中,技术1300能够读取[i0,i
1-i
0-1,i
2-i
1-1,i
3-i
2-1,...,i
n-2-i
n-3-1,i
n-1-i
n-2-1]。因此,技术1300能够读取[5,0,0,0,0,13,0]。下面的说明使用索引差[5,1,1,1,1,14,1]。
[0151]
为了清楚,如本文中为了便于说明所使用的术语“索引差”包括第一索引的索引本身。也就是说,值“5”是索引本身并且也被术语“索引差”涵盖,而剩余值(即1、1、1,1、14、1)是真正的索引差。
[0152]
技术1300分批次读取索引差。每个批次包括在该批次内要使用size比特数目读取的索引差的以比特为单位的大小(即,size,字段1416)、该批次中的索引差的数目(即,num_of_diffs,字段1418)、以及所有num_of_diffs索引差本身。
[0153]
图14是根据本公开的实施方式的用于说明与很多值、大范围一起使用的压缩比特流格式的图1400的示例。
[0154]
行1402示出由技术1300读取的索引差,索引差是[5,1,1,1,1,14,1]。行1404示出压缩比特流的以比特为单位的内容。行1406描述每一组比特表示的内容。如上文所提及,技术1300分批次读取索引差。将压缩比特流图示为包括四个批次;即批次1408到1414。
[0155]
通过对行1404进行编码的编码器确定哪些索引差被包括在哪些批次中。存在用于编码器将索引差分组为批次的很多方式。
[0156]
在示例中,编码器能够基于将对索引差进行编码所需的比特数目最小化的分组来选择批次(即,如何将索引差分组为批次)。
[0157]
在示例中,编码器能够在批次内包括批次内的第一索引差的能够利用与第一索引相同数目的比特或比第一索引更少数目的比特进行解码的所有后续索引差,第一索引差。例如,给定索引差的序列[5,1,1,2,11],第一索引差(即,5)需要3个比特。因此,编码器能够将索引差5、1、1和2分组为一个批次。索引差11需要4个比特。因此,在相同批次中不包括11。
[0158]
在示例中,编码器能够在相同批次内分组该批次内的第一索引差的能够通过不少于阈值数目的比特进行编码的所有那些后续索引差,阈值数目的比特少于第一索引。例如,如果阈值是1,则由于“5”需要3个比特,但是后续索引差“1”需要不超过1个比特,因此不将“1”包括在与5相同的批次中,因为3-1》阈值(即,1)。因此,批次将仅包括索引差5并且然后开始新批次。
[0159]
每个索引是大于或等于0并且小于比特集的长度的值。如果例如长度是256个比特,则每个索引在范围[0,255]中。由于最大索引是255,因此表示索引所需的比特数目是7个比特。也就是说,对索引进行编码所需的比特数目在范围[0,7]中,其本身能够用3个比特进行编码。在图14中,size字段(即,字段1416)示为3比特字段。更一般地,给定具有长度l的比特集,size字段能够被编码在ceiling(log2(log2(length))中。已知size在范围[0,log2(length)]中,size字段能够使用范围代码化器进行代码化。字段1418(即,num_of_diffs字段)能够使用范围代码化器进行代码化。字段1418在范围[1,num of elements left]中。
[0160]
通过技术1300如下解释(以及因此读取)行1404。下一批次的每个索引差需要读取3个比特(即,011);在该批次中存在一个索引差;该值是5(即,二进制101);下一批次的每个索引差需要读取1个(即,001)比特;在该批次中存在4个(即,100)索引差;那些值是1、1、1和1;下一批次的每个索引差需要读取4个比特(即,100);在该批次中存在一个索引差;该值是14(即,二进制1110);下一批次的每个索引差需要读取1个比特;在该批次中存在一个索引差;该值是1(即,二进制1)。
[0161]
解码器能够推断出在压缩比特流中不再有批次。例如,如果读取的最后索引差对应于比特集的最后比特,则解码器能够推断出不再有批次。解码器能够推断出在压缩比特流中不再有批次,因为例如提前知道要读取多少索引。
[0162]
在示例中,能够推断出批次中的索引差。例如,如果size是1,则索引差的值不需要被包括在比特流中,因为对于1比特仅可能有一个可能索引差;即索引差1。
[0163]
返回到图13。在1302处,技术1330从压缩比特流中对比特集中具有第一值的比特的相应索引进行解码。相应索引包括第一索引和第二索引。第一索引和第二索引是从压缩比特流中解码的连续索引。也就是说,技术13不会对第一索引与第二索引之间的任何其它索引进行解码。对比特的相应索引进行解码能够包括步骤1302_2到1302_8。
[0164]
在1302_2处,技术1300获得比特集中具有第一值的第一比特的第一索引。假设从左到右读取比特集,则除非上下文另外指示,否则如本文所使用的“第一比特”不一定意指比特集的最左比特。如果第一索引是最先索引(即,[5,6,7,8,9,23,24]中的“5”),则获得第一索引能够意指从压缩比特流中读取(例如,解码)第一索引。如果第一索引不是最先索引,则获得第一索引能够包括从压缩比特流中对索引差进行解码并且将索引差加上1添加到紧接在前的索引。也就是说,例如,技术1300能够读取图14的批次1412的索引差14,并且将其添加到紧接在前的索引9以获得14+9=23(即,第二索引)。
[0165]
在1302_4处,技术1300将在比特集的第一索引处的第一比特设置成第一值。例如,在获得索引23时,技术1300设置bitset[23]=1。在1302_6处,技术1300从压缩比特流中对第一索引差进行解码。例如,假设第一索引是9,则第一索引差将是索引差14。在1302_8处,技术1300将第一索引差(例如,14)添加到第一索引(例如,9)以获得第二索引(例如,23)。在1302_10处,技术1300将比特集的第二索引处的第二索引设置成第一值。也就是说,例如,技
术1300设置bitset[23]=1。
[0166]
在1304处,技术1300将比特集中在第一索引与第二索引之间的每个比特(如果有的话)设置成第二值,第二值是第一值的补数。例如,使用图14的索引[5,6,7,8,9,23,24],第一索引能够是索引9并且第二索引能够是23。因此,虽然比特集的第9个比特(即,在索引9处的比特)和第25个比特(即,在索引23处的比特)具有第一值(例如,1),但是技术1300将比特集中的第10个到第24个比特设置成第一值的补数(例如,0)。如果第一索引是5并且第二索引是6,则由于在第5个比特与第6比特个之间不存在比特,所以没有比特被设置成第一值的补数。
[0167]
如参考图14所述,索引差能够分批次进行解码。因此,对比特的相应索引进行解码能够包括:从压缩比特流中对以比特为单位的大小(例如,size)进行解码;从压缩比特流中对索引差的数目(例如,num_of_diffs)进行解码;以及使用等于以比特为单位的大小(即,size)的比特数目从压缩比特流中对索引差中的每个索引差进行解码。对以比特为单位的大小进行解码能够包括使用ceiling(log2(log2(长度)))个比特对以比特为单位的大小进行解码,其中,长度是比特集的长度。在一些示例中,并且如上文所提及,使用等于以比特为单位的大小的比特数目从压缩比特流中对索引差中的每个索引差进行解码能够包括推断索引差。
[0168]
在示例中,技术1300能够进一步包括从压缩比特流中对指示比特集的比特的索引的范围和数目的代码化模式进行解码。例如,技术1300可能够使用许多不同的解码技术对比特集进行解码。因此,压缩比特流能够包括(即,由编码器包括)代码化模式,代码化模式向技术1300指示mv_br技术将被用于对比特集进行解码。在示例中,代码化模式能够在图14的字段1416a之前。
[0169]
如上所述,解码器能够使用若干不同的比特集解码技术对比特集进行解码。解码器使用哪种技术能够使用代码化模式在压缩比特流中指示。代码化模式能够是fv_br、fv_sr、mv_sr或mv_br中的一个。在这种情况下,由于存在四种模式,所以能够使用2个比特从比特流中读取代码化模式。例如,在从压缩比特流中读取代码化模式之后,解码器能够根据代码化模式对比特集进行解码。
[0170]
编码器确定代码化模式。在示例中,编码器能够使用每个可用代码化模式对比特集进行测试编码,并且选择在压缩比特流中产生最小数目的比特的代码化模式。虽然本公开中使用简写名称(即fv_br、fv_sr、mv_sr或mv_br)以容易地引用不同的比特集代码化技术,但此类名称并不以任何方式限制编码器如何为特定比特集选择代码化模式。
[0171]
图15是根据本公开的实施方式的压缩比特流的部分1500的示例。部分1500包括指示当使用字段1504中的数据进行解码(例如,重构)比特集时解码器应当使用的代码化模式的字段1502,字段1504中的数据根据字段1502的代码化模式对比特集进行编码。
[0172]
为了便于说明,分别将图6、8、9、11、12和13的技术600、800、900、1100、1200和1300描绘和描述为一系列步骤或操作。然而,根据本公开的步骤或操作能够按各种顺序和/或同时发生。另外,可以使用本文未呈现和描述的其它步骤或操作。此外,可能不需要所有图示的步骤或操作来实现根据所公开的主题的方法。
[0173]
词语“示例”或“示例性”在本文中被用于意指充当示例、实例或说明。本文描述为“示例”或“示例性”的任何方面或设计不一定被解释为比其它方面或设计优选或有利。相
反,对词语“示例”或“示例性”的使用旨在以具体方式呈现概念。如本技术中所使用,术语“或”旨在意指包括性“或”,而不是排他性“或”。也就是说,除非另外指定或从上下文中清楚可知,否则“x包括a或b”旨在意指其任何自然的包括性置换。也就是说,如果x包括a;x包括b;或者x包括a和b两者,则在任何前述情况下都满足“x包括a或b”。另外,如本技术和所附权利要求书中使用的词语“一”和“一个”一般应当被解释为意指“一个或多个”,除非另外指定或从上下文清楚地指示为单数形式。此外,除非如此描述,否则贯穿全文对术语“实施例”或“一个实施例”或“实施方式”或“一个实施方式”的使用并不旨在意指相同的实施例或实施方式。如本文所用,术语“确定”和“识别”或其任何变体包括使用图1中所示的一个或多个设备以无论任何方式选择、确认、计算、查找、接收、确定、建立、获得或以其它方式识别或确定。
[0174]
此外,为了简化说明,尽管本文中的附图和描述可以包括操作或阶段的序列或系列,但是本文公开的方法的要素能够按各种顺序和/或同时发生。另外,本文公开的方法的要素可以与本文未明确呈现和描述的其它要素一起发生。此外,可以从根据所公开的主题的方法的实施方式中省略本文描述的方法的一个或多个要素。
[0175]
传输计算和通信设备100a和/或接收计算和通信设备100b(以及存储在其上和/或由此执行的算法、方法、指令等)的实施方式能够以硬件、软件,或其任何组合来实现。硬件能够包括例如计算机、知识产权(ip)核心、专用集成电路(asic)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器、或任何其它合适的电路。在权利要求中,术语“处理器”应当被理解为单独地或组合地包括任何前述硬件。术语“信号”和“数据”可互换使用。此外,传输计算和通信设备100a以及接收计算和通信设备100b的部分不必以相同的方式实现。
[0176]
此外,在一个实施方式中,例如,能够使用计算机程序来实现传输计算和通信设备100a或接收计算和通信设备100b,计算机程序在被执行时执行本文描述的相应方法、算法和/或指令中的任一个。另外或替代地,例如,能够利用能够包含用于执行本文描述的方法、算法或指令中的任一个的专用硬件的专用计算机/处理器。
[0177]
传输计算和通信设备100a以及接收计算和通信设备100b能够例如在实时视频系统中的计算机上实现。或者,传输计算和通信设备100a能够在服务器上实现,并且接收计算和通信设备100b能够在诸如手持通信设备的与服务器分开的设备上实现。在这种情况下,传输计算和通信设备100a能够使用编码器400将内容编码成编码视频信号并且将编码视频信号传输到通信设备。进而,通信设备然后能够使用解码器500对编码视频信号进行解码。或者,通信设备能够对本地存储在通信设备上的内容,例如,未由传输计算和通信设备100a传输的内容,进行解码。其它合适的传输计算和通信设备100a和接收计算和通信设备100b实施方案是可用的。例如,接收计算和通信设备100b能够是通常固定的个人计算机,而不是便携式通信设备,和/或包括编码器400的设备也可以包括解码器500。
[0178]
此外,实施方式的全部或部分能够采用可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质能够是能够例如有形地包含、存储、传送、或输送程序以供任何处理器使用或结合任何处理器使用的任何设备。介质能够是例如电子、磁性、光学、电磁或半导体设备。其它合适的介质也是可用的。已经描述了上述实施方式,以便允许容易地理解本技术而不是限制性的。相反,本技术涵盖所附权利要
求的范围内所包括的各种修改和等效布置,其范围应被赋予法律允许的最宽广解释,以便涵盖所有这样的修改和等效布置。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1