首页> 中国专利> 预先不了解画面类型情况下MPEG代码转换器的比率控制系统

预先不了解画面类型情况下MPEG代码转换器的比率控制系统

摘要

一种符合MPEG标准的数字视频代码转换器所使用的比率控制系统,在不预先了解后续画面的画面类型的情况下开始一个序列或GOP中的第一画面的编码。假定合理的GOP参数组以确定编码比特预算,随着编码连续画面,根据其画面类型逐渐修正比特预算。如当切换信道及类似处理时,可以得出预压缩比特流的GOP结构中的变化,且具有未修正的起始GOP参数的目标比率将会聚在几个GOP内。该系统减少了代码转换所需要的存储器,并避免了大约一个GOP的处理延迟。

著录项

  • 公开/公告号CN1255022A

    专利类型发明专利

  • 公开/公告日2000-05-31

    原文格式PDF

  • 申请/专利权人 通用仪器公司;

    申请/专利号CN99125060.5

  • 申请日1999-11-24

  • 分类号H04N7/26;

  • 代理机构72002 永新专利商标代理有限公司;

  • 代理人韩宏

  • 地址 美国宾夕法尼亚州

  • 入库时间 2023-12-17 13:37:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-12-17

    专利权有效期届满 IPC(主分类):H04N7/26 授权公告日:20060809 申请日:19991124

    专利权的终止

  • 2016-03-23

    专利权的转移 IPC(主分类):H04N7/26 登记生效日:20160301 变更前: 变更后: 申请日:19991124

    专利申请权、专利权的转移

  • 2013-10-16

    专利权的转移 IPC(主分类):H04N7/26 变更前: 变更后: 登记生效日:20130917 申请日:19991124

    专利申请权、专利权的转移

  • 2006-08-09

    授权

    授权

  • 2001-05-30

    实质审查请求的生效

    实质审查请求的生效

  • 2000-05-31

    公开

    公开

查看全部

说明书

本发明涉及在预先不了解GOP中的画面类型情况下,用于分配编码画面组(GOP)中的连续画面比特的数字视频代码转换器和方法。

使用诸如MPEG之类的数字视频编码方法,可以将输入画面编码为三种画面类型,即,I,P和B。这三种画面要求完全不同的编码比特数,这是由于其不同的时间处理特性所致。因此,智能比特分配策略应根据画面类型指定用于编码的比特数。对于给定的比特预算这就要求预先了解画面类型。对于独立编码器这种要求不会出现问题,这是因为编码器能够确定每个输入画面的类型。

事实上,编码器能够提前计划输入画面的类型。相反,一个代码转换器在实际处理画面之前不能预先了解画面类型。在代码转换器分配用于编码画面的适当比特数方面就出现困难。

因此,需要一种在预先不了解画面类型情况下,用于在代码转换器分配编码画面比特的方法和装置。该系统应避免大约一个GOP的处理延迟,否则将出现从预压缩比特流提取复杂的GOP结构信息。另外,该系统应避免存储对应于GOP的数据,从而减少代码转换所需的存储器。

该系统应不但与可变比特率而且与恒定比特率的比特流兼容。

该系统应与统计多路复用和重复多路复用系统兼容。

本发明提供一个具有上面和其他优点的装置和方法。

本发明涉及在预先不了解GOP中的画面类型排列的情况下,用于分配编码画面组(GOP)中的连续画面比特的数字视频代码转换器和方法。

1、顺序刷新序列

一种分配用于编码数字视频代码转换器接收的比特流中的顺序刷新画面序列的比特的方法,该方法包括步骤:(a)在比特流的第一画面和比特流的下一个最接近的后续P-画面之间提供一个假定距离M’;(b)提供一个作为假定距离M’的函数的假定比特预算;(c)根据假定比特预算编码第一画面;(d)确定紧跟在比特流中的第一画面的第二画面的画面类型;(e)根据第二画面的画面类型调整假定比特预算;和(f)根据调整比特预算分配用于编码第二画面的比特。

这样,最初为第一画面假定用于编码画面的比特预算,当知道第二画面类型时更新比特预算。根据比特预算分配目标比特数用于编码每个画面。第一和第二画面类型一般指示序列中的画面分布。

假定比特预算与假定距离和比特流的比特率成正比例,与比特流的帧频成反比。

比特流中的画面可以形成一个顺序刷新序列,其中不存在GOP结构。

1.1由B-画面跟随P-画面

当第一画面为P-画面,第二画面为B-画面时,该方法包括进一步的步骤:根据第一画面的画面类型和第二画面的画面类型确定第一画面和最接近的后续P-画面(以显示顺序)之间的实际距离M”。

根据以比特流的显示顺序中的第一画面的时间标记和,以显示顺序,增加一个画面的第二画面的时间标记之间的差值确定实际距离M”。

该方法包括进一步的步骤:根据调整比特预算分配用于编码跟在第一画面后面的剩余M”-1个画面的比特的进一步的步骤。

在调整步骤(f)通过+(M”-M’)*“比特率”/“帧频”调整假定比特预算,其中“比特率”是比特流的比特率,“帧频”是比特流的帧频。

1.2由P-画面跟随的P-画面

当第一和第二画面为P-画面时,该方法包括进一步的步骤:根据第一画面的画面类型和第二画面的画面类型确定第一画面和最接近的后续P-画面(以显示顺序)之间的实际距离M”。根据第二画面的时间标记和第一画面的时间标记之间的差值确定实际距离M”。相对于比特流的显示顺序确定时间标记。

在调整步骤(f)通过-(M’-1)*“比特率”/“帧频”调整假定比特预算,其中“比特率”是比特流的比特率,“帧频”是比特流的帧频。

该方法包括进一步的步骤:根据调整比特预算分配用于编码比特流中的跟随包括第一和第二画面的初始M”画面的一系列M”画面的比特。这样,对一系列画面中的比特预算的调整延续到下一系列以允许下一系列的正确编码。

2、非顺序刷新序列

通常,本发明通过假定一组合理的GOP参数,每个I-画面和下一个P-画面之间的距离,和N,以及GOP长度开始代码转换。在代码转换期间调整M和N,这是因为有关GOP结构的附加信息成为可用,例如,GOP中的画面类型的分布和GOP的长度。

可以将假定M修正到两帧内的实际值,以及可以将假定N修正到一个GOP内的实际值。如果有必要的话,在每个I-或P-画面之后应鉴定,和调整M,以及如果有必要的话,在每个I-画面之后应鉴定,和调整N。当调整M和/或N时,还应分别调整用于编码画面的比特率R,以及当前GOP中的的I,P和B-画面的nI,nP,和nB,剩余数。

一种分配用于编码数字视频代码转换器接收的比特流中的非顺序刷新画面序列的比特的方法,该方法包括步骤:(a)提供比特流的一个特定画面组(GOP)的假定长度N’;(b)提供一个作为假定长度N’的函数的假定比特预算;在比特流的第一画面和比特流的下一个最接近的后续P-画面之间提供一个假定距离M’(以显示顺序);(c)根据假定比特预算,和N’以及M’分配用于编码特定GOP的第一画面的比特;(d)确定紧跟在第一画面的第二画面的画面类型;(e)根据第二画面的画面类型调整假定比特预算;和(f)根据调整比特预算分配用于编码第二画面的比特。

假定比特预算与假定长度N’和比特流的比特率成正比,与比特流的帧频成反比。

在一个GOP内M”可以变化。这样,该方法包括周期性地鉴定遍布GOP的M”的步骤。例如,可以在跟随第一I-画面的每个I-画面和/或P-画面计算M”。根据M”每次都调整假定比特预算。

2.1由I-画面跟随I-画面

当第一和第二画面为I-画面时,该方法包括进一步的步骤:根据第二画面的画面类型确定比特流的第一画面和下一个最接近的后续I-画面之间的实际距离M”,并根据M”调整假定比特预算。

根据以比特流的显示顺序的第二画面的时间标记和以显示顺序的第一画面的时间标记之间的差值确定实际距离M”。

调整步骤(e)包括步骤:通过-(N’-1)*“比特率”/“帧频”调整假定比特预算,其中“比特率”是比特流的比特率,“帧频”是比特流的帧频,以及N=M=M”。

该方法包括进一步的步骤:根据调整比特预算分配用于编码跟随第二画面的特定GOP中的剩余画面的比特。

2.2由P-画面跟随I-画面

当第一画面是I-画面和第二画面为P-画面时,该方法包括进一步的步骤:根据第二画面的画面类型确定第一画面和最接近的后续P-画面(以显示顺序)之间的实际距离M”;并根据实际距离M”调整GOP中的假定长度N’以提供一个调整的假定长度N”;其中调整步骤(e)响应于调整的假定长度N’。

因此,在调整步骤通过一个因数,M(N’/M”)调整特定GOP中的假定长度N’以提供一个调整的假定长度N”,其中M=M”。

调整步骤(e)包括步骤:通过因数(N”-N’)*“比特率”/“帧频”调整比特预算,其中“比特率”是比特流的比特率,而“帧频”是比特流的帧频。

调整步骤(e)还包括进一步的步骤:通过因数(M”-1’)*“比特率”/“帧频”调整比特预算,其中“比特率”是比特流的比特率,而“帧频”是比特流的帧频,以及M=M”。

这样,不但使用GOP长度而且使用距离M调整比特预算,二者依次影响每个画面的目标比特分配。

该方法包括进一步的步骤:根据调整的比特预算分配编码跟随第二画面的特定GOP中的剩余画面的比特。

该方法包括进一步的步骤:确定是N”>N还是N”<N,其中N是在当前GOP编码N”画面之后,当前GOP的长度。这通过观察在编码N”画面之后到达的画面来实现。例如,如果在编码N”画面之后到达的画面是当前GOP中的P-画面,则N”<N。如果在编码N”画面之后到达的画面是I-画面,这就发出下一个GOP开始的信号,因此N”=N。如果在N”全部被编码之前编码I-画面,则指示N”>N。根据是N”<N还是N”>N进一步调整已调整的比特预算,并且根据进一步调整的比特预算分配用于编码比特流中跟随N”个编码画面的画面的比特。

2.3由B-画面跟随I-画面

当第一画面是I-画面和第二画面为B-画面时,该方法包括进一步的步骤:根据第二画面的画面类型确定第一画面和最接近的后续P-画面(以显示顺序)之间的实际距离M”;并根据实际距离M”调整GOP中的假定长度N’以提供一个调整的假定长度N”;其中调整步骤(e)响应于调整的假定长度N’。

因此,在调整步骤通过一个因数,M(N’/M”)调整特定GOP中的假定长度N’以提供一个调整的假定长度N”,其中M=M”。

调整步骤(e)包括步骤:通过因数(N”-N’)*“比特率”/“帧频”调整假定比特预算,其中“比特率”是比特流的比特率,而“帧频”是比特流的帧频。

该方法包括进一步的步骤:根据调整的比特预算分配用于编码跟随第二画面的特定GOP中的剩余画面的比特。

因此,如上所述,根据是N”<N还是N”>N进一步调整已调整的比特预算,并且根据进一步调整的比特预算分配用于编码比特流中跟随N”个编码画面的画面的比特。

这样,在编码后面的GOPs中使用在一个GOP所了解的关于GOP长度和M,I和/或P-画面之间的距离的信息。具有未修正启动GOP信息的目标比率将会聚在几个GOPs内。

也给出了相应的装置结构。

图1a以连续多个GOP的显示顺序示出画面的顺序刷新序列。

图1b以编码顺序示出图1(a)画面序列。

图2a以其后跟随多个连续GOP的比特流中的起始GOP的显示顺序示出画面的顺序刷新序列。

图2b以编码顺序示出图2(a)画面的序列。

图3示出MPEG-2比特流结构。

图4a-1和4a-2示出根据本发明的用于顺序刷新画面序列的编码方法。

图4b-1和4b-2示出根据本发明的用于非顺序刷新画面序列的编码方法。

图4c-1和4c-2示出根据本发明的图4(b)的编码方法的继续。

图5示出根据本发明的估计GOP长度N”。

图6示出根据本发明的比率控制系统。

图7a-1,7a-2,7b,7c-1,7c-2,7d示出实现本发明的C-语言流程图。

本发明涉及在预先不了解GOP中的画面类型情况下,用于分配编码画面组(GOP)中的连续画面比特的数字视频代码转换器和方法。

示出一种用于数字视频代码转换器的新颖比率控制方案和装置,例如,该代码转换器符合MPEG标准,要求不预先(提前)了解画面类型。所作研究表明在预先了解和不了解画面类型的情况下,使用所提出的比率控制系统确定的画面目标比率十分接近。

MPEG按照时间处理定义了三种画面类型。它们是帧内编码画面(I-画面),正向时间预测编码画面(P-画面),和双向时间预测编码画面(B-画面)。在MPEG视频编码中,输入视频序列画面常常分组为画面组(GOPs),其中每个GOP可以包含一个I-画面,多个P-画面,和可选择的I或P-画面之间的一个或多个B-画面。经常使用两个变量:(1)N-GOP中的画面数,或GOP长度,和(2)M-I或P-画面之间的距离来描述一个GOP的结构。以显示顺序具有N=15和M=3的GOP的实例是:

…Bm-2Bm-1ImBm+1Bm+2Pm+3Bm+4Bm+5Pm+6…Pm+N-3Bm+N-2Bm+N-1Im+NBm+N+1…其中下标是画面的时间标记,并且连续数字表明连续显示的画面。

通常,I-画面比P-和B-画面需要更多的比特用于编码,因为I-画面不使用连续画面之间的时间相关性(例如,帧)。B-画面使用最少的比特数用于编码,这是因为B-画面具有两个时间标记并由此与P-画面相比能够被更有效地进行时间预测。P-画面使用多个比特用于编码,其数量一般处于B-和I-画面所使用的比特数之间。

显然,指定给每个画面用于编码的比特应基于画面类型,或该画面的需要。另外,一个GOP应具有所有三种画面类型,在一个GOP内三种画面类型的组织应该很灵活。因此,为更好地分配用于编码GOP内的画面的比特预算,必须预先了解GOP内的画面类型,或GOP的结构。这种要求对于一个独立的编码器(即,不作为代码转换器一部分的编码器)不存在问题,这是因为编码器能够决定每个画面的类型,并根据画面类型和GOP中的画面排列事先计划所分配的比特。换言之,GOP的结构信息对编码器来说可用。

与独立编码器相反,代码转换器以一种新比率将一个预-压缩比特流转换为另一个比特流。到代码转换器的输入是预-压缩比特流。在处理一个画面之前,代码转换器预先不了解画面的类型,并由此预先不了解预-压缩比特流的GOP结构。

进一步,一些代码转换方案重复使用所接收的预-压缩比特流的运动矢量(MV)场用于以新的数据比率编码输出比特流。在这种情况下,保留预-压缩画面的画面类型。这意味着代码转换器不能控制新输出的比特流的GOP结构。

另外,通过常规方案,有可能从预-压缩比特流提取GOP结构信息。例如,在由前两个I-画面扫描预-压缩比特流之后,代码转换器应能够确定GOP结构。然而,这需要大约一个GOP的处理延迟并需要额外的存储器以保留全部的GOP比特。

本发明公开一种新颖的用于数字视频代码转换器的比率控制系统,该系统符合MPEG标准,不需要预先了解预-压缩比特流的GOP结构。公开一种无处理延迟并且不需要额外的存储器的比率控制方案。该方案可以以任何合理的GOP参数组开始,并且当在代码转换器接收连续的预-压缩画面时,如果必要的话,就逐步修正这些GOP参数。该方案补偿了改变编码器所使用的GOP参数。

另外,我们分析一下在预先了解和不了解预-压缩比特流的GOP结构的情况下由提议的比率控制方案所确定的目标比特比率的差值。我们得出在预先了解和不了解预-压缩比特流的GOP结构的情况下目标比率仅在一个或两个GOPs内趋于相同。我们不但在数字实例而且在真实的视频序列论述目标比率的差值。

下面,在部分1,我们将首先综述用于MPEG视频编码的比率控制。在部分2,我们给出用于MPEG代码转换器的新颖的比率控制。在部分3,我们分析一下在预先了解和不了解GOP结构的情况下由提议的比率控制所确定的目标比率的差值。在部分4,我们给出仿真和比较结果。在部分5讨论结论。

1.用于MPEG视频编码的比率控制

在MPEG视频编码,将所有三种类型的画面(I,P或B)进行块离散余旋变换(DCT)。DCT系数被量化和可变长度编码。所产生的每个画面的比特数与其相应的块DCT画面的复杂性有关。在不参照任何其他画面的情况下编码I-画面,因此,其DCT画面通常需要最多数量的比特。首先前向时间预测P-画面,接着编码其时间预测差值图象。与原始画面相比时间预测差值图象一般包含相当少的信息,因此需要较少比特用于编码。具有两个时间标记的B-画面与P-画面相比常常能被更好地时间预测。因此,B-画面需要最少的比特。一种智能比特分配策略应根据画面的类型,或画面的复杂性指定到画面的比特。

让Xn为一个N个画面的GOP中的画面n的复杂性量度。在MPEG测试模块5(TM5),将画面的复杂性量度定义为画面的平均量化参数和产生的比特数的乘积。在逻辑上,分配给一个画面的比特应与画面的复杂性量度,Xn,即,

Tn=CXn      n=0,1,…,N-1       (1)成正比,其中C是一个常数。这里,我们在画面复杂性量度和编码所需的比特数之间假定一个线性模型。另外,在不存任何偏差的情况下,一个N个画面的GOP应被分配

RGOP,N=N·比特率/帧频           比特             (2)

显然,指定给一个N个画面的GOP内的所有画面的比特总数应等于RGOP,N,即,>>>R>>GOP>,>N>>>=>>Σ>>n>=>0>>>N>->1> >Tn>=>>Σ>>n>=>0>>>N>->1> >CXn>=>C>>Σ>>n>=>0>>>N>->1> >Xn>->->->>(>3>)>>>从公式(1)和(3),我们得出>>Tn>=>>Xn>>>Σ>>n>=>0>>>N>->1> >Xn>>>>R>>GOP>,>N>>>->->->->->>(>4>)>>>

假定所有相同类型的画面,即,I,P或B,具有相同的复杂性量度,这是一个合理的假定,至少对于连续场景是这样。我们仅需要三个复杂性量度,每个画面类型使用一种。即,XI用于I-画面,XP用于P-画面,XB用于B-画面。因此,用于t∈{I,P,B}类型的帧n的目标比率和复杂性量度度,Xn,t∈{I,P,B}可以写为:>>Tn>=>>>X>>n>,>t>>>>>N>1>>>X>1>>+>>N>P>>>X>P>>+>>N>B>>>X>B>>>>>R>>GOP>,>N>>>->->->->->>(>5>)>>>这里N1,NP和NB分别是GOP中的I,P和B-画面的数量。通过公式(5),相同类型的画面被指定相同数量的比特。通过仅在当前GOP的剩余画面考虑剩余比特数分配来进一步修改这种比特分配策略,即,>>Tn>=>>>X>>n>,>t>>>>>n>1>>>X>1>>+>>n>P>>>X>P>>+>>n>B>>>X>B>>>>R>->->->->->>(>6>)>>>这里n1,nP和nB分别是当前GOP中的I,P和B-画面的剩余数量,R是剩余比特数,由>>R>⇐>R>->>Σ>>>n>1>>=>0>>>n>->1> >>T>>n>1>>>->->->->->->>(>7>)>>>定义。这里表示指定陈述。在每个GOP的开始必须将剩余比特数R更新为,R=R+RGOP,N=R+N·比特率/帧频       (8)

我们现在得出只要编码器能够在每个画面具有目标比特,公式(6)也向相同类型画面指定相同数量比特。例如,假定帧n是一个B-画面。帧n实际上或者是I,P或者是B-画面。编码器具有标称比率,对于帧n为Tn。因此,帧n+1的目标比率Tn+1>>>T>>n>+>1>>>=>>>X>>n>+>1>,>t>>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>(>>n>B>>->1>)>>>X>B>>>>>(>R>->>T>n>>)>>->->->->>(>9>a>)>>>>>=>>>X>>n>+>1>,>t>>>>>x>I>>>X>I>>+>>n>P>>>X>P>>+>>(>>n>B>>->1>)>>>X>B>>>>>(>R>->>>X>B>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>n>B>>>X>B>>>>R>)>>->->->>(>9>b>)>>>>>=>>>X>>n>+>1>,>t>>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>(>>n>B>>->1>)>>>X>B>>>>>(>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>n>B>>>X>B>>->>X>B>>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>n>B>>>X>B>>>>)>>R>->->->>(>9>c>)>>>>>=>>>X>>n>+>1>,>t>>>>>n>I>>>X>I>>+>>n>P>>>X>P>>+>>n>B>>>X>B>>>>R>->->->->->>(>9>d>)>>>

正如所看到,帧n+1,Tn+1的目标比率仅依靠帧n+1的类型,即,Xn+1,t。换言之,与帧n的类型(或者为I,P或者为B)无关,帧n+1根据其本身类型被指定相同数目的比特。如果相同类型的画面具有相同的复杂性量度,则表明公式(5)和(6)实际上相同,并且编码器可以在每个画面具有目标比率。然而,公式(6)更为实用,因为其地址改变画面复杂性量度和每个画面在目标和实际比率之间的差值。

实际上,对于不同的画面类型可能具有不同的质量要求。例如,在将来时间预测中从来不使用B-画面作为标记。因此,它们比I-和P-画面更能容忍失真。为说明这种不同的质量要求,对于每种画面类型我们进一步引入一个加权系数,Kn,t,为Tn=CXn,t/Kn,t                        (10)这里比特分配策略(例如,公式5和6)变为:>>>T>n>>=>>>>X>>n>,>t>>>/>>K>>n>,>t>>>>>>N>I>>>X>I>>/>>K>I>>+>>N>P>>>X>P>>/>>K>P>>+>>N>B>>>X>B>>/>>K>B>>>>>R>>GOP>,>N>>>->->->->>(>5>b>)>>>>>>T>n>>=>>>>X>>n>,>t>>>/>>K>>n>,>t>>>>>>n>I>>>X>I>>/>>K>I>>+>>n>P>>>X>P>>/>>K>P>>+>>n>B>>>K>B>>/>>K>B>>>>R>->->->>(>6>b>)>>>当KI=KP=1以及KB=1.4时,公式(6b)与MPEG TM5使用的相同。

比特分配策略(例如,公式5和6)要求预先了解GOP结构,即,给出一对GOP结构变量,N和M时的一个GOP中的I,P和B-画面数,NI,NP和NB,或当前GOP中的I,P和B-画面的剩余数,nI,nP和nB,我们可以使NI=1,NP=N/M-NI以及NB=N-NP-NI。从NI,NP和NB,在编码期间我们也可以计算nI,nP和nB。例如,如果仅编码P-画面,则当前GOP中的P-画面剩余数减少1,即,nP=nP-1。

正如所描述的,不幸的是该信息不能被代码转换器利用。在不完全了解预压缩比特流的GOP结构的情况下,不容易实现智能比特分配策略。代码转换器可以通过扫描前两个I-画面的比特流了解预压缩比特流的GOP结构。然而,这就带来一个GOP的处理延迟并需要额外存储器来保留GOP比特。

2.用于代码转换器的比率控制

我们现在描述一种用于代码转换器的不需要预先了解预压缩比特流的GOP结构的新颖的比率控制系统。所提出的比率控制系统不产生处理延迟并且不要求额外的存储器。可以以任何合理的GOP参数组开始,并随着编码处理逐渐修正这些GOP参数,如果有必要的话。

表1(a)表示所有可能的画面组织,其中下标是画面的以显示顺序的时间标记。每个画面涉及一个帧或场,或帧或场的一部分。例如,本发明与MPEG-4标准的视频对象平面(VOPs)的编码兼容。本发明不但与顺序扫描而且与隔行扫描视频兼容。

对于序列GOP(N=M=I),仅存在I-画面。对于序列GOP(N,M=1),仅存在I-和P-画面。对于序列GOP(N=M),仅存在I-和B-画面。对于序列GOP(N,M),存在I-,P-和B-画面。对于序列GOP(M=1),仅存在P-画面。对于序列GOP(M),仅存在P-和B-画面。

表1(a)的前四种情况是非-顺序刷新序列,这是因为它们具有I-画面。后两种情况(例如,GOP(M=1)和GOP(M))不具有I-画面,但是使用顺序刷新,其中P-画面包含I-分片(slice)。一个I-分片是画面的内编码部分,通常水平扩展通过该画面。I-分片的位置在连续P-画面内变化以刷新连续P-画面的不同部分。因此,使用连续刷新,在描述画面组织时不再必须使用GOP长度N。然而,M仍可用于指示两个连续P-画面之间的距离。尽管可以使用任何相应的测量,例如时间,但是这里按照的画面数测量“距离”。就比特分配而言,我们在N=M比特分配公式(5)设定N=M,NI=0(由于不存在用于顺序刷新序列的I画面),NP=N/M-NI=1,NB=N-NP-NI=N-NP用于顺序刷新。

表1(b)表示表1(a)的画面序列以编码顺序(例如,以比特流顺序)的画面组织的相应形式。如果M=1(序列中不存在B-画面),则编码顺序实际上与显示顺序相同。另一方面,如果M≠1(例如,在连续I-或P-画面之间存在M-1个B-画面),则在M-1个B-画面之前必须编码将来的I-或P-画面。

另外,对于具有M≠1的视频序列中的第一个GOP(例如,初始或非-连续GOP,指定为GOP0),如表2(a)所示,在第一个I-或P-画面之前可能不存在任何B-画面。表2(a)表示以显示顺序,在视频流中的序列标题之后的第一个(初始)GOP的可能的画面组织。初始GOPs被规定为GOP0。例如,对于GOP0(M),第一个画面被规定为P0。当,例如初始得到或重复得到比特流时,可以由代码转换器处理初始GOP。

表2(b)表示以编码顺序的表2(a)的第一个GOP。这里,表示一个具有M≠1的初始GOP,其中在任何B-画面之前编码第二I-或P-画面。以编码顺序的第二画面为I-或P-画面中的任何一个,如表2(b)所示。

图1(a)示出以显示顺序的连续多个GOP的画面的顺序刷新序列。具体地说,来自表1(a)的顺序刷新序列GOP(M)用于表示M=3的P-画面之间的距离,和一个连续(例如,非初始,或打开)的GOP。另外,GOP长度为N=M=3个画面。

在视频序列100,第一GOP110包括画面P7,B8和B9,而第二GOP120包括画面P10,B11和B12,以及第三GOP130包括画面P13,B14和B15简单选择P7的下标“7”作为一个实例。一个后续GOP包括P16作为其第一个画面。

图1(b)示出以编码顺序的图1(a)的画面序列。编码的视频序列150对应来自表1(b)的序列GOP(M)。由于B8和B9被时间预测在P10的后面,在编码序列150中B8和B9跟随P10。类似地,B11和B12跟随P13,B14和B15跟随P16

图2(a)示出在连续多个GOP跟随的比特流中的初始GOP中以显示顺序的画面的顺序刷新序列。具体地说,来自表2(a)的顺序刷新序列GOP0(M)用于表示M=3的P-画面之间的距离,和一个N=M=3个画面的GOP长度。

在视频序列200,第一,初始GOP210包括画面P0,B1和B2,而第二连续GOP220包括画面P3,B4和B5,以及第三连续GOP230包括画面P6,B7和B8。一个后续GOP包括P9作为其第一个画面。

表1(a)GOP(N=M=1):    …  Im-1  Im    Im+1  Im+2  …GOP(N,M=1):    …  Pm-1  Im    Pm+1  Pm+2  …  Pm+N-1    Im+N  Pm+N+1  …GOP(N=M):       …  Bm-1  Im    Bm+1  Bm+2  …  Bm+M-1    Im+M  Bm+M+1  …GOP(N,M):       …  Bm-1  Im    Bm+1  Bm+2  …  Bm+M-1    Pm+M  Bm+M+1  …    Pm+2M  …    Im+N  …GOP(M=1):       …  Pm-1  Pm    Pm+1  Pm+2  …GOP(M):          …  Bm-1  Pm    Bm+1  Bm+2  …  Bm+M-1    Pm+M  Bm+M+1  …    Pm+2M  …

表1(b)GOP(N=M=1):  Im    Im+1     Im+2        …GOP(N,M=1):  Im    Pm+1     Pm+2        …  Pm+N-1   Im+N    Pm+N+1  …GOP(N=M):     Im    Bm(M-1)   Bm(M-1)+1     …  Bm-1    Im+M    Bm+1    …GOP(N,M):     Im    Bm(M-1)   Bm(M-1)+1     …  Bm-1    Pm+M    Bm+1    …    Bm+M-1    Pm+2M    …    Im+N    …GOP(M=1):     Pm    Pm+1     Pm+2        …GOP(M):        Pm    Bm(M-1)   Bm-(M-1)+1    …  Bm-1    Pm+M    Bm+1    …    Bm+M-1    Pm+2M    …

表2(a)GOP0(N=M):I0    B1  B2  …  BM-1  IM  BM+1  …  I2M    …GOP0(N,M):I0    B1  B2  …  BM-1  PM  BM+1  …  B2M-1  P2M  …  P3M  …  IN  …GOP0(M):   P0    B1  B2  …  BM-1  PM  BM+1  …  P2M    …

表2(b)GOP0(N=M):I0    IM    B1  B2  …  BM-1  I2M  BM+1  …GOP0(N,M):I0    PM    B1  B2  …  BM-1  P2M  BM+1  …  B2M-1  P3M  …  IN  …GOP0(M):   P0    PM    B1  B2  …  BM-1  P2M  BM+1  …

图2(b)示出以编码顺序的图2(a)的画面序列。编码视频序列250对应来自表2(b)的序列GOP0(M)。由于B1和B2被时间预测在P3的后面,在编码序列250中B1和B2跟随P3。本质上,使用P0用于向后时间预测的B-画面不出现,因此,P3,B1和B2跟随P0。类似地,B4和B5跟随P6,B7和B8跟随P9

图3示出MPEG2比特流结构。序列层300包括一个序列标题302,该标题由多个GOP,例如,GOP304,306和308跟随,GOP304,306和308由附加序列标题跟随,并且附加序列标题包括序列标题312。一个GOP层320包括一个GOP标题322,该标题由来自多个画面,例如,画面324,326和328的数据跟随。画面层330包括一个画面标题332,该标题由多个分片,例如,分片334和336跟随。分片层335包括分片标题337,该标题由多个宏数据块,例如宏数据块338和339跟随。宏数据块层340包括宏数据块标题342,由多个数据块,例如,数据块344,346和348跟随。数据块层包括DCT系数352。

对于给定的预压缩比特流,代码转换器可以在比特流的任何地方开始处理。最初,代码转换器将跳过所有比特,直到到达序列标题300为止,其中序列标题300包含关于画面尺寸,帧频的信息,和类似信息。可选地,该GOP标题322可以跟随在序列标题302后面(仅用于非顺序刷新)。如果一个GOP标题不跟随序列标题302,则该比特流明确地为非顺序刷新序列。另外,该比特流可以,或不可以为顺序刷新序列。接着为画面层330。

立即跟随序列标题的画面(即,GOP中的第一画面,即,画面324)可以是I-画面或P-画面。如果其为I-画面,则比特流为非顺序刷新序列。相反,比特为顺序刷新序列。本发明的比特分配程序对于顺序刷新和非顺序刷新的比特流稍有不同。在下面的两个分段中,我们详细描述二者。

将使用下面的标注:

N,M-GOP参数,N和M的实际值(即,反映真实的GOP结构);

N’,M’-GOP参数,N和M的初始假定值;

N”,M”-GOP参数,N和M的(当前)更新值;

NI,NP,NB-分别为GOP中的I,P和B的画面数;

nI,nP,nB-分别为当前GOP中的剩余I,P和B的画面数;

I-当前GOP中的剩余比特数;

Bit_rate-可变的每秒比特的有效输出比特率(我们假定比特率对代码转换器可变);

Frame_rate-每秒帧的有效Frame_rate(帧频),由于repeat_first_field(重复-第一-场)的出现该有效帧频可以与序列标题体现的帧频不同(我们假定帧频对代码转换器可变);

div-;将结果舍位到零的整除;和-指定状态(从右到左)。

(i)顺序扫描

对于顺序扫描序列,将不存在GOP标题,立即跟随序列标题的第一画面(以编码顺序)必须为P-画面。看表1(b)中的序列GOP(M=I)和GOP(M)和表2(b)中的GOP0(M)。取代等待正确地确定M,我们转向处理具有任何合理的假定M的第一画面,被称为M’,以及计算目标比特率中的R-RGOP,M=M’·(bit-rate/frame-rate)比特的比特预算(看公式6)。注意到通过M’,我们可以使NP=1和NB=M’-NP。例如,参照图1(a)或图2(a),这里P-画面之间的距离为M’=3,一个GOP中的P-画面的数量为一个,一个GOP中的B-画面的数量为二个。

以编码顺序,GOP中的第二画面可以是B-画面(GOP(M))或者P-画面(GOP(M=I)或GOP0(M)),分别如表1(b)和2(b)所示。

在任何一种情况中,我们可以从编码顺序的GOP的前两个画面的时间标记计算M的实际值。具体地说,让tem_ref_picture1和temp_ref_picture2分别为第一和第二画面的时间标记。时间标记可以嵌入画面标题。如果第二画面为一个B-画面,例如,表1(b)中的序列(GOP(M)),则M的修正值,称为M”,为:

M”=temp_ref_picture1-temp_ref_picture2+1(12)

例如,在图1(b),在编码视频序列,将P10和B8分别考虑为第一和第二画面。接着,temp_ref_picture1是P10(例如,“10”)的时间标记,temp_ref_picture2是B8(例如,“8”)的时间标记,以及M”=10-8+1=3。注意到时间标记涉及画面的显示顺序。

同样,如果第二画面为P-画面,例如,表1(b)中的(GOP(M=1))或表2(b)中的(GOP0(M))序列,则P-画面之间距离的修正值为:

M”=temp_ref_picture2-temp_ref_picture1(13)

例如,在图2(b),在编码视频序列,将P0和P3分别作为第一和第二画面。接着,temp_ref_picture1是P0的时间标记(例如,“0”),temp_ref_picture2是P3的时间标记(例如,“3”),并且M”=3-0=3。

通过M的修正值,即,M”,由此调整比特的剩余数,R(看公式7)。具体地说,如果第二画面是B-画面,由于使用表1(b)的序列(GOP(M)),R更新为>>R>=>R>+>>M>>′>′>>>>>->M>>′>>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>14>)>>>

正如所看到的,对于M”>M’(P-画面之间的实际距离大于假定距离),第一P-画面被指定相对较多的比特,因此,剩余画面将被指定相对较少比特。对于M”<M’(P-画面之间的实际距离小于假定距离),第一P-画面被指定相对较少的比特,因此,剩余画面将被指定相对较多比特。

另一方面,如果第二画面为P-画面,例如,使用表1(b)的序列(GOP(M=1)),或表2(b)的序列(GOP0(M)),在编码视频序列的前两个P-画面之间不存在B-画面。因此,应从R中减去为两个P-画面(以编码顺序)之间的假定M’-1个B-画面分配的比特,即,>>R>=>R>->>(>>M>′>>->1>)>>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>15>)>>>

我们接着设定M=M’。在第一M画面的结尾,如果代码转换器能够满足每个画面的目标比率,则将有R=0。因此,对于下一个M画面,我们具有R=RGOP,M=M·(bit_rate/frame_rate)比特的比特预算。为得出M中的任何后续变化,在每个P-画面之后我们检查M值。

图4(a)示出根据本发明的用于顺序刷新画面序列的编码方法。将前述的用于顺序刷新序列的比特分配技术总结如下。

在模块400,在代码转换器接收预压缩的数字视频比特流。编码画面为编码顺序。在模块405,处理比特流以检测序列标题。在模块410,确定跟随序列标题的第一画面的画面类型。如果其为I-画面,在图4(b)中的模块“A”继续处理。

如果跟随序列标题的第一画面为P-画面,在模块415继续处理,其中设定假定距离M’。在本文M’被定义为跟随序列标题的第一画面,和以显示顺序的下一个P-画面之间的距离。在模块420,根据M’、比特流的比特率和帧频确定假定比特预算R。在模块422,根据公式6b设定目标比特率T。在模块425,根据T编码第一画面。在模块430,如果下一个画面(例如,第二画面)为P-画面,则根据公式13在模块435确定实际距离M”。在模块440,使用公式15调整比特预算R。在模块445,将M设定到M”。

在模块430,如果序列中的下一个画面,例如,第二画面,为B-画面,则根据公式12在模块450确定实际距离M”。在模块455,使用公式14调整比特预算R。在模块460,将M设定到M”。在模块462,设定目标比特率T(例如,使用公式6)。下面,在模块465根据T编码剩余M-1个画面(包括第二画面)。

在模块470,处理下一个画面。例如,这可以是下一组M”画面的第一画面。在模块475,处理返回,例如,到模块415。然而,注意到,取代分别在模块415和420盲目地假定长度和比特预算,可以使用在前一组M”画面确定的值。然而,例如,在每个P-画面之后可以鉴定实际距离M”。

(ii)非顺序刷新

对于非顺序刷新,存在一个跟随顺序标题的可选GOP标题。接着,是画面层。立即跟随序列标题,或GOP标题的第一画面必须是I-画面。对于一种智能比特分配,我们必须了解N和M。然而,我们在确定第一画面的目标比率(看公式6)时通过使用任何合理N和M对,即,N’和M’,以及R=RGOP,M=N’·(bit_rate/frame_rate)比特的比特预算开始预压缩比特流的代码转换。

注意到使用N’和M’,我们得到NI=1,NP=N’/M’-NI和NB=N’-NI-NP。与顺序刷新类似,可以从前两个画面的时间标记计算M的实际值,即,M”。

如果第二画面为I-或P-画面,则在计算M值时使用公式(13)。同样,第二画面为B-画面,则使用公式(12)。接着,我们设定M=M”。

如果第二画面也是I-画面(GOP(N=M=1))和GOP0(N=M)),我们实际上也得到修正值N,即,N=M,如表1(b)和2(b)所示。由此,剩余比特数R(看公式7)调整为:>>R>=>R>->>(>>N>′>>->1>)>>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>16>)>>>

这是因为在第一和第二I-画面之间不存在P-和B-画面。因此,应从R扣除分配给两个I-画面之间的假定N-1(P和B)个画面的比特。

如果第二画面不是I-画面,将花费较长时间得到N的修正值,大约为一个GOP。假定N’可能不被修正的M整除。因此,我们必须调整N’,从而,调整nP和nB。我们使用修正M值将N调整到N’,以及nP和nB

N”=(N’/M)·M;             (17)

nP=N”/M=1;和             (18a)

nB=N”/M-nP-1。            (18b)

我们接着使用N”将剩余比特数,R(看公式7)调整为>>R>=>R>+>>(>>N>>′>′>>>->>N>′>>)>>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>19>)>>>

另外,如果第二画面为表1(b)和2(b)所示的P-画面,GOP(N,M=1)或GOP0(N,M),则剩余比特数,R需要附加调整为>>R>=>R>->>(>M>->1>)>>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>19>b>)>>>这是因为在第一画面之前存在比假定的少的M-1个B-画面。只存在三种情况,即,1.N”=N,即,当前GOP长度N”等于实际GOP长度N;2.N”<N,即,当前GOP长度N”小于实际GOP长度N;和3.N”>N,即,当前GOP长度N”大于实际GOP长度N。显然,如果N”=N,我们在处理N”画面之后到达I-画面-开始第二个GOP。我们得到一个修正的N,因此,我们保持该N值。

如果N”<N,GOP长度N”小于实际GOP长度。在至少M个画面假定GOP长度小于实际GOP长度,这是由于GOP结构的特性所致(看表1(b)和2(b))。这里,我们假定在GOP内M值将不改变。

注意到如果在一个GOP内M存在变化,则在一个GOP内可以周期性地检查M,例如在每个I-和/或P-画面之后。另外,如果在一个GOP内M变化,因此应调整N和R。

我们将N”个画面的GOP扩展另外的M个画面,即,

N”=N”+M,       (21)并通过增加用于M个附加画面的RGOP,M调整R,即,>>R>=>R>+>>R>>GOP>,>M>>>=>R>+>M>•>>>bit>_>rate>>>frame>_>rate>>>->->->->>(>22>)>>>

如果扩展的GOP长度仍小于实际GOP长度,我们就重复上述过程直到到达实际GOP的结尾为止。

如果N”>N,则GOP长度大于实际的GOP长度。在实际GOP的结尾,我们将具有一个修正的GOP长度,N并且将修正的长度N用于剩余的GOPs。由于假定GOP长度(N”)大于实际GOP长度(N),将从编码第二实际GOP的画面的第一实际GOP剩余一些比特。因此分配给第二实际GOP的比特必须调整为:>>R>=>2>>R>>GOP>,>N>>>->>(>>R>>GOP>,>>N>>′>′>>>>>->R>)>>=>2>N>•>>>bit>_>rate>>>frame>_>rate>>>->>(>>N>>′>′>>>•>>>bit>_>rate>>frame>>->R>)>>·>·>·>·>·>·>·>·>·>·>·>·>·>·>·>·>·>·>>(>23>)>>>这里RGOP,N”-R为用于编码第一N个画面的比特数。

图4(b)示出根据本发明的用于非顺序刷新画面序列的编码方法。将上述用于非顺序刷新序列的比特分配技术总结如下。

模块“A”的处理从图4(a)的模块“A”继续。在模块500,提供一个假定GOP长度N’,在模块502,提供一个假定距离M’。这里的M’是GOP中的第一I-画面和以显示顺序的下一个I-或P-画面之间的距离。该距离可能与GOP长度相同或者不相同。通常,应选择N’和M’的兼容值,例如,N’>M’以及N’可被M’整除。在模块504,根据N’提供假定比特预算R,以及在模块505,例如,使用编码GOP中的画面的公式6确定目标比率T。

在模块506,编码GOP中的第一画面。在模块508,如果下一个画面,例如,GOP的第二画面,是I-画面,则处理在模块510继续,这里实际距离M”由公式13确定。在模块514,将M设定到M”,并在模块516将N设定到M,这是因为距离M”和GOP长度相同。

在模块518,根据公式16调整比特预算并在模块524处理返回到,例如,模块500。注意到,在模块500和502,将N’和M’分别设定到前一个GOP的值N和M。可以鉴定每个GOP的N和M。

在模块508,如果下一个画面,例如,GOP中的第二画面为P-画面,处理在模块530继续,这里使用公式13确定实际距离M”。在模块532,将M设定到M”。在模块534,GOP长度更新为N”=M[N’/M’]。在模块536,使用公式18调整当前GOP中的剩余B-画面数,nB。在模块538,使用公式19调整比特预算,并在模块540,使用公式19a再次调整比特预算,并且处理在“B”继续。

在模块508,如果下一个画面,例如,GOP中的第二画面为B-画面,处理在模块542继续,这里使用公式12确定实际距离M”。在模块544,将M设定到M”。在模块546,GOP长度更新为N”=M[N’/M’]。在模块548,使用公式18调整当前GOP中的剩余B-画面数,nB。在模块550,使用公式19调整比特预算,并且处理在“B”继续。

图4(c)示出根据本发明的图4(b)的编码方法的继续。处理从图4(b)的“B”继续。在模块552,使用公式6设定目标比特率T,并在模块554,将一个计数器设定为1。在模块556,编码GOP中的下一个画面。在模块558,将计数器增加1。“计数器”本质上跟踪GOP中当前画面的位置。在模块560,确定是否已到达当前GOP的结尾。如果是这样,在方框562确定计数器是否等于N”。如果是这样,就指示N”与N,实际的GOP长度,相同。本质上,假定GOP长度N”被修正。处理在模块566继续,在这里编码下一个GOP。

如果模块562的条件不满足,就指示N”>N(例如,假定GOP长度N”太大),在模块564使用公式23调整比特率。处理在模块566继续,在这里编码下一个GOP。

如果在模块560还未到达当前GOP的结尾,则在模块570确定计数器是否等于N”。如果不等于,处理在模块556继续。如果在模块570计数器等于N”,就指示N”<N(例如,假定GOP长度N”太小)。在模块572,将假定GOP长度N”增加M。在模块574,使用公式22调整比特预算,在模块576,编码下一个M画面,并在模块578确定是否已到达当前GOP的结尾。如果未到达,处理在模块572继续,在这里将假定GOP长度N”再次增加M。

在模块578,当到达当前GOP的结尾时,处理在模块566继续,在这里编码下一个GOP。

参照图5可以进一步理解图4(c)的编码方法。

图5示出根据本发明的估计GOP长度N”。在500,一般以显示顺序示出一个画面序列。第一GOP,GOP(N,M)520在I-画面502开始,下一个GOP580在I-画面510开始。后续GOP在I-画面515开始。

估计GOP长度N”530等于实际GOP长度N。然而,估计GOP长度N”540小于实际GOP长度N两个M距离542和544。特别是,估计GOP长度N”540从I-画面502扩展到P-画面504,M-距离542从P-画面504扩展到P-画面506,以及M-距离544从P-画面506扩展到I-画面510。估计GOP长度N”550从I-画面502扩展到P-画面512,因此大于实际GOP长度。通常,最初应将N”选择为I-和/或P-画面之间的估计距离的倍数。

下面给出不但用于顺序刷新而且用于非顺序刷新的比特分配程序的C-语言伪代码。由图7(a)-7(d)的流程图表示相同的算法。一个单独的比特流在顺序刷新和I-画面(非顺序)刷新模式之间可以任意切换。

    /**下面是变量的简要描述:**N    估计打开的GOP长度(画面)*M    连续B-画面加1的数*N’  初始猜测的画面中的GOP长度*M’  初始猜测的连续B-画面加1的数*N”  更新的估计打开的GOP长度*M”  更新的连续B-画面加1的数*R    该GOP中的剩余比特数*n    该GOP中的剩余画面数*ni   该GOP中的剩余I-画面数*np   该GOP中的剩余P-画面数*nb   该GOP中的剩余B-画面数*Xi  I-画面的复杂性*Xp  P-画面的复杂性*Xb  B-画面的复杂性*Ki  I-画面的复杂性除法器*Kp  P-画面的复杂性除法器*Kb  B-画面的复杂性除法器*X   时间变化的复杂性*T   当前画面类型的目标比特数*Pict_type      当前画面类型*Prev_pict_type 以编码顺序的前一个画面类型*Tem_ref        当前画面时间标记*Prev_temp_ref  前一个画面时间标记(编码顺序)*Prog_refresh   如果不处理顺序刷新则为非零
    *GOP_flag      如果GOP标题在当前画面前面则为非零*Seq_hdr_flag  如果序列标题在当前画面前面则为非零*bit_rate()    当前平均输出比特率*Frame_rate()  使用repeat_first_field的平均显示帧频注意:1)“div”操作表示舍位为零的计算机整除。2)一个GOP在编码顺序中以I-画面开始并扩展到下一个I-画面,与GOP语法是否出现在比特流中无关。当使用顺序刷新时,一个GOP由一个P-画面加下面的连续B-画面的运算组成。*/下面为C-语言程序。FindSequenceHeader();N=N′;   //(N'%M′)=0;N is estimated open GOP lengthM=M′;R=0;n=0;prev_pict_type=B_PICTURE;for(;;){/*
    *get_picture_header()parses the video sequence and the optional*GOP layer,and returns the picture type and temporal reference*of the next coded picture.*/pict_type=get_pict_header(&temp_ref,&GOP_flag,&seq_hdr_flag);if(seq_hdr_flag)prog_refresh=(pict_type!=I_PICTURE);switch(pict_type){case I_PICTURE:if(prev_pict_type!=B_PICTURE){/**GOP(N=M=1),GOP(N,M=1)or GOP0(N=M).RecalculateM,*start new GOP and correct R for missing B pictures.*/M”=GOP_flag?(temp_ref+1):((temp_ref-prev_temp_ref+1024)&0x3FF);R-=n*bit_rate()/frame_rate();M=M″;N=(prev_pict_type=I_PICTURE)?M:(N-n);n=0;}if(prog_refresh)    //End of progressive refreshN=N′;prog_refresh=0;if(n<=0){//GOP length is equal to expected length
    R+=N*bit_rate()/frame_rate();}else{    //GOP length is shorter than expectedN-=n;N=(N div M)*M;R+=(N-n)*bit_rate()/frame_rate();}n=N;ni=I;np=N/M-1;nb=N-ni-np;X=Xi/Ki;prev_temp_ref=temp_ref;break;case P_PICTURE:If(prev_pict_type!=B_PICTURE){/**GOP(M=1)or GOP0(M)    [progressiverefresh]*GOP(N,M=1)or GOP0(N,M)    [non-progressiverefresh]*/M″=(temp_ref_prev_temp_ref+1024)&0x3FF;R-=(M-1)*bit_rate()/frame_rate();nb-=M-1;n-=M-1;if((M″!=M)&&!prog_refresh){
        N″=(N div M″)*M″;    //open,not actual,GOPlengthn+=(N″-N)-(M″-M);R+=((N″-N)-(M″-M)*bit_rate()/frame_rate();np=n div M″;nb=n-np;N=N″;}M=M″;}if(n<=0){/**End of GOP in progressive refresh mode or GOP is*longer than expected in non-progressive refreshmode.*/N+=M;R+=M*bit_rate()/frame_rate();n=M;ni=0;np=1;nb=M-1;}X=Xp/Kp;prev_temp_ref=temp_ref;break;
    case B_PICTURE:if(prev_pict_type!=B_PICTURE){/**GOP(N=M),GOP(N,M),GOP0(N,M)[non-progressiverefresh]*GOP(M)[progressive refresh]*/M″=(prev_temp_ref-temp_ref+1025)& 0x3FF;if(M″!=M){if(prog_refresh){nb+=M″-M;R+=(M″-M)*bit_rate()/frame_rate();}else{N″=(N div M″)*M″;n+=N″-N;R+=(N″-N)*bit_rate()/frame_rate();np=(n+1)div M″-1;nb=n-np;N=N″;}M=M″;}}X=Xb/Kb;break;}
    /**Calculate the target bit rate*/T=X*R/(ni*Xi/Ki+np*Xp/Kp+nb*Xb/Kb);switch(pict_type){    //Decrement pic count for each picture typecase I_PICTURE:ni--;break;case P_PICTURE:np--;break;case B_PICTURE:nb--;break;}n=n-1;    //Number of pictures left in GOPprev_pict_type=pict_type;/**transcode_picture() does the actual transcoding which maintains*in original picture type(I,P or B).This function returns*the actual size of the transcoded picture in bits. This func-*tion updates the complexity(Xi,Xp,Xb)for each picture type.*/R-=transcode_picture(pict_type,T);}

在图7(a)-7(d)中的流程图700表示该伪代码。注意,与用于其他地方相同,ni,np和nb分别与nI,nP和nB相同。

方框702表示搜索视频序列标题以便得到开始代码转换的必要参数。在这里进行用于代码转换的循环的初始化。

方框704调用使用画面标题和所有较高级语法的“get_pict_header()”。返回画面类型(I,P或B画面)。如果遇到一个GOP标题则“GOP_flag”为真(非零);如果在当前编码画面之前和前一个编码画面之后出现一个视频序列标题。则“seq_hdr_flag”为真(非零)。

方框706测试“seq_hdr_flag”。如果为真,如果在方框708当前画面不是I-画面,则将“prog_refresh”设定为1(真)。

方框710根据画面类型切换状态。尽管在代码或流程图中未示出,在该算法与I-画面一样处理MPEG-2 D-画面。

如果前一个画面类型不是B-画面(方框712),则从时间标记确定新的M值。如果GOP被缩短,从“R”删除由于所要求的GOP长度所造成的剩余比特并且设定“M”,“N”,“n”的新值(方框714)。“R”是剩余的目标比特数(不是实际的比特数)以编码剩余的GOP。如果实际的GOP尺寸不同,则比特差值(正或负)保留在“R”并影响下一个GOP的目标尺寸。这就形成一个反馈环以将平均GOP尺寸变为“N*bit_rate()/frame_rate()”。

函数“bit_rate”返回当前目标代码转换器输出比特率,从信道容量或统计多路复用考虑该比特率可能变化。函数“frame_rate()”是平均代码帧频,该帧频是由各种代码画面中的repeat_first_field标记所进行的修改的视频序列标题规定的。“bit_rate()/frame_rate()”的量表示所要求由代码转换器输出的当前平均编码画面尺寸(比特)。它是一个平均值,因为未考虑不同的MPEG画面类型。这样对于一个GOP的目标比特数,“N*bit_rate()/frame_rate()”,是平均画面尺寸的N(画面的GOP长度)倍。

如果以顺序刷新模式操作代码转换器,该模式是不可能的,因为当前画面是I-画面并且将N设定为初始猜测的GOP长度(方框716和718)。

如果720的条件为真,则修正值“N”已被使用。在这种情况下,使用一个新的GOP长度N所必须的比特数更新R(方框722)。如果720的条件为假,则前一个估计的“N”为错误的(GOP小于所要求的)并由此更新N和R(方框724)。

方框726根据GOP类型,GOP(n)中的画面数,将画面类型重新设定到计数器(“ni”“np”,“nb”),计算标准的I-画面复杂性(X)并更新前一个画面类型。

方框728为切换状态下的P-画面的开始。如果前一个画面不是B-画面(方框730),则从时间标记计算一个新的M值(M”)。两个10-比特时间标记数之间的差值为负,产生绕回;这就是增加1024的原因。当未产生绕回时,表示二进制数1111111111的十六进制数的0X3FF移位210比特,产生正差值;否则增加1024使得负差值为正并且比特-法则与操作不修改该结果。由于前一个画面不是B-画面,可以要求潜在的修正到“n”(GOP中剩余的画面数),“nb”(GOP中剩余的B-画面数)和“R”(为GOP中剩余画面分配的比特数)。

如果M已改变并且代码转换器不处于顺序刷新模式(方框732)。则在方框734进行修正到“N”,“n”,“np”,“nb”和“R”。

方框736更新M(在M”中前一次计算的)。

如果已到达GOP的结尾,(n小于或等于零-方框738),则GOP实际上比希望的长。在这种情况下,在方框740更新值“N”,“R”,“n”,“ni”,“np”和“nb”以反映增加的M画面GOP长度(一个P-画面和M-1个B-画面)。

方框742计算标准的P-画面复杂性,“X”,和将“prev_temp_ref”重新设定为当前的时间标记。

对于B-画面,其中前一个画面不是B-画面(方框744中的条件),从时间标记的差值计算M的新值(看方框746)。该计算就提供了可以绕回10-比特时间标记的可能性(因此,+1024和屏蔽到10比特)。

如果M值已改变(方框748中的测试条件),则根据“prog_refresh”必须更新状态变量(方框750)。在顺序刷新情况下,必须修改“nb”和“R”。如果I-画面被顺序刷新,则“N”,“np”,“nb”,“n”和“R”都需要改变(方框754)。

在方框758计算B-画面的新的标准复杂性。

在切换状态之后,在方框760计算下一个画面的目标尺寸,“T”。当被代码转换到新的比特率时该数字为当前画面的要求尺寸。由“transcode_pictyre()”返回的实际尺寸用于减少R(看方框770)。在计算“T”之后,在GOP中的保留的画面数为“n”,并且必须减少当前类型的画面数(“ni”“np”或“nb”)(看方框762到768)。

3.目标比特的差值

使用不同的GOP参数组确定的画面的目标比特率可以不同(看公式5和6)。我们现在分析在修正和不修正起始GOP结构的情况下目标比率的差值。为使分析简化起见,我们假定:

1.代码转换器可以满足每个画面的目标比率。这就暗示在GOP结尾的剩余比特数等于零,并且一个N个画面的GOP被准确分配

RGOP,N=N·(bit_rate/frame_rate)比特。

2.在一个GOP之内,所有相同类型的画面具有相同的复杂性量度。

3.我们具有一个修正的M值。事实上,我们可以刚好在读取第二画面的标题之后具有一个修正的M。

注意到,上面的假定仅用于简化分析,对于真实的代码转换器可能不会是100%正确。例如,一个代码转换器可能不会100%地满足一帧的目标比率,因此,在一个GOP的结尾,剩余比特数R可能不是零。

使用给出的条件1和2,可以得出公式(5)和(6)是一样的,即,GOP内的所有相同类型的画面被指定相同的比特数。在分析目标比率的差值时我们使用公式(5)。假定使用如下:

N,M-->NI,NP,NB的一组GOP参数编码预压缩比特流。

为进行比较,我们开始具有两个不同GOP结构的预压缩比特流的代码转换,一个具有修正GOP结构(I),第二个具有未修正GOP结构(II),它们表示如下:

起始GOP(I):     N,M-->NI,NP,NB

起始GOP(II):    N’,M’-->NI,NP,NB

让Tn和T’n分别为具有GOP(I)和GOP(II)的帧n的目标比率。两个目标比率之间的差值为:>>Δ>=>>T>n>>-sup>>T>n>′sup>>=>>(>1>->>>>T>′>>n>>>T>n>>>)>>•>>T>n>>->->->->->>(>24>a>)>>>>>=>>(>1>->>>>X>>n>,>t>>>>K>>n>,>t>>>>>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>>>•>>R>>GOP>,>>N>′>>>>÷>>>>X>>n>,>t>>>>K>>n>,>t>>>>>>N>I>>>>X>I>>>K>I>>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>R>>GOP>,>N>>>)>>•>>T>n>>->->>(>24>b>)>>>>>=>>(>1>->>>>N>I>>>>X>I>>>K>I>>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>>>•>>>N>′>>N>>)>>>T>n>>->->->->>(>24>c>)>>>>>=>>>>(>>>NN>′>>I>>->>N>′>>>N>I>>)>>>>X>I>>>K>I>>>+>>(>>>NN>′>>P>>->>N>′>>>N>P>>)>>>>X>P>>>K>P>>>+>>(>>>NN>′>>B>>->>N>′>>>N>B>>)>>>>X>B>>>K>B>>>>>(>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>)>>>•>>1>N>>•>>T>n>>->->>(>24>d>)>>>

为更好地理解目标比特率的差值,让我们检查两个数字实例。在第一个实例,我们假定起始GOP(II)小于实际的GOP,即,

N=15 M=3-->NI=1 NP=4 NB=10

N’=12 M’=3-->N’I=1 N’P=3 N’B=8

如果我们设定KI=KP=1和KB=1.4,并使用如MPEG TM5所述的复杂性量度,即,

XI=160·bit_rate/frame_rate

XP=60·bit_rate/frame_rate    (25)

XB=40·bit_rate/frame_rate

则两个目标比率之间的差值如下:>>Δ>=>>T>n>>->>>T>′>>n>>=>>>>(>15>->12>)>>>X>I>>+>>(>15.3>->12.4>)>>>X>P>>+>>(>15.8>->12.10>)>>>X>B>>/>1.4>>>(>>X>I>>+>3>>X>P>>+>8>>X>P>>/>1.4>)>>>•>>1>15>>•>>T>n>>>

=3.5%·T    (26)这里,通过使用本发明的比率控制系统在预先了解GOP结构情况下的目标比率比预先不了解GOP结构情况下的目标比率高3.5%。较短的GOP导致所有三种类型的画面的较小目标比率。

在第二个数字实例,起始GOP(II)具有大于实际GOP的长度,即,

N=15 M=3-->NI=1 NP=4 NB=10

N’=18 M’=3-->N’I=1 N’P=5 N’B=12则目标比率之间的差值如下:>>Δ>=>>T>n>>->>>T>′>>n>>=>>>>(>15>->18>)>>>X>I>>+>>(>15.5>->18.4>)>>>X>P>>+>>(>15.12>->18.10>)>>>X>B>>/>1.4>>>(>>X>I>>+>5>>X>P>>+>12>>X>B>>/>1.4>)>>>•>>1>15>>•>>T>n>>>

=-1.7%                              (27)这里,通过使用本发明的比率控制系统在预先了解GOP结构情况下的目标比率比预先不了解GOP结构情况下的目标比率小1.7%。较长的GOP导致较多的比特指定给所有三种类型的画面。

根据起始GOP小于还是大于实际GOP长度,保留目标比特率中的差值直到起始GOP或者实际GOP的结尾为止。

如果起始GOP比实际GOP短(即,N’<N),在起始GOP的结尾,我们通过附加比特RGOP,M将N’画面的GOP扩展M个画面。因此,剩余比特数等于>>R>=>R>+>>R>>GOP>,>M>>>=>M>•>>>bit>_>rate>>>frame>_>rate>>>->->->->->>(>28>)>>>

注意到,我们在N’画面的起始GOP的结尾具有假定的R=0。附加的M个画面实际上形成另一个N=M的GOP,该GOP具有N’I=0,N’P=1以及N’B=M-1,和M·(bit_rate/frame_rate)比特的比特预算。或者为P或B型的M个附加画面的目标比率中的差值简化为:>>Δ>=>>T>n>>->>>T>′>>n>>=>>>>(>->M>>N>I>>)>>>>X>I>>>K>I>>>+>>(>N>->M>>N>P>>)>>>>X>P>>>K>P>>>+>>(>>>NN>′>>B>>->>MN>B>>)>>>>X>B>>>K>B>>>>>(>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>)>>>•>>1>N>>•>>T>n>>->->->>(>29>)>>>对于第一数字实例,目标比特中的差值为:>>Δ>=>>T>n>>->>>T>′>>n>>=>>>>(>->3>)>>>X>I>>+>>(>15>->3.4>)>>>X>P>>+>>(>15.2>->3.10>)>>>X>B>>/>1.4>>>(>>X>P>>+>2>>X>B>>/>1.4>)>>>•>>1>15>>>>•>T>>n>>=>17.0>%>•>>T>n>>->->->>(>30>)>>>

这里,通过本发明的比率控制系统预先了解GOP结构情况下的目标比率比预先不了解GOP结构情况下的目标比率高17.0%。相对较多的比特指定给扩展GOP的画面,这是因为相对较少的比特指定给前一个画面。如果M个画面的扩展GOP还未结束N个画面的实际GOP,我们重复上面程序直到到达实际GOP的结尾为止。M个画面的扩展GOPs中的画面的目标比率的差值将保持相同,这是因为所有的M个画面的扩展GOPs具有相同模式的画面组织和相同的比特预算。

在N个画面的第一实际GOP的结尾以及在M个画面的最后扩展GOP的结尾,我们具有关于具有保留比特数R=0的实际GOP结构的完整信息。因此,从第二GOP,在目标比特将不存在差值。在预先了解GOP结构和预先不了解GOP结构情况下通过本发明的比率控制系统来自第二实际GOP的目标比率相同。

另一方面,如果假定起始GOP长度大于实际的GOP长度(即,N’>N),在实际的GOP结尾,我们具有关于实际GOP结构的完整信息,但是剩余比特数R≠0。即,将存在某些剩余比特以在第二(实际)GOP分配。因此,代替简单给出到第二(实际)GOP的RGOP,N比特,我们必须将R调整为R=2 RGOP,N-(RGOP,N,-R)(看公式23)。具有修正和未修正的起始GOP结构的目标比特率在第二(实际)GOP内仍未相同。第二(实际)GOP内的目标比率的差值为Δ=Tn-T′n                                  (31a)>>=>>>>X>>n>,>t>>>>K>>n>,>t>>>>>>N>I>>>>X>I>>>K>I>>>>X>I>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>(>>R>>GOP>,>N>>>->>(>2>>R>>GOP>,>N>>>->>(>>R>>GOP>,>>N>′>>>>->R>)>>)>>)>>->->->>(>31>b>)>>>>>=>>>>X>>b>,>t>>>>K>>n>,>t>>>>>>N>I>>>>X>I>>>K>I>>>>X>I>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>(>->>R>>GOP>,>N>>>+>>(>>R>>GOP>,>>N>′>>>>->R>)>>)>>->->->>(>31>c>)>>>这里,RGOP,N,-R是为第一N个画面指定的比特数,它等于:>>>R>>GOP>,>>N>′>>>>->R>=>>>>N>I>>>>X>I>>>K>I>>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>>>>R>>GOP>,>>N>′>>>>->->->>(>32>)>>>因此,目标比率中的差值成为:>>Δ>=>>>>X>>n>,>t>>>>K>>n>,>t>>>>>>N>I>>>>X>I>>>K>I>>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>(>->>R>>GOP>,>N>>>+>>>>N>I>>>>X>I>>>K>I>>>+>>N>P>>>>X>P>>>K>P>>>+>>N>B>>>>X>B>>>K>B>>>>>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>>>>R>>GOP>,>>N>′>>>>)>>->->->>(>33>a>)>>>>>=>->>>>(>>>NN>′>>I>>->>N>′>>>N>I>>)>>>>X>I>>>K>I>>>+>>(>>>NN>′>>P>>->>N>′>>>N>P>>)>>>>X>P>>>K>P>>>+>>(>>>NN>′>>B>>->>N>′>>>N>B>>)>>>>X>B>>>K>B>>>>>(>>>N>′>>I>>>>X>I>>>K>I>>>+>>>N>′>>P>>>>X>P>>>K>P>>>+>>>N>′>>B>>>>X>B>>>K>B>>>)>>>•>>1>N>>•>>T>n>>->->->>(>33>b>)>>>

通过比较公式(24)和(33),我们应看出第一和第二实际GOP中的目标比率的差值具有相同的绝对值,但是符号相反。事实上,一个较长的起始GOP使用较多比特用于第一实际GOP,由此剩余较少的比特用于第二实际GOP。对于第二数字实例,第二实际GOP中的画面的目标比率的差值为:

            Δ=Tn-T′n=1.7%·Tn    (34)

在第二实际GOP的结尾,剩余比特数R=0。第三实际GOP被指定RGOP,N比特。从第三实际GOP,在目标比率将不存在差值。

分析关于两个数字实例的帧数的目标比率。具有修正的起始GOP(N=15,M=3)的目标比率作为比较的基准。获得起始GOP(N=12,M=3)的比较数据,以及起始GOP(N=18,M=3)的比较数据。鉴定所有相同类型的画面是否被指定相同的比特数。进一步,如果起始GOP比实际GOP短,则较少的比特被指定给起始GOP的结尾前面的画面,并且较多的比特指定给M个画面的扩展GOP的画面。从第二实际GOP开始在目标比率不存在差值。

另一方面,如果起始GOP比实际GOP长,则略多些的比特被指定给第一实际GOP的画面,并且较少的比特指定给第二实际GOP的画面。从第三实际GOP开始,目标比率相同。

4.仿真结果

在评价本发明的比率控制系统时仿真非常有用。在15Mbit/sec的比特率首先编码测试序列。通过不同的GOP参数组,如表I所示。压缩比特流接着被代码转换为具有N=15和M=3的起始GOP的新比率3Mbit/sec。

GOP1    GOP2    GOP3 NM 30     12      83      2       1

对于修正的起始GOP参数组,以及N=15和M=3起始GOP,分析目标比率。注意到,实际上,代码转换器(或编码器)可能不满足每帧的目标比率。因此,在每个GOP结尾的剩余比特数,R,将不为零。非零的R将通过下一个GOP(看公式8)。这就暗示GOPs可以被给予稍稍不同的比特数。可以看到与一个修正的起始GOP相比,一个较长的起始GOP指定较多比特用于第一GOP的画面。因此,剩余较少比特用于第二GOP的画面。具有修正和未修正GOP的目标比率在第三GOP开始会聚。另一方面,一个较短的起始GOP导致较小目标比率用于较少的第一画面,而较多比特用于第一GOP中的剩余画面。从第二GOP开始目标比率开始接近。

为证明在测试条件变化的情况下比特率分配系统的有效性,使用各种GOP长度,例如,N=15,12,12,18,18,15,15,9,9,30,来编码一个序列。通过使用前一个GOP结构长度作为每个GOP的起始GOP长度对于修正GOP长度在每个GOP分析目标比率。通过这种应力测试结果接近。

图6示出根据本发明的比率控制系统。提供预压缩比特流,例如,节目1和节目2,给相应的代码转换器620和630。可能出现一个或几个比特流或代码转换器。在代码转换器可以从一个远程源例如经卫星广播,或者例如,可以从一个局部存储介质接收比特流。

代码转换器620,630根据由比率控制处理器605提供的目标比特率信号,一般使用不同的量化参数,部分去压缩相应的比特流,并且以不同的数据比率编码部分去压缩数据。

比率控制处理器605从代码转换器接收信息,信息包括当前画面的画面类型,和用于编码当前画面的量化参数。如本文所述处理该信息以设定目标比特率。比率控制处理器605可以包括公知的处理电路,例如一个中央处理单元(CPU)612,和一个存储器614。存储器614可以是存储,例如提供前面讨论的初始距离M’和N’的数据的非易失性存储器。比率控制处理器包括用于执行C-语言,例如,前面讨论的伪代码的计算电路。

一个用户接口608可以与比率控制处理器605通信以设定系统设定距离M’和N’或其他比率控制处理中的相关参数。

来自代码转换器620,630的代码转换数据提供给多路复用器(MUX)660,接着到达一个编码器缓冲器670。缓冲器占满信号从编码器缓冲器670提供给比率控制处理器605。编码数据最终经一个信道在其新的代码转换数据比率被发送。

5.结论

已经提出一种适用于,例如一个符合MPEG标准的数字视频代码转换器的新颖的比率控制系统。所提出的比率控制系统不产生处理延迟并且不要求额外的存储器。可以以任何合理的GOP参数组开始,接着当必须编码连续画面时,逐渐修正它们。因此,例如,当切换信道,插入商业广告,以及类似处理时,能够找到预压缩比特流的GOP结构中的变化。已经示出具有修正和未修正起始GOP参数的目标比率将会聚在一个或两个GOPs。目标比率中的差值处于一个相当小的界限内。进一步,类似的目标比率对应于一个类似的PSNR或画面质量。

尽管结合各个具体的实施例已描述了本发明,本领域的技术人员可以认识到,在不脱离后面权利要求书所设定的本发明的精神和范围的情况下,可以对其作出各种修改和变型。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号