CN102186075B - 一种熵编码器及其实现方法 - Google Patents
一种熵编码器及其实现方法 Download PDFInfo
- Publication number
- CN102186075B CN102186075B CN 201110109328 CN201110109328A CN102186075B CN 102186075 B CN102186075 B CN 102186075B CN 201110109328 CN201110109328 CN 201110109328 CN 201110109328 A CN201110109328 A CN 201110109328A CN 102186075 B CN102186075 B CN 102186075B
- Authority
- CN
- China
- Prior art keywords
- level
- module
- circuit
- codenum
- coding
- 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
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供了一种熵编码结构及实现方法,属于数字视频编解码技术领域。本发明通过将整个熵编码器分成两级流水线结构,使产生宏块头参数和编码宏块头参数处于不同的流水级,消除了等待时间,同时合理分配了编码时间。每级流水线内部采用了单路流水线硬件结构,与传统的多路并行结构相比,整个变长编码模块采用了多级流水线结构,完成一级操作只需要1个时钟,本发明熵编码器能够在每个时钟内完成一次变长编码;同时,顺序编码宏块头信息和残差系数复用一套哥伦布编码和码流拼接装置,节省了硬件成本,提高了资源利用率。此外,本发明对变长编码中使用的VLC码表进行了统一编排,减少了RAM使用数量。
Description
技术领域
本发明属于数字视频编解码技术领域,特别涉及一种熵编码硬件设计方法。
背景技术
二十世纪九十年代以来,数字视频压缩技术被广泛应用与通信、个人计算机、广播电视、消费电子等领域,堪称数字媒体产业的最核心技术。以MPEG-2为代表的信源编码标准获得了巨大的成功。进入新世纪以来,以H.264/AVC和AVS为代表的新一代信源编码标准出现了。AVS标准是我国具有自主知识产权的信源编码标准。2006年2月,AVS视频标准已经正式被批准为国家标准,进入了产业化推广的阶段。由于AVS视频标准的主要应用对象是标准清晰度/高清晰度电视,编码过程的计算复杂度较大,对编码器的硬件设计提出了挑战。
当今视频编码标准中,如MPEG-2,H.264,AVS,在完成运动估计运算后,无一不采用熵编码技术来压缩剩下的残差系数。熵编码主要有:行程编码(RLE)、LZW编码、香农(Shannon)编码、霍夫曼(Huffman)编码和算术编码(arithmetic coding)。熵编码的主要原理是对出现的不同的信源符号进行统计并得出概率分布,根据信源符号的出现的概率重新进行编码,就出现概率大的信源符号进行分配较短的码字,而概率小的信源符号被分到较长的码字,因而从整体上用较少的比特数去表示较多的信源符号。MPEG-2采用霍夫曼编码(Huffman Code),H.264采用基于上下文自适应变长编码(CAVLC)和基于上下文自适应二进制编码(CABAC),而AVS则采用基于上下文的自适应二维变长编码(CA-2D-VLC)。其中,VLC是一种霍夫曼编码。
AVS熵编码的主要过程如下:首先,扫描量化后的残差系数(游程编码),得到一系列的run-level对;然后对这些run-level对采用2D-VLC编码,得到相应的codenum;然后对codenum采用k(0,1,2,3)阶哥伦布编码,得到最终的码字(CodeWord);最后将CodeWord写入最终的比特流。
现有的关于熵编码的发明专利中,有的只针对子模块进行改进,用以加快编码速度。
发明内容
本发明的目的在于提供一种高速的、低资源消耗的、适合高清视频编码的熵编码结构及其实现方法。
本发明提供的熵编码器设计核心是,将整个熵编码器分成流水工作的两级电路,流水处理宏块语法元素。本发明提供的熵编码电路结构如附图1所示,将整个熵编码器分成两级流水线结构(附图1中虚线分割),第一级流水线结构:第一控制电路、第一顶层接口,zigzag扫描电路、2D-VLC模块、codenum存储电路、输出参数模块、PMV FIFO、MD FIFO、run-level FIFO、残差系数Buffer;第二级流水线结构:第二控制电路、第二顶层接口、宏块头计算电路、固定长度编码电路、codenum取数电路、哥伦布编码电路、写码流电路、多路选择器一(MUX1)、多路选择器二(MUX2)、多路选择器三(MUX3)、宏块头FIFO、codenumBuffer。
1.1第一级流水线结构:
1.1.1第一控制器负责启动本级流水线中各个功能模块。首先启动第一顶层接口1获取帧级参数信息或者宏块级控制信息;然后将这些参数和控制信息发送给其他的功能模块。然后初始化zigzag扫描电路、2D-VLC模块模块和codenum存储电路。然后启动zigzag扫描电路,对第一个块编码。接收来自2D-VLC模块的块编码结束信号,结束当前块的编码。然后按类似过程完成对所有块的编码工作。直到完成对整个宏块所有残差系数的编码。最后启动输出参数模块电路,输出宏块头参数信息。发送结束信号和状态信息到顶层接口模块。
1.1.2顶层接口1负责接收并解析来自帧级或者宏块级控制模块的参数和命令信息。并将这些参数和命令信息输出给控制器1。接收来自第一控制器1的宏块编码结束信号和编码状态信息,反馈给顶层模块。
1.1.3PMV FIFO:接收来自运动矢量预测模块输出的运动矢量数据。并将这些数据返回给输出参数模块。
1.1.4MD FIFO:接收来自模式决策模块输出的宏块参数信息。并将这些数据输出给输出参数模块。
1.1.5残差系数Buffer:接收来自模式决策模块输出的残差信息。接收来自zigzag扫描电路的地址数据,并将该地址对应的残差数据返回给zigzag扫描模块。
1.1.6zigzag扫描:接收来自控制器1的启动信号、初始化信号和参数信息。从残差系数中获得残差数据,进行游程编码,得到run-level数据。并将这些run-level数据写入run-level FIFO。当扫描完所有的块后,得到CBP信息,并将它输出到输出参数模块。
1.1.7run-level FIFO:接收来自zigzag扫描电路输出的run-level数据,并将这些数据输出给2D-VLC模块。
1.1.8 2D-VLC模块:接收来自控制器1的初始化信号和参数信息;从run-levelFIFO中取出run-level数据,然后对这些run-level数据进行变长编码,得到codenum,最后将codenum数据输出到codenum存储电路。
1.1.9codenum存储:接收来自控制器1的初始化信号和参数信息;接收来自2D-VLC模块输出的codenum数据,并将这些数据存储得到codenum Buffer。
1.1.10输出参数模块:接收来自PMV FIFO、MD FIFO和zigzag扫描电路输出的数据;接收来自控制器1的启动信号;将处理后的数据输出到宏块头FIFO。
1.2第二级流水线结构:
1.2.1第二控制器2:负责启动本级流水线中各个功能模块。启动顶层接口2获取获取帧级参数信息或者宏块级控制信息;然后将这些参数和控制信息发送给其他的功能模块。启动宏块头计算电路,等待宏块头计算模块输出的结束信号;然后启动codenum取数模块,等待codenum取数模块输出的结束信号。发送选通信号控制多路选择器1和多路选择器2。发送结束信号和编码状态信息到顶层接口2。
1.2.2顶层接口2负责接收并解析来自帧级或者宏块级控制模块的参数和命令信息。并将这些信息输出给给控制器2。接收来自控制器2的宏块编码结束信号和编码状态信息,反馈给顶层模块。
1.2.3宏块头FIFO:接收第一级流水线输出的宏块参数信息。并将这些数据发送给宏块头计算电路。
1.2.4codenum Buffer:接收第一级流水线输出的codenum信息。并将这些数据返回给codenum取数电路。
1.2.5宏块头计算电路:接收来自控制器2的启动信号和来自顶层接口2的参数信息。接收来自宏块头FIFO输出的数据,按照AVS标准计算宏块头语法元素。并将这些数据输出给固定长度编码模块、多路选择器1和控制器2。
1.2.6codenum取数电路:接收来自codenum Buffer的codenum数据,并将这些数据输出给多路选择器1。发送结束信号到控制器2,发送选通信号到多路选择器1。
1.2.7固定长度编码电路:接收来自宏块头计算电路传送过来的语法元素,经编码后,将码字输出到多路选择器3。
1.2.8多路选择器一:接收来自宏块头计算电路和codenum取数电路输出的codenum数据,根据来自控制器2的选择信号,输出codenum数据。
1.2.9多读选择器二:接收来则接收来自宏块头计算电路和codenum取数电路输出的选择信号,根据来自控制器2的选择信号,输出选择信号。
1.2.10哥伦布编码电路:接收来自多路选择器1的codenu数据,输出处理后的码字信息。
1.2.11多路选择器三:接收来自固定长度编码电路和哥伦布编码电路的码字信息,根据来自多路选择器2的选择信号选择性输出码字数据。
1.2.12写码流电路:接收来自多路选择器3的码字数据,输出固定位宽的码流数据。
1.3实现方法:
在附件1中用虚线划分了两级流水线。当前一级模块(模式决策)MD和MVP(运动矢量预测)模块完成后会输出宏块级语法元素信息(包括宏块头数据和残差系数)。然后开始启动熵编码模块,分两级调用,流水工作(见附图10)。
1.3.1建立流水线:只启动第一级电路。
第一级流水线工作:控制器启动扫描电路开始扫描第一个块的残差系数;扫描电路每扫描出一个run-level对,输出一个有效信号;该有效信号会启动2D-VLC模块;反复操作,直到扫描完一个块所有的残差系数,并输出EOB信号,结束当前块的操作。然后控制器启动第二个块的操作,直到完成所有块的操作,结束当前流水。将CBP和codenum输出。
1.3.2正常流水:同时启动第一级电路和第二级电路。
第一级流水线工作如前所述。
第二级流水线工作:控制器启动宏块头处理电路,依次编码完所有宏块头语法元素,如mb_type,sub_type,intra_pred_mode,chroma_mode,ref_index,mvd,cbp等。宏块头处理结束后,启动codenum取数模块,以块为单位编码codenum信息。直到完成所有块的编码。
1.3.3最后一级流水调用:只调用第二级流水线,第一级流水线停止工作。第二级流水工作如前所述。
1.3.4这样前一流水周期的第一级流水线操作和当前流水周期的第二级流水线操作完成整个宏块的熵编码操作。通过将熵编码分成两级流水线实现,达到将产生CBP信息与编码CBP信息分成两级流水实现,消除了这两个操作在一级熵编码结构中的依赖性。
其中,基于内容的二维变长编码模块(2D-VLC模块)(见附图3)包括:2D-VLC控制器、读书控制模块、更新表号和哥伦布阶数模块、偏移地址计算模块、逃逸处理模块、逃逸判断模块、地址统一编排的码表和多路选择器。
2.1内部数据线连接:
2.1.12D-VLC控制器:接收来自控制器2的启动信号、初始化信号和块号信息。初始化更新表号和哥伦布阶数模块。启动读数控制模块,接收来读数控制模块输出的结束END信号。返回结束信号给控制器2。
2.1.2读数控制模块:发送读信号给run-level FIFO,接收来自run-level FIFO的run-level信息。并将这些信息发送给更新表号和哥伦布阶数模块、地址计算模块、逃逸处理模块、逃逸判断模块。但遇到表示结束的run-level信息时,结束取数操作,输出END信号给2D-VLC控制器。
2.1.3更新表号和哥伦布编码阶数:接收来自2D-VLC控制器的初始化信号和块号,接收来自读数控制模块的level数据,输出表号信息和哥伦布阶数给地址计算模块、逃逸处理模块、逃逸判断模块。
2.1.4地址计算:接收来自更新表号和哥伦布阶数模块的表号数据和来自读数控制模块的run、level数据,输出当前run-level数据对应的地址值。
2.1.5统一编排的码表:接收来自地址计算模块输入的地址值,输出对应的codenum值。并判断当前codenum是否为EOB标志,并反馈给控制模块。
2.1.6逃逸判断模块:根据读数控制模块输出的run-level对判断是否逃逸,并输出标志位给多路选择器使用。
2.1.7逃逸处理:接收来自读数控制模块的run、level数据,输出逃逸的codenum数据。
2.1.8多路选择器(MUX):接收来自逃逸判断模块输出的逃逸标志位,接收来自地址统一编排的码表和逃逸处理模块输出的codenum数据;根据逃逸标志选择输出codenum数据。
2.2实现方式:
本模块实现的是熵编码器中一个基本的VLC功能,但本模块在数据处理方式和流程上与现有技术不同。
2D-VLC控制模块启动读数控制模块,读书控制模块从run-level FIFO中读取数据。然后同时启动更新表号和哥伦布阶数模块、地址计算电路、逃逸处理模块和逃逸判断模块。在这里分别同时对run-level进行逃逸处理和非逃逸处理(即地址计算模块加地址统一编排的码表)。然后根据逃逸判断模块输出的标志位选择性输出正确的codenum。
其中,码表合并技术:本发明采用的码表合并方法适合于不会在统一时刻使用的表格合并。
3.1等地址深度的码表合并策略如附图7所示,在编码CBP码表和zigzag扫描表时,采用了这种策略。如附图7所示,将两张码表合成一张码表,地址深度会加倍,但只会占用一个RAM资源。使用时只需要在在查表前将地址加上一个偏移值就可以了。
3.2不等深度的码表合并方法,如附图8、附图9所示。合并时只保留有用的数据值,并且为不同的表号、level值分配了不同的表号基址和level偏移地址。这样既去除了无效的数据,又有效的节省了RAM。
3.3在AVS变长编码中一共有19张codnum查找表和与其对应的19张ref_abs_level表,还有一张max_run表。本发明采用3.2所示的合并方法对19张codnum查找表和与其对应的19张ref_abs_level表分别合并。这样只剩1张codnum查找表和与1张ref_abs_level表,并同时产生了2个地址查找表。加上max_run表格,总共只用5张表格。与常规方法相比极大的节省了硬件资源。
本发明通过将整个熵编码器分成两级流水线结构,使产生宏块头参数和编码宏块头参数处于不同的流水级,消除了等待时间,可以合理分配编码时间。每级流水线内部采用了单路流水线硬件结构,完成一级操作只需要1个时钟,因此,本发明熵编码器能够在每个时钟内完成一次变长编码。
相对于现有的熵编码结构,本发明具有以下优点:
一.使用两级流水代替一级流水线方案,解决了单级电路中编码宏块头信息对扫描电路的依赖性,有效的降低了编码一个宏块语法元素所需要的时间。
二.整个变长编码电路只采用一路多级流水线结构,即可支持高清视频实时编码,相比于一般的多路并行处理结构节省了大量的硬件资源。
三.重新统一编排了熵编码中不会在同一时刻使用的相同类型的表格,用2张新表代替原来的19张分离码表,其中第一张用于查询地址,然后用这个地址查询第二张表格,得到codenum。这样极大地节省了ROM资源。
此外,变长编码和宏块头编码复用了一套哥伦布编码和写码流电路,提高了硬件资源利用率。
附图说明
图1是提出的熵编码硬件系统结构图;
图2是提出的zigzag扫描硬件结构图;
图3是提出的2D-VLC硬件结构图;
图4是提出的宏块头处理结构图;
图5是提出的写码流模块结构图;
图6是基于AVS视频编码标准基准档而实施的本发明流程图;
图7是不会同时使用的地址数相同的码表合成示图;
图8是两个VLC码表合并图;
图9是两个VLC码表合并后生成的codenum查找表和地址查找表;
图10是整个熵编码器流水工作图;
其中,FIFO是一个先进先出队列缓冲区,ping-pong buffer是乒乓存储单元。
具体实施方法
AVS中熵编码采用了固定长度编码、k阶指数哥伦布编码和CA-2D-VLC编码,不同的语法元素采用不同的编码方式。本发明提出的基于AVS视频编码标准的熵编码器具体实施方式如附图6,包含步骤如下:
一、第一级流水线工作流程
步骤1.1、熵编码顶层控制检测工作使能信号;若未使能,则在此等待,否则进入一个步骤。
步骤1.2、检查各个输入输出FIFO的状态,若准备就绪,则进入步骤1.3,否则向系统报错。
步骤1.3、扫描宏块残差信息,进行游程编码,得到run-level对,若完成操作转到步骤1.4,否则继续扫描。
步骤1.4、从FIFO中取出run-level,对其进行2D-VLC编码。若完成有所有run-level对的编码,则返回步骤1.1。否则继续编码。
二、第二级流水工作流程
步骤2.1、熵编码顶层控制检测工作使能信号;若未使能,则在此等待,否则进入一个步骤。
步骤2.2、检查各个输入输出FIFO的状态,若准备就绪,则进入步骤2.3,否则向系统报错。
步骤2.3、对宏块头参数进行解释、运算和编码,若完成操作则进入步骤2.4,否则继续编码。
步骤2.4、启动codenum取数模块,对codenum进行哥伦布编码。若完成所有codenum的编码,则返回步骤2.1,否则继续编码。
各个模块的具体实施方式如下:
1.第一控制模块完成以下功能:
1.1接收来自帧级和宏块级的参数和命令,返回编码状态和调试信息,包括idle,busy,erorr和宏块坐标等数据。
1.2启动顶层接口电路和输出参数电路,控制输入和输出。
1.3以块为单位,启动ZigZag扫描电路和2D-VLC模块编码每一个宏块的残差系数。
2.熵编码器输入输出缓冲单元包括以下模块:
2.1Parameter FIFO(2个):存储系统传送的参数和命令信息,主要是帧级参数。
2.2Command FIFO(2个):存储宏块级命令信息和控制信号。
2.3预测运动矢量FIFO:负责存储从前级MVP(运动矢量预测)模块预测出的最终PMV(预测的运动矢量)。
2.4头信息FIFO:存储前级MD(模式决策)模块选出的宏块头参数。
2.5残差系数Buffer:存储前级MD模块完成变换后输出的残差系数。
3.熵编码器中间级缓冲单元包括以下模块:
3.1Run-level FIFO:存储扫描电路扫描出的Run-level对信息。
3.2codenum Buffer:存储2D-VLC模块输出的codenum信息。其深度大于6*65.
3.3宏块头信息FIFO2:寄存宏块头参数,包括zigzag扫描后得到的CBP信息。
4.zigzag扫描(见附图2)包括以下模块:
4.1扫描控制模块:完成对各块的残差系数的扫描,并在扫描每一个块之前进行初始化,在扫描完每一个块后决定是否要插入EOB。当扫描完所有的块后,确定CBP和每个块中run-level对的数目,将它们输出。向顶层发送finish信号。
4.2地址累加:根据扫描方式,先初始化地址指针。当接收到启动信号后,地址指针自动累加,直到遍历完当前块的64个系数。
4.3帧场扫描地址查表:输出将要被扫描的残差系数在一维Ram的地址值。本发明将不会同时使用的等深度帧场扫描地址查表合并,见附图7说明的方式。
4.4游程编码:将按ZigZag顺序取出的64个系数与值0对比,若系数level为0,则run计数器加1,直到level的值非零,输出(run,level)对,并将run计数器的值置为0,重新开始计数。本模块能够进行单时钟多级流水作业。扫描完一个块只要64个时钟。若想使用多路扫描,只需要将电路复制,并为每一个扫描电路增加Buffer存储编码结果即可。
5.基于内容的二维变长编码模块(2D-VLC)(见附图3):
5.12D-VLC控制器:控制FIFO取数;检查run-level的值,当检测到表示EOB的run-level时,结束当前块的取数。当编码的codenum等于EOB时,结束当前块的VLC编码,向控制器发送finish信号。
5.2Run-level FIFO:存储扫描模块输入的run-level对。
5.3更新表号和哥伦布编码阶数:根据run-level FIFO送入的level的值判断是否需要切换码表以及相应的编码阶数。更新下一个run-level对所需要的表号和哥伦布阶数。
5.4地址计算:根据输入的表号、run、level的值查出对应的地址值,并将该地址值输出给下一个模块。在这里特意设计了根据表号和level值输出偏移地址的查找表,用查表的方式计算出当前run-level对在统一编制的VLC码表中地址值。相当于将查表过程分成两部分(即5.4和5.5两个过程),减少Ram的使用。
5.5统一编排的码表:根据输入的地址值,输出对应的codenum值。并判断当前codenum是否为EOB标志,并反馈给控制模块。
5.6逃逸判断模块:根据输入的run-level对判断是否逃逸。同样用查表的方式实现,只需要查询ref_abs_level表和maxv_run表判断run-level对是否逃逸。
5.7逃逸处理:完成对逃逸系数逃逸处理。处理过程详见标准。
5.8采用了一种有效的码表编排方式,将19个VLC码表合并成一个统一的码表,提高了RAM利用率,减少了存储空间,节省了硬件资源,并能提高查表速率。附8和9说明了采取的编排策略。根据附图8、9所述原理,设计了一个地址表和一个codenum表,地址表供计算模块(5.4)使用,codenum表供即为统一编排的码表(5.5)。
6.codenum存储模块:
根据当前编码块的块号确定codenum的基址,然后地址计数器累加,将有效的codenum信息写入codenum Buffer中,并且在结束编码一个块前将当前块的codenum个数写入基址所指空间。
7.第二控制模块:
7.1接收来自帧级和宏块级的参数和命令,返回编码状态和调试信息,包括idle,busy,erorr和宏块坐标等数据。
7.1启动顶层接口电路和输出参数电路,控制输入和输出。
7.1启动宏块头处理模块,当接收到宏块头处理模块返回的finish信号后,启动取数模块,编码codenum信息,直到编码结束,输出码流。
8.宏块头处理(见附图4)包括以下模块:
宏块头处理模块主要处理宏块头语法元素,包括分块模式、预测模式、参考索引、运动矢量和CBP等基本信息,每一个语法元素需要根据图像类型和宏块类型决定是否需要编码。本模块采用了电路分时复用技术。
8.1过程控制:接收来自顶层控制模块启动信号,根据从FIFO中得到的数据判断需要启动的解码模块,并按照协议给定的顺序依次调用需要执行的模块。
8.2获取宏块头信息:从FIFO中读取以32bit为单位的数据,根据约定的位拼规则,解析出有效宏块头数据。
8.3计算宏块类型:依据当前宏块的最终分块模式和预测方式计算出宏块类型索引。当为当前编码图像为P、B帧图像,且使当前宏块使用帧内预测时,需要引入CBP信息。
8.4计算亮度块预测模式:计算亮度块预测模式语法元素值。
8.5计算色度块预测模式:计算亮度块预测模式语法元素值。
8.6计算参考索引:亮度块参才索引语法元素值。
8.7计算运动矢量差值(MVD):计算MVD对应的codenum。
8.8计算CBP模块:查表得出CBP对应的codenum。其中在编码CBP表时,采用了与编码ZigZag表相同的合并技术,见附图7.
9.codenum取数模块:
连续取出每个块的有效codenum数据,每个时间完成一次操作,以便支持单时钟流水处理。
10.写码流模块(见附图5):
将编码后不同位宽的码字按协议规定的顺序拼接成一个固定位宽长度的码流输出。该模块采用四级单时钟流水线结构,以提高工作频率。
11.固定长度编码:将具有固定位宽的码字写入码流中。
12.两级流水线结构:为了解决编码CBP等信息对扫描电路的依赖,将整个熵编码器分成两级流水,使扫描残差系数和编码CBP处于两级不同的流水,有效地消除了等待时间。详见附图1所示虚线分隔的区域。
12.1第一级流水线结构:包括了ZigZag扫描电路,CA-2D-VLC模块和必要的寄存器和FIFO;对残差系数进行ZigZag扫描、流程编码和基于内容的自适应变长编码的查表工作,并输出相关的语法元素(如CBP,codenum)。
12.2第二级流水线由宏块头信息计算电路、codenum取数电路、指数哥伦布编码电路、写码流电路及相关中间寄存器和FIFO组成。该级电路处理所有宏块头信息并生成宏块头语法元素,然后对这些语法元素和codenum进行编码;最后写码流电路将所有语法元素编码后的码字按固定位宽进行拼接并输出到RAM中。
12.3第一级流水线先处理残差系数,处理完后输出codenum,存储在Ping-Pang Buffer中;同时输出一些第二级需要的宏块头信息,存储在FIFO中。第二级流水线处理熵编码模块的前一级模块输入的语法元素和第一级流水输入的宏块头语法元素和codenum;最后将编码后的码字拼接并按固定位宽输出。
13.2D-VLC结构(详见附图3),包括控制模块、地址查表模块、逃逸处理模块、更新模块、判断模块和codenum查表模块:
13.1制作了统一的码表:将19张VLC码表中非逃逸codenum和其对应的run-level对进行了统一编排,生成两张表格。第一张为地址查找表,第二张为codenum查找表。详见附图8.
13.2根据VLC码表中逃逸系数的对应的边界run或者边界level的值制作3张小的表格,以实现逃逸系数判断。
13.3更新模块、判断模块、非逃逸处理模块(由地址查表和codenum查表组成)和逃逸处理模块并行执行,根据判断模块的结构选择输出逃逸codenum或者非逃逸codenum.
以1080P30帧/秒AVS高清实时编码器为例分析说明本发明的优点:如果系统工作在150MHz,600个时钟以内就需要完成一个宏块编码。宏块编码包括宏块头语法元素编码和codenum编码。由于宏块头参数CBP只有在扫描完所有的残差系数后才能得到,所以要想编码完所有宏块头参数需要等待扫描完成。考虑最坏情况下一个宏块会有6*64个run-level对和6个EOB,扫描完所有残差大概需要400cycle,编码所有宏块头信息大概需要100个时钟;若只采用一级流水线结构的熵编码,只有当先编码完宏块头信息后,才能开始编码run-level对,还需要400cycle,则一共需要900个cycle,远超出了高清编码器要求的600cycles/MB的要求。若采用两路或者四路并行处理结构,则会消耗很多硬件资源。所以本发明将整个熵编码器分成两个宏块级流水,每个宏块级流水里面采用一路全流水工作方式,以很小的硬件资源消耗满足高清视频编码对熵编码提出地需求。熵编码器宏块级和其他模块间连接采用FIFO或者ping-pong buffer相连,而在每级宏块流水线内部由于采用了全流水工作方式,前后模块间只需要FIFO或者少量寄存器进行缓冲就可。
Claims (7)
1.一熵编码电路结构,其特征在于,将整个熵编码器分成两级流水线结构,第一级流水线电路包括:第一控制器、第一顶层接口,ZigZag扫描电路、2D-VLC模块、codenum存储电路、输出参数模块、PMV FIFO、MD FIFO、run-level FIFO、残差系数Buffer;第二级流水线电路包括:第二控制器、第二顶层接口、宏块头计算模块、固定长度编码电路、codenum取数电路、哥伦布编码电路、写码流电路、多路选择器一、多路选择器二、多路选择器三、宏块头FIFO、codenum Buffer;其中,控制器负责启动本级流水线中各个功能模块;顶层接口负责接收并解析来自帧级或者宏块级控制模块的参数和命令信息;输出参数模块从PMVFIFO、MD FIFO和zigzag扫描电路获得宏块参数信息,并将这些参数输出给宏块头计算模块,经处理后生成各种宏块头语法元素;zigzag扫描电路、2D-VLC模块和codenum存储电路将量化后的残差系数转变为codenum数据,并存储到codenum Buffer中,宏块头计算模块输出宏块头语法元素,经哥伦布编码电路或者固定长度编码处理后生成对应的码字;codenum取数电路从codenum Buffer中取出codenum,经哥伦布编码后生成对应的码字,最后写码流电路将所有有效的码字按标准规定的顺序拼接成统一码流。
2.如权利要求1所述的熵编码电路结构,其特征在于,2D-VLC模块包括:2D-VLC控制器、读数控制模块、更新表号和哥伦布阶数模块、地址计算模块、逃逸处理模块、逃逸判断模块、地址统一编排的码表和多路选择器,其中,2D-VLC控制器启动读数控制模块,读数控制模块从run-level FIFO中读取数据,然后同时启动更新表号和哥伦布阶数模块、地址计算模块、逃逸处理模块和逃逸判断模块,同时对run-level进行逃逸处理和非逃逸处理,然后根据逃逸判断模块输出的标志位选择性输出正确的codenum。
3.如权利要求2所述的熵编码电路结构,其特征在于,所述地址统一编排的码表的构成为:将AVS变长编码中的19张VLC码表进行统一编排,制作成一张codenum查找表和一张ref_abs_level表格,并同时生成两张地址查找表,根据当前run-level对应的表号、run和level的值,从地址查找表中查出地址,根据地址对codenum查找表和ref_abs_level表进行查表操作。
4.如权利要求1所述的熵编码电路结构,其特征在于,写码流电路采用四级单时钟流水线结构。
5.如权利要求1所述的熵编码器的实现方法,具体步骤包括:
步骤1.建立流水线:只启动第一级流水线电路;
第一级流水线电路工作:控制器启动ZigZag扫描电路开始扫描第一个块的残差系数;扫描电路每扫描出一个run-level对,输出一个有效信号;该有效信号启动2D-VLC模块;反复操作,直到扫描完一个块所有的残差系数,并输出EOB信号,结束当前块的操作;然后控制器启动第二个块的操作,直到完成所有块的操作,结束当前流水,将CBP和codenum输出;
步骤2.正常流水:同时启动第一级流水线电路和第二级流水线电路;
第一级流水线电路工作如步骤1所述;
第二级流水线电路工作:控制器启动宏块头处理电路,依次编码完所有宏块头语法元素,包括mb_type,sub_type,intra_pred_mode,chroma_mode,ref_index,mvd,cbp,宏块头处理结束后,启动codenum取数模块,以块为单位编码codenum信息,直到完成所有块的编码;
步骤3.只调用第二级流水线电路,第一级流水线电路停止工作;
第二级流水电路工作如步骤2所述。
6.如权利要求5所述的方法,其特征在于,ZigZag扫描电路将按ZigZag顺序取出的64个系数与值0对比,若系数level为0,则run计数器加1,直到level的值非零,输出(run,level)对,并将run计数器的值置为0,重新开始计数。
7.如权利要求5所述的方法,其特征在于,2D-VLC模块根据当前run-level对应的表号、run和level的值,从地址查找表中查出地址,根据地址对codenum查找表和ref_abs_level表进行查表操作,查询ref_abs_level表和max_run表判断run-level对是否逃逸。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110109328 CN102186075B (zh) | 2011-04-28 | 2011-04-28 | 一种熵编码器及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110109328 CN102186075B (zh) | 2011-04-28 | 2011-04-28 | 一种熵编码器及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102186075A CN102186075A (zh) | 2011-09-14 |
CN102186075B true CN102186075B (zh) | 2012-10-10 |
Family
ID=44572136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110109328 Active CN102186075B (zh) | 2011-04-28 | 2011-04-28 | 一种熵编码器及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102186075B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
PL3849199T3 (pl) * | 2011-11-07 | 2023-04-17 | Tagivan Ii Llc | Sposób kodowania obrazu i urządzenie kodujące obraz |
US9866829B2 (en) * | 2012-01-22 | 2018-01-09 | Qualcomm Incorporated | Coding of syntax elements that correspond to coefficients of a coefficient block in video coding |
CN103227924B (zh) * | 2013-05-07 | 2016-08-03 | 北京大学 | 一种算术编码器及编码方法 |
EP3282706A4 (en) * | 2015-04-02 | 2019-01-30 | KT Corporation | METHOD AND APPARATUS FOR PROCESSING VIDEO SIGNAL |
CN105657421B (zh) * | 2016-01-15 | 2018-08-31 | 珠海全志科技股份有限公司 | 8x8残差系数块编码方法及系统 |
US10244248B2 (en) * | 2016-02-25 | 2019-03-26 | Mediatek Inc. | Residual processing circuit using single-path pipeline or multi-path pipeline and associated residual processing method |
CN108932129A (zh) * | 2018-06-26 | 2018-12-04 | 郑州云海信息技术有限公司 | 一种WebP编码过程中熵编码算法的加速系统及方法 |
CN114697655B (zh) * | 2020-12-30 | 2023-04-11 | 中国科学院计算技术研究所 | 均衡流间压缩速度的神经网络量化压缩方法及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200833115A (en) * | 2007-01-30 | 2008-08-01 | Beyond Innovation Tech Co Ltd | Apparatus and method for compressing data |
CN101242529A (zh) * | 2007-02-08 | 2008-08-13 | 硕颉科技股份有限公司 | 数据压缩装置及方法 |
CN101090503B (zh) * | 2007-07-05 | 2010-06-02 | 北京中星微电子有限公司 | 熵编码控制方法及熵编码电路 |
-
2011
- 2011-04-28 CN CN 201110109328 patent/CN102186075B/zh active Active
Non-Patent Citations (2)
Title |
---|
徐龙等.AVS熵编码器的VLSI设计.《计算机研究与发展》.2009,(第5期),881-888. * |
许超等.H.264中CABAC编码器的电路结构设计.《提高全民科学素质、建设创新型国家——2006中国科协年会论文集(下册)》.2006,62-66. * |
Also Published As
Publication number | Publication date |
---|---|
CN102186075A (zh) | 2011-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102186075B (zh) | 一种熵编码器及其实现方法 | |
US7630440B2 (en) | Context adaptive binary arithmetic code decoding engine | |
US7769088B2 (en) | Context adaptive binary arithmetic code decoding engine | |
US7710296B2 (en) | N-bin arithmetic coding for context adaptive binary arithmetic coding | |
US7932843B2 (en) | Parallel CABAC decoding for video decompression | |
CN101490968B (zh) | 用于视频压缩的并行处理装置 | |
CN103931196B (zh) | 帧间预测方法及其装置 | |
US7460041B2 (en) | Arithmetic decoding system and apparatus based on an adaptive content | |
KR101240058B1 (ko) | 디코딩 시스템 및 방법 | |
Sze et al. | Joint algorithm-architecture optimization of CABAC | |
US8604951B2 (en) | System and method for optimizing context-adaptive binary arithmetic coding | |
US9001882B2 (en) | System for entropy decoding of H.264 video for real time HDTV applications | |
US20080267293A1 (en) | Video Encoder Software Architecture for VLIW Cores | |
CN107005697B (zh) | 用于视频编解码的使用基于查找表的概率更新的熵编解码的方法与系统 | |
CN105052140A (zh) | 用于下一代视频的模式和参考类型数据的内容自适应熵编码 | |
US8660177B2 (en) | Parallel entropy coding | |
CN103119849A (zh) | 概率区间分割编码器和译码器 | |
CN101001373A (zh) | 高清晰度视频的上下文自适应二进制算术解码 | |
US9380314B2 (en) | Pixel retrieval for frame reconstruction | |
CN104081772A (zh) | 熵编码缓冲器配置 | |
US8319672B2 (en) | Decoding device for context-based adaptive binary arithmetic coding (CABAC) technique | |
Chen et al. | A deeply pipelined CABAC decoder for HEVC supporting level 6.2 high-tier applications | |
Sze et al. | A highly parallel and scalable CABAC decoder for next generation video coding | |
US20160301945A1 (en) | Image compression/decompression device | |
CN111183647A (zh) | 通过适配参数的渐进式修正的二进制算术译码 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20110914 Assignee: Boya cloud (Beijing) Technology Co., Ltd. Assignor: Peking University Contract record no.: 2017990000366 Denomination of invention: Entropy coder and realization method thereof Granted publication date: 20121010 License type: Exclusive License Record date: 20170908 |
|
EE01 | Entry into force of recordation of patent licensing contract |