视频码流判断图像边界及预读图像数据的解码方法和装置的制作方法

文档序号:7625484阅读:228来源:国知局
专利名称:视频码流判断图像边界及预读图像数据的解码方法和装置的制作方法
技术领域
本发明涉及视频压缩标准采用灵活宏块排序FMO和任意条带顺序ASO技术时的解码方法和装置,特别是如何判断图像边界以及如何预读码流的图像数据的解码方法和装置。
背景技术
条带(slice)结构是信源编码中的关键技术之一,广泛应用于许多视频压缩标准中,如AVS,H.264,MPEG2等。当信源编码中采用结构化条带(structured slice)技术时,可很好地适应网络通信中良好的差错控制和灵活操作的要求。在结构化条带技术中包含许多重要概念,如灵活宏块排序FMO(Flexible Macroblock Ordering)和任意条带顺序ASO(AbitrarySliice Order)等,但对解码工作而言,当采用FMO和ASO机制时,按条带在视频码流中的顺序解码不能保证一定对应按宏块光栅扫描顺序解码。
图像的编码方式在视频压缩标准中,图像是以宏块(macroblock)为单位进行编码的,宏块是16×16(像素)大小的正方形区域,以176×144大小的图像为例(如图1所示),该图像共包含99个宏块。图1中,宏块在一幅图像内的序号依图中箭头所示顺序递增,这种方式称按光栅扫描的顺序编号(0、1、…、98)。与编码过程对应,解码过程也以宏块为单位进行,解码后的宏块内容按图1所示次序放置以保证解码图像的正确。
视频码流的结构和组织在视频压缩标准(如AVS、H.264)中,原始的图像文件经过编码以后的二进制文件称为码流,码流中信息的基本组成单位是条带(slice),条带按图2所示的分层结构组织。在视频码流中,一幅图像的信息是由几个条带组成,每个条带包含条带头(slice header)和条带数据(slice data)两部分。
条带头包含了该条带内第一个宏块或所有宏块共有的信息,条带数据由整数个宏块构成(图3中以8个宏块为例),条带内宏块的放置有两种方式,分别如图3(a)和图3(b)所示。在图3(a)中,以宏块序号自然数递增的方式放置(k是条带内第一个宏块的序号);图3(b)中,条带内原先依自然数递增的宏块序号经过某种映射(MAP)操作后,条带内的宏块编号由k,k+1,……k+7变为i0,i1, ……i7,且i0,i1,……i7并不一定按1的步长递增,从而条带内的宏块放置不再具有任何规律,这种方式称为多条带群灵活宏块排序(FlexibleMacroblock Ordering)方式。
任意条带顺序技术(Arbitrary slice order)任意条带顺序技术(ASO)是指条带在码流中的放置顺序并不一定严格遵守条带的第一个宏块的序号单调递增的限制,也就是说编码器和解码器可以以任意的顺序发送和接受一幅图像的所有条带,如图4(a)所示,一幅图像内的宏块划分为条带#1,条带#2,条带#3三个不同的条带,图4(b)中采用ASO技术,图4(a)中的三个条带(视频码流)到达解码器的顺序为条带#2,条带#1,条带#3。
在采用多条带群灵活宏块排序FMO和任意条带顺序ASO技术时,如果仍采用从码流中顺序读条带并解码的方式不能保证解码宏块的序号是以光栅扫描顺序递增的,而若采用预先将一幅图像中所有的条带读出并暂存,结合预知的映射(MAP)关系以及条带头中的某些信息可实现按宏块光栅扫描顺序解码。在视频码流解码过程中,在一幅图像完全解码完毕之前,一幅图像所包含总的条带数是事先未知的,所以正确判断图像边界成为按宏块光栅扫描顺序解码工作的关键。
视频码流的信息单元条带单元和非条带单元在视频压缩标准中,视频码流由各种类型的信息单元所组成。信息单元可以分为两类一类是前面介绍的条带单元,包含了真正压缩的视频内容;另一类为非条带单元,包含了相关的其他附加信息。在信息单元的单元头中包含了信息单元类型的信息,因此只要解码信息单元的单元头就可判定该信息单元是条带单元还是非条带单元。
目前已公开的判断图像边界(下一幅图像开始)并解码一幅图像的方法的流程图如图5所示,包括以下步骤如下1)开始,初始化已解码宏块个数i=0;2)读一个视频码流的信息单元;3)解码该信息单元的单元头,若为条带单元则跳到步骤4),否则解码当前非条带单元的全部内容,返回步骤2);4)读出当前信息单元中的条带;
5)对已读出条带,解码该条带并累计解码宏块个数i,6)解码宏块个数i是否等于该图像所包含的总宏块数?如果此时i等于一幅图像所包含的总宏块数,则当前图像解码已经结束(即码流中接下来的信息属于下一幅图像),否则返回步骤2)。
上述判断图像边界及解码方法所应用的装置示意图如图6所示整个判断图像边界及解码装置由以下模块和单元组成1.信息单元单元头解码模块,解码信息单元的头信息;2.信息单元类型判别模块,若为条带单元,则读出该信息单元中的条带信息,否则解码该信息单元并继续读下一个信息单元;3.条带头解码模块,用来解码条带头;4.宏块解码模块,实现宏块解码;5.图像结束判别模块,用于判断当前图像是否结束,包括以下单元(1)解码宏块个数累加单元,累计已解码宏块的个数;(2)图像的总宏块数与已解码宏块数比较单元,若当前已解码的宏块数与图像的总宏块数相等则当前图像结束。
7.复原图像帧/场存储器,由于按条带在码流中的顺序解码条带,所以解码后的宏块要经过暂存后才能进行滤波等其他后处理;8.图像后处理模块,用于按照光栅扫描顺序进行的宏块滤波及图像缩放、增强等后续操作;9.图像显示和存储模块,用于图像的显示和存储。
这些现有技术的相关资料有1)ITU-T(国际电信联盟)的视频编码专家组VCEG(video coding experts group)和ISO/IEC(国际标准化组织)的运动图像专家组MPEG(moving picture expert group)共同组建的联合视频组(Joint Video Team)参考软件JM85版本。
从图6可看出,这种解码方法和装置按条带在码流中的顺序依次解码,也不预读图像数据。

发明内容
本发明提出一种在视频压缩标准中采用灵活宏块排序(FMO)和任意条带顺序(ASO)技术时判断图像边界及预读码流中一幅图像数据的解码方法和装置。实现此方法的关键是在顺序读码流中的条带信息时,如何判断当前条带是属于当前图像还是下一幅图像,并将读出的条带头和条带数据存放在不同的缓冲区中,记录预读条带在缓存中的位置。
多条带视频码流中判断图像边界及预读条带的解码方法描述如下本发明解码方法的流程图如图7所示。包括以下步骤1)开始,搜索当前图像的第一个信息单元的起始位置;2)读当前信息单元并解码信息单元头;3)判断当前信息单元是否为条带单元,若为条带单元,则跳到步骤4),否则解码该非条带单元并搜索下一个信息单元的起始位置,返回步骤2);4)解码第一个条带的条带头的全部信息;5)将解出的第一个条带头放在条带头缓冲区中,记录存放位置;6)将第一个条带的条带数据暂存于条带数据缓冲区,记录存放位置;7)搜索下一个信息单元的起始位置;8)读当前信息单元并解码当前信息单元头;9)当前信息单元是否为条带单元,若是则继续执行后续步骤;若为标明图像边界的信息单元,则跳到步骤15);否则解码该非条带单元信息,返回步骤7);10)解码当前条带单元中的条带头的前几个字节以获得该条带的是否属于当前图像的信息;11)根据读取的当前条带信息和第一个条带的信息判断当前条带是否属于当前图像,若属于则继续执行后续步骤,否则跳到步骤15);12)解码条带头的剩余字节;13)并将解出的条带头放在条带头缓冲区中,记录存放位置;14)将当前条带单元的条带数据暂存于条带数据缓冲区中,记录存放位置,返回步骤7);15)当前图像解码。
如图8所示,其中步骤15)当前图像解码可按照宏块光栅扫描顺序解码当前图像直到解码宏块总数等于一幅图像包含的总宏块数为止。具体包括以下步骤1)将读码流文件指针返回前一个信息单元结束位置,此时当前图像的所有条带已全部读出;2)初始化解码宏块序号i=0;3)解码宏块i,i递增1;4)判断i是否等于一幅图像包含的总宏块数,若是则当前图像解码结束,否则转步骤3)。
上述解码方法所应用的装置示意图如图9所示整个解码装置包括以下模块和单元1.信息单元搜索模块,搜索信息单元的起始位置;2.信息单元单元头解码模块,解码信息单元单元头信息;3.信息单元类型判别模块,若为条带单元,则读出该信息单元中的条带信息,若为标明图像边界的信息单元,则当前图像所有条带的预读过程结束,否则解码该非条带单元并继续搜索下一个信息单元;4.部分条带头解码模块,解码条带头的部分字节,用于判断当前条带是否属于当前图像;5.条带判别模块,判断当前条带是否属于当前图像,若属于则解码条带头剩余字节并继续读当前图像的下一个条带;否则当前图像所有条带的预读过程结束;6.剩余条带头解码模块,解码条带头的剩余字节;7.已读出条带缓存模块,包括以下单元(1)条带头缓存单元,用来暂存解码后的条带头信息。
(2)条带数据缓存单元,用于暂存读出的条带数据。
8.宏块解码模块,实现解码宏块的功能;9.图像后处理模块,用于按照光栅扫描顺序进行的宏块滤波及图像缩放、增强等后续操作;10.图像显示和存储模块,用于图像的显示和存储。
本发明技术方案在解码一幅图像之前就能正确判断该图像与下一幅图像的边界,从而在解码之前能正确读取当前解码图像的全部条带内容,能够实现按照宏块光栅扫描的顺序进行解码,减少解码与后处理的延迟。


图1为一包含99个大小为16×16像素宏块的图像;图2为一幅图像的分层结构组织结构;图3(a)、图3(b)为条带内宏块的放置方式;图4(a)、图4(b)为任意条带顺序示意图;图5为目前已公开的判断图像边界并解码一幅图像的方法的流程图;图6为目前已公开的判断图像边界并解码一幅图像的装置;图7为本发明技术方案流程图;图8为本发明技术方案当前图像解码流程图;图9为本发明技术方案中解码方法所应用的装置;图10为本发明实施例一解码方法的流程图;图11为本发明实施例一解码装置示意图;图12为本发明实施例二解码方法的流程图;图13为本发明实施例二解码装置示意图;图14为本发明实施例三解码方法的流程图;图15为本发明实施例三解码装置示意图;具体实施方式
实施例一H.264中判断图像边界及预读一幅图像数据的解码在H.264中,采用多条带灵活宏块排序(FMO)技术时,条带内按自然数递增的宏块序号经过映射(MAP)操作后,条带内的宏块序号可能仍满足按自然数递增的规律也可能变得毫无规律可言。而在采用任意条带顺序ASO时,由于条带到达解码器的顺序是任意的,即使条带内的宏块序号按自然数递增,也不能保证按条带在码流中的顺序解码一定对应按宏块光栅扫描的顺序解码。
为了实现按宏块光栅扫描顺序的解码,一种方法是将一幅图像的所有条带内容在解码之前全部读出并暂存,这时如何判断图像边界成为能否正确解码的关键。
正如前面所述,视频码流中的一幅图像由几个条带构成,条带包括条带头和条带数据两部分,条带头中包含了条带中所有宏块所共有的信息,其中的某些信息对一幅图像的所有条带是相同的,而对不同的图像来说这些信息可能是不一样的,于是我们可以通过从条带头中解码这些信息来判断当前条带是否属于当前解码图像。
在视频压缩标准H.264中,所有信息单元都称为网络适配层NAL(network adaptationlayer)单元,而条带单元则是视频编码层VCL(video coding layer)单元。每个NAL单元都包含整数的字节数,其中有一个字节的头部和其余的有效载荷信息。在头部信息中,包含一个错误标志位、NAL单元的性质表示以及NAL类型,错误标志位用来标示接受到的NAL单元是否有错误,NAL单元的性质表示位主要用于表示NAL单元在码流中的重要程度,一般对解码的影响越大,其数值越大。NAL类型规定了NAL单元的数据内容,从大的方面讲,NAL单元分为两种,一种即VCL NAL单元,包含了视频图像压缩后的信息,即前面提到的条带单元,另一种是非VCL NAL单元,也即前面提到的非条带单元,主要包含了相关的附加信息,如Sequence parameter set、图画参数集(picture parameter set)等。
在H.264视频码流中,图画参数集(picture parameter set)语法结构,这一语法结构规定了一幅图像中所有条带所共有的信息。一个视频序列中的不同图像可能采用不同的图画参数集语法结构,而具体采用何种图画参数集语法结构是由条带头(slice header())语法结构中的语法元素pic_parameter_set_id决定的。对同一幅图像的所有条带的条带头来说,其语法元素pic parameter_set_id都是相同的,即一幅图像的所有条带采用相同的图画参数集语法结构,但对同一视频序列的不同图像来说,pic_parameter_set_id可能相同也可能不同,于是可将pic_parameter_set_id作为判别当前所读条带是否属于当前图像的条件之一。此外,在每个条带的条带头中还有first_mb_in_slice语法元素,它规定了该条带中第一个宏块的序号,同一幅图像的不同条带,first_mb_in_slice是不同的,但对于不同图像的条带,first_mb_in_slice可能是相同的,于是可将first_mb_in_Slice作为判别当前所读条带是否属于当前图像的另外一个条件。
除了上述两个条件之外,在每个条带的条带头中还有编码类型(slice_type)和frame_num两个语法元素。Slice_type规定了当前条带的编码方法,在H.264中,条带的编码方法共有5种,不同slice_type的取值对应的不同编码方法如下表1所示。
表1 slice_type不同取值对应的不同编码方法

在H.264中规定,当一幅图像的某个条带的slice_type在5~9之间取值时,说明这幅图像的所有条带的编码方法完全相同,当当前图像的第一个条带的slice_type大于4且当前所读条带的slice_type不等于第一个条带的slice_type(或Slice_type-5)时,可知当前条带属于下一幅图像,于是可用slice_type作为判断当前条带是否属于当前图像的条件之一。
同其他的视频压缩标准一样,H.264中也采用了运动补偿方法。所谓运动补偿,就是将当前编码宏块进一步划分成更小的块,然后在已编码过的图像中搜索与当前编码块最匹配的块并计算当前编码块与最匹配块中对应像素的差值,得到预测误差块。已编码过的且用于运动补偿的图像通常称为参考帧。在H.264码流中,所有图像都有一个编号,每个参考帧之后出现的那一幅图像,其编号都会递增,这个编号由条带头中的语法元素frame_num表示,因此当当前所读条带与第一个条带的frame_num不同时,说明当前条带属于下一幅图像,于是frame_Hum也可作为判别当前条带是否属于当前图像的条件之一。
解码过程中,如何判断当前条带是否属于当前编码图像的方法如下读码流中的一个条带并暂存,然后解码条带头的前几个字节,根据这些信息判断当前条带是否属于当前解码图像,如果属于当前解码图像则要将其条带头中的所有信息全部解出,存放在缓冲区中的某个位置,对条带头中某些参数,比如frame_num,field_pic_flag,bottom_field_flag等对一幅图像中的所有条带来说是一样的,这些参数可放在同一块内存中;对某些参数而言,比如量化参数QP等对同一幅图像的不同条带可能不一样,所以这些参数放在缓冲区中的不同位置,需要使用不同的指针来记录这一位置。对于未解码的条带数据,仍存放在最初存放条带信息的位置,因为解码过程中不同条带数据要不断切换使用,所以也需要不同指针来指示条带数据在内存中的位置。
通过以上说明,在H.264码流中,具体判别图像边界及预读图像数据的方法的流程图如图10所示,具体描述如下1)开始,搜索当前图像的第一个NAL单元的起始位置;2)读当前NAL单元并解码当前NAL单元头;3)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤4),否则解码该NAL单元信息,并继续搜索下一个NAL单元的起始位置,返回步骤2);4)解码第一个条带的条带头;5)将条带头放在条带头缓冲区中,记录存放位置;6)将第一个条带的条带数据暂存于条带数据缓冲区中,记录存放位置;7)搜索下一个NAL单元的起始位置;8)读当前NAL单元并解码单元头;9)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤10),否则解码该NAL单元信息,返回步骤7);
10)解码当前NAL单元中的条带的条带头中的四个语法元素first_mb_in_slice,pic_parameter_set_id,Slice_type,frame_num;11)判断是否满足下述四个条件之一①当前所读条带的pic_parameter_set_id不等于第一个条带的pic_parameter_set_id;②当前所读条带的first_mb_in_slice等于第一个条带的first_mb_in_slice;③第一个条带的Slice_type大于4且当前所读条带的Slice_type不等于第一个条带的Slice_type(或Slice_type-5);④当前所读条带的frame_num不等于第一个条带的frame_num;若上述四个条件均不满足,说明当前条带属于当前图像,顺序执行步骤12);若上述四个条件至少有一个满足,说明当前条带属于下一幅图像,跳到步骤15);12)将当前条带的条带头中的剩余信息全部解出;13)将条带头放在条带头缓冲区中,记录存放位置;14)将当前条带的条带数据暂存于条带数据缓冲区中,记录存放位置,返回步骤7);15)当前图像解码,可按照宏块光栅扫描顺序解码当前图像直到解码宏块总数等于一幅图像包含的总宏块数为止。具体如图8所示,包括以下步骤1)读码流文件指针返回前一个信息单元结束位置,此时当前图像的所有条带已全部读出;2)初始化解码宏块序号i=0;3)解码宏块i,i递增1;4)判断i是否等于一幅图像包含的总宏块数,若是则当前图像解码结束,否则转步骤3)。
上述实施例一所应用的装置如图11所示,整个解码装置包括以下模块和单元1.NAL单元搜索模块,搜索NAL单元的起始位置;2.NAL单元头解码模块,解码NAL单元的头信息;3.NAL单元类型判别模块,若为VCL NAL单元,则读出该NAL单元中的条带信息,否则解码该NAL单元并继续搜索下一个NAL单元;4.部分条带头解码模块,解码条带头中的前四个语法元素,包括以下单元(1)frame_num解码单元,解码条带头中的语法元素frame_num;(2)Slice_type解码单元,解码条带头中的语法元素Slice_type;
(3)first_mb_in_Slice解码单元,解码条带头中的语法元素first_mb_in_slice;(4)pic_parameter_set_id解码单元,解码条带头中的语法元素pic_parameter_set_id。
5.条带判别模块,用条带头前四个语法元素判断当前条带是否属于当前图像,若属于则解码条带头剩余字节;否则当前图像所有条带的预读过程结束;6.条带头剩余字节解码模块,解码条带头的剩余字节;7.已读出条带缓存模块,包括以下单元(1)条带头缓存单元,用来暂存解码后的条带头信息;(2)条带数据缓存单元,用于暂存读出的条带数据。
8.宏块解码模块,实现解码宏块的功能;9.环路滤波模块,用来对解码宏块进行滤波;10.图像显示或存储模块,用于图像的显示和存储。
实施例二H.264中判断图像边界及预读一幅图像数据的解码在H.264视频流中,每个条带具有pic_order_cnt_lsb语法元素,用于确定图像的实际显示顺序。对不同解码图像来说,pic_order_cnt_lsb是不同的,于是pic_order_cnt_lsb可作为判断当前条带是否属于当前图像的条件。在H.264视频流中,含有序列参数集(Sequence parameter set)语法结构,这一语法结构规定了同一视频序列(sequence)中所有图像共有的信息,H.264中最多有32个不同的序列参数集,每一幅图像使用哪个序列参数集是由图画参数集(picture parameter set)语法结构中的语法元素seq_parameter_set_id决定的。在序列参数集语法结构中含有语法元素pic_order_cnt_type,只有pic_order_cnt_type等于0时,pic_order_cnt_lsb才会出现在视频码流的条带头中,于是当编码器与解码器一致约定,参数集语法结构中的语法元素pic_order_cnt_type等于0时,只用pic_order_cnt_lsb就可判断当前所读条带是否属于当前图像。
通过上述说明,在视频流中的图像所采用的序列参数集语法结构中的语法元素pic_order_cnt_type等于0的前提下,用pic_order_cnt_lsb判断图像边界及预读图像数据的方法的流程图如图12所示,包括以下步骤
1)开始,搜索当前图像的第一个NAL单元的起始位置;2)读当前NAL单元并解码单元头;3)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤4),否则解码该NAL单元信息,继续搜索下一个NAL单元的起始位置,返回步骤2);4)解码第一个条带的条带头,5)将条带头放在条带头缓冲区中,记录存放位置;6)将第一个条带的条带数据暂存于条带数据缓冲区中,记录存放位置;7)搜索下一个NAL单元的起始位置;8)读当前NAL单元并解码单元头;9)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤10),否则解码该NAL单元信息,返回步骤7);10)解码当前NAL单元中的条带的条带头中的语法元素直到语法元素pic_order_cnt_lsb解出为止;11)判断当前所读条带的pic_order_cnt_lsb是否与第一个条带的pic_order_cnt_lsb相同,如果是,则说明当前条带属于当前图像,顺序执行步骤12);否则说明当前条带属于下一幅图像,跳到步骤15);12)解码当前条带的条带头中的剩余信息,13)将条带头放在条带头缓冲区中,14)将当前条带的条带数据暂存于条带数据缓冲区中,记录存放位置,返回步骤7);15)当前图像解码。该步骤同实施例一。
上述解码方法实施例所应用的装置如图13所示,包括以下模块1.NAL单元搜索模块,搜索NAL单元的起始位置;2.NAL单元头解码模块,解码NAL单元的头信息;3.NAL单元类型判别模块,若为VCL NAL单元,则读出该NAL单元中的条带信息,否则解码该NAL单元并继续搜索下一个NAL单元;
4.部分条带头解码模块,解码条带头中直到pic_order_cnt_lsb为止的所有语法元素;5.条带判别模块,若当前条带的pic_order_cnt_lsb等于第一个条带的pic_order_cnt_lsb,则当前条带属于当前图像,解码条带头剩余字节;否则当前图像所有条带的预读过程结束;6.条带头剩余字节解码模块,解码条带头的剩余字节。
7.已读出条带缓存模块,包括以下单元(1)条带头缓存单元,用来暂存解码后的条带头信息;(2)条带数据缓存单元,用于暂存读出的条带数据。
8.宏块解码模块,实现解码宏块的功能;9.环路滤波模块,用来对解码宏块进行滤波;10.图像显示或存储模块,用于图像的显示和存储。
实施例三H.264中判断图像边界及预读一幅图像数据的解码在H.264中,NAL类型共有32种取值,当NAL类型等于9时,NAL单元的内容为Accessunit delimiter,此种NAL单元可以被选择用来标示下一幅图像的开始。当Access unitdelimiter NAL单元在码流中出现时,说明码流中接下来的内容属于下一幅图像,所以如果编码方和解码方一致约定,在下一幅图像开始之前总会有Access unit delimiter NAL单元出现的前提下,可以用Access unit delimiter NAL单元判断图像的边界。
用Access unit delimiter NAL单元在码流中的出现判断图像边界及预读图像数据的方法的流程图如图14所示,包括以下步骤1)搜索当前图像的第一个NAL单元的起始位置;2)读当前NAL单元并解码单元头;3)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤4),否则解码该NAL单元信息并存储,继续搜索下一个NAL单元的起始位置,返回步骤2);4)解码当前条带的条带头,将条带头放在条带头缓冲区中,记录存放位置;5)将当前条带的条带数据暂存于条带数据缓冲区中,记录存放位置;
6)搜索下一个NAL单元的起始位置;7)读当前NAL单元并解码单元头;8)判断当前NAL单元是否为VCL NAL单元,如果是,则返回步骤4),若为Access unitdelimiter NAL单元则执行步骤9),否则解码NAL单元剩余信息并存储后返回步骤6);9)当前图像解码。该步骤同实施例一。
上述解码方法实施例所应用的装置示意图如图15所示,包括以下模块1.NAL单元搜索模块,搜索NAL单元的起始位置;2.NAL单元头解码模块,解码NAL单元的头信息;3.NAL单元类型判别模块,若为Access unit delimiter NAL单元,则表明当前图像结束;4.条带头解码模块,解码条带头信息;5.已读出条带缓存模块,包括以下单元(1)条带头缓存单元,用来暂存解码后的条带头信息;(2)条带数据缓存单元,用于暂存读出的条带数据。
6.宏块解码模块,实现解码宏块的功能;7.环路滤波模块,用于对解码宏块进行滤波;8.图像显示或存储模块,用于图像的显示和存储。
权利要求
1.一种视频码流判断图像边界及预读图像数据的解码方法,其特征在于包括以下步骤1)搜索信息单元的起始位置解码信息单元单元头信息;2)信息单元类型判别步骤,若为条带单元,则读出该信息单元中的条带信息,否则解码该非条带单元并继续搜索下一个信息单元;3)解码条带头的部分或全部字节,判断当前条带是否属于当前图像;4)若属于则解码条带头剩余字节并继续读当前图像的下一个条带;否则当前图像所有条带的预读过程结束;5)已读出条带缓存步骤,分别暂存解码后的条带头信息和条带数据;6)根据所述暂存条带头信息和条带数据,进行当前图像解码。
2.根据权利要求1所述的解码方法,其特征在于在所述步骤2)信息单元类型判别过程中,若信息单元为标明图像边界的信息单元,则当前图像所有条带的预读过程结束。
3.根据权利要求1所述的解码方法,其特征在于所述信息单元为NAL单元,所述条带单元为VCL NAL单元。
4.据权利要求1所述的解码方法,其特征在于所述解码方法具体包括以下步骤1)搜索当前图像的第一个信息单元的起始位置;2)读当前信息单元并解码信息单元头;3)判断当前信息单元是否为条带单元,若为条带单元,则跳到步骤4),否则解码该非条带单元并搜索下一个信息单元的起始位置,返回步骤2);4)解码第一个条带的条带头的全部信息;5)将解出的第一个条带头放在条带头缓冲区中,记录存放位置;6)将第一个条带的条带数据暂存于条带数据缓冲区,记录存放位置;7)搜索下一个信息单元的起始位置;8)读当前信息单元并解码当前信息单元头;9)判断当前信息单元是否为条带单元,若是则继续执行后续步骤;否则解码该非条带单元信息,返回步骤7);10)解码当前条带单元中的条带头的前几个字节以获得该条带的是否属于当前图像的信息;11)根据读取的当前条带信息和第一个条带的信息判断当前条带是否属于当前图像,若属于则继续执行后续步骤,否则跳到步骤15);12)解码条带头的剩余信息;13)将解出的条带头放在条带头缓冲区中,记录存放位置;14)将当前条带单元的条带数据暂存于条带数据缓冲区中,记录存放位置,返回步骤7);15)当前图像解码。
5.根据权利要求4所述的的解码方法,其特征在于所述步骤10)中,解码当前NAL单元中的条带的条带头中的信息为以下四个语法元素first_mb_in_slice,pic_parameter_set_id,Slice_type,frame_num。
6.根据权利要求5所述的的解码方法,其特征在于所述步骤11)中的判定方法为判断是否满足下述四个条件之一①当前所读条带的pic_parameter_set_id不等于第一个条带的pic_parameter_set_id;②当前所读条带的first_mb_in_slice等于第一个条带的first_mb_in_slice;③第一个条带的Slice_type大于4且当前所读条带的Slice_type不等于第一个条带的Slice_type(或Slice_type-5);④当前所读条带的frame_num不等于第一个条带的frame_num;若上述四个条件均不满足,说明当前条带属于当前图像,顺序执行步骤12);若上述四个条件至少有一个满足,则跳至步骤15)。
7.根据权利要求4所述的的解码方法,其特征在于所述步骤10)中,解码当前NAL单元中的条带的条带头中的语法元素直到语法元素pic_order_cnt_lsb解出为止,所述步骤11)中判断当前所读条带的pic_order_cnt_lsb是否与第一个条带的pic_order_cnt_lsb相同,如果是,则顺序执行步骤12);否则跳到步骤15)。
8.根据权利要求4所述的解码方法,其特征在于所述步骤9)中,当当前信息单元不是条带单元时,还包括一判断当前信息单元是否为标明图像边界的单元的步骤,若是标明图像边界的单元,则跳至步骤15),否则解码该非条带单元信息,返回步骤7)。
9.据权利要求2所述的解码方法,其特征在于所述解码方法具体包括以下步骤1)搜索当前图像的第一个NAL单元的起始位置;2)读当前NAL单元并解码单元头;3)判断当前NAL单元是否为VCL NAL单元,如果是,则执行步骤4),否则解码该NAL单元信息并存储,继续搜索下一个NAL单元的起始位置,返回步骤2);4)解码当前条带的条带头,将条带头放在条带头缓冲区中,记录存放位置;5)将当前条带的条带数据暂存于条带数据缓冲区中,记录存放位置;6)搜索下一个NAL单元的起始位置;7)读当前NAL单元并解码单元头;8)判断当前NAL单元是否为VCL NAL单元,如果是,则返回步骤4),若为Access unitdelimiter NAL单元则执行步骤9),否则解码NAL单元剩余信息并存储后返回步骤6);9)当前图像解码。10)、权利要求1至9中任一权利要求所述的解码方法,其特征在于所述当前图像解码包括以下步骤1)将读码流文件指针返回前一个信息单元结束位置,此时当前图像的所有条带已全部读出;2)初始化解码宏块序号i=0;3)解码宏块i,i递增1;4)判断i是否等于一幅图像包含的总宏块数,若是则当前图像解码结束,否则转步骤3)。
11.一种视频码流判断图像边界及预读图像数据的解码装置,其特征在于包括以下模块信息单元搜索模块,用于搜索信息单元的起始位置;信息单元单元头解码模块,用于解码信息单元单元头信息;信息单元类型判别模块,若为条带单元,则读出该信息单元中的条带信息,否则解码该非条带单元并继续搜索下一个信息单元;部分条带头解码模块,解码条带头的部分字节,用于判断当前条带是否属于当前图像;条带判别模块,判断当前条带是否属于当前图像,若属于则解码条带头剩余字节并继续读当前图像的下一个条带;否则当前图像所有条带的预读过程结束;剩余条带头解码模块,解码条带头的剩余字节;已读出条带缓存模块,包括以下单元条带头缓存单元,用来暂存解码后的条带头信息,条带数据缓存单元,用于暂存读出的条带数据,宏块解码模块,实现解码宏块的功能;图像后处理模块,用于按照光栅扫描顺序进行后续操作;图像显示和存储模块,用于图像的显示和存储。
12.根据权利要求11所述的解码装置,其特征在于所述部分条带头解码模块,用于解码条带头中的前四个语法元素,包括以下单元frame_num解码单元,解码条带头中的语法元素frame_num;Slice_type解码单元,解码条带头中的语法元素Slice_type;first_mb_in_slice解码单元,解码条带头中的语法元素first_mb_in_slice;pic_parameter_set_id解码单元,解码条带头中的语法元素pic_parameter_set_id;所述条带判别模块,用条带头前四个语法元素判断当前条带是否属于当前图像,若属于则解码条带头剩余字节;否则当前图像所有条带的预读过程结束。
13.根据权利要求11所述的解码装置,其特征在于所述部分条带头解码模块,用于解码条带头中直到pic_order_cnt_lsb为止的所有语法元素;所述条带判别模块,用于判断若当前条带的pic_order_cnt_lsb等于第一个条带的pic_order_cnt_lsb,则当前条带属于当前图像,继续解码条带头剩余字节;否则当前图像所有条带的预读过程结束。
14.一种视频码流判断图像边界及预读图像数据的解码装置,其特征在于包括以下模块NAL单元搜索模块,搜索NAL单元的起始位置;NAL单元头解码模块,解码NAL单元的头信息;NAL单元类型判别模块,若为Access unit delimiter NAL单元,则表明当前图像结束;条带头解码模块,解码条带头信息;已读出条带缓存模块,包括以下单元条带头缓存单元,用来暂存解码后的条带头信息;条带数据缓存单元,用于暂存读出的条带数据;宏块解码模块,实现解码宏块的功能;环路滤波模块,用于对解码宏块进行滤波;图像显示或存储模块,用于图像的显示和存储。
全文摘要
本发明提供一种视频码流判断图像边界及预读图像数据的解码方法和装置,在视频压缩标准中采用灵活宏块排序(FMO)和任意条带顺序(ASO)技术时判断图像边界及预读码流中一幅图像数据。通过判断当前条带是属于当前图像还是下一幅图像,并将读出的条带头和条带数据存放在不同的缓冲区中,记录预读条带在缓存中的位置。之后再进行当前图像解码。本发明技术方案在解码一幅图像之前就能正确判断该图像与下一幅图像的边界,从而在解码之前能正确读取当前解码图像的全部条带内容,能够实现按照宏块光栅扫描的顺序进行解码,减少解码与后处理的延迟。
文档编号H04N7/32GK1980392SQ20051011091
公开日2007年6月13日 申请日期2005年11月29日 优先权日2005年11月29日
发明者林涛, 王淑慧, 林争辉 申请人:同济大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1