一种基于宏块统计信息的参考帧筛选方法、装置
技术领域
本发明涉及视频编解码领域,尤其涉及一种基于宏块统计信息的参考帧筛选方法、装置。
背景技术
在视频编码过程中,帧间预测根据预测方向的不同分为:P帧预测和B帧预测。目前主流的P帧预测方法采用前向已编码的帧作为当前编码帧的参考帧,利用两者之间的相似性,压缩当前编码帧的信息;而B帧则采用了双向预测技术,从而可以极大地消除帧间信息的冗余度,从而使其具有最高的压缩率。无论是P帧还是B帧都需要在由已编码的帧构成的参考列表内,进行运动搜索,寻找最优匹配。编码参数中设置的搜索参考帧越多,则编码器率失真性能越好,但同时参考帧越多,编码器消耗在运动搜索上时间也会急剧增长。所以,一般编码器都会设置一个在率失真性能和计算量两者之间达到相对较优的数量,作为编码器的默认参考帧数。然而,这种常规的处理方法,使得编码器无法根据视频序列的特点调整参考列表内的参考帧数。这样,一方面会产生编码器计算量无谓消耗的问题,另一方面编码器在率失真性能提升上也微乎其微。这种现象在,频繁场景切换的电影预告片、广告、全局运动等场景下,尤为明显。
因此本发明提出一种基于宏块统计信息的参考帧筛选策略,通过各帧宏块的统计信息的不同情况,对参考帧进行快速筛选,实现参考列表的自适应调整。本发明可在率失真性能基本不变的情况下,提升编码速度,使编码器在率失真性能和计算量两者之间达到进一步的优化实现。
备注:率失真性能基本不变,是指在相同码率下,两者的率失真性能差值的绝对值小于0.1dB。
发明内容
本发明实施例的目的在于提出一种基于宏块统计信息的参考帧筛选方法、装置。
所述方法包括:
判断第一当前编码帧是否为I帧,
若第一当前编码帧不是I帧,则将所述的第一当前编码帧编码;
获取编码后的第一当前编码帧中,I宏块及广义I宏块的第一数量;
判断所述第一数量是否小于第一参数,若第一数量不小于第一参数,则根据预置视频序列的编码结构,进行参考帧的筛选;
然后判断是否所述视频序列中所有的帧都已经编码;若否,则继续判断第一当前编码帧是否为I帧;若是则结束。
所述装置包括:第一判断单元、第一执行单元、第二判断单元、第二执行单元;第三判断单元;第三执行单元;
第一判断单元,用于判断第一当前编码帧是否为I帧;
第一执行单元,用于当判断出第一当前编码帧不是I帧,则将所述的第一当前编码帧编码;获取编码后的第一当前编码帧中,I宏块及广义I宏块的第一数量;
第二判断单元,用于判断所述第一数量是否小于第一参数;
第二执行单元,用于当判断出第一数量不小于第一参数,则根据预置视频序列的编码结构,进行参考帧的筛选;
第三判断单元,用于判断是否视频序列中所有的帧都已经编码;
第三执行单元,用于当判断所述视频序列中的帧没有全部编码,则第一判断单元重新进行判断;当判断所述视频序列中帧全部编码时则结束。
本发明提出一种基于宏块统计信息的参考帧筛选策略,通过各帧宏块的统计信息的不同情况,对参考帧进行快速筛选,实现了参考列表的自适应调整。并且本发明可在率失真性能基本不变的情况下,提升编码速度,使编码器在率失真性能和计算量两者之间达到进一步的优化实现。
附图说明
图1是本发明实施例1基于宏块统计信息的参考帧筛选方法的流程图;
图2是本发明实施例1步骤140中情况1的方法流程图;
图3是本发明实施例1步骤140中情况2的方法流程图;
图4是本发明实施例1步骤140中情况3的方法流程图;
图5是本发明实施例2基于宏块统计信息的参考帧筛选装置结构图;
图6是本发明实施例2中第一执行单元的结构图;
图7是本发明实施例2中第二执行单元的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
实施例一
参见图1,本发明提供了一种基于宏块统计信息的参考帧筛选方法,该方法可以为:
步骤100:初始化,令t=1,即令第一当前编码帧为第一个编码帧。
本发明中,t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;framet为第一当前编码帧。
步骤110:判断第一当前编码帧是否为I帧,即判断framet是否I帧;若否,则执行步骤120;若是则执行步骤160。
步骤120:首先,将所述第一当前编码帧编码;然后,获取编码后的第一当前编码帧中的I宏块及广义I宏块的第一数量。
该步骤获取第一数量的方法可以为:
设置n=1;
判断是否(Mbt,n∈framet)且(Mbt,n为I宏块或者Mbt,n至少包含一个为帧内预测模式的子块),若是则n=n+1;若否,则n=n+1。
判断是否n>mbwidth*mbheight,若是,则执行步骤130;若否,则重新进行上述两个判断,即重新进行“判断(Mbt,n∈framet)且(Mbt,n为I宏块或者Mbt,n至少包含一个为帧内预测模式的子块)”及“判断是否n>mbwidth*mbheight”。
本发明中,表示framet帧中I宏块及广义I宏块的第一数量;Mbt,n表示第t帧编码帧的第n个宏块;n表示宏块Mbt,n在framet中的位置序号;当块的大小为16x16,则称为宏块;当宏块进一步划分为大小为n1xn2的块(n1≤16或者n2≤16,但两者不能同时等于16)则这些尺寸小一些的块称为子块;I宏块指采用帧内预测模式且块的大小为16x16的块;mbwidth,mbheight分别表示一帧图像划分成宏块以后,图像以宏块为单位的列数和行数;
步骤130:判断所述第一数量是否小于第一参数,
即判断是否第一参数即N*mbwidth*mbheight,
若否则执行步骤140,若是则执行步骤150;
其中,表示framet帧中I宏块及广义I宏块的第一数量,mbwidth,mbheight分别表示一帧图像划分成宏块以后,图像以宏块为单位的列数和行数;其中N的取值范围为0至1,优选的N可取值0.9。
步骤140:首先根据视频序列的编码结构,进行参考帧的筛选,然后执行步骤170。
步骤150:首先获取第二当前编码帧,然后设置第二当前编码帧为第一当前编码帧,然后执行步骤170。
“获取第二当前编码帧”具体为:
判断min(FameNum(framem)|framem未编码)是否存在,若不存在则结束(完成所有的处理步骤);若存在,则将min(FrameNum(framem)|framem未编码)用FrameNum(framem_i)表示,即:
FrameNum(framem_i)=min(FrameNum(framem)|framem未编码)。此时,framem_i就表示所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧。
“设置第二当前编码帧为第一当前编码帧”具体为:framet=framem_i
其中,framem表示第m帧编码帧,即可以是所述任一编码帧;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m表示编码帧framem在所有编码帧中的时间序号,简称m为编码帧framem的时间序号;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;FameNum(framem)表示framem的编码序号;FrameNum(framem_i)表示framem_i的编码序号;min(变量|条件)表示对满足条件的所有变量求最小值。
本发明中设置第一当前编码帧framet、第二当前编码帧framem_i是为了后续步骤中表述方便。其中第一当前编码帧就是本领域技术人员公知的当前编码帧。因第一当前编码帧framet编码后,就不属于视频序列中的未编码帧,因此该方法中最后设置framet=framem_i,其目的也是为了找到所有编码帧中未编码且编码序号最小的第二当前编码帧,并将这个第二当前编码帧作为第一当前编码帧、即实际就是当前编码帧。
步骤160:首先,将所述的第一当前编码帧编码。然后,获取第二当前编码帧。接着,设置第二当前编码帧为第一当前编码帧,然后执行步骤170。
步骤170:判断是否视频序列中所有的帧都已经编码。若否,则执行步骤110;;若是,则执行步骤180;
步骤180:结束(完成所有的处理步骤)。
下面主要描述步骤140:根据所述的视频序列的编码结构筛选参考帧的详细处理过程,该步骤主要分3种情况来处理:
情况1:参见图2,当视频序列编码结构为IP…P(即无B帧)并且framet为P帧时;
则首先,获取第二当前编码帧。然后,清空list0。接着,将第一当前编码帧framet编码后的重构帧作为list0中的第一个参考帧。最后,设置第二当前编码帧为第一当前编码帧。详细步骤如下:
步骤1411获取第二当前编码帧framem_i。
步骤1412:清空list0。
步骤1413:将第一当前编码帧framet编码后的重构帧作为list0中的第一个
参考帧。
步骤1414:设置所述第二当前编码帧为第一当前编码帧。
步骤1415:完成在情况1时步骤140的处理,即完成步骤140的执行。
步骤1416:执行步骤170。
“获取第二当前编码帧”具体为:
判断min(FrameNum(framem)|framem未编码)是否存在,若不存在则结束(完成所有的处理步骤);若存在,则将min(FrameNum(framem)|framem未编码)用
FrameNum(framem_i)表示,即:
FrameNum(framem_i)=min(FrameNum(framem)|framem未编码)。此时,framem_i就表示所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧。
“设置第二当前编码帧为第一当前编码帧”具体为:framet=framem_i
其中,本发明中list0表示前向参考列表;framem表示第m帧编码帧,即可以是所述任一编码帧;framem_i表示第m i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m表示编码帧framem在所有编码帧中的时间序号,简称m为编码帧framem的时间序号;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;FrameNum(framem)表示framem的编码序号;FrameNum(framem_i)表示framem_i的编码序号;min(变量条件)表示对满足条件的所有变量求最小值。
情况2:参见图3;当所述的视频序列的编码结构为:含有B帧且当前编码帧为P帧时:
步骤1421:获取第二当前编码帧framem_i。
步骤1422:k=1。
步骤1423:判断是否m_i<t,若是执行步骤1424:若否、且framem_i为P帧时执行步骤1430;若否、且framem_i为I帧时执行步骤1431。
步骤1424:判断是否(poc(refk)<t并且refk∈list0)或者(poc(refk)<t并且refk∈list1),若是,执行步骤1425;若否,执行步骤1426。
步骤1425:设置refk为framem_i的参考帧后,执行步骤1427。
步骤1426:设置refk不再作为framem_i的参考帧后,执行步骤1427;所谓不再作为参考帧,意思就是在后续的运动估计中,不会在这个“不是参考帧”的图像上进行。
步骤1427:设置k=k+1。
步骤1428:判断是否k>numberlist0+numberlist1,若是则执行步骤1429;若否则执行步骤1423。
步骤1429:首先利用已筛选完毕的list0、list1,对framem_i进行编码;然后设置设置第二当前编码帧为第一当前编码帧;接着执行步骤1432。
步骤1430:首先,清空list0。然后,将framet编码后的重构帧作为list0中的第一个参考帧。最后,利用已筛选完毕的list0,对framem_i进行编码;然后,设置第二当前编码帧为第一当前编码帧;接着执行步骤1432。
步骤1431首先对framem_i进行编码;然后设置设置第二当前编码帧为第一当前编码帧;接着执行步骤1432。
步骤1432:完成在情况2时步骤140的处理,即完成步骤140的执行。
步骤1433:执行步骤170。
本发明中,list0表示前向参考列表、list1表示后向参考列表;refk表示第k个参考帧,k表示refk在list0和list1所有参考帧中的序号(该序号的排序方式不唯一,只要让所有的参考帧获取一个区分彼此的序号即可。例如可以先排前向参考列表的参考帧再排后向参考列表的参考帧,此时所有前向参考列表中参考帧的序号均小于后向参考列表中参考帧的序号;而每个单独的参考列表中参考帧可以按其原始编码帧对应的编码序号排序);设置k=1此时表示从第一个参考帧开始处理;poc(refk)表示refk对应的原始图像在所有编码帧中的时间序号;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;numberlist0表示前向参考列表中参考帧的帧数;numberlist1表示后向参考列表中参考帧的帧数。
情况3,参见图4:当视频序列的编码结构为含有B帧、且framet第一当前编码帧为B帧时:
步骤1441:获取第二当前编码帧framem_i。
步骤1442:设置k=1。
步骤1443:判断是否m_i<t,若是执行步骤1444;若否、且framem_i为B帧执行步骤1450;若否、且framem_i为P帧执行步骤1456;若否、且framem_i为I帧执行步骤1462。
步骤1444:判断是否(poc(refk)<t并且refk∈list0)或者(poc(refk)<t并且refk∈list1),若是,则执行步骤1445;若否,则执行步骤1446。
步骤1445:设置refk为framem_i的参考帧;执行步骤1447。
步骤1446:设置refk不再作为framem_i的参考帧;执行步骤1447。
步骤1447:设置k=k+1。
步骤1448:判断k>numberlist0+numberlist1,若是执行步骤1449;若否执行步骤1443。
步骤1449:首先直接利用已筛选完毕的list0、list1,对framem_i进行编码;然后设置第二当前编码帧为第一当前编码帧;接着执行步骤1463。
步骤1450:判断是否(poc(refk)≥t并且refk∈list0)或者(poc(refk)≥t并且refk∈list1),若是,则执行步骤1451;若否,则执行步骤1452。
步骤1451:设置refk为framem_i的参考帧;执行步骤1453。
步骤1452:refk不再作为framem_i的参考帧;执行步骤1453。
步骤1453:设置k=k+1。
步骤1454:判断是否k>numberlist0+numberlist1,若是,则执行步骤1455;若否,则执行步骤。1443
步骤1455:首先直接利用已筛选完毕的list0、list1,对framem_i进行编码;然后设置第二当前编码帧为第一当前编码帧;接着执行步骤1463。
步骤1456:首先,判断是否poc(refk)≥t并且refk∈list0,若是,则执行步骤1457;若否,则执行步骤1458。
步骤1457:设置refk为framem_i的参考帧;执行步骤1459。
步骤1458:设置refk不再作为framem_i的参考帧;执行步骤1459。
步骤1459:设置k=k+1。
步骤1460:判断是否k>numberlist0,若是,则执行步骤1461;若否,则执行步骤1443。
步骤1461:利用已筛选完毕的list0,对framem_i进行编码,然后设置第二当前编码帧为第一当前编码帧;执行步骤1463。
步骤1462:先对framem_i进行编码;然后,设置第二当前编码帧为第一当前编码帧;执行步骤1463。
步骤1463:完成在情况3时步骤140的处理,即完成步骤140的执行。
步骤1464:执行步骤170。
实施例2,本发明还提供一种基于宏块统计信息的参考帧筛选装置,参见图5,所述的装置包括:第一判断单元、第一执行单元、第二判断单元、第二执行单元;第三判断单元;第三执行单元;
第一判断单元,用于判断第一当前编码帧是否为I帧;
第一执行单元,用于当判断出第一当前编码帧不是I帧,则将所述的第一当前编码帧编码;获取编码后的第一当前编码帧中,I宏块及广义I宏块的第一数量;
第二判断单元,用于判断所述第一数量是否小于第一参数;
第二执行单元,用于当判断出第一数量不小于第一参数,则根据预置视频序列的编码结构,进行参考帧的筛选;
第三判断单元,用于判断是否视频序列中所有的帧都已经编码;
第三执行单元,用于当判断所述视频序列中的帧没有全部编码,则第一判断单元重新进行判断;当判断所述视频序列中帧全部编码时则结束。
其中,所述装置进一步包括第四执行单元;
第四执行单元,用于当第二判断单元判断出第一数量小于第一参数,则获取第二当前编码帧,设置第二当前编码帧为第一当前编码帧,接着通知第三判断单元判断是否所有的帧都已经编码。
其中,所述装置进一步包括第五执行单元;
第五执行单元,用于当第一判断单元判断出第一当前编码帧是I帧,将所述的第一当前编码帧编码;获取第二当前编码帧;设置第二当前编码帧为第一当前编码帧;然后继续通知第三判断单元判断是否所有视频序列里的帧都已经编码。
参见图6,所述第一执行单元包括:设置单元、第六执行单元、第七执行单元;
设置单元,用于进行初始设置,即令n=1;
第六执行单元,用于判断是否(Mbt,n∈framet)且(Mbt,n为I宏块或者Mbt,n至少包含一个为帧内预测模式的子块),若是,通知则n=n+1;若否,则n=n+1;
第七执行单元,用于根据第六执行单元的结果判断是否n>mbwidth*mbheight,若是,则通知第二判断单元继续执行“判断所述第一数量是否小于第一参数”;若否,则通知第六执行单元继续判断;
其中,表示framet帧中I宏块及广义I宏块的第一数量;Mbt,n表示第t帧编码帧的第n个宏块;n表示宏块Mbt,n在framet中的位置序号;mbwidth,mbheight分别表示一帧图像划分成宏块以后,图像以宏块为单位的列数和行数,framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号。
以上单元中,所述第二判断单元所述的第一参数为N*mbwidth*mbheight,其中N取值范围为0至1的小数;
其中,表示framet帧中I宏块及广义I宏块的第一数量,mbwidth,mbheight分别表示一帧图像划分成宏块以后,图像以宏块为单位的列数和行数。
参见图7,第二执行单元包括第一情况单元;所述第一情况单元包括:第八执行单元、第九执行单元;
第八执行单元,用于获取第二当前编码帧;然后,清空list0;
第九执行单元,用于将第一当前编码帧framet编码后的重构帧作为list0中的第一个参考帧;最后,设置第二当前编码帧为第一当前编码帧;通知第三判断单元继续判断;
其中,list0表示前向参考列表;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号。
其中,第二执行单元进一步包括第二情况单元,第二情况单元包括:第十执行单元、第十一执行单元、第十二执行单元;
第十执行单元,用于获取第二当前编码帧;设置k=1;
第十一执行单元,包括第四判断单元、第十三执行单元;
第四判断单元,用于判断是否m_i<t,
第十三执行单元,用于当第四判断单元判断为是时,则进一步判断是否(poc(refk)<t并且refk∈list0)或者(poc(refk)<t并且refk∈list1),如果进一步判断为是,则refk为framem_i的参考帧;如果进一步判断为否,则refk不再作为framem_i的参考帧;
第十二执行单元,用于设置k=k+1;判断是否k符合下列条件:
k>numberlist0+numberlist1,若是,则首先利用已筛选完毕的list0、list1,对framem_i进行编码;然后设置设置第二当前编码帧为第一当前编码帧;通知第三判断单元继续判断;
其中,list0表示前向参考列表、list1表示后向参考列表;refk表示第k个参考帧,k表示refk在list0和list1所有参考帧中的序号;设置k=1此时表示从第一个参考帧开始处理;poc(refk)表示refk对应的原始图像在所有编码帧中的时间序号;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;numberlist0表示前向参考列表中参考帧的帧数;numberlist1表示后向参考列表中参考帧的帧数。
其中,第十一执行单元,进一步包括第十四执行单元;
第十四执行单元,用于当第四判断单元判断为否、且framem_i为P帧,则,
首先,清空list0;
然后,将framet编码后的重构帧作为list0中的第一个参考帧;
最后,利用已筛选完毕的list0,对framem_i进行编码;然后,设置第二当前编码帧为第一当前编码帧;通知第三判断单元继续判断;
其中,list0表示前向参考列表;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号。
其中,第十一执行单元,进一步包括第十五执行单元,
第十六执行单元,用于当第四判断单元判断为否、且framem_i为I帧,则,则先对framem_i进行编码;然后,设置第二当前编码帧为第一当前编码帧;通知第三判断单元继续判断;
其中,framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号。
其中,所述第二执行单元进一步包括第三情况单元;所述第三情况单元包括:第十六执行单元、第五判断单元、第十七执行单元、第十八执行单元、第六判断单元、第十九执行单元;
第十六执行单元,用于获取第二当前编码帧;设置k=1;
第五判断单元,用于判断是否m_i<t;
第十七执行单元,用于当第五判断单元判断为是时,则,进一步判断是否(poc(refk)<t并且refk∈list0)或者(poc(refk)<t并且refk∈list1),若进一步判断为是,则refk为framem_i的参考帧,若进一步判断为否,则refk不再作为framem_i的参考帧;
第十八执行单元,用于设置k=k+1;
第六判断单元,用于根据第十八执行单元的结果,判断是否k>numberlist0+numberlist1;
第十九执行单元,用于当第六判断单元判断出是时,直接利用已筛选完毕的list0、list1,对framem_i进行编码;然后设置第二当前编码帧为第一当前编码帧;通知第三判断单元进行判断;若第六判断单元判断为否时,则通知第五判断单元继续判断;
其中,list0表示前向参考列表、list1表示后向参考列表;refk表示第k个参考帧,k表示refk在list0和list1所有参考帧中的序号;设置k=1此时表示从第一个参考帧开始处理;poc(refk)表示refk对应的原始图像在所有编码帧中的时间序号;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;numberlist0表示前向参考列表中参考帧的帧数;numberlist1表示后向参考列表中参考帧的帧数。
其中,所述第三情况单元进一步包括:第二十执行单元、
第二十执行单元,用于当第五判断单元判断为否,且framem_i为B帧,则,判断是否(poc(refk)≥t并且refk∈list0)或者(poc(refk)≥t并且refk∈list1),若是则refk为framem_i的参考帧;否则,refk不再作为framem_i的参考帧;通知第十八执行单元设置k=k+1;
其中,list0表示前向参考列表、list1表示后向参考列表;refk表示第k个参考帧,k表示refk在list0和list1所有参考帧中的序号;poc(refk)表示refk对应的原始图像在所有编码帧中的时间序号;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;numberlist0表示前向参考列表中参考帧的帧数;numberlist1表示后向参考列表中参考帧的帧数。
其中,所述第三情况单元进一步包括:第二十一执行单元、第二十二执行单元、第七判断单元、第二十三执行单元;
第二十一执行单元,用于当第五判断单元判断为否,且framem_i为P帧,则判断是否poc(refk)≥t并且refk∈list0,若是,则refk为famem_i的参考帧;若否,则refk不再作为framem_i的参考帧;通知第二十二执行单元设置k=k+1;
第二十二执行单元,用于设置k=k+1;
第七判断单元,用于判断是否k>numberlist0;
第二十三执行单元,用于当第七判断单元判断结果为是时,进一步判断是否list0为空,若进一步判断为是,则变换framem_i类别为I帧,进行编码;若进一步判断为否,则直接利用已筛选完毕的list0,对framem_i进行编码;最后设置第二当前编码帧为第一当前编码帧;通知第三判断单元进行判断;当第七判断单元判断结果为否时,则通知第五判断单元继续判断;
其中,list0表示前向参考列表、list1表示后向参考列表;refk表示第k个参考帧,k表示refk在list0和list1所有参考帧中的序号;poc(refk)表示refk对应的原始图像在所有编码帧中的时间序号;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号;numberlist0表示前向参考列表中参考帧的帧数;numberlist1表示后向参考列表中参考帧的帧数。
其中,所述第三情况单元进一步包括:第二十四执行单元;
第二十四执行单元,用于当第五判断单元判断为否,且framem_i为I帧,则先对framem_i进行编码;然后,设置第二当前编码帧为第一当前编码帧;通知第三判断单元继续判断;
其中,framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;framet为第一当前编码帧;t表示第一当前编码帧framet在所有编码帧中的时间序号,简称t为第一编码帧framet的时间序号。
并且,以上所述的第四执行单元、第五执行单元、第八执行单元、第十执行单元、第十六执行单元所述的“获取第二当前编码帧”具体为:
判断min(FrameNum(framem)|framem未编码)是否存在,若不存在则结束;
若存在,则将min(FrameNum(framem)|framem未编码)用FrameNum(framem_i)表示,即:FrameNum(framem_i)=min(FrameNum(framem)|famem未编码);framem_i就表示所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;
所述的“设置第二当前编码帧为第一当前编码帧”具体为:
framet=framem_i
其中,framem表示第m帧编码帧,即可以是所述任一编码帧;framem_i表示第m_i帧编码帧;framem_i为所有未编码帧中具有最小编码序号的编码帧,称为第二当前编码帧;m表示编码帧framem在所有编码帧中的时间序号,简称m为编码帧framem的时间序号;m_i表示编码帧framem_i在所有编码帧中的时间序号,简称m_i为编码帧framem_i的时间序号;FrameNum(framem)表示framem的编码序号;FrameNum(framem_i)表示framem_i的编码序号;min(变量|条件)表示对满足条件的所有变量求最小值。
综上所述,本发明提出一种基于宏块统计信息的参考帧筛选策略,通过各帧宏块的统计信息的不同情况,对参考帧进行快速筛选,实现了参考列表的自适应调整。并且本发明可在率失真性能基本不变的情况下,提升编码速度,使编码器在率失真性能和计算量两者之间达到进一步的优化实现。
本领域的普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序指令相关硬件来完成的,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质可以为ROM、RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。