基于h.264的熵解码器的实现方法及装置的制作方法

文档序号:7973039阅读:207来源:国知局
专利名称:基于h.264的熵解码器的实现方法及装置的制作方法
技术领域
本发明属于集成电路数字多媒体处理技术领域,尤其涉及一种专为在视频 通信的硬件MAE (media accelerator engine多媒体加速引擎)上实现熵解码器的 方法及装置。
背景技术
视频编解码技术是数字多媒体存储和传输应用的关键技术之一,视频编码 的核心部分包括预测编码,变换编码,熵编码。作为视频编码重要组成部分 的熵编码,是利用去除视频数据冗余的方法达到对视频数据进行压縮的效果。
熵编码包括变长编码和算术编码两种编码方法。典型的变长编码包括 H. 261、 MPEG (Motion Picture Experts Group) —2中采用的H. 263, MPEG-4 中采用的3D-VLC编码,以及H. 264/AVC (国际电信协会ITU-T的H. 264视频 编码建议或ISO/IEC的国际标准14496-10即MPEG-4标准的第十部分)中采用 的CAVLC (Context-based Adaptive Variable Length Coding)编码。其中2D-VLC 编码和3D-VLC编码采用单一码表进行编码,码表的体积较小,硬件实现比较 简单;而CAVLC编码根据已编码的句法元素的情况,动态调整使用的码表,可 以得到很高的压縮比,性价比更高。算术编码中最典型的是在H. 264/AVC中采 用CABAC算术编码,相对变长编码而言,由于可以对上下文进行建模,对信 源符号出现的概率有更准确的估计,因此编码效率更高,但是相比变长编码, 它的计算复杂度高,硬件实现复杂,因此目前采用不多。 一般来说,CAVLC编
码多用于实时性要求较高的应用,如视频电话等。而CABAC虽然编码效率较 高,编码的图像质量较好,但由于编码比较复杂,难以用于对速度要求较高的 应用中,更多地用于数字多媒体的应用,如数字广播电视和数字视频存储等。
熵解码就是将熵编码编码过的视频数据准确可靠的还原,对于应用 H. 264/AVC的视频编码标准进行编码的视频数据,针对存在的两种熵编码方式, 熵解码器分别对经过CAVLC和CABAC编码过的视频数据进行解码。然而,由 于CAVLC较以前的2D-VLC编码和3D-VLC编码复杂,CABAC计算复杂度很 高,因此要对同时支持两种熵编码方式的视频数据解码需要耗费相当的资源。 在IC设计中,纯ASIC硬件实现也相当困难,也正是由于这个原因,当前的H. 264 熵解码一般只是在计算机上采用纯软件的方式实现,少数硬件实现的熵解码器 也只支持CAVLC编码方式,这样就限制了性能更好,压縮比更高的CABAC编 码方法的应用。

发明内容
本发明所要解决的技术问题是如何采用一种简单有效的方法,在MAE上实 现对CAVLC和CABAC的两种视频编码数据的熵解码,既能保证解码的质量和 解码效率,结构简单又易于实现。
本发明的目的在于公开了一种专用于H.264解码MAE中对熵编码残差数 据等进行解码的方法及装置,由于本发明所述方法采用了软硬件协同工作,使 得熵解码器在保证获得可靠的解码效率和解码质量的前提下,大大降低了结构 的复杂度和计算复杂度,从而有效的解决了结构和效率之间的矛盾,顺利的实 现了对CAVLC和CABAC熵编码码流的解码。
基于H. 264的熵解码器的实现方法,其特征在于该方法采用了软硬件协同工作,将解码过程中占用大量资源的部分改用软件程序方法实现,包括如下 步骤
步骤1:熵解码控制模块(6)根据熵编码模式标志选择解码方式即是对
CAVLC编码码流进行解码还是对CABAC编码码流进行解码;
步骤2:根据步骤(1)选定的解码类型以片(slice)数据为单位对CAVLC 或者CABAC编码码流进行解码;
步骤3:解码完成后,判断是否为CAVLC或者CABAC编码码流的最后一 个片数据,若不是,返回步骤(2)继续对下一个片(Slice)的数据进行解码, 否则,解码过程结束。
基于H.264的熵解码器的实现方法,所述的将解码过程中占用大量资源的 部分改用软件程序方法实现,其特征在于所述的软件程序方法是指利用嵌入 式cpu代替硬件电路进行运算的方式,而不是单纯的指用计算机软件实现熵解 码中的某些计算功能。
所述的基于H. 264的熵解码器的实现方法,其特征在于该方法步骤(2) 中所述的根据选定的解码类型以片数据为单位对CAVLC编码码流进行解码,其 中所述的对CAVLC编码码流的解码还包括如下的具体步骤
步骤2.1:熵解码控制模块(6)向软件模块(4)发出开始信号,开始求解 与解码有关的变量和参数;
步骤2.2:软件模块(4)收到来自熵解码控制模块(6)的开始信号后,经 由ue/se/te解码单元(2)并最终通过BSI取数模块(1)得到所需的编码数据流, 经解码得到所需的宏块参数以及除残差系数以外的其他语法元素;
步骤2.3:熵解码控制模块(6)收到软件模块(4)发出的结束信号后,向 CAVLC残差解码模块(3)发出解残差开始信号;
步骤2.4: CAVLC残差解码模块(3)收到熵解码控制模块(6)发来的开 始信号后开始残差解码,并通过BSI取数据模块(1)获得解码所需的编码数据, 得到亮度块和色度块的残差系数值;
步骤2.5:判断解码的是否为片数据的最后一个宏块,如果不是,则返回到 步骤(2.1)继续解下一个宏块,否则解码结束。
所述的基于H.264的熵解码器的实现方法,其特征在于以片数据为单位 对CAVLC编码码流进行解码是通过对组成片数据的每个宏块进行解码实现的, 所述对单个宏块的解码包括如下的步骤
步骤l:由软件模块求解与宏块解码相关的变量和参数;
步骤2:根据上述步骤(1)得到解码所需的当前宏块以及邻近宏块等解码 所需的参数后,按照先亮度块后色度块的顺序对宏块进行解码;
步骤3:对亮度块进行解码;以4x4块为基本的解码单位,即每次对一个 4x4亮度块进行块解码,先对亮度块的直流(DC)系数进行解码,然后再对亮度块 的交流系数(AC)进行解码;
步骤4:解码完亮度块后,对色度块进行解码;以4x4块为基本的解码单位,
按照先Cb块后Cr块的顺序,先解码色度块的直流系数,再解码色度块的交流 系数;
步骤5:重复上述步骤,继续解下一个宏块。
所述基于11264的熵解码器的实现方法,该方法步骤(2)所述的根据选定 的解码方式以片数据为单位对CABAC编码码流进行解码,其特征在于其中 所述的对CABAC编码码流的解码还包括如下的具体步骤
步骤2.1':对CABAC解码所需的上下文模型进行初始化,并初始化概率 区间;
步骤2.2':熵解码控制模块(6)向软件模块(4)发出开始信号,开始对 除残差系数以外的其他语法元素、运动向量mvd—10,mvdjl等解码,并求解残差 解码中用到的宏块参数;
步骤2.3':软件模块(4)收到来自熵解码控制模块(6)的开始信号后, 经由二进制算术解码单元(5)并最终通过BSI取数模块(1)得到所需的编码 数据流,解码得到所需的宏块参数以及除残差系数以外的其他语法元素;
步骤2.4':熵解码控制模块(6)向CABAC残差解码模块(7)发出解残 差开始信号;
步骤2.5' : CABAC残差解码模块(7)收到熵解码控制模块(6)发来的 开始信号后开始残差解码,经由二进制算术解码单元(5)并最终通过BSI取数 模块(1)得到所需的编码数据流,解码得到亮度(luma)和色度(chroma)块 的残差系数值;
步骤2.6':判断解码的宏块是否为片(slice)的最后一个宏块,如果不是, 则返回到步骤(2.1')继续解下一个宏块,否则解码结束。
本发明所述的基于H.264的熵解码器的实现方法,其特征在于所述的以 片数据为单位对CABAC编码码流进行解码是通过对组成片数据的每个宏块进 行解码实现的,所述对单个宏块的解码包括如下的步骤
步骤l:对上下文模型和概率区间进行初始化;
步骤2:开始对残差系数以外其他语法元素进行解码,并通过采用软件方法
求解残差解码中要用到的宏块参数和其他参数;
步骤3:按照先亮度后色度的顺序对残差宏块进行解码;
步骤4:对亮度块的解码;以4x4块或者8x8块为基本单位,先对亮度直流
系数进行解码,再对剩余的亮度交流系数进行解码,完成对亮度块的解码过程;
步骤5:对色度块的解码;按照先Cb后Cr块的顺序以4x4块为单位对两个 色度块Cb和Cr块进行解码,先解Cb和Cr块的直流系数,然后再解Cb和Cr 块的交流系数;
步骤6:重复上述步骤,继续解下一个宏块。
本发明还公开了一种基于H. 264的熵解码器装置,该装置包括如下模块 BSI取数模块负责从外部取得解码所需的码流数据,当接收到其他模块的 取数请求时,返回相应长度的码流数据;
ue/se/te解码单元接收软件模块发送来的解码请求并返回解码后的参数
值;
CAVLC残差解码模快以'4X4块'为单位,根据软件模块解码得到的相应 参数,对亮度和色度的残差系数进行解码,解码完成后向熵解码控制模块发出 结束信号,解码出来的残差系数存入反扫描RAM;
软件模块对残差解码需要的参数和变量进行解码,通过ue/se/te解码单 元求解与CAVLC相关的参数,通过二进制算术解码单元求解与CABAC相关的参 数,最终得到的参数再提供给CAVCL或CABAC残差解码模块使用;
二进制算术解码单元在解码与宏块有关的参数时,当收到软件模块发送 来的解码请求,经解码返回得到的二进制结果;另外在进行CABAC残差解码的 时,当收到CABAC残差解码模快发送来的解码请求时,经解码返回得到的二进 制结果;
熵解码控制模块控制整个解码流程,先控制软件模块求解相关的参数, 负责向CAVLC残差解码模块或者CABAC残差解码模块发出开始解码信号,当接 收到解码结束信号后,将解码得到的相应残差系数写入反扫描RAM;
CABAC残差解码模块以'4X4,块或者<8X8,块为单位,根据软件模块解码得到的相应参数,对亮度和色度的残差系数进行解码,解码完成后向熵解码 控制模块发出结束信号,解码出来的残差系数存入反扫描RAM;
反扫描RAM:存储经CAVLC残差解码模快或者CABAC残差解码模块解码得到 的残差系数。
本发明的显著有益效果在于在CAVLC和CABAC的解码过程中,尤其是 在对CABAC码流的解码过程中,CABAC解码本身就是一个复杂的过程,而且 在对残差以外的其他语法元素进行解码时,CABAC的编码方式决定了解码的复 杂性,伴随而来的是计算的复杂度,在ASIC设计中,如果完全采用纯硬件实现, 这不仅将会占用大量的硬件资源,而且势必会大大增加设计的难度。
本发明提出了 一种专用于H.264解码MAE中对熵编码残差数据等进行解码 的方法,由于采用了软硬件协同工作,将解码过程中占用大量硬件资源的部分 改用软件方式实现,使得熵解码器在保证获得可靠的解码效率和解码质量的前 提下,大大降低了结构的复杂度和计算的复杂度,从而有效的解决了速度和效 率之间的矛盾,顺利的实现了对CAVLC和CABAC熵编码码流的解码。而且, 由于采用本发明所述的解决方案,使得熵解码器可以应用于实际的电路设计中, 由于支持CABAC的解码,可以加快H.264在多媒体视频方面的应用,可以用 于标清的数字存储和其他的实时应用,如视频存储、VOIP、可视电话等。


图1为本发明熵解码器的硬件结构实现原理图2为熵解码模式选择的原理图3为对一个宏块的数据进行CAVLC解码的方法流程图4为对一个4x4子块数据块进行CAVLC解码的方法流程图5为对一个宏块的数据进行CABAC解码的方法流程图6为对一个4x4子块或者8x8子块数据进行CABAC解码的方法流程图7为对4x4子块中的参数的举例说明附表;
具体实施例方式
下面参考说明书附图,具体说明本发明的实现过程。
如附图l所示本发明
所述的基于H. 264的熵解码器装置,该装置包括如下模块
BSI取数模块1:负责从外部取得解码所需的码流数据,当接收到其他模块
的取数请求时,返回相应长度的码流数据;
ue/se/te解码单元2:接收软件模块发送来的ue, se或者te解码请求,并
返回解码后的参数值;
CAVLC残差解码模快3:以'4X4块'为单位,根据软件模块解码得到的相 应参数,对亮度和色度的残差系数进行解码,解码完成后向熵解码控制模块发 出结束信号,解码出来的残差系数存入反扫描RM1;
软件模块4:对残差解码需要的一些全部和局部参数和变量进行解码,通过 ue/se/te解码单元求解与CAVLC相关的参数,通过二进制算术解码单元求解与 CABAC相关的参数,最终得到的参数再提供给CAVCL或CABAC残差解码模块使用;
二进制算术解码单元5:除了软件模块在解码与残差相关的参数时需要借 助该模块以外,在进行CABAC残差解码的时候,CABAC残差解码模快向该模块发 送解码请求,经解码,返回得到二进制结果;
熵解码控制模块6:控制整个解码流程,先控制软件模块求解相关的参数, 负责向CAVLC残差解码模块或者CABAC残差解码模块发出开始解码信号,当接 收到解码结束信号后,将解码得到的相应残差系数写入反扫描RAM;
CABAC残差解码模块7:以'4X4,块或者'8X8,块为单位,根据软件模块解码得到的相应参数,对亮度和色度的残差系数进行解码,解码完成后向熵解
码控制模块发出结束信号,解码出来的残差系数存入反扫描RAM.
反扫描RAM8:根据CAVLC残差解码模快或者CABAC残差解码模块发来的信 号,存储经CAVLC残差解码模快或者CABAC残差解码模块解码得到的残差系数。
熵解码首先要确定编码码流的编码方式,编码方式的确定是依据编码模式 标志得到,如附图2所示,当编码模式标志entropy_mode—flag=0时表示编码方 式为CAVLC编码;当编码模式标志entropy_mode_flag=l时表示编码方式为 CABAC编码,根据判断出的编码方式选择相应的解码方法。
下面结合附图1说明熵解码器的解码过程-
步骤l:确定了码流的编码方式之后,熵解码控制模块6根据编码方式决定 解码的类型即是对CAVLC编码码流解码还是对CABAC编码码流解码;如果 是解CAVLC编码码流,则进入步骤2执行,如果是解CABAC编码码流,则进 入步骤3执行;
步骤2:进行CAVLC解码;
步骤3:进行CABAC解码;
步骤4:步骤(2)或步骤(3)完成后,返回到步骤(1),继续解下一个片 (slice)的数据。
如附图1所示,上述步骤(2)所述的进行CAVLC解码的具体步骤为 步骤2.1:熵解码控制模块6向软件模块4发出开始信号,求解与解码有关
的非残差语法元素,如mb—type,sub_mb—type,运动向量mvd_10,mvd—11等; 步骤2.2:软件模块4收到来自熵解码控制模块6的开始信号后,经由ue/se/te
模块2并最终通过BSI取数模块1得到所需的编码数据流,解码得到所需的除
宏块参数以及残差系数以外的其他语法元素;
步骤2.3:熵解码控制模块6收到软件模块4发出的结束信号后,向CAVLC 残差解码模块3发出解残差开始信号;
步骤2.4: CAVLC残差解码模块3收到熵解码控制模块6发来的开始信号 后开始残差解码,并通过BSI取数据模块1获得解码所需的编码数据,最终解 码得到亮度和色度块的残差系数值;
步骤2.5:如果解码的不是片(slice)的最后一个宏块,则返回到步骤2.2, 继续解下一个宏块,否则结束。
如附图l所示,步骤(3)所述的对CABAC解码的具体步骤为
步骤3.h对CABAC解码所需的上下文模型进行初始化,并初始化概率区
间;
步骤3.2:熵解码解码控制模块6向软件模块4发开始信号,开始对残差系 数以外其他语法元素如mb—type,sub一mbjype,运动向量mvd一10,mvdjl等解码, 并求解残差解码中要用到的宏块参数和其他参数;
步骤3,3:软件模块4收到来自熵解码解码控制模块6的开始信号后,经由 二进制算术解码单元5并最终通过BSI取数模块1得到所需的编码数据流,解 码得到所需的宏块参数以及除残差系数以外的其他语法元素;
步骤3.4:熵解码控制模块6向CABAC残差解码模块7发出解残差开始信
号;
步骤3.5: CABAC残差解码模块7收到熵解码控制模块6发来的开始信号 后开始残差解码,同样经由二进制算术解码单元5并最终通过BSI取数模块1 得到所需的编码数据流,最终解码得到亮度和色度块的残差系数值;
步骤3.6:如果解码的不是片(slice)的最后一个宏块,回到步骤3.2,否则
结束o
下面参考图3说明对一个片数据的宏块进行CAVLC解码的流程
步骤l:由软件模块完成求出与宏块解码相关的变量和参数,如mb—type、
mb skip flag 、 sub mb type 、 mvd 10 、 mvd 11 、 ref idx 10 、ref idx 11 、
mb—qp一delta、 intra—chroma_pred—mode等;
步骤2:由步骤1得到解码时所需的当前宏块以及邻近宏块等解码所需的参
数后,由于一个宏块包含一个16x16的亮度块和两个8x8的色度块Cb和Cr,所 以下面按照先亮度后色度的顺序对宏块进行解码。
对亮度块进行解码
进行亮度块解码时,由于亮度块包含16x16个像素点,解码时以4x4块为 基本的解码单位,即每次对一个4x4块解码,共分16次完成一个16x16亮度块 的解码。在每个16x16亮度块中,每个4x4块有一个直流系数,16个4x4亮度 块共有16个直流系数;解码时首先对16个亮度的直流(DC)系数进行解码,然 后对16个4x4亮度块的交流系数(AC)进行解码,每个4x4交流系数块有15个 交流系数。
对色度块进行解码
解码完16x16亮度块后,接着对两个8x8色度块解码,同样的以4x4块为 基本的解码单位,同样先解码直流系数。每个8x8色度块有4个直流系数,分 别完成对Cb和Cr块的直流系数的解码后,再对Cb和Cr块的交流系数进行解 码,对两个色度块的解码顺序都是先Cb块后Cr块。
步骤3:完成对16xl6亮度块和Cb及Cr色度块的解码之后, 一个宏块的数 据就解码完了,可以继续下一个宏块的解码。
下面参考图4以对一个亮度4x4块或色度4x4块残差系数进行CAVLC解码 说明CAVLC残差解码的过程
步骤401:确定所要解码的系数是亮度系数还是色度系数,是直流系数还是 交流系数;
步骤402:如果色度直流系数为1,参数nC4,是对色度直流系数进行解 码,否则nC: (nA+nB) /2,其中nA, nB分别表示解码残差块的左边和正上方 参考块中非零系数的个数。
步骤403:由于CAVLC是变长编码,采用的不是固定的码表,因此,根据 步骤2得到的nC的值决定着进行解码时采用哪一个码表,以及是采用变长码表 还是定长码表或者是否使用码表。
步骤404:査表求解numtrailingones,其中numtrailingones表示拖尾系数, 即从最后一个高频残差系数开始往前连续遇到的1和-1的个数(l和-1之间可以 包括O), numtrailingones的值不超过3。 numtrailingones的作用在于,在进行编 码的时候,对于4x4块中高频部分的系数多为1, 0, -l的情况,编码的时候, 可以只记录l, -1的个数以及符号位即可,而无需像其他的残差系数一样要对整 个系数值level进行编码,提高了编码效率。
步骤405:对拖尾系数tmilingones部分的系数符号进行解码,得到 trailingones部分的幅值level的值,1或者-1 。
步骤406:解除拖尾系数之外的其他非零系数的值levd,加上步骤5中得 到的拖尾系数部分的level值,得到4x4块中的非零系数值level[i],这里的I表 示幅值level的序号。
步骤407:根据相应的码表求得TotalZeros的值,TotalZeros表示4x4中最 后一个非零系数前零的个数。
步骤408:求各个非零系数得run的值,run表示各非零系数前零的个数, 分别用mn[i]表示,其中i是非零系数level的序号。
步骤409:结束根据前面得到的levd[i], run[i]的值从低频部分第一个系 数就可以恢复16个4x4块的残差系数值。
下面举侈!)说明numtrailingones, numcoeff, TotalZeros, level[j], run(j]的含 义如附图7所示为一个4x4块的16个残差系数这里numtramngones=3, numcoeff=6, TotalZeros=10, level[j], run[j]的值已经在图中注明。其中的符号 i表示4x4子块中残差系数的序号,level[j], run[j]中的符号j表示非零系数 level[j]和零行程run[j]的序号。
下面参考图5说明对一个片数据中的一个宏块进行CABAC解码的流程
步骤l:对上下文模型和概率区间进行初始化;CABAC是自适应的二进制 算术编码,所以无论是在解码还是编码时对它的上下文模型和概率区间都必须 先进行初始化,才能保证解码时和编码时使用的是相同的上下文模型和概率区 间;
步骤2:开始对残差系数以外其他语法元素,如mb—type,sub—mb—type,运动 向量mvd一10,mvd—11等解码,并求解残差解码中要用到的宏块参数,由于这一部 分需要占用较多地硬件资源,所以这里采用软件的方式完成;
步骤3:下面对一个残差宏块进行解码; 一个宏块包含一个16x16的亮度块 和两个8x8的色度块Cb和Cr,此处和CAVLC的解码顺序一样,仍然按照先亮 度后色度的顺序对宏块进行解码;
步骤4:以4x4块或者8x8块为基本单位对亮度进行解码。如果有直流系数, 先对亮度直流系数进行解码, 一共16个亮度dc系数;然后以4x4块为基本单 位,对剩余的亮度交流系数进行解码,共16个4x4交流系数块;如果只有交流 系数,直接以4x4块或者8x8块为基本单位对交流系数进行解码。这样就完成 了亮度块的解码过程;
步骤5:按照先DC系数后AC系数先Cb后Cr块的顺序对两个色度块Cb 和Cr块进行解码,先解Cb和Cr块的DC系数,然后再解Cb和Cr块的AC系 数,每个8x8色度块一共得到4个DC系数和60个AC系数;
步骤6:继续解下一个宏块。
下面参考图6以解一个4x4残差数据块为例来说明CABAC的解码过程
步骤601:根据标志coded—block—flag的值决定是否需要对该4x4块进行解 码。如果coded_block—flag=0,表示该4x4块中系数全为零,所以不必进行解码, 当coded—block—flag=l时进行下一步;
步骤602:计算4x4块中非零系数的幅值coeffLevel[i],从低频到高频的顺 序,以i表示系数的标号;
步骤603:计算非零系数的coefflLevel[i]的绝对值abs (coeffLevel[i]);
步骤604:计算非零系数的符号sign;
步骤605 606:由上面的得到的非零系数的符号决定非零系数的值;
步骤607:根据已有的残差系数的大小和位置信息,加上符号信息,对4x4 块的16个残差系数进行恢复,得到4x4块的16个残差系数的值;
本发明所说的软件方式,是指利用嵌入式cpu代替硬件电路进行运算的方 式,而不是单纯的指用计算机软件实现熵解码中的某些计算功能。
本发明所用的实例只是用来对上述解码器中所支持的解码功能的一种解释 说明,并不代表本发明所要保护的范围仅限于此,凡采用本发明中所提及的方 法和结构,或者采用对某些部分相同功能的替代方案,均在本发明所要求的保 护范围,从事本行业的技术人员对此应予理解。
权利要求
1、基于H.264的熵解码器的实现方法,其特征在于该方法采用了软硬件协同工作,将解码过程中占用大量资源的部分改用软件程序方法实现,包括如下步骤步骤1熵解码控制模块(6)根据熵编码模式标志选择解码方式即是对CAVLC编码码流进行解码还是对CABAC编码码流进行解码;步骤2根据步骤(1)选定的解码类型以片(slice)数据为单位对CAVLC或者CABAC编码码流进行解码;步骤3解码完成后,判断是否为CAVLC或者CABAC编码码流的最后一个片数据,若不是,返回步骤(2)继续对下一个片(Slice)的数据进行解码,否则,解码过程结束。
2、 根据权利要求1所述的基于H. 264的熵解码器的实现方法,其特征在于: 所述的将解码过程中占用大量资源的部分改用软件程序方法实现是指利用嵌入 式cpu代替硬件电路进行运算的方式,而不是单纯的指用计算机软件实现熵解 码中的某些计算功能。
3、 根据权利要求1所述的基于H. 264的熵解码器的实现方法,其特征在于: 该方法步骤(2)中所述的根据选定的解码类型以片数据为单位对CAVLC编码 码流进行解码,其中对CAVLC编码码流的解码还包括如下的具体步骤步骤2.1:熵解码控制模块(6)向软件模块(4)发出开始信号,开始求解 与解码有关的变量和参数;步骤2.2:软件模块(4)收到来自熵解码控制模块(6)的开始信号后,经 由ue/se/te解码单元(2)并最终通过BSI取数模块(1)得到所需的编码数据流, 经解码得到所需的宏块参数以及除残差系数以外的其他语法元素;步骤2.3:熵解码控制模块(6)收到软件模块(4)发出的结束信号后,向CAVLC残差解码模块(3)发出解残差开始信号;步骤2.4: CAVLC残差解码模块(3)收到熵解码控制模块(6)发来的开 始信号后开始残差解码,并通过BSI取数据模块(1)获得解码所需的编码数据, 得到亮度块和色度块的残差系数值;步骤2.5:判断解码的是否为片数据的最后一个宏块,如果不是,则返回到 步骤(2.1)继续解下一个宏块,否则解码结束。
4、 根据要求1所述的基于11.264的熵解码器的实现方法,其特征在于其 特征在于以片数据为单位对CAVLC编码码流进行解码是通过对组成片数据的每个宏块进行解码实现的,所述对单个宏块的解码包括如下的步骤 步骤l:由软件模块求解与宏块解码相关的变量和参数;步骤2:根据上述步骤(1)得到解码所需的当前宏块以及邻近宏块等解码 所需的参数后,按照先亮度块后色度块的顺序对宏块进行解码;步骤3:对亮度块进行解码;以4x4块为基本的解码单位,即每次对一个 4x4亮度块进行块解码,先对亮度块的直流(DC)系数进行解码,然后再对亮度块 的交流系数(AC)进行解码;步骤4:解码完亮度块后,对色度块进行解码;以4x4块为基本的解码单位,按照先Cb块后Cr块的顺序,先解码色度块的直流系数,再解码色度块的交流 系数;步骤5:重复上述步骤,继续解下一个宏块。
5、 根据权利要求1所述的基于H. 264的熵解码器的实现方法,其特征在于 该方法步骤(2)所述的根据选定的解码类型以片数据为单位对CABAC编码码 流进行解码,对CABAC编码码流的解码还包括如下的具体步骤步骤2.1':对CABAC解码所需的上下文模型进行初始化,并初始化概率区间;步骤2.2':熵解码控制模块(6)向软件模块(4)发出开始信号,开始对 除残差系数以外的其他语法元素、运动向量mvdJ0,mvd—11等解码,并求解残差 解码中用到的宏块参数;步骤2.3':软件模块(4)收到来自熵解码控制模块(6)的开始信号后, 经由二进制算术解码单元(5)并最终通过BSI取数模块(1)得到所需的编码 数据流,解码得到所需的宏块参数以及除残差系数以外的其他语法元素;步骤2.4':熵解码控制模块(6)向CABAC残差解码模块(7)发出解残 差开始信号;步骤2.5' : CABAC残差解码模块(7)收到熵解码控制模块(6)发来的 开始信号后开始残差解码,经由二进制算术解码单元(5)并最终通过BSI取数 模块(1)得到所需的编码数据流,解码得到亮度(luma)和色度(chroma)块 的残差系数值;步骤2.6':判断解码的宏块是否为片(slice)的最后一个宏块,如果不是, 则返回到步骤Q.r )继续解下一个宏块,否则解码结束。
6、根据权利要求1所述的基于H. 264的熵解码器的实现方法,其特征在于 所述的以片数据为单位对CABAC编码码流进行解码是通过对组成片数据的每 个宏块进行解码实现的,所述对单个宏块的解码包括如下的步骤步骤l:对上下文模型和概率区间进行初始化;步骤2:开始对残差系数以外其他语法元素进行解码,并通过采用软件方法 求解残差解码中要用到的宏块参数和其他参数;步骤3:按照先亮度后色度的顺序对残差宏块进行解码;步骤4:对亮度块的解码;以4x4块或者8x8块为基本单位,先对亮度直流系数进行解码,再对剩余的亮度交流系数进行解码,完成对亮度块的解码过程;步骤5:对色度块的解码;按照先Cb后Cr块的顺序以4x4块为单位对两个 色度块Cb和Cr块进行解码,先解Cb和Cr块的直流系数,然后再解Cb和O 块的交流系数;步骤6:重复上述步骤,继续解下一个宏块。
7、基于化264的熵解码器装置,该装置包括如下模块-BSI取数模块负责从外部取得解码所需的码流数据,当接收到其他模块的 取数请求时,返回相应长度的码流数据;ue/se/te解码单元接收软件模块发送来的解码请求并返回解码后的参数值;CAVLC残差解码模快以MX4块'为单位,根据软件模块解码得到的相应 参数,对亮度和色度的残差系数进行解码,解码完成后向熵解码控制模块发出 结束信号,解码出来的残差系数存入反扫描RAM;软件模块对残差解码需要的参数和变量进行解码,通过ue/se/te解码单 元求解与CAVLC相关的参数,通过二进制算术解码单元求解与CABAC相关的参 数,最终得到的参数再提供给CAVCL或CABAC残差解码模块使用;二进制算术解码单元在解码与宏块有关的参数时,当收到软件模块发送 来的解码请求,经解码返回得到的二进制结果;另外在进行CABAC残差解码的 时,当收到CABAC残差解码模快发送来的解码请求时,经解码返回得到的二进 制结果;熵解码控制模块控制整个解码流程,先控制软件模块求解相关的参数, 负责向CAVLC残差解码模块或者CABAC残差解码模块发出开始解码信号,当接 收到解码结束信号后,将解码得到的相应残差系数写入反扫描MM;CABAC残差解码模块以'4X4,块或者'8X8'块为单位,根据软件模块解 码得到的相应参数,对亮度和色度的残差系数进行解码,解码完成后向熵解码 控制模块发出结束信号,解码出来的残差系数存入反扫描RAM;反扫描RAM:存储经CAVLC残差解码模快或者CABAC残差解码模块解码得到 的残差系数。
全文摘要
本发明公开了一种专用于H.264解码MAE中对熵编码残差数据等进行解码的方法及装置,由于本发明所述方法采用了软硬件协同工作,将解码过程中占用大量资源的部分改用软件方法实现。所述的软件程序方法是指利用嵌入式cpu代替硬件电路进行运算的方式,使得熵解码器在保证获得可靠的解码效率和解码质量的前提下,大大降低了结构的复杂度和计算复杂度,从而有效的解决了结构和效率之间的矛盾,顺利的实现了对CAVLC和CABAC熵编码码流的解码,所述该熵解码装置包括BSI取数模块、ue/se/te解码单元、CAVLC残差解码模快、软件模块、二进制算术解码单元、熵解码控制模块、CABAC残差解码模块、反扫描RAM。
文档编号H04N7/26GK101198051SQ20061015741
公开日2008年6月11日 申请日期2006年12月7日 优先权日2006年12月7日
发明者何铁军, 汤加跃, 岭 石 申请人:深圳艾科创新微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1