熵解码和变换流水线阶段的联合处理方法 |
|||||||
申请号 | CN200610089143.X | 申请日 | 2006-08-07 | 公开(公告)号 | CN100466742C | 公开(公告)日 | 2009-03-04 |
申请人 | 清华大学; | 发明人 | 何芸; 李宇; 瞿艳梅; | ||||
摘要 | 本 发明 涉及熵解码和变换流 水 线阶段的联合处理方法,属于 信号 处理中的视频和图像编解码技术领域,该方法包括如下的步骤:在变换的流水线阶段,完成某一个处理单元的熵解码系数的变换后,将该熵解码系数缓存区并行清零;与此同时,熵解码流水线阶段从视频码流中解码出下一个处理单元的非零系数,再写入已并行清零的熵解码系数缓存区。本发明将熵解码和变换的两个流水线阶段联合考虑,在变换的流水线阶段,对熵解码的解码缓存进行并行清零,大大减少熵解码流水线阶段所需的时钟周期数,从而增大了整个流水线结构的吞吐量。 | ||||||
权利要求 | 1、一种熵解码和变换流水线阶段的联合处理方法,其特征在于,该方法包括如下的 步骤: |
||||||
说明书全文 | 技术领域本发明属于信号处理中的视频和图像编解码技术领域,特别涉及在编码解码过程中熵 解码流水线阶段和变换流水线阶段的联合处理方法 背景技术在视频编解码器的设计中,一般采用多级流水线来完成视频码流的处理。处理的单元 可以是宏块(16 x 16的象素块),也可以是子块(如8 x 8或4 x 4的象素块)。例如,在H.264/AVC 中,由于单个流水线的复杂度增加,解码器需要分为更多的流水线阶段。在一个典型的解 码器结构,一般可以分为五个流水线阶段,包括:流水线阶段零:基于上下文的熵解码 (CAVLC);流水线阶段一:整型逆变换IIT(Inverse Integer Transform)/读参考帧数 据(Read_Ref);流水线阶段二:插值和运动补偿;流水线阶段三:去块效应滤波 (Deblocking),流水线阶段四:数据回写(WB)。在同一个时间段内,各个流水线阶段对 不同的宏块进行解码,以提高解码的并行性。如图1所示,在T4时间段内,五个流水线 阶段分别对宏块MB0,宏块MB1,宏块MB2,宏块MB3,宏块MB4进行并行解码。 在多级流水线划分时,各个段流水线所需的始终周期数应该平衡,这样才能使整个多 级流水线的吞吐量增大。 在传统的实现技术中,CAVLD熵解码从视频码流中解码出非零系数的(run,level), 其中run为零系数的游程,level为非零系数的值。根据扫描表,将各个系数依次输出到 熵解码缓存中,其中在扫描表顺序上相邻的非零系数之间输出零的个数由run来决定。这 导致,虽然非零系数很少,但是仍然需要N x N个时钟周期数来完成熵解码(其中N x N为变 换块大小)。对于16 x 16的宏块,需要的时钟周期数为384。 在对熵解码后的系数进行变换时,因为快速算法和并行计算,可以在较少的始终周期 内完成。例如在H.264或AVS中,对于8 x 8变换,可以在16个始终周期内完成;对于4x4 可以在4个始终周期内完成。解码一个16 x 16的宏块,可以在96个始终周期内完成。 因此,以传统的实现技术,在熵解码的流水线阶段和相邻的变换的流水线阶段所需的 时钟周期数不平衡,部分所需的始终周期数要大得多,从而制约整个多级流水线阶段的吞 吐量。 发明内容本发明的目的是为克服已有技术的不足之处,提出一种熵解码、变换流水线阶段的联 合处理方法,将熵解码和变换的两个流水线阶段联合考虑,在变换的流水线阶段,对熵解 码的解码缓存进行并行清零,大大减少熵解码流水线阶段所需的时钟周期数,从而增大了 整个流水线结构的吞吐量。 本发明提出的熵解码和变换流水线阶段的联合处理方法,包括如下的步骤: 在变换的流水线阶段,完成某一个处理单元的熵解码系数的变换后,将该熵解码系数 缓存区并行清零;与此同时,熵解码流水线阶段从视频码流中解码出下一个处理单元的非 零系数及游程,再根据该游程将该系数写入已并行清零的熵解码系数缓存区。 本发明的特点及效果: 本发明减少熵解码流水线阶段的时钟周期数,使各个流水线阶段所需的始终周期数平 衡,提高整个流水线的吞吐量。 一般来说,非零系数的个数都比较少。因此这样可以大大的减少VLD阶段的始终周期 数。 在熵解码流水线阶段输入变换系数前,在变换的流水线阶段将熵解码的变换系数缓存 清零(如果是寄存器阵列,采用同步复位清零,如果是存储器,通过并行写入进行清零)。 在熵解码流水线阶段,系数解码所需的时钟周期数减少为非零系数的个数。通过使各个流 水线阶段所需的始终周期数平衡,提高整个流水线的吞吐量。 附图说明 图1为H.264/AVC的解码器5级流水线结构示意图。 具体实施方式本发明提出的熵解码和变换流水线阶段的联合处理方法结合实施例详细说明如下: 本发明提出的熵解码和变换流水线阶段的联合处理方法,包括如下的步骤: 在变换的流水线阶段,完成某一个处理单元的熵解码系数的变换后,将该熵解码系数 缓存区并行清零;与此同时,熵解码流水线阶段从视频码流中解码出下一个处理单元的非 零系数,再写入已并行清零的熵解码系数缓存区。 本发明中的所涉及的熵解码和变换流水线阶段的划分及熵解码和熵解码系数的变换 具体处理方法均为常规的方法。 实施例1: 1)设置两个熵解码系数缓存区单元,该缓存区单元大小至少与处理单元的大小相同, 并对两个熵解码系数缓存区单元并行清零(如果是寄存器阵列,采用同步复位清零,如果 是存储器,通过并行写入进行清零); 2)在熵解码流水线阶段,从视频码流中解码出第一个处理单元的非零系数,根据从视 频码流中解码出的非零系数的(run,level)和扫描表,直接将非零系数存储到熵解码缓 存区第一个单元中的相应位置(而不需要在输出的过程中依次的插入零); 3)在变换的流水线阶段,完成熵解码缓存区第一个单元中的熵解码系数的变换后,将 该熵解码系数缓存区第一个单元并行清零;与此同时,熵解码流水线阶段从视频码流中解 码出第二个处理单元的非零系数,直接写入熵解码系数缓存区的第二个单元; 4)对后面的处理单元,重复步骤3)。 实施例2: 1)设置一个熵解码系数缓存区单元,该缓存区单元大小至少与处理单元的大小相同, 并对该熵解码系数缓存区单元并行清零。 2)在熵解码流水线阶段,从视频码流中解码出第一个处理单元的非零系数,根据从视 频码流中解码出的非零系数的(run,level)和扫描表,直接将非零系数存储到该熵解码 缓存区单元中的相应位置(而不需要在输出的过程中依次的插入零); 3)在变换的流水线阶段,完成该熵解码缓存区单元中的熵解码系数的变换后,将该熵 解码系数缓存区单元并行清零(如果是寄存器阵列,采用同步复位清零,如果是存储器, 通过并行写入进行清零); 4)对后面的处理单元,重复步骤2)—3)。 |