CN102088603B - 用于视频编码器的熵编码器及其实现方法 - Google Patents
用于视频编码器的熵编码器及其实现方法 Download PDFInfo
- Publication number
- CN102088603B CN102088603B CN2010106200287A CN201010620028A CN102088603B CN 102088603 B CN102088603 B CN 102088603B CN 2010106200287 A CN2010106200287 A CN 2010106200287A CN 201010620028 A CN201010620028 A CN 201010620028A CN 102088603 B CN102088603 B CN 102088603B
- Authority
- CN
- China
- Prior art keywords
- operator
- class
- data
- computing
- entropy coder
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种用于视频编码器的熵编码器及其实现方法,所述熵编码器的实现方法包括:将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成熵编码器硬件集成电路。本发明能够加快熵编码器的集成电路设计速度。
Description
技术领域
本发明涉及一种用于视频编码器的熵编码器及其实现方法。
背景技术
集成电路设计方法学是用来指导集成电路设计的方法学。目前的集成电路设计,尤其是大规模集成电路设计,其常见的设计流程是:***工程师根据功能需求提出***功能框架,软件工程师利用计算机高级程序语言(例如:Java、C、C++、Matlab等)对***功能框架进行描述,从而得到集成电路的高级程序语言的算法描述;而后由集成电路设计工程师利用硬件描述语言(例如:Verilog、VHDL等),将算法描述综合成网表文件,之后使用专门的硬件综合工具实现布局布线,得到集成电路版图。
在集成电路产业需求中,设计速度已成为集成电路设计方法学的重要考虑因素。当集成电路制造商或集成***供应商将商业运作的基本问题(如产品数量、设计/测试费用、不可再用的工程开支(Non Recurring Engineering,NRE)、用户IP的整合/复用、可靠性和可维护性、生产过程复杂性等)综合考虑在内时,加速产品推出时间、提高产品性能、降低产品制造风险便成为选择设计技术时的重要考虑因素。
随着集成电路制造工艺进入45nm以下阶段,集成电路设计发展落后于集成电路工艺进步的剪刀差继续增大。数据流算法,尤其是数字媒体类的ASIC(Application Specific Integrated Circuit,专用集成电路)设计,例如视频编码器的集成电路设计,面临设计周期长、灵活性差、扩展性差等问题,难以满足产品快速上市、功能不断提升的需求,因而需要改进和提升。
发明内容
本发明要解决的主要技术问题是,提供一种用于视频编码器的熵编码器及其实现方法,能够加快熵编码器的集成电路设计速度。
为解决上述技术问题,本发明采用了如下技术方案:
一种用于视频编码器的熵编码器的实现方法,包括:
将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成熵编码器硬件集成电路。
本发明一种实施例所述的方法,将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述包括如下步骤:
程序分析步骤:读取熵编码器的各个编码功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述熵编码器算法的数据控制流图中相应节点;
算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从所述算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;
下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
本发明一种实施例所述的方法,所述算子单元库中的算子单元包括运算类算子、存储类算子、控制类算子、路径类算子和时钟类算子中至少一种。
本发明一种实施例所述的方法,所述运算类算子为可重构算子,一个运算类算子配置控制位以及多种运算,所述控制位用于择一选择一种运算;所述路径类算子用于链接存储类算子与运算类算子,形成数据流结构,其实现形式包括多选器、交叉开关和总线;所述控制类算子用于推动数据流的流动,其实现形式包括计数器、状态机和微指令字,控制输出内容包括:运算类算子动态重构信息、存储类算子的配置信息、路径类算子的配置信息;所述存储类算子用于对不同的数据存储格式和计算格式进行转换。
本发明一种实施例所述的方法,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种,将所述运算指令映射为运算类算子,将所述控制指令映射为控制类算子或路径类算子,将所述参数对象映射为存储类算子。
本发明一种实施例所述的方法,所述编码功能块包括用于编码语法参数的统一可变长编码功能块、用于编码残差数据的上下文自适应可变长编码功能块、以及拼接所有编码码流的码流拼接功能块。
本发明还提供了一种用于视频编码器的熵编码器,包括用于编码语法参数的统一可变长编码功能块、用于编码残差数据的上下文自适应可变长编码功能块、以及拼接所有编码码流的码流拼接功能块,所述各功能块由算子单元组成。
本发明实施例所述的熵编码器,所述自适应可变长编码功能块包括顺序相连的数据缓冲重排序单元、残差系数解析单元、查找表或计算编码单元。
本发明实施例所述的熵编码器,所述数据缓冲重排序单元、残差系数解析单元、查找表或计算编码单元采用级间流水形式设置。
本发明实施例所述的熵编码器,所述上下文自适应可变长编码功能块的残差系数编码算子功能群落为实现一次子4*4块残差系数编码的算子功能群落。
本发明的有益效果是:本发明通过设计表示硬件逻辑的算子单元,将视频编码器的熵编码器的高级程序语言算法描述映射成由算子单元构成的硬件逻辑描述,从而可以加快熵编码器的集成电路设计速度。
附图说明
图1示出了典型的H.264视频编码器的结构;
图2示出了本发明实施例提供的几类算子结构;其中,图2.1示出的是运算类算子,图2.2示出的是存储类算子,图2.3示出的是路径类算子,图2.4示出的是控制类算子;
图3.1示出了熵编码器的总体结构,图3.2示出了熵编码器的算子功能结构;
图4.1示出了本发明实施例的熵编码器的总体算子结构,图4.2示出了熵编码器的bs_write_ue函数的算子功能结构;
图5示出了本发明实施例的熵编码器的总体流程;
图6示出了本发明实施例的多次子4×4块CAVLC编码循环;
图7示出了本发明实施例的CAVLC编码流程示意图;
图8示出了本发明实施例的I_16*16宏块类型下残差系数缓存寄存器格式;
图9示出了本发明实施例的I_4*4及P_16*16宏块类型下残差系数缓存寄存器格式;
图10示出了本发明实施例的I_16*16宏块类型下残差系数存储格式及编码顺序;
图11示出了本发明实施例的I_4*4及P_16*16宏块类型下残差系数存储格式及编码顺序;
图12示出了本发明实施例的残差系数初步解析单元结构;
图13示出了本发明实施例的残差系数初步解析过程;
图14.1、图14.2、图14.3示出了本发明实施例的zig-zag扫描;其中,图14.1为a模式,图14.2为b模式,图14.3为c模式;
图15示出了本发明实施例的CAVLC的三种编码模式。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
一、视频编码器概述
视频编码技术是数字媒体存储与传输的关键技术,它广泛地应用在数字电视、视频通信、网络流媒体等领域。本发明涉及一种基于算子思想的用于视频编码器的熵编码器及其实现方法,适用于信号处理领域中各种图像/视频/音频DCT变换数据的熵编码。
目前在视频编码领域,由国际电联(ITU-T)和国际标准化组织(ISO)联合组建的联合视频组(JVT)共同制定的新数字视频编码标准-H.264已得到广泛应用。H.264算法既是国际电联(ITU-T)的H.264,也是国际标准化组织(ISO)和国际电工委(IEC)的MPEG-4标准的第10部分的内容,其采用分层次的算法结构,在概念上可以分为两层,分别是视频编码层和网络提取层。视频编码层(Video Coding Layer,简称VCL)负责高效的视频内容表示,网络提取层(Network Abstraction Layer,简称NAL)负责以网络所要求的恰当的方式对数据进行打包和传送。通过视频编码层和网络提取层这样的结构有助于信息的封装和对信息进行更好的优先级控制。
H.264视频编码器结构如图1和图2所示。由图1可以看出,H.264编码过程的主要子算法有:帧间预测、帧内预测、变换和量化、去块效应滤波和熵编码。下面对各子算法做一简述。
1、帧间预测
帧间预测是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的。在图像传输技术中,活动图像是关注的重点。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列,它在时间上比在空间上具有更大的相关性。大多数图像相邻帧间细节变化很小,即图像帧间具有很强的相关性,利用帧所具有的这种相关性特点进行帧间编码,可获得比帧内编码高得多的压缩比。H.264帧间预测是利用已编码视频帧/场和基于块的运动补偿的预测模式。
2、帧内预测
帧内预测是H.264采用的一种新技术,指利用当前块的上方和左方的相邻像素作为参考像素,对当前块的像素进行预测。帧内预测编码可以缩减图像的空间冗余,减小码率。
3、变换和量化
在图像编码中,变换编码和量化从原理上讲是两个独立的过程。但在H.264中,将两个过程的乘法合二为一,并进一步采用整数运算,减少编解码的运算量。量化过程是在不降低视频效果的前提下减小图像编码长度,减少视频恢复中不必要的信息。其目的是去除变换后对图像的视觉质量不重要的数据分量且保持视觉上重要的数据分量。其性质是被去除后的分量不能恢复,是有损过程。
4、去块滤波
基于块的视频编码***在重建图像时不可避免地在某些块边界处会出现一些较为明显的块效应,特别是在低码率的情况下。出现块效应的原因在于块边界像素的运动补偿精度一般都低于块内像素,而且块变换也导致了块边界的不连续性。去块滤波的主要过程包括:确定滤波强度、判断虚假边界、滤波计算。
5、熵编码
在视频编码中,熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流。输入的符号可能包括量化的变换***、运动向量、标记、头以及附加信息。
本发明涉及H.264视频编码器的熵编码器,为此,主要对H.264的熵编码器进行说明。
H.264的熵编码支持两种模式:CAVLC(基于上下文的可变长编码)和CABAC(基于上下文的算术编码),CAVLC编码复杂度及编码效率相对较低,抗误码即纠错能力较强;CABAC则编码复杂度及编码效率相对较高,但抗误码及纠错能力较弱。因此,在H.264针对不同应用领域的编码框架中,Baseline profile(基础框架,用于视频对话等)和Extended profile(扩展框架,用于网络视频流传输等)采用CAVLC,而Main profile(主要框架,用于视频广播等)则采用CABAC。
本发明所涉及的熵编码主要针对Baseline profile的CAVLC熵编码,在H.264熵编码中,待编码的语法元素可分作两类,一类是残差数据,采用CAVLC编码,在CAVLC编码算法中,每个符号的编码都有几个基于上下文内容自适应的VLC表,而这些表的选择基于块内容的统计信息。另一类语法元素统称为语法参数,包括头信息、宏块编码模式信息、量化系数、参考帧索引等等,这些语法参数均采用Exp-Golomb(指数哥伦布)编码,指数哥伦布编码是一种采用规则结构的变长编码,因其结构规则统一,故也称为统一变长编码(UVLC)。
H.264标准尽管没有限制编码的方法,但规定了视频编码输出的比特流格式以及解码算法,目前在实际应用中,有三种开源的参考编解码软件:JM、X264和T264。
JM参考模型是官方参考软件,实现了H.264所有的特性,但其程序结构冗长,只考虑引入各种新特性以提高编码性能,忽视了编码复杂度,其编码复杂度高,不宜实用。
X264是网上自由组织联合开发的兼容H.264标准码流的编码器,其特点是注重实用,和JM相比,在不明显降低编码性能的前提下,努力降低编码的计算复杂度。
T264是中国视频编码自由组织联合开发的H.264编解码器,其特点和X264的出发点相似。
本发明以X264为基础,即以X264代码形式的视频编码器的熵编码器的高级程序语言算法描述为出发点,以实现熵编码器的集成电路设计。
二、算子设计思想概述
集成电路设计,从全定制的晶体管设计开始,发展到1984年前后以1.0μm工艺节点为代表的门阵列设计,再到1994年前后以0.5μm工艺节点为代表的标准单元设计,以及1999年前后以0.25μm工艺节点为代表的基于IP(知识产权核)的设计和2004年0.13um工艺节点为代表的时间驱动,目前的集成电路设计一般基于标准单元粒度,由硬件描述语言对集成电路硬件逻辑进行描述,然而硬件描述语言并不适合直接描述高级程序语言的程序逻辑和执行流程,造成在目前的集成电路设计中,由高级语言向下层硬件映射的速度所需时间较长,成为制约集成电路设计速度的瓶颈所在。
随着集成电路制造工进入45nm以后,集成电路设计的效率严重滞后于制造工艺的进步。传统ASIC设计由于设计周期长、设计成本高、灵活性差、扩展性差,难以满足产品快速上市、功能不断提升的需求。大规模的基于标准单元的设计速度已不能满足要求,究其原因,主要在于标准单元的粒度太小,只能进行加减乘除等运算,无法实现粒度较大的运算。如一次操作可完成一个多路加法、移位加、加移位或|a-b|等运算,而这些算法在视频算法中尤为常见。
鉴于此,一种基于算子的快速设计方法被提出。算子设计的基本思想是快速设计,其力图把握最有利的切分点,以实现集成电路的快速设计。
算子设计方法希望从数学上能够支持算法的描述,为实现算法到算子语言、算子结构的自动化翻译提供支撑。算子的特点如下:
1.粒度更大
每个算子都具有一定功能,它是一种函数运算的符号表示。整个算子体系能够支持算法描述中的各种功能实现,设计人员可以基于算子对算法进行描述和验证;
2.支持算法的实现
种类完备但是数量有限的算子能够支持上层语言描述中对运算、存储、控制和数据路径的描述,并且可以基于算子描述进行优化和验证;
3.能够加速设计和验证
设计人员利用算子完成算法的功能描述后,对应的硬件设计也同时完成。因为所有算子均是预先全定制的且已被验证正确的单元,因此将缩短设计和验证的时间,设计人员只需要保证基于算子的描述和映射过程的正确即可,从而将大大加速设计和验证过程。
本发明提出的算子,或者说算子单元,可以表示集成电路的硬件逻辑,基于算子的不同功能,可将算子分为运算类算子、存储类算子、路径类算子、控制类算子、时钟类算子等几类,这些算子构成一套完备的算子体系,能支撑所有算法的实现。经过设计,这些基本算子在面积、功耗、性能等参数上是最优化,它们构成了算子单元库。并且算子单元还可以组成算子功能块,算子功能块间采用共享MEM链接方式进行数据通信,也可以采用寄存器传递进行控制信息传递。下面对各类算子做一说明。
1、运算类算子。
运算类算子(AU)是用于实现逻辑运算、算术运算或逻辑与算术混合运算的基本单元,支持算术逻辑、移位等运算功能的实现,实现这些基本运算的算子称为基本运算算子。并且,针对不同应用可以在基本运算算子的基础上进行扩展而予以支持,比如媒体处理中相减、取绝对值、求平均值、固定系数滤波运算等复杂但很常用的运算,实现这些扩展运算的运算算子称为扩展运算算子,它们由基本运算算子搭建而成。运算类算子完成的常见运算包括:加法、加法累加、四个数的加法、完成2数相加再做M位移位的运算、输入数据的限幅运算、控制码译码等等。
图2.1为一种运算类算子-ADDS算子的结构示意图,它包括用于实现加减操作的ADD单元和用于实现移位操作的<</>>单元。运算类算子具有可重构性,可以为一个运算类算子配置控制位以及多种运算功能,控制位用于择一选择一种运算,也就是说,运算类算子包括算术逻辑运算单元和运算配置寄存器,运算配置寄存器用于接收和存储运算配置指令,不同的运算配置指令对应不同的算术逻辑操作,根据不同应用的需求,通过配置控制位(运算配置寄存器的运算配置指令),可以使运算算子实现不同的功能。例如上例中的ADDS算子,可以通过控制位X的参数值实现多种不同功能,可重构算子由于丰富的应用功能可以用在不同的场景中,减少了算子单元库中储存的算子数。并且可重构算子在其执行过程中还可以通过改变控制位的方式实现动态的重构。而如果算子的运算功能被优化固定,则可以将控制位固定(即固化定制)。
2、存储类算子。
图2.2为存储类算子(MU)的基本结构示意图,存储类算子包括存储配置寄存器和存储单元,存储单元包括地址产生单元、数据存储器、数据产生单元和数据输出控制单元。存储配置寄存器可以通过数据输出控制单元配置存储算子(MU)的存储体(各种存储介质:寄存器、RAM等MEM)的写入和/或读出方式,还可以配置存储体对应的地址产生单元的工作方式。根据地址产生单元生成的地址直接将输入数据存储到预定位置,并将需要的数据从存放位置输出。
算法中的不同阶段对数据处理的顺序和排列是不一样的,从而使得在每个阶段中数据的存储格式和方式不同,存储算子还可以针对这类需求实现数据不同存储格式和方式的转换。存储类算子可以支持不同应用中基本且常用的存储格式和转换方式,比如串并转换、并串转换、队列结构、堆栈结构等。
3、路径类算子。
图2.3为路径类算子(LU)的通用结构示意图。路径类算子包括路由配置寄存器和组成路由选择单元的交换开关和数据寄存器(REG),其中,路由配置寄存器受到控制类算子CU(见下文)的控制,在控制类算子的控制作用下控制交换开关按照期望的方式实现不同运算类算子之间的连接。数据寄存器用于暂存运算类算子和存储类算子的输入输出数据。即,路径类算子的作用是连接存储类算子与运算类算子,形成数据流结构。其实现形式主要有三种:多选器、交叉开关和总线。
4、控制类算子。
图2.4为控制类算子(CU)的通用结构示意图。控制类算子主要是将配置信息传送到相应的配置寄存器,配置运算类算子、存储类算子和路径类算子实现预定的功能。即,控制类算子的作用是正常控制数据流的流动。其实现形式有三种:计数器、状态机和微指令字。控制输出内容包括:运算类算子动态重构信息、存储类算子AGU的配置信息、路径类算子的配置信息,实现对其他算子的控制。其中微指令字结构包含译码器、程序计数器、指令存储器和流水线控制模块等。控制类算子通过执行简单的配置指令向各功能单元发送配置信息。
5、时钟类算子。
时钟类算子是驱动和定时部件,用于提供运算类算子、存储类算子、路径类算子和控制类算子的时钟信号,时钟信号包括控制时钟起停和控制时钟频率的信号,时钟信号可以按照期望的方式配置。
以上五类算子是实现以下实施方式的基础,可以理解的是,上述对根据功能将用于集成电路设计中的算子分为五大类并非唯一的划分方式,还可以根据实际情况有针对性进行更宽范围或更细范围的划分。
集成电路(IC)的算子设计过程可以概括为将C、Matlab等高级语言的算法描述转化为算子描述并在算子结构上进行优化设计的过程。由于算子已经预先设计并验证,因此算法的算子描述可以快速或者自动完成设计验证过程。对于特定领域,比如通信或媒体,可以设计一些更好支撑算法实现的扩展算子或算子IP,从而更大程度地加速和优化设计过程。
本发明涉及将算子用于视频编码器的熵编码器的实现,其主要包括:
将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成熵编码器硬件集成电路。
在将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述过程中,主要包括如下步骤:
1)程序分析步骤:读取熵编码器的各个编码功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;该步骤的主要作用在于算法分解,主要是将C、Java、Matlab等高级语言描述形式的算法划分为若干个子算法过程。算法分解主要分析函数调用关系、函数结构体和变量、底层函数的基本运算等信息,以便以上述的各类算子实现对算法的映射。执行对象主要包括运算指令和/或控制指令,参数对象主要包括输入数据、输出数据和中间数据中的至少一种,在算子映射时,将运算指令映射为运算类算子,将控制指令映射为控制类算子或路径类算子,参数对象映射为存储类算子。运算类算子和存储类算子通过路径类算子链接,控制类算子提供控制,时钟类算子提供时钟。
2)数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述熵编码器算法的数据控制流图中相应节点。在数据控制流图上,运算指令映射为处理框图,控制指令映射为用于标识状态、状态转移条件及状态控制信号的控制流,输入数据、输出数据和中间数据映射为数据流上的存储节点。
3)算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;算子时空图主要表示了利用算子将算法完全展开后的形式,当算法被算子完全展开之后,算法将完全通过并行性执行,速度最快,面积最大,此即时空图展开。算子时空图是用一个或多个算子单元的组合取代数据控制流图中的各节点,一个或多个算子单元的组合可完成与各节点相同的功能。对于如何将数据控制流图展开,包括但不限于以下几种方式:如果数据控制流图中的数据流为顺序相关数据流结构,则将所述顺序相关数据流采用流水线的方式展开;如果数据控制流图中的数据流中存在反馈,且该数据流是一个循环时,如果该数据流的数据之间有数据相关性,则有数据相关性的数据流不能转化为流水结构;如果数据流的数据之间存在数据相关性,并且存在数据相关性的各数据流内部不存在数据相关性时,则将所述内部数据不存在数据相关性的各数据流采用局部流水线的方式展开;如果数据控制流图中的数据流之间不存在数据相关性,则将所述并行数据流采用并行方式展开,并转换成由算子单元组成的算子时空图。
4)时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,另一方面,从算子单元库中可以提取算子时序信息,对算子时空图做时序标注,形成时序约束的对象。从而根据数据流特性可以将时序约束具体到算子时空图的每个层级,实现对算子时空图的每个层级进行时序约束。
如果所述数据流结构为并行数据流,则将总时序约束平分到对应的时空图中的每个算子层级,并将每个算子层级的时序约束平分到该算子层级中的每一个算子单元。将数据控制流中串行各节点所对应的各算子层级总的算子的基本时序单位作为总体时序约束,按照各算子层级中最长运算路径所映射的运算算子的时序占各个算子层级中最长运算路径所映射的算子单元对应的时序总和的比例来分配各算子层级的时序。
5)时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;该步骤是根据各个子算法过程的时间标注,在算子时空图中进行聚类压缩,通过增加控制类算子和路径类算子来提高存储类算子和运算类算子的复用,使各个子算法过程的完成时间尽量与算法过程标注的时间接近,即尽量减少运算和存储类算子的数量。
将一个算法描述用算子完全平铺开,没有任何复用,算法的完成速度将最快,但这带来的代价将是很高的面积成本和功耗,这并非设计所希望的。设计的目标期望满足:在满足用户时序要求的前提下,最大地减小面积和功耗需求,所以需要复用一些算子。这样就需要在每个算子执行相应的功能上加上其执行时间的标注,从而能够根据执行时间复用算子,使总体算法执行时间最接近于实际要求时间,这就是算子的时间图。而空间图是对算子面积的定义,即在算子聚类映射时,根据算子的面积进行聚类,选择复用面积较小的算子。在算子聚类过程中,这两种因素都需要考虑到。时空图的压缩例如按如下方式进行:在算子时空图中查找出属性相同的运算类算子和/或存储属性相同的存储类算子;然后根据时间标注对运算属性相同的运算类算子在空间上进行合并压缩和/或将存储属性相同的存储类算子在空间上进行合并压缩;然后引入控制类算子,对压缩后的运算类算子和/或存储类运算算子生成相应配置指令,实现运算类算子和/或存储类算子的复用。
聚类压缩步骤和生成可重构算子功能块的步骤,都会产生不只一种结果。不同的函数调用同一子函数,由于约束时间不同,所产生的聚类结果也不同。因此需要根据时间、面积、功耗等参数进行优化,按性能(执行时间)排出顺序,恰好满足时间约束的聚类结果表示其硬件实现代价最小,因此选择总体算法执行时间最接近于完成集成电路算法所需要的总时序约束的时空图作为聚类压缩的优化结果。
6)下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
本实施例中以H.264标准的X264代码描述的bs_write_ue函数为例来说明熵编码器的算子设计流程。
bs_write_ue函数完成无符号指数哥伦布编码。在函数中的val是待编码的参数,经指数哥伦布编码后写入到结构体bs_t中。由高位开始,写到低位。
首先进行函数分解,表1为bs_write_ue函数输入输出关系。
信号名称 | 数据类型 | 方向 | 说明 |
val | uint32_t | IN | //待编码的参数值 |
i_size | int | IN | //标识要写的位数 |
*s->p | uint8_t | IN | //目标写入寄存器 |
p | uint8_t * | IN | //bs_t结构体,码流当前位置 |
p_end | uint8_t * | IN | //bs_t结构体,码流结束位置 |
i_left | int | IN | //bs_t结构体,写入目标寄存器的剩余有用位 |
*s->p | uint8_t | OUT | //目标写入寄存器 |
p | uint8_t * | OUT | //bs_t结构体,码流当前位置 |
i_left | int | OUT | //bs_t结构体,写入目标寄存器的剩余有用位 |
这些输入输出信号将识别为参数对象,另一方面,对函数内的各种运算进行解析,识别出执行对象。常见的,函数中有顺序执行语句、条件(分支控制)执行语句、循环语句等几类。bs_write_ue函数代码如下:
在对函数进行解析时,对于循环语句,可以根据循环次数将循环体展开,得到与循环次数相等个数的多个循环体。每个循环体中包括运算表达式,并且各个运算表达式之间有共同的参数对象。根据参数对象间的关系,迭代各个循环体内的运算表达式,从而可以用一个新的运算表达式表示原循环语句的运算。将该新的运算表达式中的运算指令映射为处理框图,将运算表达式中的参数对象映射为数据流上的存储节点。循环指令可以映射为状态机。对于分支控制语句,可以将其映射为多路选择器。
在基于快速设计的算子方法学中,从高级程序语言算法描述开始,通过映射得到可配置算子的时空图,从时空图经过聚类将算子进行空间压缩,使得在满足时序条件的情况下,基于功能相近与控制一致的原则,将算子聚类形成初步算子实现的ASIC架构。根据目标算法的实现去除算子不必要的可重构部件,使得面积、功耗、性能等参数得到进一步优化,最后为定制完成的ASIC生成配置指令。这一过程可省去对高级程序语言算法,例如C程序算法的研读,而可直接根据C算法的属性进行算子的映射,进而大大地缩短了设计时间。
三、算子实现综述
参照图1,熵编码位于整个编码过程的最后一步,其是对重排序后的变换系数,从后至前进行逆序解析,提取出残差系数之间的信息,包括:残差非零系数的数目(TotalCoeffs)、拖尾系数的数目(TrailingOnes)、最后一个非零系数前零的数目(TotalZeros)、每个非零系数前零的个数(RunBefore)以及相应非零系数左边的所有零的个数(ZerosLeft)。解析出这些参数后就可以去编码了,最后将编好的码流依次按相应顺序组合输出。
熵编码器的编码功能块包括用于编码语法参数的统一可变长编码(UVLC)功能块、用于编码残差数据的上下文自适应可变长编码(CAVLC)功能块、以及拼接所有编码码流的码流拼接功能块。其中,UVLC主要负责指数哥伦布编码和部分定长编码;CAVLC主要负责处理宏块数据,内部主要为查找表编码和部分指数哥伦布编码。这些熵编码功能块,可由一系列算子单元聚合而实现,算子单元可被反复调用,完成整个熵编码功能。其中指数哥伦布编码功能块有两种:有符号指数哥伦布编码功能块,无符号指数哥伦布编码功能块;上下文自适应可变长残差系数编码功能块有三种:子16残差系数编码功能块、子15残差系数编码功能块,子4残差系数编码功能块。码流拼接功能块有一种,可完成所***流的拼接组合。
本发明主要基于H.264baseline档次的SLICE层以下的熵编码功能,通过编码模式的可配置,能分别自适应实现宏块类型为帧内4×4,帧内16×16,帧间16×16以及P-SKIP的编码模式。这三种宏块类型的编码皆由算子单元组成的算子功能群落实现。分别完成不同宏块类型下的熵编码。
对于CAVLC残差编码,针对一个子4×4块残差系数的编码,本发明实施例采用级间流水的方式以提高效率。具体分为如下四级:
1)数据缓冲重排序单元(流水线第一级)。
2)残差系数解析单元(流水线第二级)。
3)查找表或计算编码单元(流水线第三级)。
4)码流拼接单元(流水线第四级)。
针对CAVLC熵编码器,一个子4×4块含有的有效变换系数个数有16、15、4这三种情况。对于这三种情况,可以采用一套硬件来实现,选择其中的16作为最坏情况,即编码的残差个数最大为16。一般情况下这3种模式都会用到,一个宏块中需要处理多个子4×4块或2×2块,不同宏块类型下都采用同一套编码硬件处理,但其编码循环的次数却不一样,通过一个计数器来控制实现。
由于在本发明实施例中,CAVLC实现的编码硬件只是针对一次子4×4块残差系数的编码,所编码的残差个数最大为16,采用不同的zig-zag扫描并将相应系数置零。当变换系数为15和4时,利用zig-zag扫描相应地把高1位及高12位屏蔽掉,这里选择用零来填充。这样实现的优点是:在变换系数都采用CAVLC编码算法不变的情况下,很好地实现了硬件资源共享,可以实现同一套子4×4编码硬件对16、4、15个残差系数的编码。其算子功能块结构如图3.2。
编码器需要分别对有效变换数据个数为16、4、15的残差系数进行编码,在进行zig-zag扫描时,由于都是从后至前进行逆序扫描的,为便于取数及扫描,可按不同宏块类型事先将残差系数按一定顺序及格式存储在存储器或寄存器堆中,在进行编码时则将相应的一个子4×4块残差数据读取出来先缓存到16个数据寄存器中,每次都由这16个寄存器中的值来完成一次CAVCL编码。残差存储的顺序及格式根据宏块类型的不同而不同。
残差系数解析单元从数据缓存寄存器中通过16个周期一拍拍接收16个残差数据并对其初步解析,由一个计数器来记录非零系数个数,并将这些非零系数依次保存在数据寄存器组中以供后面模块使用。同时也记录了该非零系数是当前16个数据中的第几个,并将其序号保存在数据寄存器组中以供后面模块使用。
本发明的基于算子的可配置熵编码方法及基于硬件加速的适用于H.264类熵编码装置,其硬件具有规整性和灵活性,通过配置实现了不同宏块类型的自适应熵编码,能对不同的宏块类型进行熵编码且互不干扰,在提升编码速度的同时也便于编码模式的移植和扩充。
针对CAVLC熵编码器,对于子4×4块变换数据编码,仅用一套硬件就能处理不同编码系数个数的残差编码,实现了不同宏块类型下硬件资源共享,在节省编码器硬件面积的同时也具有极高的灵活性,便于其它标准下子4×4块残差系数编码的移植,进一步提高了硬件编码器的效率。
四、算子实现详述
本发明实施例中,熵编码功能群落由一系列算子功能块聚合而实现,主要包括指数哥伦布编码功能块(统一的可变长编码功能块)、上下文自适应可变长残差系数编码功能和码流拼接功能块,这些功能块在C代码中体现为函数,C代码在实现熵编码功能的时候,是通过反复调用这些主体函数来实现的。
在X264代码中,通过C代码到硬件的映射,如图4.1,x264_macroblock_write_cavlc函数完成宏块级编码。其中两边边框部分为输入输出信号,指向的存储器未画出。中间空心边框为函数内部变量。其包括以下逻辑:
L0逻辑:完成宏块类型编码的中间映射
my_type_I16=i_mb_i_offset+1+h->mb.i_intra16x16_pred_mode+
h->mb.i_cbp_chroma*4+(h->mb.i_cbp_luma==0?0:12)
I4_cbp_to_golomb:完成I4宏块中哥伦布编码的中间映射
P4_cbp_to_golomb:完成P16宏块中哥伦布编码的中间映射
mux逻辑:完成码流拼接逻辑
bs_write_ue逻辑:无符号指数哥伦布编码
bs_write_se逻辑:有符号指数哥伦布编码
x264_residual_write_caylc逻辑:上下文自适应可变长残差系数编码
上述逻辑单元均为组成熵编码功能群落的算子功能块群落,它们皆由基本运算算子搭建而成。
前述的bs_write_ue函数的算子功能块结构图可参考图4.2。
如图3.1,变长编码主要分为2个独立的单元,即UVLC和CAVLC,其中UVLC单元主要负责指数哥伦布编码和部分定长编码,CAVLC单元负责处理宏块数据,内部主要为查找表编码和部分指数哥伦布编码。对于UVLC,从语法参数总线上传来的参数值首先存在缓存寄存器(Syntax element_cache)中,经过语法分析计算后直接进行UVLC编码,该语法分析主要包括宏块类型的计算,及编码模式的选择等;对于CAVLC,编码的对象是一个子4×4块,从数据总线上传来的残差数据以一定大小个数据(每次取一个子4×4块)首先缓存在寄存器(MBpixel_cache),经过对残差数据进行分析后进行CAVLC编码,该分析主要指对一个子4×4块残差数据逐个扫描以提取出它们之间的信息(包括非零系数,拖尾系数,非零系数幅值,最后一个非零系数前零的总个数,每个非零系数前零的个数)以供编码。最后通过一个状态机将这两部分码流组合输出。
H.264采用变长的熵编码结构,这样极大地节省了码流。其中宏块头信息编码包括:宏块类型,I_4×4亮度预测模式,色预测模式,编码宏块类型CBP,量化差值QP等,这部分语法元素对象(Syntex element),即语法参数是通过指数哥伦布编码(UVLC)实现的。另外对残差数据进行熵编码采用的是CAVLC,根据不同模式分别从存储里按一定格式取出经过DCT、量化后的相应残差数据进行编码,编完后将码流存放到存储器一定区域中。
待编码的语法元素被写入后首先放在VLC内部寄存器中,根据不同的帧类型及宏块类型选择不同的编码模式,以baseline档次的熵编码为例,其预测模式有帧内4×4,帧内16×16,帧间16×16以及P-SKIP这4种,相应的语法参数编码编码过程也不相同。当判断出采用哪种编码模式后,编码器从存储器中读取相应的残差数据。
对于P-SKIP预测宏块类型,则将记录该宏块类型个数的记数器i-s kip值加1,此次宏块编码完毕(其实是没有进行任何编码,只是相应作了记录)。
对于帧内4×4预测宏块类型,依次对宏块类型,16个不同亮度预测模式,色度预测模式,4×4宏块编码宏块类型和量化参数QP(如果其CBP值为0,即所有残差数据都为0,则不用编码QP参数)等语法参数进行UVLC编码,然后对残差数据进行CAVLC编码。
对于帧内16×16预测宏块类型,依次对宏块类型,色度预测模式和量化参数QP进行UVLC编码,然后对残差数据进行CAVLC编码。
对于帧间16×16预测宏块类型,依次对宏块类型,16×16宏块编码宏块类型和量化参数QP(如果其CBP值为0,即所有残差系数都为0,则不用编码QP参数)进行UVLC编码,然后对残差数据进行CAVLC编码。
以上每一种编码模式都实现了片层以下的宏块编码,每一种模式成独立编码单元,用ASIC实现,内部各有一个状态机来控制编码流程,每个单元内部也有一个码流拼接功能块,将UVLC及CAVLC码流合并起来。最后通过一个多选器选择输入已编码合并的码流。鉴于CAVLC的编码参数较多且独立成单元,故CAVLC单元里也有一个状态机及码流拼接功能块来整合CAVLC码流。
如图6,由于一个宏块只有一个宏块头,故相应的宏块头参数编码UVLC只有一次,而编码残差数据针对的是一个子4×4块或2×2块(此时都共用子4×4块CAVLC编码这一套硬件),故一个宏块的编码残差码流是由26次或27次CAVLC码流循环拼接而成。当宏块类型为I16×16时,这里的i=27,CAVCL循环27次;当宏块类型为I4×4或P16×16时,这里的i=26,CAVCL循环26次。
对于一个子4×4块残差系数的编码,CAVLC编码硬件工作流程如下:子块输入后,对其进行逆向Zig-zag扫描,扫描时按照串行方式逐个判断。当子块扫描完成,则可以开始对CoeffToken、TotalZeros和RunBefore的编码。编码采用查找表得到,编码表放在例如ROM中,通过计算编码表的地址值,从而按地址值相应查找编码表得到编码值。其中,计算和查表两者之间是可以相互转换的,较复杂的查表操作可以用计算来实现,而某些复杂计算可以用查表实现,两者之间应尽量减少交互的过程,因为查表的周期是固定的,而计算过程受流水线级数的影响,因而在设计时可以将计算单元和查表单元放在一起,从而简化状态机设计。
为了实现硬件快速处理的优势,CAVLC针对一个子4×4块残差系数的编码,采用级间流水的方式以提高效率,如图7所示,根据编码流程具体分为如下四级:
1)数据缓冲重排序单元(流水线第一级)。
如图8、9所示,当熵编码器启动后,首先根据宏块类型到相应的存储器中读取一个子4×4块残差数据放到1-16号寄存器中。对于I16×16亮度DC系数,I4×4和P16×16的亮度残差系数,直接将其存入在1-16号寄存器中。对于所有宏块类型的色度DC系数,将放在1-4号寄存器,而其它5-16号寄存器则被赋为零。对于所有宏块类型的亮度AC系数及色度AC系数,将其有效残差AC系数分别将放在1-15号寄存器,而16号寄存器则被赋为零。根据编码顺序以及寄存器中的残差系数存储格式读取数据完毕后,通过一个多选器从16号至1号依次将其寄存器中的值输入供后续模块解析。
由于编码器需要分别对有效变换数据个数为16、4、15的残差系数进行编码,在进行zig-zag扫描时,由于都是从后至前的顺序进行逆序扫描的(其中被提走的DC系数留下的位置会被置为零),为便于取数及扫描,可按不同宏块类型事先将残差系数按一定顺序及格式存储在存储器或寄存器堆中,在进行编码时则将相应的一个子4*4块残差数据读取出来先缓存到16个数据寄存器中,每次都由这16个寄存器中的值来完成一次CAVCL编码。残差存储的顺序及格式因宏块类型的不同而不同。
由上知,I_16*16宏块类型可按如图10所示格式存储残差数据,对于亮度DC系数,此时将一个宏块中每个子4*4块中的DC系数提取出来做哈达码变换后存放在存储器的最开始位置,CAVLC启动时首先对它进行编码,然后依次从序号0开始逐次CAVLC编码。在每一个子4×4块编码扫描时,依次从data16至data1逆序扫描解析残差信息。对于每一个子4*4块中的AC系数,data1存储的数据无关紧要,在将其取到寄存器进行后续编码时把它赋为零(即最后一个寄存器里的值被赋为零,它首先被输出扫描),这样依旧可以按CAVLC算法进行编码而不影响残差数据间的信息解析。对于亮度DC系数,将色度块中每个子4*4块中的DC系数提取出来做哈达码变换后存放在亮度残差系数后面,这里只存储了4个有效变换DC系数,在将其取到寄存器进行后续编码时将其放在前4个寄存器中,而后面的12个寄存器里的值则被赋为零。
同理,对于I_4*4及P_16*16宏块类型可按如图11所示格式存储。与I_16*16相比,其没有亮度DC系数哈达码变换,而色度的变换系数存储格式与I_16*16相同。
2)残差系数解析单元(流水线第二级)。
如图12所示,残差系数解析单元data_parse中的控制逻辑初始化或复位时给非零系数计数器tc_n置0,给系数序列寄存器num置16,然后从数据缓冲重排序单元中一拍拍通过16个周期接收16个残差数据并对其初步解析。若该数据为非零,则tc_n不断循环加1,最后将其值输出即为非零系数总数TotalCoeffs,同时将这些非零系数经过一个选通开关后依次保存在数据寄存器组mem_d中,而此时也记录了该非零系数是当前16个数据中的第几个,是通过将16逐次递减1得到的,并将该非零系数的序号保存在数据寄存器组mem_n中以供后面模块使用。
例如,如图13所示,第一行为输入的16个变换数据,从右到左依次逆序解析,其中依次检测到的非零系数有1、-1、6、4、3、1、2,对应的编号依次为13、11、9、7、6、3、1,该序列的非零系数个数有7个。
注意,上述统计出的非零系数个数,存储的非零系数个数及相应序号只是对残差数据进行了初步的解析,更一步地还需要解析出编码子4×4块残差系数的拖尾系数的数目(TrailingOnes)、最后一个非零系数前零的数目(TotalZeros)、每个非零系数前零的个数(RunBefore)以及相应非零系数左边的所有零的个数(ZerosLeft)。
3)查找表或计算编码单元(流水线第三级),包括TotalCoeffs、TotalZeros以及零行程的查找表编码,其中除了拖尾系数之外的非零系数的幅值(Levels)的编码是先要计算出前缀level_prefix和后缀level_suffix,然后对这两个参数进行编码组合得到的,而TrailingOnes可直接对符号进行编码。如前所述,
4)码流拼接单元(流水线第四级),对第三级输入的码字按相应顺序进行码流拼接。
由于一个子4×4块含有的有效变换系数个数有16,15,4这三种情况。例如:I16×16模式下的亮度系数哈达码变换后的直流系数DC_L,I4×4模式下的亮度DCT变换后系数DC_AC_L,帧间16×16模式下亮度DCT变换后系数DC_AC_L,其有效变换系数个数为16;I16×16模式下的亮度系数哈达码变换后剩下的交流系数AC_L,色度8×8模式(intra&inter)数AC_C,其有效变换系数个数为15;而色度8×8模式(intra&inter)下残差系数哈达码变换后直流系数AD_C,其有效变换系数个数为4。
对于这三种情况,本发明中通过残差系数位置的调整及置零,可以采用一套硬件来实现,选择其中的16做为最坏情况,即最多需要编码16个变换系数。当变换系数为15和4时,利用zig-zag扫描相应地把高1位及高12位屏蔽掉,这里用零来填充。此发明的优点是,在变换系数都采用CAVLC编码算法不变的情况下,不会影响后续残差的信息解析,在不影响编码效果的情况下很好地实现了硬件资源共享。
根据不同子4×4块类型,采用不同的zig-zag扫描并将相应系数置零(此时不关心灰色部分的系数值),这样就可以实现同一套子4×4编码硬件对16、4、15个残差系数的编码。
如图14.1、图14.2和图14.3所示,对于I4×4,P16×16的残差亮度系数以及I16×16残差亮度直流系数(即I4×4_L,P16×16_L和I16×16_L_DC),采用a模式下的逆序打描,即从16到1进行扫描;对于I4×4,P16×16和I16×16残差色度交流系数(即I4×4_C_AC,P16×16_C_AC和I16×16_C_AC),采用b模式下的逆序打描,即从16到1进行扫描;对于I4×4,P16×16和I16×16残差色度直流系数(即I4×4_C_DC,P16×16_C_DC和I16×16_C_DC),采用c模式下的逆序打描,即从16到1进行扫描。图中的未标注数字的方框部分被置为零。
CAVLC用同一套子4×4编码硬件实现对16、4、15个残差系数的编码。一般情况下这3种模式都会用到,一个宏块中需要处理多个子4×4块或2×2块,其编码循环的次数却不一样。
如图15所示,对于I16×16宏块,就需要分别顺次进行DC_L_16系数1次,AC_L_15系数16次,DC_C_4系数2次和AC_C_15系数8次的编码,总计CAVCL需循环处理27次;对于I4×4及P16×16宏块,就需要分别顺次进行L_16系数16次,DC_C_4系数2次和AC_C_15系数8次的编码,总计CAVCL需循环处理26次,当选择相应模式后由一个计数器加1来计数,达到循环次数则完成一个宏块的编码。当相应CBP值(编码宏块类型code_block_patten)为0时,则该计数器相加4的整数倍。
如上述,根据宏块类型通过预先对编码器的配置,让编码器工作在不同模式,完成一次宏块的编码。
综上,本发明利用算子单元实现了用于视频编码器的熵编码器,其设计速度快。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (9)
1.一种用于视频编码器的熵编码器的实现方法,其特征在于,包括:
将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述,所述算子单元包括运算类算子、存储类算子、路径类算子、控制类算子和时钟类算子中的至少一种,所述运算类算子包括算术逻辑运算单元和运算配置寄存器,所述运算配置寄存器用于接收和存储运算配置指令,所述运算类算子为可重构算子,所述可重构算子在执行过程中通过改变运算配置指令实现动态重构,所述存储类算子包括存储单元和储存配置寄存器,所述存储单元包括地址产生单元、数据存储器、数据产生单元和数据输出控制单元,所述路径类算子包括组成路由选择单元的交换开关、数据寄存器和路由配置寄存器,所述控制类算子主要将配置信息传送到相应的配置寄存器,所述时钟类算子用于给所述运算类算子、存储类算子、路径类算子和控制类算子提供时钟信号;
由所述算子单元构成的硬件逻辑描述生成熵编码器硬件集成电路,所述熵编码器的编码值采用计算或查表的方式获取,所述熵编码器为CAVLC熵编码器,所述CAVLC熵编码器中的一个宏块编码残差数据中包括多个子4×4块或2×2块,每个所述子4×4块或2×2块的有效变换系数的个数为16,15和4中的任意一种,所述有效变换系数在zig-zag逆扫描中通过调整所述有效变换系数的位置或将所述有效变换系数置零使其适用于同一套子4×4编码硬件统一进行解析和编码。
2.如权利要求1所述的方法,其特征在于,将高级程序语言算法描述的视频编码器的熵编码器的各个编码功能块映射成由算子单元构成的硬件逻辑描述包括如下步骤:
程序分析步骤:读取熵编码器的各个编码功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述熵编码器算法的数据控制流图中相应节点;
算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从所述算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;
下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
3.如权利要求1所述的方法,其特征在于,一个所述运算类算子配置控制位以及多种运算,所述控制位用于择一选择一种运算。
4.如权利要求2所述的方法,其特征在于,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种,将所述运算指令映射为运算类算子,将所述控制指令映射为控制类算子或路径类算子,将所述参数对象映射为存储类算子。
5.如权利要求1所述的方法,其特征在于,所述编码功能块包括用于编码语法参数的统一可变长编码功能块、用于编码残差数据的上下文自适应可变长编码功能块、以及拼接所有编码码流的码流拼接功能块。
6.一种根据权利要求1所述实现方法实现的用于视频编码器的熵编码器,其特征在于,包括用于编码语法参数的统一可变长编码功能块、用于编码残差数据的上下文自适应可变长编码功能块、以及拼接所有编码码流的码流拼接功能块,所述各功能块由算子单元组成,所述算子单元包括运算类算子、存储类算子、路径类算子、控制类算子和时钟类算子中的至少一种,所述运算类算子包括算术逻辑运算单元和运算配置寄存器,所述运算配置寄存器用于接收和存储运算配置指令,所述运算类算子为可重构算子,所述可重构算子在执行过程中通过改变运算配置指令实现动态重构,所述存储类算子包括存储单元和储存配置寄存器,所述存储单元包括地址产生单元、数据存储器、数据产生单元和数据输出控制单元,所述路径类算子包括组成路由选择单元的交换开关、数据寄存器和路由配置寄存器,所述控制类算子主要将配置信息传送到相应的配置寄存器,所述时钟类算子用于给所述运算类算子、存储类算子、路径类算子和控制类算子提供时钟信号,所述熵编码器的编码值采用计算或查表的方式获取,所述熵编码器为CAVLC熵编码器,所述CAVLC熵编码器中的一个宏块编码残差数据中包括多个子4×4块或2×2块,每个所述子4×4块或2×2块的有效变换系数的个数为16,15和4中的任意一种,所述有效变换系数在zig-zag逆扫描中通过调整所述有效变换系数的位置或将所述有效变换系数置零使其适用于同一套子4×4编码硬件统一进行解析和编码。
7.如权利要求6所述的熵编码器,其特征在于,所述自适应可变长编码功能块包括顺序相连的数据缓冲重排序单元、残差系数解析单元、查找表或计算编码单元。
8.如权利要求7所述的熵编码器,其特征在于,所述数据缓冲重排序单元、残差系数解析单元、查找表或计算编码单元采用级间流水形式设置。
9.如权利要求6所述的熵编码器,其特征在于,所述上下文自适应可变长编码功能块的残差系数编码算子功能群落为实现一次子4*4块残差系数编码的算子功能群落。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106200287A CN102088603B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的熵编码器及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106200287A CN102088603B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的熵编码器及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102088603A CN102088603A (zh) | 2011-06-08 |
CN102088603B true CN102088603B (zh) | 2013-12-04 |
Family
ID=44100178
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010106200287A Expired - Fee Related CN102088603B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的熵编码器及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102088603B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AR092786A1 (es) * | 2012-01-09 | 2015-05-06 | Jang Min | Metodos para eliminar artefactos de bloque |
EP2618578B1 (en) * | 2012-01-20 | 2015-07-15 | BlackBerry Limited | Methods and devices for context set selection |
TWI772725B (zh) * | 2012-03-26 | 2022-08-01 | 日商Jvc建伍股份有限公司 | 影像解碼裝置、影像解碼方法、儲存有影像解碼程式之記錄媒體、影像編碼裝置、影像編碼方法、及儲存有影像編碼程式之記錄媒體 |
CN103581681B (zh) * | 2012-07-26 | 2018-05-01 | 安凯(广州)微电子技术有限公司 | 一种视频解码装置及解码方法 |
US9538175B2 (en) * | 2012-09-26 | 2017-01-03 | Qualcomm Incorporated | Context derivation for context-adaptive, multi-level significance coding |
WO2014108393A1 (en) | 2013-01-08 | 2014-07-17 | Dolby International Ab | Model based prediction in a critically sampled filterbank |
CN104702952B (zh) * | 2014-01-21 | 2018-02-27 | 杭州海康威视数字技术股份有限公司 | 一种图像数据压缩方法 |
CN108416431B (zh) * | 2018-01-19 | 2021-06-01 | 上海兆芯集成电路有限公司 | 神经网络微处理器与宏指令处理方法 |
CN111666077B (zh) * | 2020-04-13 | 2022-02-25 | 北京百度网讯科技有限公司 | 算子处理方法、装置、电子设备及存储介质 |
EP4144092A4 (en) * | 2020-05-01 | 2024-05-29 | Beijing Dajia Internet Information Tech Co Ltd | HIGH-LEVEL SYNTAX FOR VIDEO CODING |
CN111638874B (zh) * | 2020-05-27 | 2023-05-16 | 江西五十铃汽车有限公司 | 基于Matlab软件的汽车控制器编码信息写入和读取方法 |
CN113824955B (zh) * | 2021-11-22 | 2022-02-18 | 杭州雄迈集成电路技术股份有限公司 | 一种多路视频分时复用编码方法和*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101707716A (zh) * | 2009-11-19 | 2010-05-12 | 清华大学 | 视频编码器和编码方法 |
CN101783953A (zh) * | 2010-03-08 | 2010-07-21 | 北京空间机电研究所 | Jpeg-ls游程编码硬件实现方法 |
-
2010
- 2010-12-31 CN CN2010106200287A patent/CN102088603B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101707716A (zh) * | 2009-11-19 | 2010-05-12 | 清华大学 | 视频编码器和编码方法 |
CN101783953A (zh) * | 2010-03-08 | 2010-07-21 | 北京空间机电研究所 | Jpeg-ls游程编码硬件实现方法 |
Non-Patent Citations (2)
Title |
---|
王新安.算子设计方法缩小IC设计与制造间的"剪刀差".《集成电路应用》.2010,23-24,26. |
算子设计方法缩小IC设计与制造间的"剪刀差";王新安;《集成电路应用》;20100731;23-24,26 * |
Also Published As
Publication number | Publication date |
---|---|
CN102088603A (zh) | 2011-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102088603B (zh) | 用于视频编码器的熵编码器及其实现方法 | |
CN105874795B (zh) | 在波前并行处理被启用时对图片内预测模式的规则 | |
CN104737540B (zh) | 用于下一代视频的视频编解码器架构 | |
CN104584560B (zh) | 在去块时使用色度量化参数偏移 | |
CN101490968B (zh) | 用于视频压缩的并行处理装置 | |
CN101150719B (zh) | 并行视频编码的方法及装置 | |
CN101313591B (zh) | 可分级视频压缩中插值的方法与装置 | |
CN105659606B (zh) | 用于视频和图像编码和解码的方法、***和介质 | |
CN107615765A (zh) | 视频编解码***中在帧内块复制模式和帧间预测模式之间的资源共享的方法和装置 | |
CN101252694B (zh) | 基于块的视频解码的帧存储压缩和地址映射*** | |
CN101014129B (zh) | 一种视频数据压缩方法 | |
CN104737542A (zh) | 用于下一代视频的内容自适应熵编码 | |
CN100493202C (zh) | 可变长度解码装置 | |
CN106170092A (zh) | 用于无损编码的快速编码方法 | |
CN102055981B (zh) | 用于视频编码器的去块滤波器及其实现方法 | |
CN102369522A (zh) | 计算引擎的并行流水线式集成电路实现 | |
CN101406056A (zh) | 减少数字视频编码器中的内预测和模式判决处理中的计算的方法 | |
CN101009842A (zh) | 可分级视频压缩中插值的方法与装置 | |
CN113207004A (zh) | 基于jpeg-ls帧间扩展的遥感图像压缩算法硬件实现方法 | |
CN106331715A (zh) | 基于视频压缩编码标准h.265的熵编码***及其编码方法 | |
WO2020233179A1 (zh) | 码率估计核心单元、码率估计装置及码率估计方法 | |
CN104581154A (zh) | 一种熵编码方法和熵编码器电路 | |
CN102572430A (zh) | 一种基于可重构技术的h.264去块滤波算法的实现方法 | |
CN107409212A (zh) | 用于编码和解码的使用变换系数的逐渐更新 | |
CN100568920C (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20131204 Termination date: 20201231 |