CN113141508B - 算术编码器及实现算术编码的方法和图像编码方法 - Google Patents

算术编码器及实现算术编码的方法和图像编码方法 Download PDF

Info

Publication number
CN113141508B
CN113141508B CN202010051282.3A CN202010051282A CN113141508B CN 113141508 B CN113141508 B CN 113141508B CN 202010051282 A CN202010051282 A CN 202010051282A CN 113141508 B CN113141508 B CN 113141508B
Authority
CN
China
Prior art keywords
coding
value
character
count
bit
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.)
Active
Application number
CN202010051282.3A
Other languages
English (en)
Other versions
CN113141508A (zh
Inventor
范益波
闫霄
李敏江
李威
虞旭林
王文强
邱鹏程
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN202010051282.3A priority Critical patent/CN113141508B/zh
Priority to PCT/CN2021/071024 priority patent/WO2021143634A1/zh
Publication of CN113141508A publication Critical patent/CN113141508A/zh
Application granted granted Critical
Publication of CN113141508B publication Critical patent/CN113141508B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods 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
    • H04N19/436Methods 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 using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods 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
    • H04N19/439Methods 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 using cascaded computational arrangements for performing a single operation, e.g. filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods 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/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本申请公开了一种算术编码器及实现算术编码的方法,在一个时钟周期内能够并行处理多个编码字符,提高了吞吐率,加快了处理速度。

Description

算术编码器及实现算术编码的方法和图像编码方法
技术领域
本申请涉及但不限于图像处理技术,尤指一种算术编码器及实现算术编码的方法和图像编码方法。
背景技术
随着移动通信和互联网的发展,人们对图像的需求量不断增加,从而给有限的传输带宽和存储空间带来了巨大的压力。将图像数据先压缩编码后再进行传输,可以有效地提高图像的数据传输率。为此,图像压缩编码技术得到了迅速的发展和广泛的应用,并日臻成熟。
关于静止图像,国际标准化组织/国际电工委员会(ISO/IEC)制定了编码标准联合图像专家组(JPEG),是一种图像文件格式;关于活动图像,ISO/IEC制定了压缩编码标准如:动态图像专家组-1(MPEG-1)、MPEG-2、MPEG-4等;关于电视电话/会议电视,国际电信联盟(ITU)制定了视频编码标准如H.261、H.264、H.265等。这些标准图像编码算法融合了各种性能优良的传统图像编码方法,是对传统图像编码技术的总结,代表了当前图像编码的发展水平。此外,Lepton是Dropbox开源的一套无损图像压缩编码技术,由于其使用VP8算术编码替换哈夫曼编码,在目前JPEG图像压缩基础上,可以得到更高的压缩率。
发明内容
本申请提供一种算术编码器及实现算术编码的方法和图像编码方法,能够提高吞吐率,加快处理速度。
本发明实施例提供了一种算术编码器,包括:第一级处理单元、第二级处理单元、第三级处理单元、输出单元;其中,
第一级处理单元,用于在一个时钟周期内,并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小;
第二级处理单元,用于在一个时钟周期内,并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
第三级处理单元,用于在一个时钟周期内,并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
输出单元,用于将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出;
其中,N为大于或等于1的整数。
在一种示例性实例中,所述第一级处理单元包括:N个串行连接的编码区间处理模块:第i编码区间处理模块,i=1,2,3…N,以及第一临时寄存器,第一流水线寄存器;其中,
第i编码区间处理模块,用于接收当前所述时钟周期内的待处理的第i编码字符bin_(i-1)、第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2);根据接收到的第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2),计算得到第i个split值split_(i-1);根据计算得到的第i个split值split_(i-1)和第i编码字符bin_(i-1)计算得到当前编码区间大小;根据当前编码区间大小,通过查表得到当前编码区间大小需要左移的比特数值shift_(i-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第i编码字符处理模块输出的range值range_(i-1);
第一临时寄存器,用于暂时存放第i编码字符处理模块输出的range值range_(i-1),在下一个时钟周期时输出给第一编码区间处理模块;
第一流水线寄存器,用于在流水线中打拍,存放当前所述时钟周期内的编码字符bin:第i编码字符bin_(i-1),并输出给所述第二级处理单元。
在一种示例性实例中,还包括:第一数据选择器;
第一数据选择器,用于在可设置的信号number控制下,对number路编码字符进行并行处理,其中,number=1,2,3…N。
在一种示例性实例中,采用将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,实现所述第i个split值split_(i-1)的计算,其中,每个无符号4-bit乘法操作通过查找表实现。
在一种示例性实例中,所述第二级处理单元包括:N个串行连接的编码位置处理模块:第i编码位置处理模块,i=1,2,3…N,以及第二临时寄存器、第二流水线寄存器;其中,
第i编码位置处理模块,用于接收当前所述时钟周期内的第i左移比特数值shift_(i-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(i-2),根据count_(i-1)=count_(i-2)+shift_(i-1)计算当前字符编码后的比特位置count_(i-1);根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第i比特位置值count_(i-1);
第二临时寄存器,用于暂时存放第i编码位置处理模块输出的count值count_(i-1),在下一个时钟周期时输出给第一编码位置处理模块;
第二流水线寄存器,用于在流水线中打拍,存放当前时所述钟周期内的编码字符bin:第i编码字符bin_(i-1),以及当前所述时钟周期内的第i个split值split_(i-1),并输出给所述第三级处理单元。
在一种示例性实例中,还包括:第二数据选择器;
第二数据选择器,用于在可设置的信号number控制下,对i路编码位置进行并行处理。
在一种示例性实例中,所述根据count_(i-1)值确定当前编码字符的偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第i比特位置值count_(i-1),包括:
对count_(i-1)值进行判断,如果count_(i-1)<0,则当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0,则当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
在一种示例性实例中,所述第三级处理单元包括:N个串行连接的编码区间限值处理模块:第i编码区间限值处理模块,i=1,2,3…N,以及第三临时寄存器;其中,
第i编码区间限值处理模块,用于接收当前时钟周期内的第i编码字符bin_(i-1)、第i左移比特数值shift_(i-1)、第i偏移量offset_(i-1)、第i比特位置标志信息count_flag_(i-1),以及上一编码字符的编码区间下限值lowvaule_(i-2);根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1);
第三临时寄存器,用于暂时存放第i编码区间限值处理模块输出的count_flag_(i-1),在下一个时钟周期时输出给第一编码区间限值处理。
在一种示例性实例中,还包括:第三数据选择器;
第三数据选择器,用于在可设置的信号number控制下,对i路编码区间限值进行并行处理。
在一种示例性实例中,所述根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1),包括:
根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)不变;如果bin_(i-1)=1,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和;
根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0,则当前字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位;如果count_(i-1)≥0,输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位,当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位。
在一种示例性实例中,所述输出单元为先进先出队列缓冲区。
在一种示例性实例中,所述算术编码器为VP8二进制算术编码。
本申请还提供了一种实现算术编码的方法,在一个时钟周期内,包括:
算术编码器并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小;
算术编码器并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
算术编码器并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
算术编码器将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出。
在一种示例性实例中,所述并行对N个编码字符进行处理,获取当前编码区间的区间大小和当前编码区间大小需要左移的比特数值,包括:
接收当前所述时钟周期内的待处理的第i编码字符bin_(i-1)、第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2);
根据接收到的第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2),计算得到第N split值split_(i-1);
根据计算得到的第i个split值split_(i-1)和第i编码字符bin_(i-1)计算得到当前编码区间大小;
根据当前编码区间大小,通过查表得到当前编码区间大小需要左移的比特数值shift_(i-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第i编码字符处理模块输出的range值range_(i-1);
其中,i=1,2,3…N。
在一种示例性实例中,还包括:
根据可设置的信号number,对number路编码字符进行并行处理,其中,number=1,2,3…N。
在一种示例性实例中,采用将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,计算所述第N split值split_(N-1);其中,每个无符号4-bit乘法操作通过查找表实现。
在一种示例性实例中,所述获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量,包括:
接收当前所述时钟周期内的第i左移比特数值shift_(i-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(i-2);
根据count_(i-1)=count_(i-2)+shift_(i-1),计算当前字符编码后的比特位置count_(i-1);
根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1);
其中,i=1,2,3…N。
在一种示例性实例中,还包括:
根据可设置的信号number,对number路编码位置进行并行处理,其中,number=1,2,3…N。
在一种示例性实例中,所述根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1),包括:
对count_(i-1)值进行判断,如果count_(i-1)<0,则当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0,则当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
在一种示例性实例中,所述获取当前编码区间的区间下限值和编码字符的输出码流,包括:
接收当前所述时钟周期内的第i编码字符bin_(i-1)、第i左移比特数值shift_(i-1)、第i偏移量offset_(i-1)、第i比特位置标志信息count_flag_(i-1),以及上一编码字符的编码区间下限值lowvaule_(i-2);
根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1);
其中,i=1,2,3…N。
在一种示例性实例中,还包括:
根据可设置的信号number,对number路编码区间限制进行并行处理;其中,
在一种示例性实例中,所述确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1),包括:
根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)保持不变;如果bin_(i-1)=1,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和;
根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0,则不输出码流,此时,当前编码字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位;如果count_(i-1)≥0,输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位,当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位。
本申请还提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行上述任一项所述实现算术编码的方法。
本申请还提供了一种实现算术编码的设备,包括存储器和处理器,其中,存储器中存储有以下可被处理器执行的指令:用于执行上述任一项所述实现算术编码的步骤。
本申请又提供了一种实现算术编码的方法,在一个时钟周期内,包括:
算术编码器根据可设置的信号number,对number路编码字符进行并行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小,其中,number=1,2,3…N;
算术编码器并行对numbe个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
算术编码器并行对numbe个编码字符、numbe个当前编码区间大小需要左移的比特数值、numbe个当前编码字符的偏移量和numbe个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
算术编码器将并行输入的numbe路输出码流按顺序转换为串行输出的单路输出码流输出。
本申请还提供了一种图像编码方法,包括:
对待处理的图像进行预处理得到多个图像块;
将得到的图像块分别转换得到对应的编码字符和编码概率;
将图像块对应的编码字符和编码概率输入编码器进行编码;
其中,编码器包括上述任一项所述的算术编码器。
本申请提供的算术编码器,采用多路并行的电路结构,因此,在一个时钟周期内能够处理多个编码字符,提高了吞吐率,加快了处理速度。
在一种示例性实例中,本申请实施例将无符号16-bit乘法操作拆分为四个无符号8-bit乘法操作、三个移位操作和三个无符号8-bit加法操作。减少了无符号16-bit乘法操作的关键路径,提升了处理效率。
在一种示例性实例中,本申请实施例电路结构中引入了number信号来控制当前有效的编码字符数,提高了本申请算术编码器的灵活应用。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1为本申请算术编码器的组成结构示意图;
图2为本申请算术编码器中第一级处理单元实施例的组成结构示意图;
图3为本申请无符号8-bit乘法器实施例的组成结构示意图;
图4为本申请算术编码器中第二级处理单元实施例的组成结构示意图;
图5为本申请第二级处理单元实现处理的实施例的流程示意图;
图6为本申请算术编码器中第三级处理单元实施例的组成结构示意图;
图7为本申请第三级处理单元实现处理的实施例的流程示意图;
图8为本申请先进先出队列缓冲区的实施例的示意图;
图9为本申请实现算术编码的方法的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在本申请一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
算术编码是一种熵编码方法,通过算术编码生成的码流可以经解码无失真地恢复出原数据。熵编码建立在随机过程的统计特性基础上,对出现概率不同的信源符号进行统计并得出概率分布,根据信源符号出现的概率重新进行编码,也就是说,出现概率较大的信源符号分配较短的码字,而出现概率较小的信源符号分配较长的码字,这样,实现了从整体上用较少的比特数表示较多的信源符号。Lepton采用VP8二进制算术编码器,基于8比特(8-bit)的编码概率prob进行编码。在算术编码的递归计算过程中,编码器必须保存当前区间的区间下限值lowvaule、当前区间的区间大小range以及比特位置count。其中,lowvalue和range可以确定当前编码区间,count记录了当前编码后输出的比特在一个字节中的位置,满字节时需要将其输出到输出比特流。
VP8算术编码的过程大致包括:首先,根据split=1+((range-1)*prob>>8)计算得到一个无符号8-bit的split值,split值可以理解为子分区间划分;然后,根据当前编码字符(0或1)和split值计算得到当前编码区间的区间下限值lowvalue和当前编码区间的区间大小range。为了确保实际编码的正确性,区间大小range必须在范围[128,255]之内。如果在计算过程中,区间大小range在该范围之外,则将区间下限值lowvalue进行一定的左移操作,直至区间大小range在该范围之内,并将区间下限值lowvalue左移的比特输出到输出(output)比特流中。在最后一个字符完成编码时,将区间下限值lowvalue值附加到输出比特流中,并结束编码。
相关技术中利用算术编码技术实现编码虽然采用流水线技术,但是,实现电路结构是单路串行的电路结构,也就是说,每个时钟周期只能接收并处理一个编码字符。因此,当输入码流的速率较快时,这样的电路结构是不能及时处理输入码流的,这不仅造成了输入码流的堆积,而且在一定程度上限制了其吞吐率的进一步提升。
本申请提出一种算术编码器,在每个时钟周期内并行处理多个编码字符,充分利用每个时钟周期,提高编码速度。进一步地,当输入码流的速率较快时,能够保证及时处理输入码流,从而能够避免输入码流的堆积,而且在一定程度上促进吞吐率的进一步提升。
图1为本申请算术编码器的组成结构示意图,如图1所示,包括:第一级处理单元、第二级处理单元、第三级处理单元、输出单元;其中,
第一级处理单元,用于在一个时钟周期内,并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小;
第二级处理单元,用于在一个时钟周期内,并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
第三级处理单元,用于在一个时钟周期内,并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流。
输出单元,用于将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出。
其中,N为大于或等于1的整数。
在一种示例性实例中,N的值可以是一个固定的值,也可以是一个可配置的参数值。N的大小取决于一个时钟周期的长度,一个时钟周期较长,N的值可以较大,一个时钟周期的较短,N的值可以较小。
在一种示例性实例中,本申请算术编码器为VP8二进制算术编码。
本申请提供的算术编码器,采用多路并行的电路结构,因此,在一个时钟周期内能够处理多个编码字符,提高了吞吐率,加快了处理速度。
图2为本申请算术编码器中第一级处理单元实施例的组成结构示意图,如图2所示,在一种示例性实例中,第一级处理单元可以包括:N个串行连接的编码区间处理模块(如图1所示的第一编码区间处理模块、第二编码区间处理模块、第三编码区间处理模块…第N编码区间处理模块,图2中仅以N=4为例)、第一临时寄存器、第一流水线寄存器;其中,
第一编码区间处理模块,用于接收当前时钟周期内的待处理的第一编码字符bin_0、第一编码字符的编码概率prob_0以及上一个编码字符的编码区间大小range_(N-1);根据接收到的第一编码字符的编码概率prob_0以及上一个编码字符的编码区间大小range_(N-1)(需要说明的是,在首次计算时,上一个编码字符的编码区间大小为初始值如可以设置为8’d255),计算得到第一split值split_0;根据计算得到的第一split值split_0和第一编码字符bin_0计算得到当前编码区间大小;根据当前编码区间大小,通过查表(如表1所示)得到当前编码区间大小需要左移的比特数值即第一左移比特数值shift_0以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第一编码字符处理模块输出的range值即range_0。
第二编码区间处理模块,用于接收当前时钟周期内的待处理的第二编码字符bin_1、第二编码字符的编码概率prob_1以及上一个编码字符的编码区间大小range_0;根据接收到的第二编码字符的编码概率prob_1以及上一个编码字符的编码区间大小range_0,计算得到第二split值split_1;根据计算得到的第二split值split_1和第二编码字符bin_1计算得到当前编码区间大小;根据当前编码区间大小,通过查表(如表1所示)得到当前编码区间大小需要左移的比特数值即第二左移比特数值shift_1以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第二编码字符处理模块输出的range值即range_1。
第三编码区间处理模块,用于接收当前时钟周期内的待处理的第三编码字符bin_2、第三编码字符的编码概率prob_2以及上一个编码字符的编码区间大小range_1;根据接收到的第三编码字符的编码概率prob_2以及上一个编码字符的编码区间大小range_1,计算得到第三split值split_2;根据计算得到的第三split值split_2和第三编码字符bin_2计算得到当前编码区间大小;根据当前编码区间大小,通过查表(如表1所示)得到当前编码区间大小需要左移的比特数值即第三左移比特数值shift_2以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第三编码字符处理模块输出的range值即range_2。
vpx_nom
range shift range_after_shift
8′b1xxxxxxx 0 8′b1xxxxxxx
8′b01xxxxxx 1 8′b1xxxxxx0
8′b001xxxxx 2 8′b1xxxxx00
8′b0001xxxx 3 8′b1xxxx000
8′b00001xxx 4 8′b1xxx0000
8′b000001xx 5 8′b1xx00000
8′b0000001x 6 8′b1x000000
8′b00000001 7 8′b10000000
8′b00000000 0 8′b00000000
表1
以此类推,第N编码区间处理模块,用于接收当前时钟周期内的待处理的第N编码字符bin_(N-1)、第N编码字符的编码概率prob_(N-1)以及上一个编码字符的编码区间大小range_(N-2);根据接收到的第N编码字符的编码概率prob_(N-1)以及上一个编码字符的编码区间大小range_(N-2),计算得到第N split值split_(N-1);根据计算得到的第N split值split_(N-1)和第N编码字符bin_(N-1)计算得到当前编码区间大小;根据当前编码区间大小,通过查表(如表1所示)得到当前编码区间大小需要左移的比特数值即第N左移比特数值shift_(N-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第N编码字符处理模块输出的range值即range_(N-1)。
第一临时寄存器,用于暂时存放第N编码字符处理模块输出的range值即range_(N-1),在下一个时钟周期时输出给第一编码区间处理模块。
第一流水线寄存器,用于在流水线中打拍,存放当前时钟周期内的编码字符bin即第一编码字符bin_0、第二编码字符bin_1、第三编码字符bin_2…第N编码字符bin_(N-1),并输出给第二级处理单元。
需要说明的是,N的值可以是一个固定的值,也可以是一个可配置的参数值。N的大小取决于一个时钟周期的长度,一个时钟周期较长,N的值可以较大,一个时钟周期的较短,N的值可以较小。
由于直接进行无符号8-bit乘法操作的关键路径较长,也就是说,会直接导致最高时钟频率降低,即相同时间内的时钟周期数目减少,从而降低处理效率,因此,本申请实施例中,为了减少第一级流水结构即第一级处理单元的关键路径,对于根据接收到的第N编码字符的编码概率prob_(N-1)以及上一个编码字符的编码区间大小range_(N-2),根据公式split=1+((range-1)*prob>>8)计算得到第N split值split_(N-1),在一种示例性实例中,如图3所示,将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,其中,每个无符号4-bit乘法操作可以通过查找表实现。如图3中,符号“×”或“*”表示相乘,符号“+”表示相加,A表示其中一个无符号8-bit乘数,B表示另一个无符号8-bit乘数;A_Hi(4-bit)表示A拆分出来的一个无符号4_bit高位数;A_Lo(4-bit)表示A拆分出来的一个无符号4_bit低位数,B_Hi(4-bit)表示B拆分出来的一个无符号4_bit高位数,B_Lo(4-bit)表示B拆分出来的一个无符号4_bit低位数;不同线形表示不同的无符号乘法操作。
在一种示例性实例中,第一级处理单元还可以包括:第一数据选择器;
第一数据选择器,用于在可设置的信号number控制下,当number=N时,此时N路编码字符处理模块并行处理,因此,第一临时寄存器存放第N编码字符处理模块输出的range值即range_(N-1);…,当number=4时,此时4路编码字符处理模块并行处理,因此,第一临时寄存器存放第四编码字符处理模块输出的range值即range_3;当number=3时,此时3路编码字符处理模块并行处理,因此,第一临时寄存器存放第三编码字符处理模块输出的range值即range_2,以此类推。
特别地,当number=0时,任何一个编码区间处理模块均不处理,因此,第一临时寄存器存放的range值保持不变。
本申请算术编码器实施例中,电路结构中引入了number信号来控制当前有效的编码字符数,因此,针对VP8二进制算术编码器在每个时钟周期内能够处理的编码字符是可配置的如N个,提高了本申请算术编码器的灵活应用。
需要说明的是,除了上面提到的信号,第一级流水结构即第一级处理单元的顶层接口如表2所示:
/>
表2
图4为本申请算术编码器中第二级处理单元实施例的组成结构示意图,如图4所示,在一种示例性实例中,第二级处理单元可以包括:N个串行连接的编码位置处理模块(如图1所示的第一编码位置处理模块、第二编码位置处理模块、第三编码位置处理模块…第N编码位置处理模块,图4中仅以N=4为例)、第二临时寄存器、第二流水线寄存器;其中,
第一编码位置处理模块,用于接收当前时钟周期内的第一左移比特数值shift_0以及上一个编码后输出的比特在一个字节中的比特位置count_(N-1)(需要说明的是,在首次计算时,上一个编码后输出的比特在一个字节中的比特位置的初始值如可以设置为-32’d24),根据count_i=count_i+shift_i(此时i=0,如图5中的步骤500所示)计算当前字符编码后的比特位置即第一比特位置值count_0;然后,根据count_0值确定当前编码字符的第一偏移量offset_0,并更新第一左移比特数值shift_0和第一比特位置值count_0。
第二编码位置处理模块,用于接收当前时钟周期内的第二左移比特数值shift_1以及上一个编码后输出的比特在一个字节中的比特位置count_0,根据count_i=count_i+shift_i(此时i=1,如图5中的步骤500所示)计算当前字符编码后的比特位置即第二比特位置值count_1;然后,根据count_1值确定当前编码字符的第二偏移量offset_1,并更新第二左移比特数值shift_1和第二比特位置值count_1。
第三编码位置处理模块,用于接收当前时钟周期内的第三左移比特数值shift_2以及上一个编码后输出的比特在一个字节中的比特位置count_1,根据count_i=count_i+shift_i(此时i=2,如图5中的步骤500所示)计算当前字符编码后的比特位置即第三比特位置值count_2;然后,根据count_2值确定当前编码字符的第三偏移量offset_2,并更新第二左移比特数值shift_2和第二比特位置值count_2。
以此类推,第N编码位置处理模块,用于接收当前时钟周期内的第N左移比特数值shift_(N-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(N-2),根据count_i=count_(i-1)+shift_i(此时i=N-1,如图5中的步骤500所示)计算当前字符编码后的比特位置即第N比特位置值count_(N-1);然后,根据count_(N-1)值确定当前编码字符的第N偏移量offset_(N-1),并更新第N左移比特数值shift_(N-1)和第N比特位置值count_(N-1)。
第二临时寄存器,用于暂时存放第N编码位置处理模块输出的count值即count_(N-1),在下一个时钟周期时输出给第一编码位置处理模块。
第二流水线寄存器,用于在流水线中打拍,存放当前时钟周期内的编码字符bin即第一编码字符bin_0、第二编码字符bin_1、第三编码字符bin_2…第N编码字符bin_(N-1),以及当前时钟周期内的第一split值split_0、第二split值split_1、第三split值split_2…第N split值split_(N-1),并输出给第三级处理单元。
图5为本申请第二级处理单元实现处理的实施例的流程示意图,在一种示例性实例中,如图5所示,根据count_(i-1)值确定当前编码字符的偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第i比特位置值count_(i-1),i=1,2,3…N,包括:
对count_(i-1)值进行判断,如果count_(i-1)<0(即比特位置的标志信息count_flag_(i-1)=1,如图5中的步骤501所示),那么,如图5中的步骤502所示,当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0(即比特位置的标志信息count_flag_(i-1)=0,如图5中的步骤501所示),那么,如图5中的步骤503所示,当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
在一种示例性实例中,第二级处理单元还可以包括:第二数据选择器;
第二数据选择器,用于在可设置的信号number控制下,当number=N时,此时N路编码位置处理模块并行处理,因此,第二临时寄存器存放第N编码位置处理模块输出的count值即count_(N-1);…,当number=4时,此时4路编码位置处理模块并行处理,因此,第二临时寄存器存放第四编码位置处理模块输出的count值即count_3;当number=3时,此时3路编码位置处理模块并行处理,因此,第二临时寄存器存放第三编码位置处理模块输出的count值即count_2,以此类推。
本申请算术编码器实施例中,电路结构中引入了number信号来控制当前有效的编码字符数,因此,针对VP8二进制算术编码器在每个时钟周期内能够处理的编码字符是可配置的如N个,提高了本申请算术编码器的灵活应用。
需要说明的是,除了上面提到的信号,第二级流水结构即第二级处理单元的顶层接口如表3所示:
/>
表3
图6为本申请算术编码器中第三级处理单元实施例的组成结构示意图,如图6所示,在一种示例性实例中,第三级处理单元可以包括:N个串行连接的编码区间限值处理模块(如图1所示的第一编码区间限值处理模块、第二编码区间限值处理模块、第三编码区间限值处理模块…第N编码区间限值处理模块,图6中仅以N=4为例)、第三临时寄存器;其中,
第一编码区间限值处理模块,用于接收当前时钟周期内的第一编码字符bin_0、第一左移比特数值shift_0、第一偏移量offset_0、第一比特位置标志信息count_flag_0,以及上一编码字符的编码区间下限值lowvaule_(N-1)(需要说明的是,在首次计算时,上一编码字符的编码区间下限值的初始值如可以设置为32’d0),然后,根据当前的第一编码字符bin_0和第一比特位置标志信息count_flag_0,确定第一编码区间下限值lowvaule_0和第一输出码流data_0。
第二编码区间限值处理模块,用于接收当前时钟周期内的第二编码字符bin_1、第二左移比特数值shift_1、第二偏移量offset_1、第二比特位置标志信息count_flag_1,以及上一编码字符的编码区间下限值lowvaule_0,然后,根据当前的第二编码字符bin_1和第二比特位置标志信息count_flag_1,确定第二编码区间下限值lowvaule_1和第二输出码流data_1。
第三编码区间限值处理模块,用于接收当前时钟周期内的第三编码字符bin_2、第三左移比特数值shift_2、第三偏移量offset_2、第三比特位置标志信息count_flag_2,以及上一编码字符的编码区间下限值lowvaule_1,然后,根据当前的第三编码字符bin_2和第三比特位置标志信息count_flag_2,确定第三编码区间下限值lowvaule_2和第三输出码流data_2。
以此类推,第N编码区间限值处理模块,用于接收当前时钟周期内的第N编码字符bin_(N-1)、第N左移比特数值shift_(N-1)、第N偏移量offset_(N-1)、第N比特位置标志信息count_flag_(N-1),以及上一编码字符的编码区间下限值lowvaule_(N-2),然后,根据当前的第N编码字符bin_(N-1)和第N比特位置标志信息count_flag_(N-1),确定第N编码区间下限值lowvaule_(N-1)和第N输出码流data_(N-1)。
第三临时寄存器,用于暂时存放第N编码区间限值处理模块输出的count_flag值即count_flag_(N-1),在下一个时钟周期时输出给第一编码区间限值处理。
图7为本申请第三级处理单元实现处理的实施例的流程示意图,在一种示例性实例中,如图7所示,根据当前的编码字符bin_(i-1)和比特位置标志信息count_flag_(i-1),确定编码字符的编码区间下限值lowvaule_(i-1)和输出码流data_(i-1),i=1,2,3…N,包括:
首先,根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,如图7中的步骤702所示,那么,当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)保持为上一编码字符的lowvaule值,即lowvaule_(i-1)的值不变;如果bin_(i-1)=1,如图7中的步骤701所示,那么,当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和,即lowvaule_(i-1)=lowvaule_(i-1)+split_(i-1);
然后,根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并进一步更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0(即count_flag_(i-1)=1),如图7中的步骤705所示,那么,不输出码流,此时,当前字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位,即lowvaule_(i-1)=lowvaule_(i-1)<<shift_(i-1);如果count_(i-1)≥0(即count_flag_(i-1)=0),如图7中的步骤704和步骤705所示,输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位即data_(i-1)=lowvalue_(i-1)>>(24-offset_(i-1)),当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位即lowvalue_(i-1)=lowvalue_(i-1)<<(offset_(i-1)+shift_(i-1))。
在一种示例性实例中,第三级处理单元还可以包括:第三数据选择器;
第三数据选择器,用于在可设置的信号number控制下,当number=N时,此时N路编码区间限值处理模块并行处理,因此,第三临时寄存器存放第N编码区间限值处理模块输出的count_flag值即count_flag_(N-1);…,当number=4时,此时4路编码区间限值处理模块并行处理,因此,第三临时寄存器存放第四编码区间限值处理模块输出的count_flag值即count_flag_3;当number=3时,此时3路编码区间限值处理模块并行处理,因此,第三临时寄存器存放第三编码区间限值处理模块输出的count_flag值即count_flag_2,以此类推。
本申请算术编码器实施例中,电路结构中引入了number信号来控制当前有效的编码字符数,因此,针对VP8二进制算术编码器在每个时钟周期内能够处理的编码字符是可配置的如N个,提高了本申请算术编码器的灵活应用。
需要说明的是,除了上面提到的信号,第三级流水结构即第三级处理单元的顶层接口如表4所示:
/>
表4
在一种示例性实例中,本申请输出单元即第四级流水线结构的电路结构可以包括:先进先出队列缓冲区data_refine FIFO,用于将并行输入的N路8-bit码流按顺序转换为串行输出的单路8-bit码流。
在一种示例性实例中,如图8所示的先进先出队列缓冲区data_refine FIFO的实施例的示意图,本实施例中,data_refine FIFO的深度为4,宽度为(2+32)bit,其中,前2bit用于存放有效码流的个数,后32bit用于存放对应的有效码流。当写使能wr_enable信号有效时,给写指针wr_point对应的区间(num[wr_point]和data[wr_point]赋值,同时将写指针wr_point加1;当读读使能rd_enable信号有效时,根据计数器data_cnt从读指针rd_point对应的区间(num[rd_point]和data[rd_point])取值,当data_cnt=0时,输出码流为data[rd_point][7:0],当data_cnt=1时,输出码流为data[rd_point][15:8],以此类推,直到data_cnt=num[rd_point],输出码流后将读指针rd_point加1。
需要说明的是,除了上面提到的信号,第四级流水结构即输出处理单元的顶层接口如表5所示:
/>
表5
图9为本申请实现算术编码的方法的流程图,如图9所示,在一个时钟周期内,包括:
步骤900:算术编码器并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小。
在一种示例性实例中,步骤900可以包括:
接收当前时钟周期内的待处理的第i编码字符bin_(i-1)、第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2);
根据接收到的第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2),计算得到第N split值split_(i-1);
根据计算得到的第i个split值split_(i-1)和第i编码字符bin_(i-1)计算得到当前编码区间大小;
根据当前编码区间大小,通过查表(如表1所示)得到当前编码区间大小需要左移的比特数值即第i左移比特数值shift_(i-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第i编码字符处理模块输出的range值即range_(i-1)。
其中,i=1,2,3…N。
需要说明的是,在首次计算时,上一个编码字符的编码区间大小为初始值如可以设置为8’d255。
在一种示例性实例中,可以根据公式split=1+((range-1)*prob>>8)计算得到第N split值split_(N-1),包括:
将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,其中,每个无符号4-bit乘法操作可以通过查找表实现。
在一种示例性实例中,步骤900还包括:
根据可设置的信号number,对number路编码字符进行并行处理,其中,number=1,2,3…N。这样的方式提高了本申请算术编码器的灵活应用。
特别地,当number=0时,任何一个编码区间处理模块均不处理,因此,第一临时寄存器存放的range值保持不变。
在一种示例性实例中,本申请还提供一种实现算术编码的方法,在一个时钟周期内,包括:
算术编码器根据可设置的信号number,对number路编码字符进行并行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小,其中,number=1,2,3…N;
算术编码器并行对numbe个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
算术编码器并行对numbe个编码字符、numbe个当前编码区间大小需要左移的比特数值、numbe个当前编码字符的偏移量和numbe个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
算术编码器将并行输入的numbe路输出码流按顺序转换为串行输出的单路输出码流输出。
步骤901:算术编码器并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量。
在一种示例性实例中,步骤901可以包括:
接收当前时钟周期内的第i左移比特数值shift_(i-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(i-2);
根据count_(i-1)=count_(i-2)+shift_(i-1),计算当前字符编码后的比特位置即第i比特位置值count_(i-1);
根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1)。
其中,i=1,2,3…N。
需要说明的是,在首次计算时,上一个编码后输出的比特在一个字节中的比特位置的初始值如可以设置为-32’d24。
在一种示例性实例中,根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1),包括:
对count_(i-1)值进行判断,如果count_(i-1)<0(即比特位置的标志信息count_flag_(i-1)=1),那么,当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0(即比特位置的标志信息count_flag_(i-1)=0),那么,当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
在一种示例性实例中,步骤901还包括:
根据可设置的信号number,对number路编码位置进行并行处理,其中,number=1,2,3…N。这样的方式提高了本申请算术编码器的灵活应用。
步骤902:算术编码器并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流。
在一种示例性实例中,步骤902可以包括:
接收当前时钟周期内的第i编码字符bin_(i-1)、第i左移比特数值shift_(i-1)、第i偏移量offset_(i-1)、第i比特位置标志信息count_flag_(i-1),以及上一编码字符的编码区间下限值lowvaule_(i-2);
根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1)。
其中,i=1,2,3…N。
在一种示例性实例中,根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1),其中,i=1,2,3…N,包括:
根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,那么,当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)保持为上一编码字符的lowvaule值,即lowvaule_(i-1)的值不变;如果bin_(i-1)=1,那么,当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和,即lowvaule_(i-1)=lowvaule_(i-1)+split_(i-1);
根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并进一步更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0(即count_flag_(i-1)=1),那么,不输出码流,此时,当前编码字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位即lowvaule_(i-1)=lowvaule_(i-1)<<shift_(i-1);如果count_(i-1)≥0(即count_flag_(i-1)=0),输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位即data_(i-1)=lowvalue_(i-1)>>(24-offset_(i-1)),当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位即lowvalue_(i-1)=lowvalue_(i-1)<<(offset_(i-1)+shift_(i-1))。
在一种示例性实例中,步骤902还可以包括:
根据可设置的信号number,对number路编码区间限制进行并行处理,其中,number=1,2,3…N。这样的方式提高了本申请算术编码器的灵活应用。
步骤903:算术编码器将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出。
在一种示例性实例中,N的值可以是一个固定的值,也可以是一个可配置的参数值。N的大小取决于一个时钟周期的长度,一个时钟周期较长,N的值可以较大,一个时钟周期的较短,N的值可以较小。
在一种示例性实例中,本申请算术编码器为VP8二进制算术编码。
本申请提供的VP8二进制算术编码器,采用四N路并行的电路结构,因此,在一个时钟周期内最多能够处理N个编码字符,提高了吞吐率,加快了处理速度。
本申请实施例实现算术编码的方法,在一个时钟周期内能够并行处理多个编码字符,提高了吞吐率,加快了处理速度。
本申请还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行上述任一项的实现算术编码的方法。
本申请再提供一种实现算术编码的设备,包括存储器和处理器,其中,存储器中存储有以下可被处理器执行的指令:用于执行上任一项所述实现算术编码的方法的步骤。
本申请还提供一种图像编码方法,包括:
对待处理的图像进行预处理得到多个图像块;
对得到的图像块分别进行转换处理得到编码字符和编码概率;
将图像块对应的编码字符和编码概率输入编码器进行编码;
其中,编码器包括本申请实施例中任一项所述的算术编码器。
需要说明的是,对待处理的图像进行预处理得到多个图像块,以及对得到的图像块分别进行转换处理得到编码字符和编码概率的实现可以采用相关技术完成,具体实现并不用于限定本申请的保护范围。
虽然本申请所揭露的实施方式如上,但所述的内容仅为便于理解本申请而采用的实施方式,并非用以限定本申请。任何本申请所属领域内的技术人员,在不脱离本申请所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本申请的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (25)

1.一种算术编码器,包括:第一级处理单元、第二级处理单元、第三级处理单元、输出单元;其中,
第一级处理单元,用于在一个时钟周期内,并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小;
第二级处理单元,用于在一个时钟周期内,并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
第三级处理单元,用于在一个时钟周期内,并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
输出单元,用于将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出;
其中,N为大于或等于1的整数,所述算术编码器的电路结构中通过number信号控制当前有效的编码字符数。
2.根据权利要求1所述的算术编码器,其中,所述第一级处理单元包括:N个串行连接的编码区间处理模块:第i编码区间处理模块,i=1,2,3…N,以及第一临时寄存器,第一流水线寄存器;其中,
第i编码区间处理模块,用于接收当前所述时钟周期内的待处理的第i编码字符bin_(i-1)、第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2);根据接收到的第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2),计算得到第i个split值split_(i-1);根据计算得到的第i个split值split_(i-1)和第i编码字符bin_(i-1)计算得到当前编码区间大小;根据当前编码区间大小,通过查表得到当前编码区间大小需要左移的比特数值shift_(i-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第i编码字符处理模块输出的range值range_(i-1);
第一临时寄存器,用于暂时存放第i编码字符处理模块输出的range值range_(i-1),在下一个时钟周期时输出给第一编码区间处理模块;
第一流水线寄存器,用于在流水线中打拍,存放当前所述时钟周期内的编码字符bin:第i编码字符bin_(i-1),并输出给所述第二级处理单元。
3.根据权利要求2所述的算术编码器,还包括:第一数据选择器;
第一数据选择器,用于在可设置的信号number控制下,对number路编码字符进行并行处理,其中,number=1,2,3…N。
4.根据权利要求2或3所述的算术编码器,其中,
采用将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,实现所述第i个split值split_(i-1)的计算,其中,每个无符号4-bit乘法操作通过查找表实现。
5.根据权利要求1所述的算术编码器,其中,所述第二级处理单元包括:N个串行连接的编码位置处理模块:第i编码位置处理模块,i=1,2,3…N,以及第二临时寄存器、第二流水线寄存器;其中,
第i编码位置处理模块,用于接收当前所述时钟周期内的第i左移比特数值shift_(i-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(i-2),根据count_(i-1)=count_(i-2)+shift_(i-1)计算当前字符编码后的比特位置count_(i-1);根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第i比特位置值count_(i-1);
第二临时寄存器,用于暂时存放第i编码位置处理模块输出的count值count_(i-1),在下一个时钟周期时输出给第一编码位置处理模块;
第二流水线寄存器,用于在流水线中打拍,存放当前时所述钟周期内的编码字符bin:第i编码字符bin_(i-1),以及当前所述时钟周期内的第i个split值split_(i-1),并输出给所述第三级处理单元。
6.根据权利要求5所述的算术编码器,还包括:第二数据选择器;
第二数据选择器,用于在可设置的信号number控制下,对i路编码位置进行并行处理。
7.根据权利要求5或6所述的算术编码器,其中,所述根据count_(i-1)值确定当前编码字符的偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第i比特位置值count_(i-1),包括:
对count_(i-1)值进行判断,如果count_(i-1)<0,则当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0,则当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
8.根据权利要求1所述的算术编码器,其中,所述第三级处理单元包括:N个串行连接的编码区间限值处理模块:第i编码区间限值处理模块,i=1,2,3…N,以及第三临时寄存器;其中,
第i编码区间限值处理模块,用于接收当前时钟周期内的第i编码字符bin_(i-1)、第i左移比特数值shift_(i-1)、第i偏移量offset_(i-1)、第i比特位置标志信息count_flag_(i-1),以及上一编码字符的编码区间下限值lowvaule_(i-2);根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1);
第三临时寄存器,用于暂时存放第i编码区间限值处理模块输出的count_flag_(i-1),在下一个时钟周期时输出给第一编码区间限值处理。
9.根据权利要求8所述的算术编码器,还包括:第三数据选择器;
第三数据选择器,用于在可设置的信号number控制下,对i路编码区间限值进行并行处理。
10.根据权利要求8或9所述的算术编码器,其中,所述根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1),包括:
根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)不变;如果bin_(i-1)=1,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和;
根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0,则当前字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位;如果count_(i-1)≥0,输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位,当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位。
11.根据权利要求1所述的算术编码器,其中,所述输出单元为先进先出队列缓冲区。
12.根据权利要求1所述的算术编码器,其中,所述算术编码器为VP8二进制算术编码。
13.一种实现算术编码的方法,在一个时钟周期内,包括:
算术编码器并行对N个编码字符进行处理,获取当前编码区间大小需要左移的比特数值和当前编码区间的区间大小;
算术编码器并行对N个当前编码区间大小需要左移的比特数值进行处理,获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量;
算术编码器并行对N个编码字符、N个当前编码区间大小需要左移的比特数值、N个当前编码字符的偏移量和N个比特位置的标志信息进行处理,获取当前编码区间的区间下限值和编码字符的输出码流;
算术编码器将并行输入的N路输出码流按顺序转换为串行输出的单路输出码流输出;
其中,N为大于或等于1的整数,所述算术编码器的电路结构中通过number信号控制当前有效的编码字符数。
14.根据权利要求13所述的方法,其中,所述并行对N个编码字符进行处理,获取当前编码区间的区间大小和当前编码区间大小需要左移的比特数值,包括:
接收当前所述时钟周期内的待处理的第i编码字符bin_(i-1)、第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2);
根据接收到的第i编码字符的编码概率prob_(i-1)以及上一个编码字符的编码区间大小range_(i-2),计算得到第N split值split_(i-1);
根据计算得到的第i个split值split_(i-1)和第i编码字符bin_(i-1)计算得到当前编码区间大小;
根据当前编码区间大小,通过查表得到当前编码区间大小需要左移的比特数值shift_(i-1)以及左移后的编码区间大小值range_after_shift;将左移后的编码区间大小值range_after_shift作为第i编码字符处理模块输出的range值range_(i-1);
其中,i=1,2,3…N。
15.根据权利要求14所述的方法,还包括:
根据可设置的信号number,对number路编码字符进行并行处理,其中,number=1,2,3…N。
16.根据权利要求14或15所述的方法,采用将无符号8-bit乘法操作拆分为四个无符号4-bit乘法操作、三个移位操作和三个无符号4-bit加法操作,计算所述第N split值split_(N-1);其中,每个无符号4-bit乘法操作通过查找表实现。
17.根据权利要求13所述的方法,其中,所述获取当前编码后输出的比特在一个字节中的比特位置、比特位置的标志信息和当前编码字符的偏移量,包括:
接收当前所述时钟周期内的第i左移比特数值shift_(i-1)以及上一个编码后输出的比特在一个字节中的比特位置count_(i-2);
根据count_(i-1)=count_(i-2)+shift_(i-1),计算当前字符编码后的比特位置count_(i-1);
根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1);
其中,i=1,2,3…N。
18.根据权利要求17所述的方法,还包括:
根据可设置的信号number,对number路编码位置进行并行处理,其中,number=1,2,3…N。
19.根据权利要求17或18所述的方法,其中,所述根据count_(i-1)值确定当前编码字符的第i偏移量offset_(i-1),并更新第i左移比特数值shift_(i-1)和第二比特位置值count_(i-1),包括:
对count_(i-1)值进行判断,如果count_(i-1)<0,则当前编码字符的偏移量offset_(i-1)的值为0,shift_(i-1)的值和count_(i-1)的值保持不变;如果count_(i-1)≥0,则当前编码字符的偏移量offset_(i-1)值等于shift_(i-1)的值和count_(i-1)的值之差,shift_(i-1)的值等于count_(i-1)的值,count_(i-1)的值更新为count_(i-1)的值减8。
20.根据权利要求13所述的方法,其中,所述获取当前编码区间的区间下限值和编码字符的输出码流,包括:
接收当前所述时钟周期内的第i编码字符bin_(i-1)、第i左移比特数值shift_(i-1)、第i偏移量offset_(i-1)、第i比特位置标志信息count_flag_(i-1),以及上一编码字符的编码区间下限值lowvaule_(i-2);
根据当前的第i编码字符bin_(i-1)和第i比特位置标志信息count_flag_(i-1),确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1);
其中,i=1,2,3…N。
21.根据权利要求20所述的方法,还包括:
根据可设置的信号number,对number路编码区间限制进行并行处理;其中,number=1,2,3…N。
22.根据权利要求20或21的方法,所述确定第i编码区间下限值lowvaule_(i-1)和第i输出码流data_(i-1),包括:
根据当前的编码字符bin_(i-1)更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果bin_(i-1)=0,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)保持不变;如果bin_(i-1)=1,则当前编码字符的编码字符的编码区间下限值lowvaule_(i-1)更新为上一编码字符的lowvaule值和当前编码字符的split_(i-1)之和;
根据当前编码字符的比特位置标志信息count_flag_(i-1)确定输出码流并更新当前编码字符的编码字符的编码区间下限值lowvaule_(i-1):如果count_(i-1)<0,则不输出码流,此时,当前编码字符的lowvaule_(i-1)更新为lowvalue值左移shift_(i-1)位;如果count_(i-1)≥0,输出码流data_(i-1)等于lowvalue_(i-1)右移(24-offset_(i-1))位,当前编码字符的lowvalue_(i-1)更新为lowvalue_(i-1)左移(offset_(i-1)+shift_(i-1))位。
23.一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求13~权利要求22任一项所述实现算术编码的方法。
24.一种实现算术编码的设备,包括存储器和处理器,其中,存储器中存储有以下可被处理器执行的指令:用于执行权利要求13~权利要求22任一项所述实现算术编码的步骤。
25.一种图像编码方法,包括:
对待处理的图像进行预处理得到多个图像块;
将得到的图像块分别转换得到对应的编码字符和编码概率;
将图像块对应的编码字符和编码概率输入编码器进行编码;
其中,编码器包括权利要求1~12任一项所述的算术编码器。
CN202010051282.3A 2020-01-17 2020-01-17 算术编码器及实现算术编码的方法和图像编码方法 Active CN113141508B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010051282.3A CN113141508B (zh) 2020-01-17 2020-01-17 算术编码器及实现算术编码的方法和图像编码方法
PCT/CN2021/071024 WO2021143634A1 (zh) 2020-01-17 2021-01-11 算术编码器及实现算术编码的方法和图像编码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010051282.3A CN113141508B (zh) 2020-01-17 2020-01-17 算术编码器及实现算术编码的方法和图像编码方法

Publications (2)

Publication Number Publication Date
CN113141508A CN113141508A (zh) 2021-07-20
CN113141508B true CN113141508B (zh) 2024-03-26

Family

ID=76808227

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010051282.3A Active CN113141508B (zh) 2020-01-17 2020-01-17 算术编码器及实现算术编码的方法和图像编码方法

Country Status (2)

Country Link
CN (1) CN113141508B (zh)
WO (1) WO2021143634A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116738471B (zh) * 2023-08-10 2023-10-20 陕西昕晟链云信息科技有限公司 基于区块链的去中心化数据分析方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015115665A (ja) * 2013-12-09 2015-06-22 日本電信電話株式会社 二値算術符号化装置、二値算術符号化方法及び二値算術符号化プログラム
CN104918049A (zh) * 2015-06-03 2015-09-16 复旦大学 适用于hevc标准的二进制算术编码模块
CN105791828A (zh) * 2015-12-31 2016-07-20 杭州士兰微电子股份有限公司 二进制算术编码器及其编码方法
CN107277553A (zh) * 2017-07-10 2017-10-20 中国科学技术大学 一种二元算术编码器

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1703089A (zh) * 2005-06-09 2005-11-30 清华大学 一种数字信号的二值算术编码方法
US7777654B2 (en) * 2007-10-16 2010-08-17 Industrial Technology Research Institute System and method for context-based adaptive binary arithematic encoding and decoding
US8542727B2 (en) * 2007-12-31 2013-09-24 Intel Corporation Systems and apparatuses for performing CABAC parallel encoding and decoding

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015115665A (ja) * 2013-12-09 2015-06-22 日本電信電話株式会社 二値算術符号化装置、二値算術符号化方法及び二値算術符号化プログラム
CN104918049A (zh) * 2015-06-03 2015-09-16 复旦大学 适用于hevc标准的二进制算术编码模块
CN105791828A (zh) * 2015-12-31 2016-07-20 杭州士兰微电子股份有限公司 二进制算术编码器及其编码方法
CN107277553A (zh) * 2017-07-10 2017-10-20 中国科学技术大学 一种二元算术编码器

Also Published As

Publication number Publication date
WO2021143634A1 (zh) 2021-07-22
CN113141508A (zh) 2021-07-20

Similar Documents

Publication Publication Date Title
US9860561B2 (en) Data compression using spatial decorrelation
US9413387B2 (en) Data compression using entropy encoding
CN109600618B (zh) 视频压缩方法、解压缩方法、装置、终端和介质
KR940003199B1 (ko) 다수의 기호값을 갖는 입력 신호를 인코딩하는 방법
US4454546A (en) Band compression device for shaded image
US4905297A (en) Arithmetic coding encoder and decoder system
DK176874B1 (da) Adaptiv kodningsfremgangsmåde
US20150379682A1 (en) Vertex attribute data compression with random access using hardware
JPH0253329A (ja) 圧縮符号化方法及び復号方法
US20040107091A1 (en) Method of compressing lookup table for reducing memory, non-linear function generating apparatus having lookup table compressed using the method, and non-linear function generating method
US7111094B1 (en) System, method and algorithm for the optimization of entropy for lossless compression
CN113141508B (zh) 算术编码器及实现算术编码的方法和图像编码方法
US20150113027A1 (en) Method for determining a logarithmic functional unit
EP0260461B1 (en) Arithmetic coding encoding and decoding method
US20240137043A1 (en) Data compression method and apparatus, and data decompression method and apparatus
US8559741B2 (en) Lossless image compression method
US8817875B2 (en) Methods and systems to encode and decode sequences of images
US5448642A (en) Method for coding low entrophy data
US20110122964A1 (en) Binary Arithmetic Coding Device
KR100207428B1 (ko) 허프만 코드 변환에 적응적인 고속 가변장 복호화 장치 및 방법
WO2019191904A1 (zh) 一种数据处理方法及装置
JPH0936749A (ja) 符号化復号化装置およびこれに用いられる符号化方法
JP3084187B2 (ja) 2値画像符号化装置及び2値画像復号化装置
JP3093451B2 (ja) 冗長性低減符号化装置
CN117651081A (zh) 一种数据传输方法、装置、设备及存储介质

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40055848

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant