CN113574805A - 用于在熵编码中处理等概率符号的方法和设备 - Google Patents
用于在熵编码中处理等概率符号的方法和设备 Download PDFInfo
- Publication number
- CN113574805A CN113574805A CN202080022464.6A CN202080022464A CN113574805A CN 113574805 A CN113574805 A CN 113574805A CN 202080022464 A CN202080022464 A CN 202080022464A CN 113574805 A CN113574805 A CN 113574805A
- Authority
- CN
- China
- Prior art keywords
- bit stream
- data
- reverse
- data unit
- decoder
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3068—Precoding preceding compression, e.g. Burrows-Wheeler transformation
- H03M7/3079—Context modeling
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4056—Coding table selection
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
Abstract
对数据进行编码和解码的方法,其中一些数据符号是熵编码的并且一些数据符号是旁路编码的。编码器将编码符号分离为熵编码流和旁路编码流。这些流被封装在数据单元中,数据单元具有被构造为包含一个前向顺序流和另一个反向顺序流的有效载荷,其中反向顺序流与数据单元的结束处对准。以该方式,在解码器处,解码器可以开始从前向顺序流的起始处对前向顺序流进行解码,并且还可以通过以反向顺序提取符号从在数据单元的结束处的反向顺序流的开始处对反向顺序流进行解码。数据单元不需要用信号通知流的长度。解码器从显式或隐式信令来确定数据单元的长度。
Description
技术领域
本申请整体涉及数据压缩,并且在一个特定示例中涉及符号的熵编码。本申请描述了用于在熵编码系统中处理等概率符号的方法和设备。
背景技术
数据压缩被用于通信和计算机网络,以有效地存储、传输和再现信息。数据通常采用从字母表中提取的符号的形式。在一些示例中,字母表可以是二进制的,但是在许多其他示例中,字母表可以是非二进制的。
熵编码通常被用于对符号系列或符号序列进行编码,使得需要用来表示该系列或序列的比特不用熵编码所需的比特更少。在某些情况下,熵编码可以是上下文自适应熵编码。示例熵编码过程包括可变长度代码,诸如霍夫曼代码、算术编码等。
由等概率符号组成的字母表不能被压缩。因此,不希望使用算术编码器或其他复杂的熵编码器来传达等概率符号。然而,由于系统设计的原因,通常希望在使用单个熵编码器时,同时交织普通符号和等概率符号两者。
提供能够有效地处理熵编码符号和等概率符号的编码器和解码器将是有利的。
附图说明
现在将通过示例的方式、参考示出本申请的示例实施例的附图,并且其中:
图1示出了使用熵编码和旁路编码两者的熵编码器的一个示例;
图2示意性地图示了示例数据单元的结构;
图3以框图形式示出了编码器的一个示例;
图4以框图形式示出了解码器的一个示例;
图5以流程图的形式示出了一个示例编码过程;
图6以流程图的形式示出了一个示例解码过程;
图7示意性地图示了另一示例数据单元的结构;
图8示出了编码器的一个示例实施例的简化框图;以及
图9示出了解码器的一个示例实施例的简化框图。
在不同的图中可以使用相同的附图标记来表示相同的组件。
具体实施方式
本申请描述了用于将熵编码数据与旁路编码数据一起编码和解码的方法和设备,其中旁路编码数据可以包括等概率符号的非熵编码。该方法和设备可以包括将熵编码和旁路编码数据的流一起封装在有效载荷中,使得避免必须用信号通知各个流的长度的成本。
在一个方面,本申请描述了对数据单元进行解码来重构编码数据的方法。方法可以包括:接收数据单元,数据单元依次包括前导码,、有效载荷,有效载荷包括依次前向顺序比特流、反向顺序比特流;确定数据单元的长度;响应于来自解码单元的对符号的请求,选择性地以前向顺序从前向比特流读取数据或者以反向顺序从反向比特流读取数据;以及在解码单元中对数据进行解码以重构符号。前向顺序比特流和反向顺序比特流中的一个包括熵编码符号,并且前向顺序比特流和反向顺序比特流中的另一个包括旁路编码符号。
在另一方面,本申请描述了传输编码数据的方法,其中编码数据包括熵编码符号的第一比特流和旁路编码符号的第二比特流。方法可以包括缓冲第一比特流和第二比特流;将第一比特流和第二比特流中的一个反向来创建反向顺序比特流,其中第一比特流和第二比特流中的另一个是前向顺序比特流;生成数据单元,数据单元依次包括前导码、前向顺序比特流、反向顺序比特流;以及输出数据单元。
在另一方面,本申请描述了被配置为实现这样的编码和解码方法的编码器和解码器。
在又一方面,本申请描述了存储计算机可执行程序指令的非暂时性计算机可读介质,计算机可执行程序指令在被执行时,使一个或多个处理器执行所描述的编码和/或解码方法。
在又一方面,本申请描述了包含程序指令的计算机可读信号,程序指令在由计算机执行时,使计算机执行所描述的编码和/或解码方法。
本领域普通技术人员通过结合附图阅读以下示例描述,将理解本申请的其他方面和特征。
关于本发明的一个方面或实施例描述的任何特征也可以用于一个或多个其他方面/实施例。本发明的这些和其他方面将通过本文中描述的实施例变得显而易见并被阐明。
在本申请中,术语“和/或”旨在涵盖所列元素的所有可能组合和子组合,包括单独列出的元素中的任一个、元素的任何子组合或所有元素,并且不一定排除附加元素。
在本申请中,短语“…或…中的至少一个”旨在涵盖所列元素中的任一个或多个,包括单独列出的元素中的任一个、元素的任何子组合或所有元素,并且不必排除任何附加元素,也不必需要所有元素。
首先参考图1,图1示出了示例编码器100的框图。编码器100包括编码单元102,编码单元102将源数据转换为编码符号的比特流。源数据可以包括根据压缩方案被压缩的任何数据。非限制性示例包括图像数据、音频数据、视频数据、点云数据和其他类型的数据。从编码单元102输出的比特流可以包括使用熵编码进行编码的一些符号以及已被旁路编码的一些符号。
有效载荷封装器104接收比特流并且封装比特流以用于存储或传输。在一些情况下,这包括将比特流分解为多个部分并且将这些部分分组化,使得每个数据单元包括前导码以及具有比特流的一部分的有效载荷。然后,数据单元被输出用于存储或传输。
在一些情况下,诸如算术编码器的熵编码器可以被适配用于处理等概率符号。例如,在二进制算术编码器中,区间的细分可以被简化(诸如将乘法实现为比特移位)。然而,仍然需要计算来更新编解码器状态并(在解码器处)确定解码符号值。通过指定某些符号使用静态p=0.5概率模型,可以在压缩系统的设计中使用这种优化,其中所指定的符号被称为旁路编码。H.264|AVC和H.265|HEVC视频压缩系统均采用这种方法。
在一个备选实现方式中,符号流可以被划分为两个子流。第一流由算术编码的非旁路编码符号组成,从而产生所谓的算术熵编码(AEC)流,并且第二流是未压缩的旁路编码符号序列。为了封装和传输两个单独的流,使用长度字段来指示第一编码子流的长度L,然后允许解码器同时访问两个流,它需要这样做才能重新复用在解码期间以正确的序列排列符号。由于长度字段的附加信令,该方法导致压缩效率降低,同时还需要解码器缓冲整个长度L的第一子流,以访问第二子流的起始处(位置L+1处)。
在一个方面,本申请提供了对符号进行编码的方法,方法能够在没有长度字段的信令开销的情况下,对熵编码流和旁路编码流进行并行解码。在长度可由解码器确定的数据单元中用信号发送编码数据的系统中,数据单元的有效载荷被构造为包含前向顺序的一个流和反向顺序的另一个流,其中反向顺序流与数据单元的结束处对准。以这种方式,在解码器处,解码器可以从前向顺序流的起始处开始对前向顺序流进行解码,该起始处在数据单元的前部、位于前导码或其他元数据结构之后,并且还可以通过以反向顺序提取符号,从在数据单元的结束处的反向顺序流的起始处开始对反向顺序流进行解码。清楚地,解码器无需了解任一流的长度即可开始对其进行解码。还应当理解,解码器将需要在存储器中缓冲整个数据单元,以能够从这两个结束处来消费数据单元。
在一个示例中,反向顺序指针可以在数据单元的端部处开始,并且随着从反向顺序流中读取编码符号而递减。在另一示例中,数据单元可以以反向顺序被复制到存储器,并且与反向数据单元的起始处对准的反向流指针然后递增,以有序读取反向顺序流的编码符号。
图2示意性地图示了示例数据单元200。数据单元200被构造为在其起始处包括前导码202。前导码202包含报头信息,在各种实施例中,报头信息可以包括元数据,诸如例如版本代码、各种类型的信令标志(例如,解码或重构过程使用的参数)、时间戳、数据类型代码等。应当理解,前导码可以具有由协议固定的长度,可以具有在比特流中别处用信号通知的固定长度,或者可以具有由解码器诸如通过检测结束码来确定的可变长度等。在一些实现方式中,前导码202可以用信号通知数据单元长度。这可以包括显式长度字段,或者长度可以通过数据单元类型码或链接到长度值的其他元数据来指定。
按照传输顺序,在前导码202之后是有效载荷204。有效载荷204的前端包含前向顺序流206。前向顺序流206与有效载荷204的起始处对准。有效载荷204还包括反向顺序流208。反向顺序流208是已被反向并且被添加到有效载荷204,以将在反向之前的比特流的原始起始处与数据单元200的结束处对准的比特流。
在一个示例中,前向顺序流206包含熵编码符号并且反向顺序流208包含旁路编码符号。在另一示例中,前向顺序流206包含旁路编码符号并且反向顺序流208包含熵编码符号。
在解码器处,在读取前导码202之后,解码器可以将两个指针初始化:被初始化到前向顺序流206的起始处的前向读指针,以及被初始化到数据单元200的结束处(即,反向顺序流208的起始处)的反向读指针。本领域普通技术人员可以理解,将反向读指针初始化在数据单元的结束处的构思可能意味着它被初始化到字节、字或其他数据单元的起始处的位置,其中该字节、字或其他数据单元的结束处与数据单元200的结束处对准,并且还意味着指针不一定指向数据单元200的最后一个比特。
当符号被请求用于数据的解码和重构时,解码器根据所请求的符号类型,从前向顺序流206或反向顺序流208读取(多个)编码符号。当从反向顺序流208读取符号时,反向读指针递减。
应当理解,可以借助原始比特流的逐位反向来生成反向顺序比特流208。在一些情况下,特别是在存储器以字节寻址的情况下,可以借助原始比特流的逐字节反向来生成反向顺序比特流208。同样,根据利用每个符号读取操作提取的编码数据的大小,前向读指针的递增或反向读指针的递减可能对应于所指向的存储器位置的逐位变化、所指向的存储器位置的逐字节变化等。也可以使用其他粒度,包括字、半字或其他。
使用上述技术,如果解码器知道或者可以确定数据单元200的长度,则无需将流的长度用信号通知给解码器。在一个示例中,数据单元的长度被规定为协议栈中的更高级别。示例包括网络数据报有效载荷长度、文件格式、应用编程接口(API)定义或者其他高级规范。在另一示例中,前导码202本身被构造为包含指示数据单元长度的信号。例如,长度可以在前导码202中被显式指定。备选地,例如,代码或其他索引可以指示与特定数据单元长度相关联的数据单元类型。在又一示例中,前导码202可以包括向解码器发信号通知数据单元的起始的同步码字。通过在所传输的比特流中找到下一个同步码字,解码器能够确定数据单元200的长度。
现在参考图3,图3以框图形式图示了一个示例编码器300。编码器300包括生成两个流的编码单元302:熵编码流304和旁路编码流306。在一些示例中,编码单元302生成其中熵编码和旁路编码数据被交织的单个比特流。在这样的实施例中,编码单元302还包括解复用器,以基于符号类型来将流分离为两个流304、306。
如本文所使用的,术语“符号类型”指代符号是熵编码、还是旁路编码。符号类型可以由为特定符号规定特定编码机制的上下文模型来指定。例如,在变换域系数的视频编码的示例情况下,上下文模型可以规定某些上下文确定操作来确定用于对有效系数标志、大于一的标志等进行熵编码的上下文。它还可以进一步指定某些符号(诸如符号位)将被旁路编码,即,这样的符号的概率被静态设置为p=0.5。在一些示例中,如下文将进一步描述的,在上下文自适应系统中被指定为熵编码的符号可能碰巧具有足够接近等概率(p=0.5)的概率,从而它们被重新路由到旁路编码器而不是被熵编码。
编码器300还包括缓冲器308来存储熵编码流304和旁路编码流306。缓冲器308可以包括一个或多个物理存储器和/或物理存储器的部分。
在一些实施例中,缓冲器308可以以反向顺序存储流304、306中的一个。即,存储操作可以包括将数据顺序的反向应用于流304、306中的一个。如上所述,反向可以是逐位、逐字节或者某个其他级别。
编码器300还包括有效载荷封装器310。有效载荷封装器310可以是数据传输单元的一部分,其被配置为根据所选择的传输协议将数据分组化和封装来进行传输。有效载荷封装器310以数据单元312的形式输出封装数据。数据单元312被构造为如图2所示;即,以前导码开始,随后是前向顺序流,并且以反向顺序流结束。在该示例中,前向顺序流可以包括熵编码流304,并且反向顺序流可以包括旁路编码流306的反向副本。
如果缓冲器308被配置为以反向顺序存储旁路编码流306,则可以由有效载荷封装器310通过从缓冲器308读取反向存储的旁路编码流306来获得反向顺序流。如果缓冲器308以其前向编码顺序存储旁路编码流306,则有效载荷封装器310可以在将旁路编码流306插入数据单元312之前将其反向。在一个示例中,这可以包括以反向顺序从缓冲器308读取旁路编码流306。
还应当理解,反向顺序流将与数据单元312的结束处对准。如果数据单元312具有规定的或固定的长度,则有效载荷封装器310可以添加缓冲比特和/或字节来确保旁路编码流306的第一个字节(以编码顺序)位于数据单元312的最后一个字节位置中。即使数据单元不是规定长度,有效载荷封装器310也可以被配置为向熵编码流304和旁路编码流306的结束处(以编码顺序)添加比特来确保在基于字节进行处理的情况下,它们是字节对准的。当解码器确定流304和306的解码已完成时,这些填充比特可以被解码器丢弃。将理解,解码器借助解码过程的操作,根据正在使用的上下文自适应解码过程消费符号,并且因此可以确定它何时到达编码部分(例如,编码方案规定的、正在被重建的数据部分)的结束处。
在一些情况下,缓冲器308可以包括多于一个的缓冲器/存储器。因为当编码单元302生成两个流时,两个流的长度通常是预先未知的,所以两个缓冲器与后续的级联操作一起被使用,或者单个足够大的缓冲器被使用并且通过移动缓冲器内的数据来执行级联。例如,旁路编码流可以被移动为与熵编码流的结束处对准;备选地,前导码和前向熵编码流可以被移动为与反向旁路编码流的起始处对准。
在一些实现方式中,有效载荷封装器310可以具有它自己的输出缓冲器,它向输出缓冲器写入数据来组装数据单元312。在一些实现方式中,使用例如以上讨论的级联/反向操作,有效载荷封装器310使用缓冲器308来组装数据单元312。
现在将参考图4,图4以框图形式示出了示例解码器400。解码器400接收根据以上描述构造的一个或多个数据单元。解码器400包括接收数据单元的有效载荷解封装器402。根据传输协议,有效载荷解封装器402在一些情况下可以从其他包封中提取数据单元。有效载荷解封装器402可以将数据单元或者至少有效载荷存储在缓冲器404中。在一些情况下,有效载荷解封装器402以前向(传输)顺序将数据单元的副本写入缓冲器404。在一个示例中,有效载荷解封装器402将数据单元的第二副本写入缓冲器404,但是以反向顺序(逐位、逐字节或以其他方式)写入,使得反向存储的数据单元的起始处是与有效负载的结束处对准的(反向)旁路编码流的起始处。
在该示例中,假设有效载荷解封装器402将数据单元的单个副本写入缓冲器404。如前所述,数据单元包括前导码406、前向顺序流408和反向顺序流410。
在一些示例中,解码器400可以将前向读指针412初始化在前向顺序流408的第一个比特/字节处,并且可以将反向读指针414初始化在反向顺序流410的第一个比特/字节/等处。解码单元416根据所讨论的数据的编码模型来管理解码和重构过程。随着解码过程的进行,解码单元416基于解码过程和正在使用的上下文模型来请求418下一个编码符号。请求418可以指示符号类型,即,熵编码或旁路编码。读取操作然后发生,以根据请求418中的符号类型,从来自前向顺序流408或反向顺序流410的存储的数据单元读取数据部分,例如(多个)编码符号。读取操作根据所请求的符号类型,从前向读指针412或反向读指针414所指示的地址提取(多个)编码符号。前向读指针412或反向读指针414然后分别递增或递减。
在熵编码流是算术编码比特流,即,AEC流的示例中,应当理解,AEC解码器在某种程度上异步运行,因为来自比特流的一部分比特不对应于离散符号,而是比特流的某一部分比特限定了连续间隔的算术编码,其中连续间隔基于上下文概率反映二进制码序列的编码。在该意义上,AEC解码器可以在对一系列算术编码的二进制码(符号)进行解码时消费来自比特流的比特序列,然后响应于对符号的请求418,使得解码单元416可用。在这样的实施例中,指针的“递增”与AEC解码器对比特流中的比特的消费而不是AEC解码器的解码符号的输出相关联。
图5中示出了图示一个示例编码过程500的流程图。编码过程500假定熵编码流和旁路编码流正在被生成,并且如果适用,从集成流中被解复用。过程500开始于在操作502中生成熵编码流和旁路编码流的至少一部分时对其进行缓冲。在该示例中,旁路编码流在操作504中被反向。如上所述,在在一些情况下,当在操作502中将旁路编码流存储在缓冲器中时,可能发生该反向。在一些情况下,该反向可能发生在存储之后。在一些情况下,反向操作504通过以反向顺序读取旁路编码流并且将其重新写入缓冲器而发生。在一些情况下,反向操作504在通过以反向顺序从缓冲器读取旁路编码流来在生成有效载荷时发生。
在操作506中,编码器生成数据单元,数据单元依次具有前导码、前向顺序流、反向顺序旁路编码流。按照编码顺序,旁路编码流的起始处与数据单元的结束处对准。
数据单元然后在操作508中输出。
示例解码过程600通过图6中的流程图来图示。解码过程600包括:在操作602中,接收具有上述结构的数据单元。即,数据单元包括前导码和有效载荷。有效载荷包括熵编码流和旁路编码流。其中一个流处于前向顺序并且出现在数据单元中,紧跟在前导码之后,并且另一流处于反向顺序,并且与数据单元的结束处对准。有效载荷中的两个流之间可能存在、也可能不存在数据,诸如比特填充或其他数据。出于本示例的目的,旁路编码流被假定为反向顺序流。
解码器在操作604中确定数据单元的长度。如上所述,数据单元的长度可以由传输类型、编码协议、更高级别的报头信息或一些其他外部源来规定。在某些情况下,数据单元的长度可以在前导码中显示地或隐式地指定。在一些情况下,可以通过每个前导码中的同步码字来用信号通知数据单元的长度,使得解码器通过在传入的数据比特流中找到下一个同步码字来确定数据单元的长度。
数据单元被存储在解码器的存储器中。在操作606中,解码器将第一读指针初始化在熵编码流的起始处,并且将第二读指针初始化在旁路编码流的按照编码顺序的起始处(即,在数据单元的结束处)。在操作608中,对编码符号的请求被生成。请求由解码过程驱动,解码过程将来自数据单元的符号解码并重构,作为解码和数据重构过程的一部分。示例过程包括音频编码、视频编码、多媒体编码、点云编码或其他数据压缩过程。
在操作610中,与请求相关联的符号类型被确定。即,请求是针对旁路编码符号还是熵编码符号。如果所请求的符号是熵编码的,则在操作612中,数据从前向顺序流中被读取,即,第一读指针所指向的熵编码流部分。然后在操作614中,第一读指针递增。相反,如果所请求的符号是旁路编码的,则在操作616中,数据从反向顺序流中被读取,即,第二读指针所指向的旁路编码流部分。然后在操作618中,第二读指针递减。根据情况,解码器将所提取的编码符号传递到熵解码器或旁路解码器。
应当理解,在一些实施例中,解码器可以将数据单元的第二副本以反向顺序存储在存储器中。在该情况下,第二读指针被初始化为指向反向顺序数据单元的起始处,并且第二读指针随着旁路编码符号被读取而递增。
在操作620中,解码器评估它是否已完成对旁路编码流和熵编码流的解码。如果否,则它返回到操作608来评估下一个符号请求。如果是,则它在操作602中移动到下一个数据单元。
应当理解,在不对一个流的全部进行解码的情况下确定流的结束是不可能的。因此,熵解码器(例如,算术解码器)的操作不依赖有界比特流读取来丢弃流中的拖尾比特。有界读取操作是在读取预定义数量的比特之后,返回预定义常量值的操作。换言之,熵编码流必须是完全自包含的。
如上所述,逐字节寻址在许多系统中是常见的,其可能导致编码数据的逐字节处理,其中包括编码流之一的逐字节反向。为了避免每次提取八个旁路符号之后的指针解引用,一些系统可以将当前子流字节复制到中间变量。通过对反向旁路子流的每个字节的组成比特进行适当的比特排序,可以促进使用多字节中间变量来提高效率。
为了在使用小端数据模型的架构的情况下启用多字节操作,每个字节中的比特可以被排序为使得给定字节中的最高有效比特是该字节中待被解封装的第一个比特,并且给定字节中的最低有效比特是该字节中待被解封装的最后一个比特。对于比特序列a…x,其中比特a是待被解码的第一个比特,x是最后一个比特,由此产生的子流结构可以被如下图示:
在小端架构上,读取地址N-3处的3字节字产生二进制字abcdefghijklmnopqrstuvwxb。该性质可扩展到任何机器字大小。变量L可以被用于跟踪当前字的当前比特级读取(或写入)位置。
从Q比特大小的字W中提取单个比特V的一个方法是将W的MSB保持为下一未读取比特:
1.if(L==0){ ;如果没有可用比特
2.W=*data_ptr-- ;加载下一Q比特字,前移指针
3.L=Q;重置读取位置
}
4.V=(W>>(Q-1))&1;提取W的MSB来作为V
5.L=L-1;前移读取位置
现在参考图7,图7示意性地示出了另一示例数据单元700的结构。在该示例中,如上所述,数据单元700包括前导码702和有效载荷704,并且有效载荷704包括前向顺序流706和反向顺序流708。然而,在前向顺序流706和反向顺序流708之间,有效载荷704包括附加数据710。有利地,当解码器对两个流706和708进行解码时,它发现它们各自的长度,并且然后能够提取它们之间存储的数据710。
附加数据710的一个示例用途是未解码的填充数据。当数据单元根据给定的句法或文法来解析时,不会尝试解释附加数据。编码器可以利用该性质来简化冲刷操作(可能冲刷比需要更多的数据),或者使用附加数据710来插入可以被用来标识比特流的隐藏标记,或者备选地,使用填充数据来满足最小比特率要求。
在另一示例实现方式中,附加数据710可以是实质的。在一个示例中,如果在对流706、708进行解码之后,形成解码器状态的两个比特流指针不指向相邻的字节,则附加数据710存在并且由解码器解析。附加数据710可以以前向或反向顺序传送。顺序的确切选择可以与周围的流706、708的预期使用相关。例如,如果已知一个流在另一个之前终止,则可以使用该流的顺序。在某些构造中,顺序可以依赖于反向顺序是否为解码器提供更有效的流访问。
附加数据710可以是熵编码数据、旁路编码数据或其他数据。在一个示例中,数据710是另一对前向顺序和反向顺序比特流,使得数据单元700包含递归嵌套的熵编码流对和旁路编码流对。附加数据710可以包括或可以不包括另外的前导码。
为了对可能存在的附加数据710进行解析,在一个实施例中,为了冲刷或字节对准的目的,解码器读指针被前移为跳过插入到相应流中的任何比特,从而有效地丢弃来自解码器缓冲器的任何部分比特。一个备选实施例可以省略第一对应流的刷新或字节对准,而是要求后续流的字节对准和刷新(但是可能仍然需要发生后续AEC流的重新初始化)。在这样的系统中,如果数据单元700中不包含附加数据710,则编码器会冲刷流或将流字节对准。
前导码可以包含标志,该标志用信号通知附加数据710是否存在于比特流中。在一些实现方式中,标志可以指示对比特流构造的形式限制来确保不存在任何填充数据。例如,在数据单元中的所有可解析数据被解析之后,解码器确认形成解码器状态的两个比特流指针指向相邻字节。除非在比特流中(例如,在前同步码中)较早地用信号通知标志来指示存在附加数据710,否则两个比特流必须指向相邻字节或者错误被检测。
在以上许多示例中,熵编码器基于编码模型规定的符号类型而生成熵编码流和旁路编码流。即,可能由于符号类型,编码过程指示特定符号是否要进行上下文自适应熵编码,或者符号是否具有p=0.5的静态概率并且在所有情况下均被旁路编码。然而,在某些上下文自适应编码过程中,根据基础数据的统计,可能会发生上下文演变,使得相关联的概率接近p=0.5。在这样的情况下,尽管事实上它们应根据上下文模型进行熵编码,但是将这样的符号强制分给旁路编码器而不是使用熵编码器可能是有益的。
对于具有相关联自适应概率模型的符号,示例过程可以包括:
检查当前符号概率prob0并且针对阈值来测试其与等概率概率(例如,对于二进制符号为0.5)之间的差。例如,示例阈值可以小于0.05或小于0.03。
如果差小于阈值,则符号作为普通旁路符号来处理。否则,它由熵编码器(诸如算术编解码器)处理。在这两种情况下,根据符号值、当前符号概率和上下文自适应编码方案中通常的更新函数来更新符号概率模型(即,prob0的下一个值)。
现在参考图8,图8示出了编码器800的一个示例实施例的简化框图。编码器800包括处理器802、存储器804和编码应用806。编码应用806可以包括存储器804中存储并且包含指令的计算机程序或应用,指令在被执行时,使得处理器802执行诸如本文中描述的那些操作。例如,编码应用806可以根据本文中描述的过程来对数据单元进行编码和输出。应当理解,编码应用806可以被存储在非暂时性计算机可读介质(诸如,光盘、闪存设备、随机存取存储器、硬盘驱动装置等)上。当指令被执行时,处理器802执行指令中指定的操作和功能,以作为实现所描述的(多个)过程的专用处理器来操作。在一些示例中,这样的处理器可以被称为“处理器电路”或“处理器电路系统”。
现在还参考图9,图9示出了解码器900的一个示例实施例的简化框图。解码器900包括处理器902、存储器904和解码应用906。解码应用906可以包括存储器904中存储并且包含指令的计算机程序或应用,指令在被执行时,使得处理器902执行诸如本文中描述的那些操作。应当理解,解码应用906可以被存储在计算机可读介质(诸如,光盘、闪存设备、随机存取存储器、硬盘驱动装置等)上。当指令被执行时,处理器902执行指令中指定的操作和功能,以作为实现所描述的(多个)过程的专用处理器来操作。在一些示例中,这样的处理器可以被称为“处理器电路”或“处理器电路系统”。
应当理解,根据本申请的解码器和/或编码器可以在若干计算设备中实现,计算设备包括但不限于服务器、适当编程的通用计算机、机器视觉系统和移动设备。解码器或编码器可以通过包含指令的软件来实现,指令用于将一个或多个处理器配置为执行本文中描述的功能。软件指令可以被存储在任何合适的非暂时性计算机可读存储器(包括CD、RAM、ROM、闪存等)上。
应当理解,本文中描述的解码器和/或编码器以及实现所描述的用于对编码器或解码器进行配置的方法/过程的模块、例程、过程、线程或其他软件组件可以使用标准计算机编程技术和语言来实现。本申请不限于特定处理器、计算机语言、计算机编程约定、数据结构、其他这样的实现细节。本领域技术人员将认识到,所描述的过程可以被实现为易失性或非易失性存储器中存储的计算机可执行代码的一部分、专用集成芯片(ASIC)的一部分等。
本申请还提供了对通过应用根据本申请的编码过程产生的数据进行编码的计算机可读信号。
可以对所描述的实施例进行某些改编和修改。因此,以上讨论的实施例被认为是例示性的而非限制性的。
Claims (20)
1.一种对数据单元进行解码来重构编码数据的方法,所述方法包括:
接收所述数据单元,所述数据单元依次包括前导码和有效载荷,所述有效载荷依次包括前向顺序比特流和反向顺序比特流;
确定所述数据单元的长度;
响应于来自解码单元的对符号的请求,选择性地以所述前向顺序从所述前向顺序比特流读取数据或者以反向顺序从所述反向顺序比特流读取数据;以及
在所述解码单元中对所述数据进行解码以重构所述符号,
其中所述前向顺序比特流和所述反向顺序比特流中的一个包括熵编码符号,并且所述前向顺序比特流和所述反向顺序比特流中的另一个包括旁路编码符号。
2.根据权利要求1所述的方法,其中对符号的所述请求指示符号类型是熵编码的还是旁路编码的,并且其中选择性地读取所述前向顺序比特流或者所述反向顺序比特流的数据基于所述符号类型。
3.根据权利要求1或2所述的方法,其中所述方法还包括:将前向读指针初始化在所述前导码之后的所述前向顺序比特流的起始处,以及将所述反向读指针初始化在所述数据单元的结束处。
4.根据权利要求3所述的方法,其中从所述前向顺序比特流读取数据包括读取由所述前向读指针指示的所述数据,然后将所述前向读指针递增,并且其中从所述反向顺序比特流读取数据包括读取由所述反向读指针指示的所述数据,然后将所述反向读指针递减。
5.根据权利要求4所述的方法,其中所述数据具有一个或多个字节的大小,并且其中所述指针按照所述大小来递增和递减。
6.根据前述权利要求中任一项所述的方法,其中选择性地以反向顺序从所述反向顺序比特流读取数据包括:以反向顺序将所述数据单元的副本存储在存储器中,并且从所述反向顺序数据单元的起始处开始,以前向顺序读取所述反向顺序数据单元。
7.根据前述权利要求中任一项所述的方法,其中确定所述数据单元的所述长度包括以下一项:
基于同步码字来检测所述数据单元的结束;
从所述前导码读取长度值;或者
从更高级别的元数据中获取数据单元长度。
8.根据前述权利要求中任一项所述的方法,还包括确定对所述前向顺序比特流和所述反向顺序比特流的解码完成,并且丢弃用于字节对准而存在的任何比特。
9.根据权利要求8所述的方法,还包括对所述数据单元中位于所述前向顺序比特流和所述反向顺序比特流之间的附加数据进行解码。
10.一种传输编码数据的方法,其中所述编码数据包括熵编码符号的第一比特流和旁路编码符号的第二比特流,所述方法包括:
缓冲所述第一比特流和所述第二比特流;
将所述第一比特流和所述第二比特流中的一个反向来创建反向顺序比特流,其中所述第一比特流和所述第二比特流中的另一个是前向顺序比特流;
生成数据单元,所述数据单元依次包括前导码、所述前向顺序比特流、所述反向顺序比特流;以及
输出所述数据单元。
11.一种从数据单元重构编码数据的解码器,所述解码器包括:
至少一个处理器;
存储器;以及
解码应用,包含处理器可执行指令,所述处理器可执行指令在由所述至少一个处理器执行时,使所述解码器:
接收所述数据单元,所述数据单元依次包括前导码和有效载荷,所述有效载荷依次包括前向顺序比特流和反向顺序比特流;
确定所述数据单元的长度;
响应于来自解码单元的对符号的请求,选择性地以所述前向顺序从所述前向顺序比特流读取数据或者以反向顺序从所述反向顺序比特流读取数据;以及
在所述解码单元中对所述数据进行解码以重构所述符号,
其中所述前向顺序比特流和所述反向顺序比特流中的一个包括熵编码符号,并且所述前向顺序比特流和所述反向顺序比特流中的另一个包括旁路编码符号。
12.根据权利要求11所述的解码器,其中对符号的所述请求指示符号类型是熵编码的还是旁路编码的,并且其中选择性地读取所述前向顺序比特流或者所述反向顺序比特流的数据基于所述符号类型。
13.根据权利要求11或12所述的解码器,其中所述处理器可执行指令在被执行时还使所述解码器将前向读指针初始化在所述前导码之后的所述前向顺序比特流的起始处,以及将所述反向读指针初始化在所述数据单元的结束处。
14.根据权利要求13所述的解码器,其中所述处理器可执行指令在被执行时使所述解码器:通过读取由所述前向读指针指示的所述数据并且然后将所述前向读指针递增来从所述前向顺序比特流读取数据,并且其中所述处理器可执行指令在被执行时使所述解码器:通过读取由所述反向读指针指示的所述数据并且然后将所述反向读指针递减来从所述反向顺序比特流读取数据。
15.根据权利要求14所述的解码器,其中所述数据具有一个或多个字节的大小,并且其中所述指针按照所述大小来递增和递减。
16.根据权利要求11至15中任一项所述的解码器,其中所述处理器可执行指令在被执行时使所述解码器通过如下方式来选择性地以反向顺序从所述反向顺序比特流中读取数据:以反向顺序将所述数据单元的副本存储在存储器中,并且从所述反向顺序数据单元的起始处开始,以前向顺序读取所述反向顺序数据单元。
17.根据权利要求11至16中任一项所述的解码器,其中所述处理器可执行指令在被执行时使所述解码器通过以下一项来确定所述数据单元的长度:
基于同步码字来检测所述数据单元的结束;
从所述前导码读取长度值;或者
从更高级别的元数据中获取数据单元长度。
18.根据权利要求11至17中任一项所述的解码器,其中所述处理器可执行指令在被执行时还使所述解码器:确定对所述前向顺序比特流和所述反向顺序比特流的解码完成,并且丢弃用于字节对准而存在的任何比特。
19.根据权利要求18所述的解码器,其中所述处理器可执行指令在被执行时还使所述解码器:对所述数据单元中位于所述前向顺序比特流和所述反向顺序比特流之间的附加数据进行解码。
20.一种用于传输编码数据的编码器,其中所述编码数据包括熵编码符号的第一比特流和旁路编码符号的第二比特流,所述编码器包括:
至少一个处理器;
存储器;以及
编码应用,包含处理器可执行指令,所述处理器可执行指令在被所述至少一个处理器执行时,使所述编码器:
缓冲所述第一比特流和所述第二比特流;
将所述第一比特流和所述第二比特流中的一个反向来创建反向顺序比特流,其中所述第一比特流和所述第二比特流中的另一个是前向顺序比特流;
生成数据单元,所述数据单元依次包括前导码、所述前向顺序比特流、所述反向顺序比特流;以及
输出所述数据单元。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/356,087 US10587286B1 (en) | 2019-03-18 | 2019-03-18 | Methods and devices for handling equiprobable symbols in entropy coding |
US16/356,087 | 2019-03-18 | ||
PCT/EP2020/056733 WO2020187709A1 (en) | 2019-03-18 | 2020-03-12 | Methods and devices for handling equiprobable symbols in entropy coding |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113574805A true CN113574805A (zh) | 2021-10-29 |
Family
ID=69723449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080022464.6A Pending CN113574805A (zh) | 2019-03-18 | 2020-03-12 | 用于在熵编码中处理等概率符号的方法和设备 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10587286B1 (zh) |
EP (1) | EP3942701A1 (zh) |
JP (1) | JP2022526098A (zh) |
KR (1) | KR20210139398A (zh) |
CN (1) | CN113574805A (zh) |
WO (1) | WO2020187709A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10861196B2 (en) | 2017-09-14 | 2020-12-08 | Apple Inc. | Point cloud compression |
US10897269B2 (en) | 2017-09-14 | 2021-01-19 | Apple Inc. | Hierarchical point cloud compression |
US11818401B2 (en) | 2017-09-14 | 2023-11-14 | Apple Inc. | Point cloud geometry compression using octrees and binary arithmetic encoding with adaptive look-up tables |
US11113845B2 (en) | 2017-09-18 | 2021-09-07 | Apple Inc. | Point cloud compression using non-cubic projections and masks |
US10909725B2 (en) | 2017-09-18 | 2021-02-02 | Apple Inc. | Point cloud compression |
US10607373B2 (en) | 2017-11-22 | 2020-03-31 | Apple Inc. | Point cloud compression with closed-loop color conversion |
US10909726B2 (en) | 2018-04-10 | 2021-02-02 | Apple Inc. | Point cloud compression |
US10939129B2 (en) | 2018-04-10 | 2021-03-02 | Apple Inc. | Point cloud compression |
US11010928B2 (en) | 2018-04-10 | 2021-05-18 | Apple Inc. | Adaptive distance based point cloud compression |
US10909727B2 (en) | 2018-04-10 | 2021-02-02 | Apple Inc. | Hierarchical point cloud compression with smoothing |
US11017566B1 (en) | 2018-07-02 | 2021-05-25 | Apple Inc. | Point cloud compression with adaptive filtering |
US11202098B2 (en) | 2018-07-05 | 2021-12-14 | Apple Inc. | Point cloud compression with multi-resolution video encoding |
EP3595179B1 (en) * | 2018-07-10 | 2023-07-05 | BlackBerry Limited | Methods and devices for lossy coding of point cloud occupancy |
US11012713B2 (en) | 2018-07-12 | 2021-05-18 | Apple Inc. | Bit stream structure for compressed point cloud data |
US11367224B2 (en) | 2018-10-02 | 2022-06-21 | Apple Inc. | Occupancy map block-to-patch information compression |
US11057564B2 (en) | 2019-03-28 | 2021-07-06 | Apple Inc. | Multiple layer flexure for supporting a moving image sensor |
US11711544B2 (en) | 2019-07-02 | 2023-07-25 | Apple Inc. | Point cloud compression with supplemental information messages |
US11562507B2 (en) | 2019-09-27 | 2023-01-24 | Apple Inc. | Point cloud compression using video encoding with time consistent patches |
US11627314B2 (en) | 2019-09-27 | 2023-04-11 | Apple Inc. | Video-based point cloud compression with non-normative smoothing |
US11538196B2 (en) | 2019-10-02 | 2022-12-27 | Apple Inc. | Predictive coding for point cloud compression |
US11398833B2 (en) * | 2019-10-02 | 2022-07-26 | Apple Inc. | Low-latency encoding using a bypass sub-stream and an entropy encoded sub-stream |
US11895307B2 (en) | 2019-10-04 | 2024-02-06 | Apple Inc. | Block-based predictive coding for point cloud compression |
US11798196B2 (en) | 2020-01-08 | 2023-10-24 | Apple Inc. | Video-based point cloud compression with predicted patches |
US11373276B2 (en) * | 2020-01-09 | 2022-06-28 | Tencent America LLC | Techniques and apparatus for alphabet-partition coding of transform coefficients for point cloud compression |
US11475605B2 (en) | 2020-01-09 | 2022-10-18 | Apple Inc. | Geometry encoding of duplicate points |
US11615557B2 (en) | 2020-06-24 | 2023-03-28 | Apple Inc. | Point cloud compression using octrees with slicing |
US11620768B2 (en) | 2020-06-24 | 2023-04-04 | Apple Inc. | Point cloud geometry compression using octrees with multiple scan orders |
US20220113423A1 (en) * | 2020-10-12 | 2022-04-14 | SZ DJI Technology Co., Ltd. | Representation data generation of three-dimensional mapping data |
US11948338B1 (en) | 2021-03-29 | 2024-04-02 | Apple Inc. | 3D volumetric content encoding using 2D videos and simplified 3D meshes |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
HUE039299T2 (hu) * | 2010-09-09 | 2018-12-28 | Fraunhofer Ges Forschung | Entrópia kódolási és dekódolási séma |
CN107317586B (zh) * | 2011-01-14 | 2020-11-06 | Ge视频压缩有限责任公司 | 熵编码设备和方法、熵解码设备和方法、及存储介质 |
WO2013050612A1 (en) * | 2011-10-06 | 2013-04-11 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Entropy coding buffer arrangement |
US9538172B2 (en) * | 2012-04-11 | 2017-01-03 | Qualcomm Incorporated | Grouping bypass coded syntax elements in video coding |
GB2513111A (en) * | 2013-04-08 | 2014-10-22 | Sony Corp | Data encoding and decoding |
-
2019
- 2019-03-18 US US16/356,087 patent/US10587286B1/en active Active
-
2020
- 2020-03-12 WO PCT/EP2020/056733 patent/WO2020187709A1/en unknown
- 2020-03-12 EP EP20712487.6A patent/EP3942701A1/en active Pending
- 2020-03-12 CN CN202080022464.6A patent/CN113574805A/zh active Pending
- 2020-03-12 JP JP2021556256A patent/JP2022526098A/ja active Pending
- 2020-03-12 KR KR1020217033607A patent/KR20210139398A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
KR20210139398A (ko) | 2021-11-22 |
US10587286B1 (en) | 2020-03-10 |
WO2020187709A1 (en) | 2020-09-24 |
JP2022526098A (ja) | 2022-05-23 |
EP3942701A1 (en) | 2022-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113574805A (zh) | 用于在熵编码中处理等概率符号的方法和设备 | |
US11705924B2 (en) | Low-latency encoding using a bypass sub-stream and an entropy encoded sub-stream | |
US10489426B2 (en) | Category-prefixed data batching of coded media data in multiple categories | |
US5225832A (en) | High speed variable length decoder | |
TWI500274B (zh) | 熵編碼及解碼裝置與方法、和相關電腦程式 | |
US6445314B1 (en) | System and method for the decoding of variable length codes | |
US5973626A (en) | Byte-based prefix encoding | |
US20080317134A1 (en) | Video Coding | |
JP2000513164A (ja) | 誤り保護付き可変長コーディング | |
CN109218822B (zh) | 一种视频处理系统 | |
US5280349A (en) | HDTV decoder | |
US7656320B2 (en) | Difference coding adaptive context model using counting | |
Bodden et al. | Arithmetic coding revealed | |
CN110191341B (zh) | 一种深度数据的编码方法和解码方法 | |
KR100944923B1 (ko) | 개선된 멀티미디어 디코더를 위한 방법 및 장치 | |
CN103369311A (zh) | 一种用于防止起始码冲突的方法 | |
US20240137045A1 (en) | Noniterative entropy coding | |
KR100686354B1 (ko) | 가변 트리를 이용한 허프만 복호화 방법 및 장치 | |
KR100443012B1 (ko) | 압축데이터의 바이트열 복원 방법 | |
US6522270B1 (en) | Method of coding frequently occurring values | |
EP4241452A1 (en) | Concatenation of chunked entropy streams | |
CN117939148A (zh) | 用于在比特流中传输的熵编码的数据的动态排队 | |
KR0125125B1 (ko) | 고속 가변길이부호 복호화 장치 | |
Sun | 11. Design of High-Throughput Entropy Codec | |
JPH0548577A (ja) | 可変長符号化データの伝送方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |