首页> 中国专利> H.263视频编码的可变长编码方法和系统

H.263视频编码的可变长编码方法和系统

摘要

本发明涉及一种H.263视频编码的可变长编码方法,包括以下步骤:读取离散余弦变换和量化之后的数据;记录所述数据中非零系数的LEVEL值和RUN值,其中LEVEL值表示非零系数的非零值,RUN值表示当前非零系数前紧邻的连续零个数;以非零系数的LEVEL值查找第一索引表以获得所述LEVEL值对应的RUN值的取值范围;通过判断非零系数的LEVEL值和RUN值是否满足各自的取值范围来预先判断所述非零系数是否能够在可变长编码码表中查找到码字;以及如果能够在所述码表中查找到码字,则以所述LEVEL值为一级索引,所述RUN值为二级索引,在所述码表中找到所述码字。

著录项

  • 公开/公告号CN103188486A

    专利类型发明专利

  • 公开/公告日2013-07-03

    原文格式PDF

  • 申请/专利权人 联芯科技有限公司;

    申请/专利号CN201110447989.7

  • 发明设计人 于娜;孙皓;

    申请日2011-12-28

  • 分类号H04N7/26(20060101);H04N7/32(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人骆希聪

  • 地址 201206 上海市浦东新区明月路1258号

  • 入库时间 2024-02-19 19:02:27

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-10

    专利实施许可合同备案的生效 IPC(主分类):H04N19/13 合同备案号:2018990000159 让与人:联芯科技有限公司 受让人:上海立可芯半导体科技有限公司 发明名称:H.263视频编码的可变长编码方法和系统 申请公布日:20130703 授权公告日:20160420 许可种类:普通许可 备案日期:20180615 申请日:20111228

    专利实施许可合同备案的生效、变更及注销

  • 2016-04-20

    授权

    授权

  • 2013-07-31

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20111228

    实质审查的生效

  • 2013-07-03

    公开

    公开

说明书

技术领域

本发明涉及H.263视频编码,尤其是涉及H.263视频编码中的可变长编码 方法。

背景技术

H.263标准是一种用于低比特率视频业务中运动图像部分的压缩编码方 法。这种方法的基本思想是基于ITU-T(国际电信联盟远程通信标准化组织) 的H.261标准,把减少空间冗余的帧内预测和减少时间冗余的帧间预测结合起 来。编码器有运动补偿能力,并有一些功能、编码方法选项。与H.261协议相 比,H.263编码器能够占用更少的带宽资源,编码出对应H.261协议高带宽能 达到相同的视频质量。因此,目前被广泛应用于无线网络的视频通话以及手机 视频录制。

为进一步改善图像质量和提高压缩比,H.263标准与H.261标准相比增加 了一些功能,例如采用基于语法的算术编码在不损失信噪比和图像重建的前提 下,可以大量减少数据量。在未使能这一功能时,H.263标准采用的编码方式 为:可变长编码(VLC)。VLC的基本思想是对一组出现概率各不相同的信源 符号,采用不同长度的码字表示,对出现概率高的信源符号采用短码字,对出 现概率低的信源符号采用长码字;并且在VLC过程中,码字之间通常不会加 入任何分隔标识。在H.263标准中,对宏块类型、运动矢量预测差值、子宏块 编码模式以及DCT(离散余弦变换)变换系数的编码都是用VLC编码。其中, DCT变换系数的编码最为复杂,并且耗时最多。

H.263标准是以8×8块为单位进行DCT变换以及量化的,残差系数编码也 是以8×8块为单位。在编码残差系数之前,首先将量化后的数据按照某种特定 顺序进行扫描,再用(LAST、RUN、LEVEL)的组合表示一个扫描之后的非 零系数。其中,LAST标志当前的非零系数是否为最后一个非零系数(“0”表 示此块中仍有非零系数,“1”表示当前非零系数为此块中最后的非零系数), RUN表示当前非零系数前紧邻的连续零个数,LEVEL则表示系数的非零值。 因此,假设某个8×8块有N个非零系数,对应N个(LAST、RUN、LEVEL) 组合,编码残差系数就是在可变长编码码表中找到对应的码字依次表示这N个 组合。

在H.263标准中,常用的(LAST、RUN、LEVEL)组合有对应的码字表 示,编码时可以直接查表获知,剩余组合用固定结构的22比特编码,它由7 比特ESCAPE、1比特LAST、6比特RUN和8比特的LEVEL组成。

残差数据的VLC编码过程参见图1,具体说明如下:

步骤101为重排序。每个8×8块进行DCT以及量化之后,数据形式是二 维的8×8矩阵,重排序就是按照已知的扫描顺序,重新排列这64个数据,并 使之成为一维数据。

在步骤103依次扫描排列之后的64个数据,并记录第n个(n从“0”开 始计数)非零系数的RUN值和LEVEL值(步骤110)。

继续扫描,如果后面仍有第n+1个非零系数存在,则将第n个非零系数的 LAST标记为“0”,并根据LAST、RUN和LEVEL值判断,当前的非零系数 是否能够用H.263标准中的码表编码(步骤106)。对于在步骤105确定的第0 个非零系数,将跳过这一阶段。

如果当前的非零系数在已知码表中,再以LAST、RUN和LEVEL值为索 引,查找对应码字(步骤107),在步骤108确定找到对应的码字后,查找到 的码字即为当前非零系数对应码字,写入码流中(步骤109),否则编码成固 定结构的22比特码字写入码流中(步骤111);重复步骤103-111,直至64个 数据全部搜索完成。

当在步骤102判断当前块所有系数扫描完成后,如果在步骤112判断当前 块存在非零系数,则在步骤113编码最后的非零系数:先将LAST标记为“1”, 并根据LAST、RUN和LEVEL值判断,当前的非零系数是否能够用H.263标 准中的码表编码;如果在已知码表中,再以LAST、RUN和LEVEL值为索引, 查找对应码字写入码流中,否则编码成固定结构的22比特码字写入码流中。

在步骤114完成当前块编码。

现有技术在扫描过程中,遇见非零系数即马上查表编码。由于协议中 (RUN,LEVEL)码表并不整齐,完全对齐占用空间过大,折中方法是将原来 的一张不对齐的码表分割成四个整齐的码表,不整齐的地方补零。码表按照如 下方式设置:

如上所述,现有的编码技术多数是按照扫描顺序重排序,再依次判断所有 非零系数的(LAST、RUN、LEVEL)组合是否在码表中,如果在其中,则通 过三级索引找到对应码字,这种传统做法的缺陷包括:

1、传统码表中存在数量较多的无效码字,占用不必要的数据空间;

2、传统码表中以RUN值和LEVEL值为二维坐标,而由于无效码字的存 在,进一步导致判断(LAST、RUN、LEVEL)组合是否在码表中的过程存在 冗余,耗费更多时间。

具体地说,常用算法是先判断RUN值是否在范围之内,LEVEL值是否在 范围之内,再根据RUN和LEVEL组合索引查找码表。但是经过这些判断后, 如果码表中的码字长度为“0”,仍表示当前的非零系数不能通过查表的方法 获取码字,同样需要编码成固定结构的22比特码字。也就是说,某些非零系 数即使是不能通过查表方式得到最终码字,也需要两步判断才能确定。虽然有 些优化方法通过将码表分级来减少二次判断,但是在RUN值相对较大的情况 下,仍然存在这样的问题;

3、重排序过程,相当于已经对所有数据进行了一次扫描,但是扫描顺序 与所需不一致;现有技术在二次扫描时,没有充分利用已经的扫描结果,造成 了CPU资源浪费,影响编码效率。

发明内容

本发明所要解决的技术问题是提供一种H.263视频编码的可变长编码方 法,以减少编码过程耗费的时间。

本发明为解决上述技术问题而采用的技术方案是提出一种H.263视频编码 的可变长编码方法,包括以下步骤:

1)读取离散余弦变换和量化之后的数据;

2)记录所述数据中非零系数的LEVEL值和RUN值,其中LEVEL值表示 非零系数的非零值,RUN值表示当前非零系数前紧邻的连续零个数;

3)以非零系数的LEVEL值查找第一索引表以获得所述LEVEL值对应的 RUN值的取值范围;

4)通过判断非零系数的LEVEL值和RUN值是否满足各自的取值范围来预 先判断所述非零系数是否能够在可变长编码码表中查找到码字;以及

5)如果能够在所述码表中查找到码字,则以所述LEVEL值为一级索引, 所述RUN值为二级索引,在所述码表中找到所述码字。

在本发明的一实施例中,上述方法还包括步骤6):如果不能够在所述码表 中查找到码字,则将非零系数编码成固定结构的22比特码字。

在本发明的一实施例中,直接按照扫描顺序读取所述离散余弦变换和量化 之后的数据。

在本发明的一实施例中,重复所述步骤2),直至记录所述数据中所有非零 系数的LEVEL值和RUN值。

在本发明的一实施例中,在记录所述数据中所有非零系数的LEVEL值和 RUN值后,开始执行所述步骤3)。

在本发明的一实施例中,每记录所述数据中的一个非零系数的LEVEL值 和RUN值,则执行所述步骤3)。

在本发明的一实施例中,重复所述步骤3)-6),直至所有的非零系数编码完 成。

在本发明的一实施例中,所述码表是非对齐的。

在本发明的一实施例中,所述码表没有冗余码字。

在本发明的一实施例中,在所述码表中,以非零系数的LEVEL值为一级索 引,RUN值为二级索引,每个LEVEL值对应一个或多个RUN值。

在本发明的一实施例中,所述码表根据非零系数的LAST值分为两个部分, 其中LAST值标志当前的非零系数是否为最后一个非零系数。

在本发明的一实施例中,以所述LEVEL值为一级索引,所述RUN值为二 级索引,在所述码表中找到所述码字的步骤包括:以所述LEVEL值查找第二 索引表以获得所述码字在所述码表中的起始偏移地址;以及基于所述起始偏移 地址并以所述RUN值为附加偏移地址,在所述码表中找到所述码字。

在本发明的一实施例中,所述第一索引表包括以非零系数的LEVEL值为索 引的RUN值的取值范围。

在本发明的一实施例中,所述第二索引表包括以非零系数的LEVEL值为索 引的码字在所述码表中的起始偏移地址。

本发明另一种H.263视频编码的可变长编码系统,包括:用于读取离散余 弦变换和量化之后的数据的装置;用于记录所述数据中非零系数的LEVEL值 和RUN值的装置,其中LEVEL值表示非零系数的非零值,RUN值表示当前 非零系数前紧邻的连续零个数;用于以非零系数的LEVEL值查找第一索引表 以获得所述LEVEL值对应的RUN值的取值范围的装置;用于通过判断非零系 数的LEVEL值和RUN值是否满足各自的取值范围来预先判断所述非零系数是 否能够在可变长编码码表中查找到码字的装置;用于如果能够在所述码表中查 找到码字,则以所述LEVEL值为一级索引,所述RUN值为二级索引,在所述 码表中找到所述码字的装置。

在本发明的一实施例中,上述装置还包括:用于如果不能够在所述码表中 查找到码字,则将非零系数编码成固定结构的22比特码字的装置。

与现有技术中在确定LAST值之后,以RUN和LEVEL为索引查找二维码 表,根据查表结果确定当前非零系数编码是否已经完成的方式相比,本发明的 可变长编码方法在编码之前能够准确判断当前非零系数组合是否击中码表,可 以依据判断结果直接在新的码表中查找码字,因此可以减少查表时间。

附图说明

为让本发明的上述目的、特征和优点能更明显易懂,以下结合附图对本发 明的具体实施方式作详细说明,其中:

图1示出现有的可变长编码流程图。

图2示出本发明一实施例的可变长编码流程图。

图3示出本发明一实施例的可变长编码的详细过程。

图4示出本发明另一实施例的可变长编码的详细过程。

具体实施方式

本发明的实施例描述能够减少时间耗费的H.263视频编码中的可变长编码 方法。根据本发明的实施例,在编码流程中的查表过程中,能够在查找可变长 编码(VLC)码表之前通过判断当前非零系数组合中LEVEL和RUN的范围来 事先判断这一组合是否能击中VLC码表,而避免以RUN和LEVEL为索引进 行查表来确定是否击中VLC码表。

为此,先描述对现有VLC码表及索引方法所进行的调整。根据本发明的 实施例,码表是以LEVEL为第一级索引,RUN为第二级索引来编排和查找码 表,每个LEVEL值对应一个或多个RUN值。值得注意的是,经过重新编排后, 并不是以LEVEL和RUN作为二维坐标来查找码表,而是以LEVEL先确定一 个初始的地址偏移,再加上RUN值来查找码表。由于不需要使用二维坐标, 码表不需要对齐,冗余码字就没有存在的必要。因此本发明的实施例可以删除 现有码表中冗余部分,使码表中能够查询到的码字都是有效码字。可以理解的 是,码表中在一组码字之后的冗余码字是否存在对本发明的实施并没有影响, 但删除冗余码字将可以获得节省存储空间的额外效果。

一个示例性的VLC码表如下所示:

如上述码表所示,以一个LEVEL值,例如LEVEL=1和对应的一个或多个 RUN值,例如RUN=0-26下的多个码字作为一组码字。不同LEVEL值所对应 的多组码字构成整个码表。在此,仍然以LAST=0和LAST=1来划分码表。每 一组码字都有一个初始偏移地址,通过以LEVEL查询一索引表可以获得这一 初始偏移地址。有利的是,当LEVEL值确定时,RUN的取值是从0开始的整 数,因此可以通过LEVEL查询另一个索引表得到RUN的最大允许值,并和当 前RUN值比较来事先判断是否可以用当前非零系数的LEVEL和RUN的组合 来击中码表,而避免直接进行查找码表的尝试。

为此本发明的实施例还增加了两张新的索引表。其中之一称为第一索引 表,表中以LEVEL值为索引,可以直接索引到H.263标准中某个LEVEL值对 应的RUN值的范围,也就是对应的最大允许RUN值。第一索引表的示例如下 所示:

以LEVEL=2为例,由前述的码表可知,level=2,run=0-10。因此以LEVEL=2 查找第一索引表将得到最大允许RUN值小于11。

参照协议,能够击中码表的LEVEL绝对值的最大值为12,因此编码一个 非零系数之前,只需判断LEVEL和RUN是否满足条件(level_abs<13&& RUN<H263ENC_maxRunP1[level_abs])即可确定这一组合是否击中码表,否则 即为未击中情况,要做另外处理。

另一张表称为第二索引表,在确定击中码表之后使用,用来计算所查码表 的偏移地址。也就是在H263ENC_coeff_tab[]中的偏移。第二索引表分为两个部 分,第一部分是前13个元素,在LAST为“0”(表示当前非零系数不是最后 一个非零系数)时使用,偏移的起始地址为码表数组H263ENC_coeff_tab[]的首 地址;第二部分是后4个元素,在LAST为“1”(表示当前非零系数是最后 一个非零系数)时使用,偏移的起始地址为码表数组中H263ENC_coeff_tab[58] 元素的地址。第二码表的示例如下所示:

因此,对于某个非零系数的(RUN,LEVEL)组合,可以仅进行一次判断 确定是否可以直接查询新的码表进行编码。

基于上述重新编排的码表和索引表,提出本发明一实施例的可变长编码方 法如图2所示,流程描述如下。

首先在步骤201,读取离散余弦变换和量化之后的数据。

在本发明的一实施例中,在编码前可以不再对数据重排序,而是直接按照 扫描顺序读取数据。相比传统的对所有系数按照扫描顺序重排序,然后再进行 全扫描的方式,这一实施例的方式可以省略一次存取过程。

在步骤202,记录数据中非零系数的LEVEL值和RUN值,其中LEVEL 值表示非零系数的非零值,RUN值表示当前非零系数前紧邻的连续零个数。

在步骤203,以上述非零系数的LEVEL值查找第一索引表以获得LEVEL 值对应的RUN值的取值范围。

以前文示例的第一索引表为例,以LEVEL值(例如LEVEL=2)查找第一 索引表将得到最大允许RUN值(RUN值小于11),因此RUN值范围是0-10。

在获得RUN值的取值范围后,将可在步骤204通过判断非零系数的LEVEL 值和RUN值是否满足各自的取值范围,来预先判断非零系数是否能够在VLC 码表中查找到码字。

根据协议,能够击中码表的LEVEL绝对值的最大值为12。因此只有满足 LEVEL值小于13,且RUN值小于11(假设此时LEVEL=2)才能击中码表, 即在码表中查找到码字。这一预先判断具有很大的便利,它不必等到实际检索 码表时才能确定是否能查找到码字,因而可以省去对码表的检索步骤,节省查 找时间。

如果在步骤204判断能够在所述码表中查找到码字,则进入步骤205,以 LEVEL值为一级索引,RUN值为二级索引,在码表中找到码字;反之如果在 步骤204判断不能够在所述码表中查找到码字,则进入步骤206,将非零系数 编码成固定结构的22比特码字,因此完成了VLC编码。

根据如前文描述的实施例,VLC码表以LEVEL先确定一个初始的地址偏移, 再加上RUN值来进行查找。因此查表的步骤为,先以LEVEL值查找第二索引 表以获得码字在所述码表中的起始偏移地址,然后基于这一起始偏移地址并以 RUN值为附加偏移地址,在码表中找到所述码字。

图3示出本发明一实施例的可变长编码的详细过程。在图3中的流程中, 分为数据读取过程和编码过程。在读取过程中,不再对数据重排序,而是直接 按照扫描顺序读取,并记录非零系数。

具体地说,在步骤301-304进行数据读取。在步骤302,按照扫描顺序, 直接从离散余弦变换、量化之后的数据中读取系数,如果在步骤303确定读取 到的系数为非零系数,那么在步骤304记录这个系数对应的RUN值和LEVEL 值,直至在步骤301确定64个数据全部扫描完。在此过程中,同时在步骤304 统计当前块非零系数的数量。

在步骤305-311进行数据编码。在步骤305,如果当前块中存在非零系数 (假设为N个),则开始编码。在步骤306,读取非零系数的读取非零系数的 RUN值和LEVEL值。

在此,由于只有最后一个非零系数的LAST值为“1”,其余都为“0”, 因此,编码时前面N-1个系数时直接对应LAST为“0”的表格,最后一个系 数则对应LAST为“1”的表格。也就是说LAST值为“0”时待搜索范围是码 表中[0~57]索引范围,LAST值为“1”时待搜索范围是新码表中[58~101]索引 范围。

在步骤307,根据LEVEL值在第一索引表中查找RUN值的取值范围。

在步骤308,判断获取的(RUN,LEVEL)组合是否可以在码表中直接索 引到码字。判断的方法是判断非零系数的LEVEL值和RUN值是否满足各自的 取值范围,如果结果为是,则在步骤309查找码表并直接输出码字,否则在步 骤310编码成固定结构的22比特码字。

循环步骤305-310,直至所有的非零系数编码完成(步骤311)。

在上述实施例中,是在扫描了所有非零系数后,再编码所有系数。这一实 施例的优点是不需确定后面是否有非零系数后,才能编码某个非零系数,从而 提高编码效率。

但是在本发明的另一实施例中,仍然可以使用传统方法中每扫描一个系 数,判断是否为非零系数;如果是,先记录下来,在扫描到下一个非零系数时, 编码前一个非零系数的方式。如图4所示的包含步骤401-411的流程中采用了 传统的方式,在步骤403中找到非零系数后,从步骤405开始对前一非零系数 进行编码。步骤405-409与图3所示步骤306-310相似。在步骤410和步骤410 对最后一个非零系数进行编码。除了使用的Last=1的码表外,其余步骤与步骤 405-409相似。

本发明实施例所描述的H.263视频编码器的可变长编码方法与现有技术 相比具有以下优势:

1、现有技术在编码残差系数时,首先对所有系数按照扫描顺序重排序, 然后再进行全扫描,相当于对所有的残差数据多进行了一次存取过程。本发明 的实施例可以将上述两个过程合并成一个步骤完成,直接按照扫描顺序从残差 数据中读取待编码数据,并在此过程中统计出非零系数个数,以及每个非零系 数所对应的(LAST、RUN、LEVEL)组合。在编码时,只扫描这些包含RUN 信息的非零系数,再结合新设计的码表和辅助的索引表,一次判断是否命中码 表,简化编码流程。

2、现有技术中,在确定LAST值之后,二维码表是以RUN和LEVEL为 索引,还需要根据查表结果确定当前非零系数编码是否已经完成。因此,对于 某些未击中码表的非零系数而言,要经过二次判断才能确定编码方式。本发明 的实施例在编码之前能够准确判断当前非零系数组合是否击中码表,可以依据 判断结果直接在新的码表中查找码字,或是编码固定结构的22比特码字,因 此可以减少查表时间。

3、现有技术中,无论是一张涵盖所有RUN值和LEVEL值的码表,还是 按照RUN值分拆成几张码表的算法,在码表中都会有冗余码字。本发明的实 施例重新排列之后的码表,可以完全删除多余码字,有效节约了存储空间。

虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本 领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善, 因此本发明的保护范围当以权利要求书所界定的为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号