首页 / 专利库 / 电脑图像 / 运动矢量 / 一种视频解码装置和方法

一种视频解码装置和方法

阅读:51发布:2024-02-29

专利汇可以提供一种视频解码装置和方法专利检索,专利查询,专利分析的服务。并且本 发明 提出一种视频解码方法,所述视频解码方法包括 运动矢量 解码方法:A、判断进行解码的当前宏 块 是否是Intra宏块;如果当前宏块为Intra宏块,则停止解码,回到结束状态;否则执行步骤B;B、获取差分运动矢量以及相邻块信息,根据所述差分运动矢量以及相邻块信息对当前块运动矢量进行解码;C、在完成当前块运动矢量解码后,判断当前宏块是否已经解码完成,若是则进入结束态,否则将当前宏块中的下一个块作为当前块,并转至步骤B。本发明还提出一种视频解码装置。本发明方案灵活性较高且兼容性好,且同时又节省了需要的芯片面积。,下面是一种视频解码装置和方法专利的具体信息内容。

1.一种视频解码装置,其特征在于,所述视频解码装置包括运动矢量解码装置,所述运动矢量解码装置包括:状态控制器(302)、数据通路(303)、第一存储装置(305)、第二存储装置(306);
所述第一存储装置(305),用于保存相邻信息;
所述第二存储装置(306),用于保存参考运动矢量;
所述状态控制器(302),用于接收宏块控制字信息,根据所述宏块控制字信息判断当前宏块的类型,如果当前宏块为Intra宏块,则停止解码,回到结束状态;否则通知数据通路(303)接收差分运动矢量,并通知数据通路(303)进行解码;在数据通路(303)完成当前块解码后,判断当前宏块是否已经解码完成,若是则进入结束状态,否则控制数据通路(303)对当前宏块中的下一个块进行解码;
数据通路(303),用于在收到状态控制器(302)输出的进行解码通知后,接收差分运动矢量以及相邻块信息,根据所述差分运动矢量以及相邻块信息对当前块进行解码,输出运动矢量;
所述数据通路(303)包括:
Direct模式解码电路,用于在当前宏块的解码模式为Direct模式时,从第二存储装置(306)中读取预定数目的参考运动矢量,进行direct逻辑计算,得到当前块的运动矢量;
非Direct模式解码电路,用于在当前宏块的解码模式不是Direct模式时,接收当前块的差分运动矢量,以及从第一存储装置(305)读取当前块的邻域块运动矢量,对所述当前块的差分运动矢量以及邻域块运动矢量进行解码得到当前块运动矢量;
选择输出电路,用于选择所述Direct模式解码电路或非Direct模式解码电路得到的运动矢量,并将所选择的运动矢量输出;
所述非Direct模式解码电路包括:
输入寄存器(506),用于存储差分运动矢量和当前宏块已经解码的运动矢量;
TOP寄存器(504),用于存储当前宏块上方的邻域块的运动矢量;
临时寄存器(507),用于存储位于前一宏块的邻域块的运动矢量;
邻域选择及中值滤波器(510),用于根据当前块的位置,从TOP寄存器(504)、输入寄存器(506)或临时寄存器(507)中选择邻域块的运动矢量信息,对所选择的邻域块的运动矢量进行中值滤波,滤波后的结果作为预测运动矢量输出至加法器(511);
差分选择器(508),用于从输入寄存器(506)中获取差分运动矢量,并将所获取的差分运动矢量输出至加法器(511);
加法器(511),用于将来自邻域选择及中值滤波器(510)的预测运动矢量与来自差分选择器(508)的差分运动矢量相加,将相加所得结果作为运动矢量的解码结果输出;
色度处理电路(509),用于对亮度运动矢量采用预设的算法计算得到色度运动矢量。
2.根据权利要求1所述的装置,其特征在于,所述Direct模式解码电路包括:
direct读寄存器(501),用于从第二存储装置(306)中读取预定数目的参考运动矢量,并缓存所述参考运动矢量;
direct计算逻辑电路(502),用于在当前为B帧时,根据direct读寄存器(501)中缓存的参考运动矢量进行时间预测计算,得到当前帧的运动矢量,并将所述当前帧的运动矢量输出至direct写寄存器(503);
direct写寄存器(503),用于在自身被写满时,将自身存储的当前帧运动矢量存储到第二存储装置(306)中。
3.根据权利要求1所述的装置,其特征在于,所述选择输出电路包括:
第一多路选择器(512),用于接收来自direct计算逻辑电路(502)的运动矢量以及来自加法器(511)的运动矢量,在当前宏块的解码模式是direct模式时,将来自direct计算逻辑电路(502)的运动矢量输出至第二多路选择器(505),在当前宏块的解码模式不是direct模式时,将来自加法器(511)的运动矢量输出至第二多路选择器(505);
第二多路选择器(505),用于在当前块解码开始时,选择差分运动矢量输出至输入寄存器(506)中;接着选择来自第一多路选择器(512)的亮度运动矢量,并将其输出至输入寄存器(506)中覆盖原来的差分运动矢量;最后选择来自色度处理电路(509)的色度运动矢量,并将其输出至输入寄存器(506)中;
输出寄存器(513),用于接收并缓存来自输入寄存器(506)的亮度运动矢量和色度运动矢量,并将所缓存的亮度运动矢量和色度运动矢量输出。
4.根据权利要求1所述的装置,其特征在于,若输入寄存器(506)接收的差分运动矢量为非H.264标准的差分运动矢量,则按照顺序依次保存所述差分运动矢量;
若输入寄存器(506)接收的差分运动矢量为H.264标准的差分运动矢量,则按照固定格式保存所述差分运动矢量。
5.根据权利要求1所述的装置,其特征在于,所述邻域选择及中值滤波器(510)由3个三选一的多路选择器和2个比较器组成。
6.根据权利要求1所述的装置,其特征在于,所述TOP寄存器(504)包括两个寄存器组,每一组包括6个32位寄存器;每一个寄存器包括邻域块类型标志位,用于表示该寄存器中存储的运动矢量对应的邻域块与当前块是位于同一宏块或不同宏块。
7.根据权利要求1所述的装置,其特征在于,所述输入寄存器(506)包括32个32位的寄存器,每个寄存器的低4位用于存储作为参考帧唯一标识的参考帧索引,高28位用于存储差分运动矢量、亮度运动矢量或色度运动矢量。
8.根据权利要求1所述的装置,其特征在于,所述第一存储装置(305)由静态随机存储器实现。
9.根据权利要求1所述的装置,其特征在于,所述第二存储装置(306)由动态存储器实现。
10.一种视频解码方法,包括运动矢量解码方法,其特征在于,所述运动矢量解码方法由如权利要求1所述的视频解码装置实现,包括:
A、判断进行解码的当前宏块是否是Intra宏块;如果当前宏块为Intra宏块,则停止解码,回到结束状态;否则执行步骤B;
B、判断当前宏块的解码模式是否为Direct模式,若是,从第二存储装置(306)中读取预定数目的参考运动矢量,进行direct逻辑计算,得到当前块的运动矢量;否则,接收当前块的差分运动矢量,根据当前块的位置,从TOP寄存器(504)、输入寄存器(506)或临时寄存器(507)中选择邻域块的运动矢量,对所选择的邻域块进行中值滤波,滤波后的结果作为预测运动矢量,对所述当前块的差分运动矢量以及预测运动矢量相加,将相加所得结果作为运动矢量的解码结果输出
C、在完成当前块运动矢量解码后,判断当前宏块是否已经解码完成,若是则进入结束状态,否则将当前宏块中的下一个块作为当前块,并转至步骤B。
11.根据权利要求10所述的方法,其特征在于,步骤B进一步包括:对当前块的亮度运动矢量采用预设的算法计算得到色度运动矢量。

说明书全文

一种视频解码装置和方法

技术领域

[0001] 本发明涉及视频解码技术,特别涉及一种视频解码装置和方法。

背景技术

[0002] 目前市面上存在的视频标准的种类非常多,如H.264,H.263,MPEG,RMVB,VC-1等,且每种标准均有自己的优缺点,因此在很长一段时间内,它们将长期共同存在于市场当中,因此全格式支持成为评价芯片的重要依据之一。
[0003] 当前市面上的视频解码器多由软件完成,且每一种格式都需要一个解码软件进行解码。软件解码的优点就是成本低,应用灵活。但是其缺点非常明显,就是无法流畅解码高清视频,很多解码器并不具备实际的高清解码能
[0004] 因此,用户迫切需要一种能够支持多种视频标准,并且可以流畅解码高清视频的解码技术。

发明内容

[0005] 本发明提供了一种视频解码装置,能够真正实现高清解码,且支持多种视频格式,实现全硬件解码。
[0006] 为达到上述目的,本发明的技术方案具体是这样实现的:
[0007] 一种视频解码装置,其特征在于,所述视频解码装置包括运动矢量解码装置,所述运动矢量解码装置包括:状态控制器(302)、数据通路(303);
[0008] 所述状态控制器(302),用于接收宏控制字信息,根据所述宏块控制字信息判断当前宏块的类型,如果当前宏块为Intra宏块,则停止解码,回到结束状态;否则通知数据通路(303)接收差分运动矢量,并通知数据通路(303)进行解码;在数据通路(303)完成当前块解码后,判断当前宏块是否已经解码完成,若是则进入结束态,否则控制数据通路(303)对当前宏块中的下一个块进行解码;
[0009] 数据通路(303),用于在收到状态控制器(302)输出的进行解码通知后,接收差分运动矢量以及相邻块信息,根据所述差分运动矢量以及相邻块信息对当前块进行解码,输出运动矢量。
[0010] 较佳地,所述数据通路(303)包括:
[0011] Direct模式解码电路,用于在当前宏块的解码模式为Direct模式时,从第二存储装置(306)中读取预定数目的参考运动矢量,进行direct逻辑计算,得到当前块的运动矢量;
[0012] 非Direct模式解码电路,用于在当前宏块的解码模式不是Direct模式时,接收当前块的差分运动矢量,以及从第一存储装置(305)读取当前块的邻域块运动矢量,对所述当前块的差分运动矢量以及邻域块运动矢量进行解码得到当前块运动矢量;
[0013] 选择输出电路,用于选择所述Direct模式解码电路或非Direct模式解码电路得到的运动矢量,并将所选择的运动矢量输出。
[0014] 较佳地,其特征在于,所述Direct模式解码电路包括:
[0015] direct读寄存器(501),用于从第二存储装置(306)中读取预定数目的参考运动矢量,并缓存所述参考运动矢量;
[0016] direct计算逻辑电路(502),用于在当前为B帧时,根据direct读寄存器(501)中缓存的参考运动矢量进行时间预测计算,得到当前块的运动矢量,并将所述当前块的运动矢量输出至direct写寄存器(503);
[0017] direct写寄存器(503),用于在自身被写满时,将自身存储的当前块运动矢量存储到第二存储装置(306)中。
[0018] 较佳地,所述非Direct模式解码电路包括:
[0019] 输入寄存器(506),用于存储差分运动矢量和当前宏块已经解码的运动矢量;
[0020] TOP寄存器(504),用于存储当前宏块上方的邻域块的运动矢量;
[0021] 临时寄存器(507),用于存储位于前一宏块的邻域块的运动矢量;
[0022] 邻域选择及中值滤波器(510),用于根据当前块的位置,从TOP寄存器(504)、输入寄存器(506)或临时寄存器(507)中选择邻域块的运动矢量信息,对所选择的邻域块的运动矢量进行中值滤波,滤波后的结果作为预测运动矢量输出至加法器(511);
[0023] 差分选择器(508),用于从输入寄存器(506)中获取差分运动矢量,并将所获取的差分运动矢量输出至加法器(511);
[0024] 加法器(511),用于将来自邻域选择及中值滤波器(507)的预测运动矢量与来自差分选择器(508)的差分运动矢量相加,将相加所得结果作为运动矢量的解码结果输出;
[0025] 色度处理电路(509),用于对亮度运动矢量采用预设的算法计算得到色度运动矢量。
[0026] 较佳地,所述选择输出电路包括:
[0027] 多路选择器(512),用于接收来自direct计算逻辑电路(502)的运动矢量以及来自加法器(511)的运动矢量,在当前宏块的解码模式是direct模式时,将来自direct计算逻辑电路(502)的运动矢量输出至多路选择器(505),在当前宏块的解码模式不是direct模式时,将来自加法器(511)的运动矢量输出至多路选择器(505);
[0028] 多路选择器(505),用于在当前块解码开始时,选择差分运动矢量输出至输入寄存器(506)中;接着选择来自多路选择器(512)的亮度运动矢量,并将其输出至输入寄存器(506)中覆盖原来的差分运动矢量;最后选择来自色度处理电路(509)的色度运动矢量,并将其输出至输入寄存器(506)中;
[0029] 输出寄存器(513),用于接收并缓存来自输入寄存器(506)的亮度运动矢量和色度运动矢量,并将所缓存的亮度运动矢量和色度运动矢量输出。
[0030] 较佳地,若输入寄存器(506)接收的差分运动矢量为非H.264标准的差分运动矢量,则按照顺序依次保存所述差分运动矢量;
[0031] 若输入寄存器(506)接收的差分运动矢量为H.264标准的差分运动矢量,则按照固定格式保存所述差分运动矢量。
[0032] 较佳地,所述邻域选择及中值滤波器(510)由3个三选一的多路选择器和2个比较器组成。
[0033] 较佳地,所述TOP寄存器(504)包括两个寄存器组,每一组包括6个32位寄存器;每一个寄存器包括邻域块类型标志位,用于表示该寄存器中存储的运动矢量对应的邻域块与当前块是位于同一宏块或不同宏块。
[0034] 较佳地,所述输入寄存器(506)包括32个32位的寄存器,每个寄存器的低4位用于存储作为参考帧唯一标识的参考帧索引,高28位用于存储差分运动矢量、亮度运动矢量或色度运动矢量。
[0035] 较佳地,所述第一存储装置(305)由静态随机存储器实现。
[0036] 较佳地,所述第二存储装置(306)由动态存储器实现。
[0037] 本发明提供了一种视频解码方法,该方法具体如下:
[0038] 一种视频解码方法,包括运动矢量解码方法,其特征在于,所述运动矢量解码方法包括:
[0039] A、判断进行解码的当前宏块是否是Intra宏块;如果当前宏块为Intra宏块,则停止解码,回到结束状态;否则执行步骤B;
[0040] B、获取差分运动矢量以及相邻块信息,根据所述差分运动矢量以及相邻块信息对当前块运动矢量进行解码;
[0041] C、在完成当前块运动矢量解码后,判断当前宏块是否已经解码完成,若是则进入结束态,否则将当前宏块中的下一个块作为当前块,并转至步骤B。
[0042] 较佳地,步骤B包括:
[0043] 判断当前宏块的解码模式是否为Direct模式,若是,从第二存储装置(306)中读取预定数目的参考运动矢量,进行direct逻辑计算,得到当前块的运动矢量;否则,接收当前块的差分运动矢量,以及从第一存储装置(305)读取当前块的邻域块运动矢量,对所述当前块的差分运动矢量以及邻域块运动矢量进行解码得到当前块的亮度运动矢量。
[0044] 较佳地,步骤B所述获取相邻块信息包括:
[0045] 根据当前块的位置,从TOP寄存器(504)、输入寄存器(506)或临时寄存器(507)中选择邻域块的运动矢量,对所选择的邻域块进行中值滤波。
[0046] 较佳地,步骤B进一步包括:对当前块的亮度运动矢量采用预设的算法计算得到色度运动矢量。
[0047] 由上述的技术方案可见,本发明实施例提供的视频解码方法和装置,利用硬件电路对H.264和其它标准分别采用不同的解码算法,从而能够真正满足高清视频解码的要求,且同时又节省了需要的芯片面积,能够同时兼容多种视频标准及每种标准下多个档次的解码算法,灵活性较高且兼容性好,同时能够方便地添加对新视频标准的支持和对已有视频标准的删除。附图说明
[0048] 图1为现有技术中非H.264标准的宏块分区示意图;
[0049] 图2为现有技术中H.264标准的宏块分区示意图;
[0050] 图3a为本发明实施例中的运动矢量解码装置的组成结构示意图;
[0051] 图3b为本发明实施例中的视频解码装置的组成结构示意图。
[0052] 图4为本发明实施例中状态控制器的基本逻辑流程示意图。
[0053] 图5为本发明实施例中数据通路的原理结构框示意图。
[0054] 图6为本发明实施例中输入寄存器结构示意图。
[0055] 图7a为本发明实施例中H.264标准最小分区示意图。
[0056] 图7b为本发明实施例中H.264标准的输入寄存器和最小分区对应图。
[0057] 图7c为本发明实施例所给出示例的宏块分区示意图。
[0058] 图8为本发明实施例中的差分选择器508的示意图。
[0059] 图9为本发明实施例中当前块与邻域块的位置关系示意图。
[0060] 图10为本发明实施例中TOP寄存器的结构示意图。
[0061] 图11为本发明实施例中邻域选择及中值滤波器510的结构示意图。
[0062] 图12为本发明实施例中色度处理模块509的结构示意图。
[0063] 图13为本发明实施例中direct读寄存器501的结构示意图。
[0064] 图14为本发明实施例中时间direct模式运动矢量计算原理示意图。
[0065] 图15为本发明实施例中H.264标准下的Direct计算电路的原理示意图。
[0066] 图16为本发明实施例的运动矢量解码的时序图。

具体实施方式

[0067] 本发明针对现有技术中存在的问题,提供一个同时支持H.264,H.263,MPEG4,MPEG2,RV8,RV9,VC-1等多种标准的运动矢量的视频处理设备。为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
[0068] 首先,先介绍一下运动矢量解码的基本知识:
[0069] 视频解码是以宏块(MB)为单位进行的,一个MB的大小为16x16,单位为像素(pixel)。解码一帧图像时,按照从左到右,从上到下的顺序对各MB依次解码。运动矢量解码也是采用同样的顺序,但是在一个MB内则是按照块的顺序来依次解码的。一个MB可以分成多个块,至于如何分块,则是由码流中的语法元素定义的,图1和2给出了各种视频标准下可能的分区图。其中,图1为非H.264标准下,一个MB的分区方式示意图,此时,一个MB的分区可能为16x16或者8x8;特殊的,对于RV9标准,还可以包含16x8的分区方式(该分区方式为RV9标准特有);图2则为H.264标准下采用的MB分区方式示意图——即,一个MB可能分区为16x16、16x8、8x16和8x8四种形式,当分区为8x8时,每个子块(Sub-block)又可以继续划分为8x8、8x4、4x8或4x4的形式,因此该分区方式得到的分区结构称为树状结构。
[0070] 运动矢量解码依赖于宏块类型(MB_type),宏块类型定义了宏块的分区方式(MB_partition)和宏块的预测方式(pred_direction),虽然每种视频标准的定义并不完全相同,但是都可以归纳概括为以下四种方式:前向预测(forward)、后向预测(backward)、双向预测(bipred)和direct预测,其中direct预测方式仅仅存在于B帧中。帧是构成视频流的基本单位,在针对连续动态图像进行编码以压缩传输数据量时,将连续若干帧图像分成P、B、I三种类型。I帧是尽可能去除本帧内的图像空间冗余信息的帧内编码图像;P帧由在它前面的P帧或者I帧预测而来,它比较于它前面的P帧或者I帧之间的相同信息或数据,即考虑运动的特性进行帧间压缩得到的编码图像,也叫预测帧;B帧是既考虑源图像序列前面已编码帧,也顾及源图像序列后面已编码帧的信息进行帧间压缩得到的编码图像,也叫双向预测帧。为了便于说明,我们将前面三种方式称为普通模式解码,最后一种称为direct模式解码。
[0071] 普通模式的运动矢量包含两部分:差分运动矢量(MV_DIFF)和预测运动矢量(MVP)。其中,MV_DIFF来自于码流,可以从前级解码过程或码流处理电路中直接获取,而MVP则由本级解码过程或码流处理电路计算得到。
[0072] Direct模式的运动矢量是一种特殊的编码方法,它利用了帧间的时间相关性和空间相关性(空间相关性仅仅存在于H.264标准),从而可以节省码流,提高效率。同时,该模式下的运动矢量中不存在MV_DIFF,因此只需要计算MVP。
[0073] 在上述介绍的基础上,本发明实施例提供的运动矢量解码装置的组成结构如图3a所示,该运动矢量解码装置包含:状态控制器302、数据通路303、。状态控制器302用于根据宏块控制字信息生成解码过程需要的控制信号,通过所述控制信号控制数据通路303进行运动矢量的计算;数据通路303用于接受状态控制器302的控制,进行运动矢量的计算。
[0074] 其中,所述状态控制器302用于根据来自前级码流解析装置301的宏块控制字信息判断当前宏块的类型,如果为Intra宏块,则停止解码,回到结束状态;否则通知数据通路303接收差分运动矢量;并通知数据通路303进行解码;在数据通路303完成当前块解码后,判断当前宏块是否已经解码完成,若是则进入结束态,否则控制数据通路303对当前宏块中的下一个块进行解码;
[0075] 数据通路303用于在收到状态控制器302进行解码的通知后,接收来自码流解析装置301的差分运动矢量以及来自第一存储装置305的相邻块信息,根据所述差分运动矢量以及相邻块信息对当前块进行解码,解码结果输出至后级解码装置304。
[0076] 所述宏块控制字信息包括前文中提到的宏块类型,分区方式等。此外,所述运动矢量解码装置使用第一存储装置305和第二存储装置306来存储处理过程中的控制信号和数据。本发明实施例中,第一存储装置305由静态随机存储器(SRAM)实现,第二存储装置306由双倍速率同步动态随机存储器(DDR SDRAM)或其他类型的动态存储器实现。下面,先分别介绍状态控制器302和数据通路303。
[0077] 图3b为本发明实施例中视频解码装置的组成结构示意图。所述视频解码装置包括运动矢量解码装置。
[0078] 图4给出了状态控制器302的基本逻辑流程图,其对一个MB的解码流程如下:
[0079] 步骤401:判断当前宏块的类型,如果为Intra宏块,此时会停止解码,回到结束状态。否则需要进行后续解码过程,继续执行步骤402。
[0080] 步骤402:接收差分运动矢量(MV_DIFF)。其中差分运动矢量由前级的码流解析装置301发送过来。
[0081] 步骤403:差分运动矢量接收完毕后,读取待处理MB的邻域信息,读取第一存储装置305中存储的相邻块的信息。
[0082] 步骤404至405:以块(block)为单位进行解码,首先解码亮度块,然后进入步骤405解码色度块。如果该码流是H.264标准,由于H.264的色度和亮度MV信息一致,不需要执行步骤405。
[0083] 步骤406:当前块解码完成后,判断当前MB是否已经解码完成,若是,则结束对当前MB的解码,否则,转至步骤404开始解码当前MB的下一个块。
[0084] 一个MB可能包含多个块,因此该步骤实际上是判断当前块是否为当前MB的最后一个块,若是,则当前MB解码完成;否则就表示当前MB未完成解码,就需要重复亮度、色度的解码过程,直到整个宏块解码完成,进入结束态。
[0085] 图5给出了数据通路303的原理结构框图,主要包含:
[0086] Direct模式解码电路,用于在当前宏块的解码模式为Direct模式时,从第二存储装置306中读取预定数目的参考运动矢量,进行direct逻辑计算,得到当前块的运动矢量;
[0087] 非Direct模式解码电路,用于在当前宏块的解码模式不是Direct模式时,从前级的码流解析装置301接收当前块的差分运动矢量,以及从第一存储装置305读取当前块的邻域块运动矢量,对所述当前块的差分运动矢量以及邻域块运动矢量进行解码得到当前块运动矢量;
[0088] 选择输出电路,用于选择所述Direct模式解码电路或非Direct模式解码电路得到的运动矢量,并将所选择的运动矢量输出至后级解码装置304。
[0089] 其中,Direct模式解码电路包括:
[0090] direct读寄存器501,用于从第二存储装置306中读取预定数目的参考运动矢量,并缓存所述参考运动矢量;
[0091] direct计算逻辑电路502,用于在当前帧为B帧时,根据direct读寄存器501中缓存的参考运动矢量进行时间预测计算,得到当前帧的运动矢量,并将所述当前帧的运动矢量输出至direct写寄存器503;
[0092] direct写寄存器503,用于在自身被写满时,将自身存储的当前帧运动矢量存储到第二存储装置306中。
[0093] 所述非Direct模式解码电路包括:
[0094] 输入寄存器506,用于存储差分运动矢量和当前宏块已经解码的运动矢量;
[0095] TOP寄存器504,用于存储当前宏块上方的邻域块的运动矢量;
[0096] 临时寄存器507,用于存储位于前一宏块的邻域块的运动矢量;
[0097] 邻域选择及中值滤波器510,用于根据当前块的位置,从TOP寄存器504、输入寄存器506或临时寄存器507中选择邻域块的运动矢量信息,对所选择的邻域块的运动矢量进行中值滤波,滤波后的结果作为预测运动矢量输出至加法器511;
[0098] 差分选择器508,用于从输入寄存器506中获取差分运动矢量,并将所获取的差分运动矢量输出至加法器511;
[0099] 加法器511,用于将来自邻域选择及中值滤波器507的预测运动矢量与来自差分选择器508的差分运动矢量相加,将相加所得结果作为运动矢量的解码结果输出;
[0100] 色度处理电路509,用于对亮度运动矢量采用预设的算法计算得到色度运动矢量。
[0101] 所述选择输出电路包括:
[0102] 多路选择器512,用于接收来自direct计算逻辑电路502的运动矢量以及来自加法器511的运动矢量,在当前宏块的解码模式是direct模式时,将来自direct计算逻辑电路502的运动矢量输出至多路选择器505,在当前宏块的解码模式不是direct模式时,将来自加法器511的运动矢量输出至多路选择器505;
[0103] 多路选择器505,用于在当前块解码开始时,选择来自码流解析装置301的差分运动矢量输出至输入寄存器506中;接着选择来自多路选择器512的亮度运动矢量,并将其输出至输入寄存器506中覆盖原来的差分运动矢量;最后选择来自色度处理电路509的色度运动矢量,并将其输出至输入寄存器506中;
[0104] 输出寄存器513,用于接收并缓存来自输入寄存器506的亮度运动矢量或色度运动矢量,并将所缓存的亮度运动矢量或色度运动矢量输出至后级解码装置304中。
[0105] 以下对各个模块分别进行说明。
[0106] 输入寄存器506和差分选择器508
[0107] 输入寄存器506包含32个寄存器,每个寄存器为32位,一个寄存器的格式如图6所示,低4位用于存储参考帧索引(Ref_Idx),所述参考帧索引为参考帧的唯一标识。在H.264标准中,当前帧最多可能有16个参考帧。高28位为运动矢量数据,所述运动矢量数据包括差分运动矢量、亮度运动矢量以及色度运动矢量。输入寄存器506的功能有两个:
[0108] 1)存储差分运动矢量(MV_DIFF)
[0109] 一个宏块包含多少个差分运动矢量是跟宏块的分区及预测方式相关,对于非H.264标准,差分运动矢量的数目为[0,8],即最少为0个,最多为8个;对于H.264,由于存在4x4分区,因此其差分运动矢量数目为[0,32]个,即最少为0,最多为32个。对于非H.264标准,本发明实施例采用按照顺序依次保存MV_DIFF;而对于H.264,由于其MV_DIFF数目较多,如果采用顺序存储法,则会使后续的选择差分和选择邻域块的处理过程变得非常复杂。故为了简化整个电路的设计,本发明实施例对H.264采用按照固定格式来保存MV_DIFF。
[0110] 以下分别介绍这两种保存方法:
[0111] a、顺序存储法
[0112] 即按照当前宏块的MV_DIFF的个数,假设为N个,依次存储在输入寄存器506的第1、2…N个寄存器中。
[0113] b、固定格式存储法
[0114] 根据H.264标准定义,宏块的最小分区为4x4,那么一个宏块最多可能由16个大小为4x4的块组成。如图7a所示,一个MB分成了16个块,每个块的大小为4×4。如果每个4x4块的预测方式都为双向,那么需要32个MV_DIFF。为了方便后面的寻址,将这16个4x4块映射到32个寄存器中,映射方法如下:
[0115] 将图7a中的16个4x4块按照位置进行编号,分别为B0~B15(B0表示block0)。由于一个块可能包含两个差分运动矢量,因此需要区分前向/后向运动矢量,用后缀_Forward表示前向运动矢量,后缀_Backward表示后向运动矢量,前面加上块坐标,就可以准确的表示出哪个块的运动矢量了,如B0_Forward就表示B0块的前向运动矢量,其它依次类推。从图7b可以很清楚的看到这种映射关系,B0块的前向对应寄存器0,后向对应寄存器16(假设寄存器坐标从0-31),B1块的前向对应寄存器1,后向对应寄存器17,后面的依次类推。由于4x4是最小的分区模式,而实际应用中可能出现的分区组合则是千变万化的,但是不管是什么分区,它总会包含1个或者多个4x4分区,那么这个时候差分运动矢量的处理稍有变化,其处理方法包括:
[0116] 首先确定当前宏块的分区方式;
[0117] 确定每个子分区最左上的坐标位置(参考图7a的最小分区示意图);
[0118] 根据左上角分区坐标存储差分运动矢量。
[0119] 为了说明这种情况,现给出一个例子。假设有一种宏块的分区如图7c所示。粗线为真实的分区,从图中可以看到分区为:第一个8x8块为8x8分区,第二个8x8块分区为两个8x4,第三个8x8分区为两个4x8,第四个8x8分区为8x8,根据上面的规则,在确定宏块分区后,再确定每个子分区左上角的坐标,可以看到,第一个子分区对应B0,第二个子分区对应B4,第三个子分区对应B6,第四个自分区对应B8,第五个子分区对应B9,第六个子分区对应B12,此时可以根据图7b,将各自的差分运动矢量存储到相应的位置上。
[0120] 需要说明的是,对于同一个子分区,预测方式不同时,差分运动矢量存储的位置也不同,这点在图7b中已经明确指出了,当第一个子分区为前向预测时,其存储位置为0,为后向预测时,存储位置为16,如果为双向预测,则需要保存两个差分运动矢量,其中前向差分运动矢量存储在位置0,后向差分运动矢量存储在位置16。
[0121] 2)保存当前宏块已经解码的运动矢量
[0122] 运动矢量的解码是按照块顺序来依次解码的。每解完一个块,会得到1个或2个运动矢量(MV),在整个MB完成之前,需要将其缓存到输入寄存器506中,然后才能去解下一个块,直到当前MB全部解码完毕。保存MV的方法和保存MV_DIFF的方法是完全一致的,这里不再详述。
[0123] 此外,由于最终的解码结果为中值滤波器510得到的运动矢量的预测值和差分选择器508输出的差分值在加法器511相加而成,因此这两个值必须同时指向同一个块,否则会出现匹配错误。差分选择器508跟差分保存的方法相关:对于H.264采用固定格式的存储方法,因此取差分的时候只要按照固定的地址取即可;对于非H.264模式采用的顺序存储的方法,因此需要有一个计数器,每解完一个块,计数器值加1,即指向下一个块,直到当前宏块解码完毕,计数器清0,图8所示为这种差分选择器508的内部结构示意图。
[0124] T0P寄存器504/临时寄存器507/邻域选择及中值滤波器510
[0125] 首先说明一下什么是邻域块。根据标准定义,运动矢量解码需要用到邻域块的相关信息(即MV数据和块的类型),邻域块特指当前块的左边、上面,左上以及右上角的块。
[0126] TOP寄存器504包括两个寄存器组,第一组用于List0,第二组用于List1(仅用于H264),每一组包括6个32位的寄存器,作用是存储位于当前MB上方的邻域块的MV。TOP寄存器504的每一个寄存器的含义如图10所示。其中末位表示邻域块的类型,称为邻域块类型标志位。取值为1表示inter块,即邻域块与当前块位于不同MB;取值为0表示intra块,即邻域块与当前块位于同一MB。邻域块类型标志位位于末位仅是一种示例,也可以设置在寄存器的其他位置,例如设置在首位。临时存储器507,用于存储位于前一宏块的邻域块的MV,每个MB解码完成后更新一次。
[0127] 图9所示为当前块与邻域块的位置关系示意图,其中粗黑矩形框表示当前MB。从图9可以看出,由于当前块可能位于当前MB中的不同位置,因此其邻域块的位置也有多种可能。在图9-a中,邻域块B、C、D块均位于上一宏块行,由于上一宏块行是存储在第一存储装置305中,因此在解码之前需要读取该部分内容,将读取的内容存储在TOP寄存器504中;邻域块A位于前一个MB,因此只需要用临时寄存器507来存储它就可以了。在图9-b中,B、C、D均位于上一宏块行,因此需要读取第一存储装置305获取邻域块B、C、D,然后将读取的内容存储到TOP寄存器504中,而邻域块A刚好在当前MB内,所以可以直接从输入寄存器506中获取邻域块A的内容;图9-c,A、D均来自前一个MB,因此取自临时寄存器507,B,C位于当前MB内,从输入寄存器506中获取;图9-d,C是不可用的(因为所在的MB还没开始解码),A、B、D均在同一个MB内,因此从输入寄存器506中获取。
[0128] 邻域选择及中值滤波器510用于根据当前块的位置,从TOP寄存器504、输入寄存器506和临时寄存器507中选择邻域块。邻域选择及中值滤波器510的电路结构如图11所示,包括三个三选一的多路选择器MUX,以及两个比较器。
[0129] 由图9知,计算MVP时需要用到当前解码块的左边块、上面块和右上角块的MV值,而当前块的位置是随着解码过程中不断变动的,因此选择相邻块的依据主要是判断当前解码块的位置,但是无论当前解码块处于哪个位置,其相邻块的位置总是处于3种情况:(1)来自上面一个宏块行(2)来自当前宏块已经解码过的块(3)来自左边解码的宏块。它们分别对应着TOP寄存器504、输入寄存器506和临时寄存器507。具体选择哪个寄存器则需要根据当前解码块的位置和当前解码的标准(每个标准选择的依据也有些不同)才能作出判断。
[0130] 图11中的三个MUX从上到下依次为第一MUX、第二MUX和第三MUX。第一MUX根据第一控制条件从TOP寄存器504、输入寄存器506和临时寄存器507中读取一个邻域块输出,该输出在图11中标记为Medan_input_a,第二MUX和第三MUX分别根据各自的控制条件输出Medan_input_b和Medan_input_c。
[0131] 所述两个比较器构成中值滤波器,从三个输入信号Medan_input_a、Medan_input_b和Medan_input_c中找到数值处于中间的那个信号作为MVP输出。
[0132] 色度处理电路509
[0133] 色度处理电路509主要用来处理色度MV。一般而言,色度MV由亮度MV经过一定的计算而得到,算法由视频标准各自定义,每个标准定义的都不一样。其原理框图如图12所示,可以看出,色度处理电路509包含各种标准的色度计算电路,及公共计算单元和公共寄存器。其中公共计算单元主要是一些加法器/乘法器/除法器,因为这些逻辑单元相对独立,且所占面积比较大,故让所有的标准共用,从而大大节省了面积。公共寄存器也是为了节省面积而采取的措施。
[0134] 输出寄存器(Output Registers)513
[0135] 该寄存器的作用是为后级装置(如pred)提供数据缓冲作用,因为运动矢量解码装置主要是给运动补偿预测装置提供准确的MV,但是两个装置的处理速度可能存在着不匹配的情形,因此当运动矢量解码装置解码完一个宏块的时候,需要将这些MV缓存起来提供给运动补偿装置使用,直到这些MV都被用掉。输出寄存器513和输入寄存器506的结构定义是完全相同的。
[0136] direct读寄存器501、Direct计算逻辑电路502和direct写寄存器503组成了Direct模式解码模块。Direct模式是B帧下最为强大的一种编码方法,因为它不需要携带任何运动信息,它的运动信息均来自参考帧及周边相关宏块,故可以极大节省码流。
[0137] direct读寄存器501
[0138] 如前所述,解码B帧需要读取参考MV。由于参考MV数量很大,一般存储在片外的第二存储装置306里。因此需要从第二存储装置306中读取参考MV。由于作为第二存储装置306的动态随机存储器(DDR)一般是公共器件,不可能被视频解码模块永远占据,为了提高解码效率,每次读取一定数量的参考MV,寄存在direct读寄存器501中,以供解码使用。direct读寄存器501的大小应合理设置,太大会增大芯片面积,太小则会导致频繁读取DDR,本发明实施例中设置direct读寄存器501大小为16个32位寄存器,每次可以读取16个参考MV。
[0139] direct读寄存器501的高28位均用于存储MV数据,但是低4位的定义对于每个标准而言略微有些不同,如图13所示,除了H264以外,其它标准都不需要参考帧索引(Ref_Idx),这是由于只有H264才包含16个参考帧,而其它标准仅仅包含一个参考帧。另外VC-1不需要宏块分区信息(mb_partition),因为每次只会写一个参考MV,即一个宏块只会对应一个MV。
[0140] direct写寄存器503的结构定义跟direct读寄存器501完全一致。
[0141] 根据标准规定,一些帧会作为其它帧的参考帧,这些帧的MV需要被存储起来,因此电路中需要保存MV,最终参考MV会传输到外部的第二存储装置306中保存。为了提高保存的效率,规定如下:
[0142] 假设当前帧作参考帧(码流中有相应的语法元素来指明当前帧是否作参考帧),在当前块解码后,将解出来的MV存储到direct写寄存器503中,直到direct写寄存器503满;一旦direct写寄存器503满,则立即将direct写寄存器503中的数据写入第二存储装置306中去,同时Direct计算逻辑电路502处于等待状态,等待写过程的完成,才开始下一个块的解码。这里需要规定direct写寄存器503的大小,太大会消耗过多的面积,太小会导致频繁写DDR,本发明实施例中的direct写寄存器503包括16个32位寄存器,既兼顾了面积,又保持了效率。
[0143] Direct计算逻辑电路502
[0144] 每个标准定义的算法都不相同,这里以H264为例,H264包含两种direct模式,时间direct和空间direct。由于空间direct主要涉及邻域选择器507,前面已经有所介绍,这里介绍时间direct。图14给出了时间direct原理图。具体的计算公式如下:
[0145] tx=(16384+Abs(td/2))/td
[0146] DistScaleFactor=Clip3(-1024,1023,(tb*tx+32)>>6)
[0147] mvL0=(DistScaleFactor*mvCol+128)>>8
[0148] mvL1=mvL0-mvCol
[0149] tb、td一般由码流中的语法元素推理而得到,这里假定已经得到了tb、td的值。
[0150] 从图14中看到,direct模式有两个参考帧,R0和R1。R0叫前向参考帧,R1叫后项参考帧。图14中主要有2个重要的变量:td和tb。td的含义是R1到R0的距离,所述距离指R1帧和R0帧之间的时间间隔。tb为当前帧距离R0帧的时间间隔。公式中tx和DistScaleFactor是临时变量。
[0151] 从图14中可以看到,td为TOP寄存器504的第一组寄存器List1和第二组寄存器List0存储的参考帧之间的时间间隔,tb为当前帧和List0参考帧之间的时间间隔。图15给出td和tb的计算电路原理示意图。由图15可以看出,为了满足电路的时间特性,在计算逻辑中插入三级触发器,用于提高计算速度。另外,上面的乘法器和除法器为共用单元。
[0152] 图15所示的计算电路主要依据标准中定义的公式。计算过程分为三个阶段:
[0153] 第一阶段:计算tx。需要用一个除法器和一个加法器来计算出tx,其中加法器用来计算出16384+abs(td)的值,注意:abs的含义是取绝对值。由于这里逻辑延时比较大,所以使用一级触发器来保存tx。
[0154] 第二阶段:计算ScaleFactor。从公式可以看到,需要先计算tx×tb,因此需要一个乘法器和其它一些组合逻辑。经过clip电路后就得到了Scalefactor。同样由于中间逻辑较大,采用一级触发器保存Scalefactor。
[0155] 第三阶段:计算mvL0/mvL1。依据公式同样是做一个乘法。最后加上128即得到mvL0。mvL1只需要一个减法就可以得到。
[0156] 由于每一步之间都不会干扰,故乘法器、加法器单元均可以复用,从而节省了面积。
[0157] 多路选择器505主要目的用于在解码过程中选择不同的目标。图16为运动矢量解码的时序图,其中的开始解码信号(start_decode)、diffmv_pluse、差分mv接收完成信号(diffmv_rdy)、luma_mv_pluse、chroma_mv_pluse、end_decode均为来自状态控制器302的控制信号。解码过程可以分为三个过程,分别为接收差分运动矢量,亮度解码和色度解码。在接收差分运动矢量之前还有一个等待过程,等待过程主要是等前级的码流解析装置301完成解码。一旦解码开始(图16中start_decode信号电平为1),此时多路选择器505会选择来自码流解析装置301的差分运动矢量输出至输入寄存器506中。直到diffmv_rdy信号到来(该信号表示差分运动矢量接收完毕),然后开始亮度解码过程,等亮度运动矢量解完完成,多路选择器506又会选择解码出来的亮度运动矢量到输入寄存器506中(覆盖输入寄存器506中原来的差分运动矢量),最后解码色度运动矢量。同理,等色度运动矢量完成后,多路选择器505选择来自色度处理电路509的色度运动矢量写入到输入寄存器506中。此时整个解码过程完成,状态控制器302会产生一个end_decode信号,此时输入寄存器中已经保存了亮度mv和色度mv,同时当end_decode信号到来时,输入寄存器中的值还会送出到输出寄存器中,以供后级解码电路使用。
[0158] 多路选择器512用于接收来自direct计算逻辑电路502的运动矢量以及来自加法器511的运动矢量,在当前宏块的解码模式是direct模式时,将来自direct计算逻辑电路502的运动矢量输出至多路选择器505,在当前宏块的解码模式不是direct模式时,将来自加法器511的运动矢量输出至多路选择器505。
[0159] 由上述可见,本发明实施例提供的运动矢量解码装置,利用硬件电路对H.264和其它标准分别采用不同的解码算法,从而能够真正满足高清视频解码的要求,且同时又节省了需要的芯片面积,能够同时兼容多种视频标准及每种标准下多个档次的解码算法,灵活性较高且兼容性号,同时能够方便地添加对新视频标准的支持和对已有视频标准的删除。
[0160] 最后,需要指出,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈