该申请涉及与本申请同一天提交且标题为“SCENE CHANGE DETECTION”(代理人案号SCEA08074US00)的共同转让共同未决的美国专利申请号12/553,069,通过参考将其整体内容结合于此。
该申请涉及与本申请同一天提交且标题为“PARALLEL DIGITAL PICTURE ENCODING”(代理人案号SCEA08077US00)的共同转让共同未决的美国专利申请号12/553,073,通过参考将其整体内容结合于此。
该申请涉及与本申请同一天提交且标题为“UTILIZING THRESHOLDS AND EARLY TERMINATION TO ACHIEVE FAST MOTION ESTIMATION IN A VIDEO ENCODER”(代理人案号SCEA08078US00)的共同转让共同未决的美国专利申请号12/553,075,通过参考将其整体内容结合于此。
具体实施方式
尽管为了说明目的以下详细描述包含许多特定细节,本领域的任何一个普通技术人员都将认识到下文细节的许多改变和替换都在本发明的范围内。因此,下面描述的本发明的示例性实施例被阐述,而不会损失要求保护的发明的任何一般性并且不会对要求保护的发明施加限制。
本发明的实施例涉及用于各种视频编码环境(包括多处理器架构)的高质量速率控制器。本发明的实施例为更平滑的量化参数过渡(transition)提供了更准确且高效的速率失真模型,以便提供更稳定的感知体验。
根据本发明的实施例,对于给定的预先指定的编码条件,速率控制器能够生成一系列适当的量化参数,所述量化参数中的一个用于视频序列的每个图片帧从而满足目标比特率和目标视觉质量。所提议的速率控制算法目的在于可应用于各种编码条件,其涵盖了不同的目标比特率、帧分辨率、缓冲器约束、存储器限制、常量/变量比特率、处理器架构等等。
本文所描述的速率控制算法已被提议并研发以控制由用户的应用需求而施加的视频比特率和视频质量。如上所提出的那样,速率控制器是完全视频编码系统的基本部件。对于给定的预先指定的编码条件,速率控制器可以生成一系列适当的量化参数,所述量化参数中的每一个用于视频序列的对应图片或帧以满足目标比特率和目标视觉质量。所提议的速率控制算法目的在于可应用于各种编码条件,其涵盖了不同的目标比特率、帧分辨率、缓冲器约束、存储器限制、常量/变量比特率、处理器架构等等。
可以按照四个阶段(如在图1中所示,被标识为阶段1、阶段2、阶段3和阶段4)来描述所提议的速率控制算法100。阶段1主要用于设置速率控制数据缓冲器102的初始状态。该速率控制数据缓冲器102被配置成存储与速率控制算法有关的数据。这样的数据可以包括统计数据103(比如用于一个或多个先前编码的图片的多个比特)、根据与一个或多个先前编码的图片和/或当前图片有关的序列信息105确定的复杂度(complexity)、例如根据一个或多个先前编码的图片或其他相关数据估计的量化参数。该统计数据还可以包括通过将编码图片的重构和对应的原始图片相比较而计算的失真。以实例的方式,可以按原始图片和重构图片之间的平方误差的和来测量失真。还可以在图片的对应子单元(例如块、宏块、切片等等)之间测量失真。
序列信息105可以包括例如用于特定图片组(GOP)的帧速率和/或比特率。在阶段1(在本文中有时被称为初始化阶段)中,源图片107被输入以基于用户指定的编码模式和视频检测结果而被重新排序。在该阶段,参数可以被重置并且存储器和缓冲器空间可以被分配。在该阶段期间,就其复杂度,可以检查要编码的源图片107。
在阶段2中,基于在速率控制数据缓冲器102和源视频帧中收集的数据来得到图片级量化参数(QP)。可以基于源图片107的图片类型、源图片107的复杂度、所估计的目标比特数以及基本(underlying)速率失真模型来得到图片级QP。还可以考虑诸如图片失真、缓冲器充满度(fullness)以及对先前编码帧的QP缩减(clipping)方案之类的其他因素以确定源图片107的最终QP。
在阶段3中,在阶段2确定的最终QP被发送到一个或多个主要编码模块104以对源图片进行编码。每个编码模块104可以实施典型的图片编码函数,例如内部搜索和模式决定。可以例如通过将QP传递给实际上编码视频帧的调用函数来实施阶段3。结果产生的编码图片109可以被存储在编码图片缓冲器CPB中。任何适合的编码方法可以被用来实施阶段3。
在阶段4中,在速率控制缓冲器102中统计数据被收集并更新。就其大小检查对应于编码源图片109的编码比特流,并且计算并记录原始源图片107的像素以及来自根据编码源图片109的其重构的像素之间的失真。
在图2中示出存储在速率控制数据缓冲器中的统计数据103以及其与速率控制器200的功能块的交互。在初始阶段(阶段1)中,序列级信息105可以被用来限定预先指定的常量和变量。此外,可以在该阶段建立具有其他主要线程(thread)的速率控制器200的缓冲器管理和连接。在阶段2中,目标比特估计器106估计当前图片、帧或半帧(field)的目标比特计数(bitcount)。该估计器使用源图片信息113(例如具有速率控制数据缓冲器102的ME阶段一中的可选信息、数据源像素和输入图片类型)来估计目标比特计数115。应该注意,在CBR编码条件下,可以使用特殊缩减机制来降低缓冲器上溢的潜在风险。
如本文所使用的那样,表述ME阶段一指的是运动估计操作的第一阶段。在某些实施例中,运动可以以两个阶段来实施,其第一阶段有时被称为ME阶段一。典型地,ME阶段一以相对较低的计算成本获得稍微不准确但足够的运动信息。该信息是最新的(例如当前图片信息)以用于帮助目标比特分配。
速率控制器200的两个关键部件是目标比特估计器106和QP控制器114。这两个部件可以被用来实施如图2中所示的第二阶段2。在图3中图示了目标比特估计器的操作的细节。预先指定的参数117被用来计算初始比特预算(budget)119。预先指定的参数的实例包括例如图片组(GOP)的单元中的滑动窗口的大小的确定。在一个实施方式中,一个或多个GOP(例如4个GOP)中的比特可以被设置成初始比特预算。如果以每一秒来设置GOP并且目标比特率是1Mbps(每秒1百万个比特),则初始比特预算是滑动窗口中的4,000,000个比特。比特预算更新器108基于根据一个或多个先前图片而校正的比特121数目来更新初始比特预算119。结果产生的经过更新的比特预算123将输入提供给比特计数分发器(distributor)110。
比特预算更新器108可以采用基于滑动窗口的比特预算以消除初始抖动(例如归因于不充足的历史数据)以及可能的内容抖动。例如,为了以每秒6兆比特以及每秒30帧来编码视频序列(其中每秒一个GOP),该滑动窗口的大小可以被设置成四个GOP长度。也就是说,在滑动窗口中,存在可用于要被编码的4×30=120个图片帧的4×6兆比特=24兆比特。所选择的滑动窗口的大小可以由比特率准确性和平滑视频质量之间的折衷来确定。一般来说,较小的窗口大小将具有较紧密(tighter)的比特率控制器,其可以具有较好的比特率收敛(convergence),但结果是导致不稳定视频质量的较大的QP波动。较大的窗口大小倾向于具有更稳定的质量,因为速率控制器具有更灵活的比特预算以基于长期规划来调整目标比特计数115。然而,较大窗口的缺点是其收敛速度,从而导致实现目标比特率的较低准确性。两个极端情况是具有一个帧大小(例如在上述实例中为1/30秒)的滑动窗口和具有要被编码的图片帧总数的滑动窗口。
目标比特估计器106的下一任务是确定如何将目标比特计数115分配给当前图片帧107。上述实例中的最容易方式是在这些120个帧之间等同地分发24兆比特。然而,该方法可能因为忽略了不同编码图片类型(例如内部图片(I图片)、预测图片(P图片)和双向预测图片(B图片))的编码特性和120个帧中的不同图片之间的内容变化而经历效率低的分发。
在本发明的一个实施例中,在递送目标比特计数中考虑不同图片编码类型。特别地,目标比特估计器106可以包括复杂度计算器112,其计算当前图片107的复杂度值125。复杂度计算器可以基于当前图片类型、当前复杂度和先前已编码的帧的一个或多个过去的复杂度来为当前图片107计算复杂度。附加地,复杂度计算器112还可以考虑内容复杂度、实际比特使用(bit usage)以及实际失真。以实例的方式,而不是以限制的方式,下面讨论为图片帧确定目标比特计数的三种不同情况。
存在表示图片复杂度的许多方式。除了图片复杂度的表示之外,简单的变化只是一个实例。可替换地可以期望繁杂的表示。以实例的方式,而不是以限制的方式,可以使用图片中的宏块(macroblock)的平均方差。
在情况1中,当前图片107是具有场景变化的图片。在情况2中,当前图片107是规则的I图片,并且在情况3中,当前图片是规则的P图片。
根据一个特定实施方式,如果当前图片107是B图片,则速率控制器可以简单地指派QP(来自其相关联的参考帧)加上某一常量K。该常量K可以仅仅或部分由最新的编码图片缓冲器(CPB)充满度来确定。这种处理B图片的方式允许编码器具有更强的并行执行能力。也就是说,可以在任何两个对应的参考帧中执行任何B图片编码。
在下面的讨论中,Ni是滑动窗口中I图片的数目,NP是该窗口中P图片的数目,并且Nb是该窗口中B图片的数目。Ri、RP和Rb分别是类型I、P和B图片的实际比特使用。此外,ri、rP和rb分别是所估计的图片类型I、P和B图片的比特计数,Di、DP和Db分别表示I、P和B图片的失真并且Mi、MP和Mb分别表示I、P和B图片的复杂度。下面的预见实例是在编码从时间t到t+6的视频序列时一系列实际比特使用的采样方案。在当前图片之前的图片类型序列如下:I,P,B,B,P,B,B,k,其中k表示当前图片107,其可以是例如(在情况1中的)具有场景变化的图片,或(在情况2中的)规则I图片,或(在情况3中的)规则P图片。
速率:Ri(t),Rp(t+1),Rb(t+2),Rb(t+3),Rp(t+4),Rb(t+5),Rb(t+6),rk(t+7)。
复杂度:Mi(t),Mp(t+1),Mb(t+2),Mb(t+3),Mp(t+4),Mb(t+5),Mb(t+6),Mk(t+7)。
失真:Di(t),Dp(t+1),Db(t+2),Db(t+3),Dp(t+4),Db(t+5),Db(t+6)。
在时刻t开始的滑动窗口中的比特预算被表示为WB。窗口包括从时刻t一直到当前图片107之前的图片的所有帧。就一般性来说,下面将所估计的当前图片的比特使用和复杂度分别表示为rK和MK。
考虑其中比特计数分发器110试图估计当前图片107的目标比特计数rK的情况。应该注意,一般来说,窗口可以具有可以是任何类型的任何适合数目的图片。
在情况1中,其中当前图片107是具有场景变化的图片,可以如下计算当前图片(即rk(t+7))的目标比特计数115:
rk(t+7)=WB(t+6)*ARi/(Ni*ARi/AMi+Np*ARp/AMp+Nb*ARb/AMb),
其中ARk仅指回溯到(back to)最近场景变化I图片的所有k个图片上的平均实际比特计数,并且AMk仅指回溯到最近场景变化I图片的所有k个图片上的平均复杂度,其中k是当前图片的图片类型,例如I、P或B图片类型。
在情况2中,其中当前图片107是规则I图片,目的是根据最近的P图片来提供平滑过渡。在这种情况下,可以通过计算最近的I图片和最近的P图片之间的失真、实际比特使用和图片复杂度的比率(ratio)来得到目标比特计数。在上述实例的图片类型序列中,当前图片之前的最近的P图片是P图片和t+4。如果当前图片107是规则I图片,则可以假设就内容特性来说当前I图片类似于最近的I图片。因此,仅需要比特率的最小微调。否则,记录当前帧的场景变化I图片。假设当前图片107是规则I图片,并且不是场景变化I图片,则可以如下计算当前图片(即rk(t+7))的目标比特计数115:
rk(t+7)=
[Ri(t)/Rp(t+4)]*[Di(t)/Dp(t+4)]*[Mi(t)/Mp(t+4)]*Rp(t+4)
在情况3中,其中当前图片107是规则P图片,来自最近的I、P和B图片的统计数据可以被用来计算目标比特计数115。例如,对于给定的上述图片序列,可以如下计算估计的比特计数rK:
rk(t+7)=WB(t+6)*[Rp(t+4)/Mp(t+4)]/
[Ni*Ri(t)/Mi(t)+Ni*Rp(t+4)/Mp(t+4)+Nb*Rb(t+6)/Mb(t+6))]
上述目标比特计数计算仅依赖于图片特性并且不会考虑其中编码图片缓冲器CPB具有有限大小的情况,所述有限大小可以被表示为CPBsize。对于实际应用,比特计数分发器108可以根据CPB状态和比特率准确性调整最终目标比特计数115以降低CPB上溢和下溢的风险。为了促进这样的调整,目标比特估计器106可以包括缓冲器调节器116,其将相关的CPB状态信息提供给比特计数分发器108以调整目标比特计数115。
在调整目标比特计数115时存在考虑CPB状态信息的许多方式。例如,在常量比特率(CBR)应用中,可以根据缓冲器接近于上溢还是下溢而有差别地调整目标比特计数115。在确定是否存在潜在的上溢或下溢情况时,限定在本文中被称为编码图片缓冲器充满度CPBfull的量是有用的,所述编码图片缓冲器充满度CPBfull被称为当前存储在CPB中的数据的数量(CPBcurr)相对于编码图片缓冲器CPB的有限大小CPBsize的比率,例如CPBfull=CPBcurr/CPBsize。例如,当CPBfull增加并在预先限定的上限CPBmax以上时,可能存在潜在CPB上溢。在这种情况下,可以如下调整目标比特计数115(即rk(t+7))以降低CPB上溢的风险:
rk(t+7))=rk(t+7)*(1.0+C*(CPBfull-CPBT-MAX),其中C是常数乘数(例如2)。
可替换地,如果CPBfullness向下移动并且在预先限定的下限CPBmin以下,则编码图片缓冲器CPB可能接近潜在CPB下溢情况。在这种情况下,可以如下调整目标比特计数115(即rK)以降低CPB下溢的风险:
rk(t+7)=rk(t+7)*(1.0+C*(CPBmin-CPBfull),其中C是常数乘数(例如2),并且0.0<CPBmin<CPBmax<1.0。
在变量比特率(VBR)应用中,CPB上溢更有可能归因于长时间的初始延迟(即在开始编码之前CPB几乎被完全馈送)。然后,可以如下调整目标比特计数115:
如果(CPBcushion小于sec_threshold),
则rk(t+7)=rk(t+7)*(1.0+incr_%)
其中,CPBcushion=(CPBsize-CPB_curr)/(编码器的目标比特率),并且0.0<incr_%<1.0。
术语sec_threshold指按时间单位(例如秒)的CPB缓冲(cushion)的阈值。以实例的方式,而不是以限制的方式,如果CPBcushion小于1秒,则rk(t+7)的值根据上述等式增加。
再次参考图2,目标比特估计器106将目标比特计数发送到QP控制器114,其然后使用目标比特计数115连同速率控制数据缓冲器102中的失真和源像素信息来得到QP。以实例的方式,而不是以限制的方式,QP控制器114可以如图4所示的那样得到QP。具体来说,QP控制器114可以实施基于目标复杂度、两个或更多先前帧的窗口上的平均复杂度以及复杂度稳定器因子(stabilizer factor)来计算复杂度因子的复杂度功能。此外,QP控制器114可以实施基于先前帧的失真、在两个或更多先前帧的窗口上所采用的平均失真以及失真稳定器因子来计算失真因子的失真功能。此外,QP控制器可以实施基于当前帧107的目标比特计数、在两个或更多先前帧的窗口上采用的平均比特计数以及比特计数稳定器因子来计算估计的比特计数的功能。
在图4中描绘的QP控制器114可以包括计算复杂度、失真和比特计数的功能块(f())。每个功能块可以接收一个或多个稳定器因子作为输入。稳定器可以用来降低复杂度、比特计数和失真中的大波动。以实例的方式,而不是以限制的方式,被表示为S1、S2的稳定器因子可以用来根据如下类型的公式而降低计算估计的比特计数A时平均比特计数B和平均复杂度C中的波动的影响:
A=(B+S1)/(C+S2),其中S1和S2是稳定器。
为了降低平均比特计数和平均复杂度中的大波动对计算A的影响,速率控制器114可以将常量或自适应值指派给稳定器项S1和S2,以使得速率控制器114可以获得比可能通过简单比率(例如B/C)而获得的更稳定的估计比特计数A的值。如果适当地选择稳定器的值,则他们倾向于稳定(B+S1)/(C+S2)的值。
类似的稳定器项可以用来稳定类似的复杂度因子和失真因子的计算。
QP控制器114可以包括QP调制器(Modulator),其基于比特计数、失真和复杂度因子来确定未经过处理的QP值。QP控制器还可以包括缩减机制118,其约束结果产生的QP值的范围。
与完全基于假设的速率失真模型的传统方法不同,所提议的速率控制器220可以通过考虑下述主要因素的交互而得到QP:图片类型、图片复杂度、图片失真和目标比特计数115。利用这些因素和他们的交互关系,可以使用下面的方法。
如图4所示,QP控制器114基于根据比特计数分发器110计算的目标比特预算来得到最终QP值127。如上所述,QP控制器114是速率控制器200中的关键部件之一。QP控制器114对比特计数和视觉质量有直接影响。为了实现最佳质量,可以使用查找最佳QP的迭代方法来最小化失真。然而,这可能是效率低的。在本发明的实施例中,通过对比,以更有效的方式来实现相当好的视觉质量的目标。
为了保持稳定的视觉质量,QP控制器114基于当前图片107的图片类型得到最初的QP。不同的图片类型具有得到对应QP的不同方法。以实例的方式,而不是以限制的方式,可以考虑五种不同的情况;(1)视频序列的最先IDR图片,(2)具有场景变化的IDR图片,(3)规则IDR和I图片,(4)规则P图片,以及(5)非参考B图片。
如本文所使用的那样,IDR图片(或IDR帧)是特殊类型的I图片(或I帧)。主要的差别是当编码器将IDR指派给图片/帧时,这意味着帧缓冲器中的所有参考帧的信息都失去。因此,不能在后续编码中使用那些参考帧。
在视频序列的第一IDR图片的情况下,可以基于复杂度、编码条件以及以下普通假设来得到QP。基本概念是找出I图片和P图片以及P图片和B图片之间就编码比特复杂度方面的关系。
考虑其中在滑动窗口中存在N个图片并且N=Ni+Np+Nb的情况,其中Ni,Np,和Nb分别是窗口中I、P和B图片的数目。如下计算第一IDR的目标比特计数115(即rK):
rk=WB/Ni+Np/ratiop+Nb/ratiob)。其中可以如下计算ratiop和ratiob的值:
ratiop=CP/bits_per_macroblock,其中Cp是常量,bits_per_macroblock=target_bit_rate/(target_frame_rate*frame_width/16*frame_height/16).
ratiob=picture_complexity*ratiop
在上述等式中,项picture_complexity指当前图片的复杂度,因为在该实例中,当前图片是序列中第一图片。
在得到目标比特计数115(rK)之后,于是可以应用简单的一阶(first order)RD模型以获得量化值(在本文中被称为实际QP)。应该注意,该量化值可以完全不同于最终的QP(在本文中被称为语法(syntax)QP,其是语法元素并且被嵌入在比特流中),因为实际上在量化器中使用前面的QP。为了将实际的QP转换成语法QP,可以使用公式QPsyntax=6.0*log10(QPactual)/log10(2.0)。然后,可以将QPsyntax的结果值缩减到最小值QPmin和最大值QPmax之间的预先限定的范围内以产生最终QP值127。
在IDR图片具有场景变化的情况下,基于包括从其先前的所有I图片一直到先前最靠近的具有场景变化的IDR的平均复杂度、平均比特使用和平均QP的统计数据103来得到新的QP。
QP控制器114首先确定被限定成过去的I帧的(平均比特使用/平均复杂度)的旧的R/M比率。QP控制器114然后可以如下得到新的相对R/M比率:
新的R/M比率=(旧的R/M比率)/(rk/Mk),其中rk和Mk指当前帧107的目标比特计数和复杂度。可以根据Rk-1/Mk-1来确定旧的R/M比率,其中Rk-1和Mk-1是当前帧107之前的帧的实际比特使用和复杂度。然后可以根据下式确定新的实际QP值:
QPactual=(平均QPactual)×(新的R/M比率)。
如上面所讨论的那样,可以将新的实际QP值转换成新的语法QP值。
应该注意,如果当前帧107是场景变化帧,则新的QP值可以完全不同于紧接在先的帧的QP值。为了降低大的QP波动。QP缩减机制118可以根据先前的帧来计算复杂度差别。缩减机制118然后可以限定QP变化的范围以有力地限制QP变化。以实例的方式,而不是以限制的方式,可以使用下面的缩减方案。
首先根据下式来限定范围QPrange:
QPrange=multiplier*(max(Mk,Mk-1)/min(Mk,Mk-1)),
其中Mk-1是紧接在当前帧之前的帧的复杂度。
乘数可以是由经验确定的常量值。以实例的方式,而不是以限制的方式,可以使用具有常量值2的乘数。
因此,最终QP值127可以被约束到下述范围:
[QPsyntax-QPrange,QPsyntax+QPrange]。
在当前图片107是规则IDR和I图片的情况下,QP控制器114可以对QPsyntax值有直接作用。因此图片帧是规则帧,意味着在视频特性中不会出现明显的变化。(否则应该记录场景变化),为了保持相对稳定的QPsyntax值,可以对实际比特计数与复杂度的比率应用LOG运算。可以使用下面的RD公式根据先前帧(其被表示为QPk-1)的QPsyntax值来得到当前帧107(被表示为QPk)的QPsyntax值。
LOG(比特率/复杂度)×QPsyntax=常量。
基于上述公式,可以如下计算当前帧107的QPsyntax最终值:
QPk=LOG[(Rk-1/Mk-1)*(QPk-1)]/LOG(rk/Mk),
其中QPk-1是当前帧107之前的帧的QPsyntax值。
如果当前帧107是规则P图片,则QP控制器114可以通过对QPactual值进行对数运算来保持稳定的QPsyntax值。可以如下得到当前帧(被表示为QPactual_k)的新的实际QP值:
QPactual_k=LOG(Rk-1)*(QPactual_k-1)/LOG(rk2*Rk-1)
然后,如上所述将QPactual_k值转换成QPsyntax值。
如果当前图片107是规则B图片(即非参考B图片),则将不会传播误差。因此,可以通过简单地将+2添加到其先前参考帧的语法QP来获得常量QP。这种情况还为并行编码提供机会,因为一般来说在任何两个连续B图片之间不存在相关性。图片之间没有数据相关性用作对编码过程并行化的入口点。可以并行执行两个参考图片内的B图片编码。
在编码阶段(阶段2)中,速率控制算法可以简单地将QP返回到其调用函数。在最终阶段中,正好在视频帧/半帧编码之后,速率控制收集实际比特使用(可能被分开的纹理比特和辅助比特(overhead bit))、实际图片失真以及实际缓冲器充满度,并且更新速率控制数据缓冲器103中的这一信息。
在一系列视频帧的视频编码过程中,可以重复执行从阶段2到阶段4的过程。应该注意,在本发明的实施例中,速率控制器仅需要考虑参考图片(即在该参考图片被用作金字塔形编码中的参考图片的情况下为I图片、P图片或B图片)的目标比特计数。
图5图示计算机装置500的框图,所述计算机装置500可以如上述那样用来在三个或更多处理器上实施流数据的并行解码。该装置500通常包括多个处理器模块501A、501B、501C和存储器502。作为使用多个处理器模块的处理系统的实例,该处理器模块501A、501B、501C可以是Cell处理器的部件。
存储器502可以是集成电路的形式,例如RAM、DRAM、ROM等等。存储器502还可以是所有处理器模块501能访问的主存储器。在一些实施例中,处理器模块501A、501B、501C可以具有相关联的本地存储器505A、505B、505C。可以以能在处理器模块501上执行的处理器可读指令的形式来将编码器程序503存储在主存储器502中。编码器程序503可以被配置成例如如关于图1、图2、图3和图4所述的那样利用速率控制算法来编码视频帧数据。具体来说,编码器程序可以以在确定QP值时考虑图片类型、图片复杂度、图片失真和目标比特计数的方式来计算QP值。可以以任何适合的处理器可读语言例如(例如C、C++、JAVA、Assembly、MATLAB、FORTRAN以及多种其他语言)来写程序503。如上所述,速率控制数据507可以被存储在存储器502(例如速率控制缓冲器)中。这样的速率控制数据可以包括评价先前帧的窗口的比特利用、复杂性、失真、QP等等的统计数据。在一些实施例中,在执行编码器程序503期间,部分程序代码和/或数据507可以被载入到本地存储器505A、505B、505C中,以用于处理器模块501A、501B、501C的并行处理。
装置500还可以包括公知的支持功能510,例如输入/输出(I/O)元件511、电源(P/S)512、时钟(CLK)513和高速缓存514。设备500可选地可以包括大容量存储设备515(例如硬盘驱动器、CD-ROM驱动器、磁带驱动器等等)以存储程序和/或数据。设备500还可以可选地包括显示单元516和用户接口单元518以促进装置500和用户之间的交互。
显示单元516可以是显示文本、数字、图形符号或图像的阴极射线管(CRT)或平板屏幕的形式。用户接口518可以包括键盘、鼠标、操纵杆、光笔或可以结合图形用户界面(GUI)使用的其他设备。装置500还可以包括网络接口520,其使得设备能够通过网络(例如因特网)与其他设备进行通信。这些部件可以以硬件、软件或固件或两个或多个这些形式的某一组合来实施。
存在许多以装置500中的多个处理器进行流水线并行处理的附加方式。例如,有可能例如通过将代码复制到处理器501A、501B、501C中的两个或更多个处理器上来“解开(unroll)”处理循环,以及使每个处理器实施代码以处理不同的数据块。这样的实施方式可以避免与设置循环有关的等待时间。
如上面所指出的那样,可以在多处理器系统上实施上述速率控制的某些部分(例如失真计算)。除了多处理器系统之外,能够实施并行处理的一个实例被认为是cell处理器。存在许多被分类为cell处理器的许多不同处理器架构。以实例的方式,而不是以限制的方式,图6图示cell处理器600的可能配置。cell处理器600包括主存储器602、单个功率处理器元件(PPE)604和八个协同处理器元件(SPE)606。可替换地,cell处理器601可以被配置成具有任何数目个SPE。
以实例的方式,可以以被公知为Cell宽带引擎架构(CBEA)-顺应(compliant)处理器的架构来表征cell处理器600。在CBEA-顺应架构中,可以将多个PPE结合到一个PPE组中并且可以将多个SPE结合到一个SPE组中。为了实例的目的,cell处理器600被描绘为仅具有单个SPE组和具有单个SPE和单个PPE的单个PPE组。可替换地,cell处理器可以包括多个功率处理器元件组(PPE组)和多个协同处理器元件组(SPE组)。例如以Cell宽带引擎架构形式详细描述了CBEA-顺应处理器,其可以在http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/1AEEE1270EA2776387257060006E61BA/$file/CBEA_01_pub.pdf上在线得到,通过参考将其结合于此。
以实例的方式,PPE 604可以是具有相关联的高速缓存的64比特PowerPC处理器单元(PPU)。PPE 604可以包括可选的矢量多媒体扩展单元。每个SPE 606包括协同处理器单元(SPU)和本地存储器(LS)。在一些实施方式中,本地存储器可以具有例如大约256千字节容量的代码和数据的存储器。SPU是比PPU简单的计算单元,因为他们通常不执行任何系统管理功能。SPU可能具有单指令多数据(SIMD)能力并且通常处理数据和发起任何所需的数据传送(经受由PPE设置的访问属性)以便执行他们的分配任务。SPU允许系统600实施需要较高计算单元密度的应用并且可以高效地使用所提供的指令集。由PPE 604管理的系统600中的有效数目个SPE 606允许对各种各样的应用进行成本高效的处理。
存储器602、PPE 604和SPE 606可以彼此通信并且通过环形元件互连总线610与I/O设备608通信。存储器602可以包含具有上述速率控制数据507一样特征的速率控制数据603。存储器602还可以存储具有与上述编码器程序503一样特征的编码器程序609。至少一个SPE606可以在其本地存储器(LS)中包括编码指令605和/或例如如下所述那样并行处理的输入视频帧数据和/或速率控制数据部分。PPE 604可以在其L1高速缓存中包括具有与上述编码程序503一样特征的代码指令607。指令605和数据607还可以被存储在存储器602中以在需要的时候被SPE和PPE访问。
可以通过一系列函数调用在关于图5或图6所描述的装置类型上实施在图1中所描绘的以及关于图2-4进一步描述的速率控制算法。例如,可以通过调用在本文中被称为PicRateCtrlInit()的函数来实施初始化阶段(阶段1)。在整个编码过程中,PicRateCtrlInit()函数可能仅被编码器程序507或603的编码器SPU主控制线程调用一次。因此PicRateCtrlInit()函数可以用作编码器程序的速率控制部分的任何入口点。如果速率控制实例存储器不足,则PicRateCtrlInit()函数可以返回错误消息。速率控制实例存储器具有与速率控制缓冲器中的可用空间量相同的空间量。如果当前所使用的速率控制实例存储器被速率控制实例使用,则PicRateCtrlInit()函数还可用返回错误消息。如果不存在错误情况,则PicRateCtrlInit()函数可以创建速率控制句柄(handle)并且基于输入参数相应分配存储器。如在本文中所使用的那样,术语速率控制句柄指的是通常在计算机程序实施方式中使用的特定类型的指针。速率控制句柄是指向可能在此处访问特定速率控制器的数据的存储器地址的指针。在Cell处理器实施方式的特定情况下,PicRateCtrlInit()的输入可以包括(1)SPU线程配置缓冲器、(2)测试驱动器控制参数、(3)流级配置、和(4)帧级配置。PicRateCtrlInit()函数的输出是图片速率控制缓冲器102的句柄。
可以通过调用本文被称为PicRateCtrlPrepare()的函数来实施准备阶段(图1的阶段2)。该函数的主要任务是得到基于输入数据的QP值。可以在对每个图片的编码的开始时调用PicRateCtrlPrepare()函数,并且该PicRateCtrlPrepare()函数是速率控制算法的关键。
PicRateCtrlPrepare()的输入可以包括速率控制句柄、帧级配置、输入帧缓冲器和速率控制数据缓冲器。PicRateCtrlPrepare()函数可以实施下面的操作:
·检查处于CBR情况的缓冲器充满度。
·调整滑动窗口中的总比特率预算。
·使用目标比特估计器106来确定当前图片的目标比特111,例如如上所述的那样。
·如果图片类型是I/IDR,则使用QP控制器114来得到图片IQP,例如如上所述的那样。
·如果图片类型是P,则使用QP控制器114来得到图片P QP,例如如上所述的那样。
·如果图片类型是非参考B,则使用QP控制器114来得到非参考图片B(Non-ref-Picture-B)QP,例如如上所述的那样。
·如果图片类型是参考B,则使用QP控制器114来得到参考图片B QP,例如如上所述的那样。
·缩减预先指定的范围(可以在PicRateCtrlInit()中限定所述预先指定的范围)内的QP以确保平滑视觉质量过渡。可以如上所述的那样关于QP缩减机制118来实施该操作。
可以通过调用PicRateCtrlEncode()函数来实施编码阶段(阶段3)。
PicRateCtrlEncode()函数可以被调用以获得给定图片的最终QP。在一些实施例中,PicRateCtrlEncode()函数可以被调用以获得图片的s子段(subsection)(例如切片或宏块)的最终QP值。因此,本发明的实施例可以被扩展到处于宏块级的速率控制。
PicRateCtrlEncode()函数还可以包括调用通常在编码视频图片中使用的其他函数,例如网络抽象层(NAL)编码、视频编码层(VCL)编码和去块效应(de-blocking)的函数。
关于上述实施例可能存在许多变化。例如,在一些实施方式中,编码步骤(阶段3)可以包括在多个处理器上并行分发和处理的失真计算。在多处理器实施方式中,可以在逐个分段的基础上(on asection-by-section basis)来计算图片的总失真,其中使用用于每个分段的不同处理器并行执行图片的不同分段的失真计算。可以通过将编码之前的图片的原始像素与重构像素相比较来逐个宏块地计算每个分段的失真。
在一些实施方式中,可以在去块效应之前完成失真计算以加速全部性能,因为不存在将一个多个数据路径从去块效应线程分配到主线程的需要。已根据经验确定基于速率控制器的去块效应帧(deblockedframe)和未去块效应帧的失真计算的不一致可以忽略的。
此外,在一些实施方式中,可以将图片分段的每个宏块中的失真载送到现有的MB信息容器中,可以经由DMA将其传送到服务器。所以NAL编码线程可以收集并计算图片的全部失真。如果采用基于宏块的速率控制,则该MB失真还帮助进一步改进图片质量。
可以通过调用PicRateCtrlUpdate()函数来实施更新阶段(阶段4)。可以在下述两种情况下调用PicRateCtrlUpdate()函数:(1)正好在多核处理器(例如宽带引擎(BE))处完成编码MB行之后记录数据;或者(2)正好在生成最终视频编码层(VCL)比特流之后它被调用以收集与整个当前图片相关联的统计数据。PicRateCtrlUpdate()函数的输入可以包括但不限于:速率控制句柄、未经过处理的图像的颜色空间格式、先前重构的图片、图片级编码信息以及先前图片的编码比特。PicRateCtrlUpdate()函数可以内部地更新速率控制数据缓冲器102。
以实例的方式,而不是以限制的方式,颜色空间格式可以是420YUV。该格式可以包括一个亮度(luma)分量(Y)和两个色度分量(U和V)。典型地,基于MPEG编码器的输入是420YUV,例如从分辨率的观点来看这意味着Y的尺寸(dimension)是W*H,并且U和V每个具有W/2*H/2的尺寸。
以实例的方式,而不是以限制的方式,PicRateCtrlUpdate()函数可以实施下述操作:
·收集统计数据。
·更新速率控制数据缓冲器102中的统计数据。
·检查缓冲器充满度以确定缓冲器上溢的可能性。
·如果需要的话实施缓冲器上溢防止机制。
根据另一个实施例,如上所述实行图片级速率控制的指令可以被存储在计算机可读存储介质中。以实例的方式,而不是以限制的方式,图7图示计算机可读存储介质700的实例。该存储介质包含以计算机处理设备可以检索解释的格式存储的计算机可读指令。以实例的方式,而不是以限制的方式,该计算机可读存储介质700可以是计算机可读存储器,例如随机存取存储器(RAM)或只读存储器(ROM)、用于固定磁盘驱动器(例如硬盘驱动器)的计算机可读存储磁盘或可移动磁盘驱动器。此外,计算机可读存储介质700可以是闪存设备、计算机可读磁带、CD-ROM、DVD-ROM、蓝光光盘、HD-DVD、UMD或其他光存储介质。
存储介质700可选地包含速率控制初始化指令702,其可以包含如上所述实施算法的阶段1的一个或多个指令。以实例的方式,而不是以限制的方式,在执行时,该初始化指令可以被配置成实施上述PicRateCtrlInit()函数。
存储介质700可以包括一个或多个速率控制准备指令704。该准备指令704可以被配置成上述速率控制算法的阶段2。以实例的方式,而不是以限制的方式,在执行时,该初始化指令可以被配置成实施上述PicRateCtrlPrepare()函数。
存储介质700可以包括一个或多个编码指令706。编码指令706可以被配置成上述速率控制算法的阶段3。以实例的方式,而不是以限制的方式,在执行时,该初始化指令可以被配置成实施上述PicRateCtrlEncode()函数。
存储介质700可以包括一个或多个速率控制更新指令708。准备指令708可以被配置成上述速率控制算法的阶段4。以实例的方式,而不是以限制的方式,在执行时,该速率控制更新指令可以被配置成实施上述PicRateCtrlUpdate()函数。
上述速率控制算法已在试验AVC编码器中广泛实施。该速率控制算法的性能表明该算法不仅准确地实现了目标比特率而且还控制CPB缓冲器适当地构造HRD顺应AVC比特流。最重要地是,在控制量化参数的新速率控制算法的有效性的情况下,编码器表明高保真度和稳定的视觉质量。
尽管上述内容是本发明的优选实施例的完整描述,但是有可能使用各种替换、修改和等同物。因此,本发明的范围不应该参考上述描述来确定,而是应该作为代替参考所附权利要求连同他们的等同物的全范围来确定。本文所述的任何特征(不管是否是优选的)可以结合本文所述的任何其他特征(不管是否是优选的)。在下面的权利要求中,不定冠词“一”或“一个”指的是该冠词之后的一个或多个项的数量,除非另有明确说明。所附权利要求不应该被解释为包括装置加功能的限制,除非在给定权利要求中使用短语“用于…的装置”明确陈述这样的限制。