背景技术
本节旨在于提供权利要求书中记载的本发明的背景或者上下文。这里的描述可以包括能够探求的概念,但是这些概念并非必然是先前已经设想或者探求的概念。因此,除非这里另有指明,否则在本节中描述的内容不是本申请中的说明书和权利要求书的现有技术、也不因为被包含于本节中而被承认是现有技术。
在多视点视频编码中,将来自于不同相机的视频序列输出编码成一个比特流,其中每个视频序列输出得益于场景的不同视点。在解码之后,为了显示某个视点而重建和显示属于该视点的解码图片。也有可能重建和显示不止一个视点。
多视点视频编码处理包括自由视点视频/电视、三维(3D)TV和监控应用的广泛的各种应用。目前,国际标准化组织(ISO)的联合视频组(JVT)/国际工程联合会(IEC)运动图像专家组(MPEG)和国际电信联盟(ITU)-T视频编码专家组正在致力于开发一种正在变成ITU-T H.264标准扩展的多视点视频编码(MVC)标准(也称为ISO/IEC MPEG-4第10部分)。这些草案标准在这里分别称为MVC和AVC。MVC标准的最新草案在JVT-T208“Joint MultiviewVideo Model(JMVM)1.0”(第20届JVT会议、奥地利、克拉根福、2006年7月)中有描述,可以在ftp3.itu.ch/av-arch/jvt-site/2006 07 Klagenfurt/JVT-T208.zip找到,并且通过引用将其全文合并于此。
在JMVM 1.0中,对于各组图片(GOP),任何视点的图片按照解码顺序邻接。这在图1中有描绘,其中水平方向表示时间(各时间瞬间由Tm表示),而竖直方向表示视点(各视点由Sn表示)。各视点的图片分组成GOP,例如用于各视点的图1中的图片T1至T8形成GOP。这一解码顺序布置称为视点优先编码。应当注意,对于一个视点中和一个GOP中的图片,虽然它们的解码顺序连续而无任何其它图片插入于任何两个图片之间,但是它们的解码顺序可以内部地改变。
也有可能具有与针对优先视点编码而讨论的解码顺序不同的解码顺序。例如,可以布置图片使得任何时间位置的图片按照解码顺序邻接。在图2中示出了这一布置。这一解码顺序布置称为时间优先编码。也应当注意,访问单元的解码顺序可以不同于时间顺序。
在图2中示出了用于多视点视频编码的典型预测结构(包括各视点内的图片间预测和视点间预测),其中预测由箭头表示,并且指向去往的(pointed-to)对象将指向来自(pointed-from)的对象用于预测参考。一个视点内的图片间预测也称为时间预测、视点内预测或者简称为交互预测。
瞬时解码刷新(IDR)图片是内编码图片,该图片造成解码过程紧接在对IDR图片进行解码之后将所有参考图片标记为“未用于参考”。在IDR图片的解码之后,在没有来自于在该IDR图片之前解码的图片的交互预测的情况下也可以对按照解码顺序的所有后继编码图片进行解码。
在AVC和MVC中,在序列参数集中包括在整个编码视频序列中保持不变的编码参数。除了解码过程所必需的参数之外,序列参数集还可以可选地包含视频可用信息(VUI),该信息包括对于缓存、图片输出定时、表现和资源保留而言重要的参数。指定了用以携带序列参数集的两种结构——包含用于序列中AVC图片的所有数据的序列参数集NAL单元和用于MVC的序列参数集扩展。图片参数集包含可能在数个编码图片中不变的此类参数。频繁改变的图片级数据在各分片报头中重复,并且图片参数集携带其余图片级参数。H.264/AVC语法允许多个序列实例和图片参数集,并且各实例用唯一标识符来标识。各分片报头包括对于包含分片的图片的解码而言活跃的图片参数集的标识符,并且各图片参数集包含活跃序列参数集的标识符。因而,图片和序列参数集的传输无需与分片的传输准确地同步。代之以在参考活跃序列和图片参数集之前的任何时刻接收它们就足够了,这允许使用与用于分片数据的协议相比更可靠的传输机制来传输参数集。例如,可以在用于H.264/AVC实时协议(RTP)会话的会话描述中包括参数集作为MIME参数。推荐只要在应用中有可能使用时就使用带外可靠传输机制。如果带内传输参数集,则可以重复它们以提高误差鲁棒性。
如这里讨论的那样,锚定(anchor)图片是如下编码图片,在该编码图片中所有分片仅参考具有相同时间索引的分片、即仅参考其它视点中的分片而不参考当前视点的更早图片中的分片。通过将anchor_pic_flag设置成1用信号发送锚定图片。在对锚定图片进行解码之后,可以无需来自于在锚定图片之前解码的任何图片的交互预测就对按照显示顺序的所有后续编码图片进行解码。如果一个视点中的图片是锚定图片,则其它视点中具有相同时间索引的所有图片也是锚定图片。因而,可以从与锚定图片对应的时间索引启动任何视点的解码。
在AVC或者MVC比特流的主要部分中没有包括图片输出定时,比如输出时间戳设置。然而,图片顺序计数(POC)的值是针对各图片而导出的并且相对于先前IDR图片或者包含将所有图片标记为“未用于参考”的存储器管理控制操作的图片按照输出顺序没有随着图片位置增加而减少。POC因此指示图片的输出顺序。它也被使用在解码过程中以用于双向预测分片的直接模式中运动向量的隐式缩放、用于加权预测中的隐式导出的权值以及用于B分片的参考图片列表初始化。另外,POC也使用于输出顺序一致性的验证中。
可以用活跃序列参数集中用信号发送的三种模式之一对POC值进行编码。在第一模式中,在各分片报头中包括POC值的最低有效比特的所选数目。在第二模式中,在序列参数集中对POC相对增量(作为按照编码的视频序列中以解码为序的图片位置的函数)进行编码。此外,可以在分片报头中指示根据序列参数集导出的相对于POC值而言的偏离。在第三模式中,通过假设解码和输出顺序相同根据解码顺序导出POC值。此外,当使用第三模式时仅一个非参考图片可以连续地出现。
nal_ref_idc是NAL单元报头中的2比特语法元素。nal_ref_idc的值指示用于重建样本值的NAL单元的相关度。nal_ref_idc的非零值必须用于参考图片的编码分片和分片数据分区NAL单元以及用于参数集NAL单元。对于非参考图片的分片和分片数据分区以及对于不影响样本值重建的NAL单元如补充增强信息NAL单元,nal_ref_idc的值必须等于0。在H.264/AVC高级设计中,允许外部规范(即,使用或者参考H.264/AVC的任何系统或者规范)以指定对nal_ref_idc的非零值的解释。例如,用于H.264/AVC Request forComments(RFC)3984(可以在www/ietf.org/rfc/rfc3984.txt找到并且援引结合于此)的RTP净荷格式指定对使用nal_ref_idc的强烈推荐。换而言之,一些系统已经建立用于设置和解释非零nal_ref_idc值的惯例。例如RTP混合器可以根据NLA单元类型来设置nal_ref_idc,例如对于IDR NAL单元将nal_ref_idc设置成3。由于MVC是H.264/AVC标准的向后兼容扩展,所以希望现有的理解H.264/AVC的系统元件也能够处理MVC流。因此不希望在MVC规范中与nal_ref_idc的任何其它非零值相比不同地指定nal_ref_idc的特定非零值的语义。
在解码图片缓存器(DPB)中缓存用于预测后续编码图片以及用于将来输出的解码图片。为了有效地利用缓存存储器,应当指定DPB管理过程,这些过程包括将解码图片存储到DPB中的过程、参考图片的标记过程、从DPB输出和去除解码图片的过程。
AVC中用于参考图片标记的过程一般如下。在活跃序列参数集中指示被称为M的、用于交叉预测的参考图片的最大数目。当对参考图片进行解码时将它标记为“用于参考”。如果参考图片的解码造成将多于M个图片标记为“用于参考”,则必须将至少一个图片标记为“未用于参考”。然后如果标记为“未用于参考”的图片也无需用于输出,则DPB去除过程将它们从DPB去除。
有用于参考图片标记的两类操作:自适应存储器控制和滑动窗。在图片的基础上选择用于参考图片标记的操作模式。自适应存储器控制要求比特流中存在存储器管理控制操作(MMCO)命令。存储器管理控制操作实现用信号显式发送哪些图片标记为“未用于参考”、向短期参考图片分配长期索引、将当前图片存储为长期图片、将短期图片改变成长期图片以及为长期图片分配最大允许长期索引(MaxLongTermFrameIdx)。如果使用滑动窗操作模式并且有M个图片标记为“用于参考”,则将作为被标记为“用于参考”的那些短期参考图片之中的第一解码图片的短期参考图片标记为“未用于参考”。换而言之,滑动窗操作模式在短期参考图片之中造成先入/先出缓存操作。
各短期图片与根据frame_num语法元素来导出的可变PicNum关联。各长期图片与根据由MMCO命令用信号发送的long_term_frame_idx语法元素来导出的可变LongTermPicNum关联。取决于对帧或者字段进行编码还是解码,根据FrameNumWrap语法元素来导出PicNum。对于PicNum等于FrameNumWrap的帧,根据FrameNum来导出FrameNumWrap,并且直接地根据frame_num来导出FrameNum。例如在AVC帧编码中,向FrameNum指派与frame_num相同的值,并且FrameNumWrap定义如下:
如果(FrameNum>frame_num)
FrameNumWrap=FrameNum-Max FrameNum
否则
FrameNumWrap=FrameNum
根据为图片指派的长期帧索引(LongTermFrameIdx)来导出LongTermPicNum。对于帧,LongTermPicNum等于LongTermFrameIdx。frame_num是各分片报头中的语法元素。用于帧或者互补字段对的frame_num值相对于先前参考帧或者参考互补字段对的frame_num在模算术中实质上递增一。在IDR图片中,frame_num的值为零。对于包含将所有图片标记为“未用于参考”的存储器管理控制操作的图片,frame_num的值在图片的解码之后被视为零。
MMCO命令如下使用PicNum和LongTermPicNum用于指示针对该命令的目标图片。为了将短期图片标记为“未用于参考”,在MMCO命令中用信号发送当前图片p与目的地图片r之间的PicNum差值。为了将长期图片标记为“未用于参考”,在MMCO命令中用信号发送待去除的图片r的LongTermPicNum。为了将当前图片p存储为长期图片,将long_term_frame_idx与MMCO命令一起用信号发送。这一索引作为LongTermPicNum的值指派给新存储的长期图片。为了将图片r从短期图片改变成长期图片,在MMCO命令中用信号发送当前图片p与图片r之间的PicNum差值,在MMCO命令中用信号发送long_term_frame_idx,并且将该索引指派给这一长期图片。
当可以使用多个参考图片时,必须标识各参考图片。在AVC中,用于编码块的参考图片的标识如下。首先,将存储于DPB中的用于将来图片预测参考的所有参考图片标记为“用于短期参考”(短期图片)或者“用于长期参考”(长期图片)。当对编码分片进行解码时,构造参考图片列表。如果编码分片是双向预测分片,则也构造第二参考图片列表。然后通过参考图片列表中被使用的参考图片的索引来标识用于编码块的参考图片。当可以使用多于一个的参考图片时,可以在比特流中对索引进行编码。
参考图片列表构造过程如下。为求简化,假设仅需要一个参考图片列表。首先构造包括所有短期和长期图片的初始参考图片列表。然后当分片报头包含参考图片列表重新排序(RPLR)命令时进行参考图片列表重新排序(RPLR)。PRLR过程可以将参考图片重新排序成与初始列表中的顺序不同的顺序。最后通过保持可能重新排序的列表的开头中的仅某一数目(通过分片报头或者由分片参考的图片参数集中的另一语法元素来指示该数目)的图片来构造最终列表。
在初始化过程中,所有短期和长期图片被视为用于当前图片的参考图片列表的候选。无论当前图片是B图片还是P图片,长期图片都被放置于RefPicList0(而RefPicList1对B分片而言可用)中的短期图片之后。对于P图片,用于RefPicList0的初始参考图片列表包含按照PicNum的降序来排序的所有短期参考图片。对于B图片,按照与当前POC编号和参考图片的POC编号有关的规则对从所有短期图片获得的那些参考图片进行排序——对于RefPicList0,具有较小POC(与当前POC相比)的参考图片被视为优先并且按照POC的降序而插入到RefPictList0中。然后按照POC的升序来追加具有较大POC的图片。对于RefPicList1(如果可用),则具有较大POC(与当前POC相比)的参考图片被视为优先并且按照POC的升序而插入到RefPicList1中。然后按照POC的降序来追加具有较小POC的图片。对于P图片和B图片,都是在考虑所有短期参考图片之后,按照LongTermPicNum的升序来追加长期图片。
通过包括四个类型的连续RPLR命令来调用重新排序过程。第一类型是用以指定待移动的具有较小PicNum(与临时预测的PicNum相比)的短期图片的命令。第二类型是用以指定待移动的具有较大PicNum的短期图片的命令。第三类型是用以指定待移动的具有某一LongTermPicNum的长期图片以及RPLR循环结束的命令。如果双向预测当前图片,则有两个循环——一个用于正向参考列表而另一个用于反向参考列表。
将称为picNumLXPred的预测PicNum初始化为当前编码图片的PicNum。这在用于短期图片的每个重新排序过程之后被设置成刚移动的图片的PicNum。将在RPLR命令中用信号发送在重新排序的当前图片的PicNum与picNumLXPred之间的差值。将指示为被重新排序的图片移动到参考图片列表的开头。在完成重新排序过程之后,将基于活跃参考图片列表大小来截短整个参考图片列表,该大小是num_ref_idx_1X_active_minus1+1(等于0或者1的X对分别对应于RefPicList0和RefPicList1)。
在H.264/AVC标准的附录C中指定的假想参考解码器(HRD)用来检验比特流和解码器一致性。HRD包含编码图片缓存器(CPB)、瞬时解码过程、解码图片缓存器(DPB)和输出图片裁剪块。与任何其它视频编码标准相类似地指定CPB和瞬时解码过程,并且输出图片裁剪块将那些样本从在用信号发送的输出图片范围以外的解码图片简单地裁剪。在H.264/AVC中引入DPB以便控制用于对一致比特流进行解码的所需存储器资源。
缓存解码图片有两个原因:为了交叉预测中的参考以及为了将解码图片重新排序成输出顺序。由于H.264/AVC标准为参考图片标记和输出重新排序二者都提供了大量灵活性,所以用于参考图片缓存和输出图片缓存的单独缓存器可能是对存储器资源的浪费。因此,DPB包括用于参考图片和输出重新排序的统一解码图片缓存过程。当解码图片不再用作参考和需要输出时将它从DPB去除。在H.264/AVC标准的级定义(附录A)中指定了允许比特流使用的DPB最大大小。
有用于解码器的两类一致性:输出定时一致性和输出顺序一致性。对于输出定时一致性,解码器必须在与HRD相比较而言的相同时间输出图片。对于输出顺序一致性,仅将正确输出图片顺序纳入考虑之中。假设输出顺序DPB包含帧缓存器的最大允许数目。当帧不再用作参考和需要输出时将它从DPB去除。当DPB变满时,输出按照输出顺序的最早帧,直至至少一个帧缓存器变为未占用。
通过仅使用AVC工具的分层B图片GOP结构来实现时间缩放性。典型时间缩放性GOP通常包括编码为I或者P帧的关键图片和编码为B图片的其它图片。基于POC对那些B图片进行分级编码。除了GOP中的那些图片之外,GOP的编码还只需先前GOP的关键图片。相对POC编号(POC减去先前锚定图片POC)在实施中被称为POCIdInGOP。各POCIdInGOP可以具有POCIdInGOP=2xy(其中y是奇数)的形式。具有相同x值的图片属于被称为L-x(其中L=log2(GOP_length))的相同时间级。仅具有最高时间级L的图片没有被存储为参考图片。通常,时间级中的图片仅能使用较低时间级中的图片作为参考以支持时间缩放性,即,可以放弃较高时间级的图片而不影响较低时间级的图片的解码。类似地,相同分级结构可以应用于视点维度中以求视点缩放性。
在当前JMVM中,针对各视点对frame_num单独地进行编码并且用信号发送、即frame_num的值相对于与当前图片相同的视点内的先前参考帧或者参考互补字段对而言递增。另外,所有视点中的图片共享相同DPB缓存器。为了全局地处理参考图片列表构造和参考图片管理,FrameNum和POC生成被重新定义如下:
FrameNum=frame_num*(1+num_views_minus_1)+view_id
PicOrderCnt()=PicOrderCnt()*(1+num_views_minus_1)+view_id;
JMVM基本上遵循与用于AVC的参考图片标记相同的参考图片标记。唯一差异在于:在JMVM中重新定义FrameNum、从而FrameNumWrap被重新定义如下:
FrameNum>frame_num*(1+num_views_minus_1)+view_id)
FrameNumWrap=FrameNum-MaxFrameNum*(1+num_views_mmus_1)+
view_id
else
FrameNumWrap=FrameNum
在当前JMVM标准中,在SPS(序列参数集)扩展中隐式地指定视点间参考图片,其中指定视点间参考列表的活跃数目和那些图片的视点id。此信息由参考相同SPS的所有图片共享。参考图片列表构造过程先以与AVC中相同的方式、但是将DPB中存储的所有参考图片纳入考虑之中来执行参考图片列表初始化、重新排序和截短。具有SPS中指定的视点id并且在相同时间轴(即具有相同捕获/输出时间)内的图片然后按照它们在SPS中被列出的顺序而追加到参考列表。
遗憾的是,上述JSVM设计造成诸多问题。首先,有时希望(由解码器)解码的、(由发送器)传输的或者(由媒体网关或者MANE)转发的视点的切换可以按照与对应于锚定图片的时间索引不同的时间索引而出现。例如,可以压缩基本视点以求最高编码效率(大量地使用时间预测)并且不经常对锚定图片进行编码。因而,用于其它视点的锚定图片也不经常出现,因为它们对于所有视点都是同步的。当前JMVM语法没有包括这样一个图片,其中该图片是用信号发送某一视点的解码可以从其开始的图片(除非该时间索引的所有视点包含锚定图片)。
其次,针对各视点(并且单独地针对锚定和非锚定图片)指定用于视点间预测的允许参考视点。然而,取决于在编码的图片与相同时间轴中和潜在参考视点中的潜在图片之间的相似性,可以在或者可以不在编码器中进行视点间预测。当前JMVM标准使用nal_ref_idc以指示图片是用于视点内预测还是视点间预测,但是它无法单独地指示图片是否用于视点内预测和/或视点间预测。此外,根据JMVM 1.0,对于AVC兼容视点,即使图片在它仅用于视点间预测参考时不用于时间预测,nal_ref_idc也必须设置成不等于0。因而,如果仅对该视点进行编码和输出,则需要额外的DPB大小以便在一旦对这样的图片进行解码就可以输出这样的图片时存储它们。
第三,注意到在JMVM 1.0中指定的参考图片标记过程与AVC过程基本上相同,不同在于重新定义FrameNum、FrameNumWrap并且因而重新定义PicNum。因此出现诸多特殊问题。例如,这一过程无法有效地处理对为了被缓存用于视点间预测而需要的解码图片的管理,特别是当那些图片未用于时间预测参考时。原因在于在AVC标准中指定的DPB管理过程旨在于单视点编码。在单视点编码中,比如在AVC标准中,为了时间预测参考或者将来输出而需要的缓存解码图片可以在它们不再需要用于时间预测参考和将来输出时从缓存器去除。为了实现一旦参考图片变为不再需要用于时间预测参考和将来输出就去除它,指定参考图片标记过程使得可以在参考图片变为不再需要用于时间预测参考之后立即得知。然而,当轮到用于视点间预测参考的图片时,缺乏一种用以在图片变为不再需要用于视点间预测参考之后立即得知的方式。因而,用于视点间预测参考的图片可能不必要地缓存于DPB中,这降低了缓存器存储器使用的效率。
在另一例子中,在给定用以重新计算PicNum的方式时,如果使用滑动窗操作模式并且短期和长期图片的数目等于最大值,则将具有最小FrameNumWrap的短期参考图片标记为“未用于参考”。然而,滑动窗参考图片标记由于如下事实而没有在当前JMVM中最佳地操作:这一图片并非必然是最早的编码图片,因为当前JMVM中的FrameNum顺序没有遵循解码顺序。另外,由于根据重新定义和缩放的FrameNumWrap来导出PicNum的这一事实,所以两个编码图片的PicNum值之差将被平均缩放。例如,有用的是假设有在相同视点中并且frame_num分别等于3和5的两个图片。当仅有一个视点、即比特流是AVC流时,两个PicNum值之差将是2。当对frame_num等于5的图片进行编码时,如果需要MMCO命令以将PicNum等于3的图片标记为“未用于参考”,则两个值之差减去1等于1,这将在MMCO中用信号发送。这一个值需要3比特。然而,如果有256个视点,则两个PicNum值之差减去1将变为511。在这一情况下,需要19比特以便用信号发送该值。因而,MMCO命令的编码效率低得多。通常,与H.264/AVC的单视点编码相比,增加的比特数对于当前JMVM的MMCO命令而言等于2×log2(视点数目)。
第四组问题围绕JMVM 1.0中指定的参考图片列表构造过程。参考图片列表初始化过程在重新排序过程之前考虑来自所有视点的参考图片。然而,由于来自用于视点间预测的其它视点的图片在截短列表之后追加到列表这一事实,来自其它视点的参考图片在以任何方式重新排序和截短之后没有出现在参考图片列表中。因此,无需在初始化过程中考虑那些图片。另外,非法参考图片(具有与当前图片不同的view_id并且时间上没有与当前图片对准的此类图片)和重复的视点间参考图片可以出现在最终构造的参考图片列表中。
参考图片列表初始化过程如以下步骤中列出的那样来操作:(1)所有参考图片无论它们的view_id如何以及它们是否时间上与当前图片对准都被包含于初始列表中。换而言之,初始参考图片列表可能包含某些非法参考图片(具有与当前图片不同的view_id并且时间上没有与当前图片对准的此类图片)。然而,在视点优先编码中,初始列表的开头包含来自与当前图片相同的视点的参考图片。(2)可以将视点内参考图片和视点间图片重新排序。在重新排序之后,列表的开头仍然可能包含非法参考图片。(3)将列表截短,但是截短的列表仍然可能包含非法参考图片。(4)视点间参考图片按照它们在SPS的MVC扩展中出现的顺序而追加到列表。
此外,在JMVM 1.0中指定的参考图片列表重新排序过程并不允许如下视点间帧的重新排序,这些帧总是按照它们在SPS的MVC扩展中出现的顺序而被放入列表的末尾。这造成参考图片列表构造的较低灵活性从而在视点间参考帧的默认顺序不是最优或者某些视点间参考帧比某些视点内参考帧更可能用于预测时导致较低的压缩效率。另外,与MMCO命令相似,由于根据重新定义和缩放的FrameNumWrap来导出PicNum的这一事实,与H.264/AVC标准的单视点编码相比需要将更长VLC码字用于涉及将减去1的PicNum值之差用信号发送的RPLR命令编码。
具体实施方式
图4示出了用于与本发明一起使用的通用多媒体通信系统。如图4中所示,数据源100用模拟的、未压缩数字的或者压缩的数字格式或者这些格式的任何组合来提供源信号。编码器110将源信号编码成编码媒体比特流。编码器110可以能够对多个媒体类型如语音、音频和视频进行编码,或者可能需要多个编码器110以对不同媒体类型的源信号进行编码。编码器110也可以获得合成产生的输入,比如图形和文字,或者它可以能够产生合成媒体的编码比特流。在下文中,仅考虑对一个媒体类型的一个编码媒体比特流的处理以简化描述。然而应当注意:实时广播服务通常包括数个流(通常至少一个音频、视频和文字字幕流)。也应当注意:该系统可以包括多个编码器,但是在下文中仅考虑一个编码器110以简化描述而不失一般性。
将编码媒体比特流传送到储存器120。储存器120可以包括用以存储编码媒体比特流的任一类型的海量存储器。储存器120中的编码媒体比特流的格式可以是基本自给比特流格式,或者一个或者多个编码媒体比特流可以封装到容器文件中。一些系统“现场”操作、即省略储存器并且将编码媒体比特流从编码器110直接地传送到发送器130。编码媒体比特流然后按照需要传送到也称为服务器的发送器130。传送中所使用的格式可以是基本自给(elementaryself-contained)比特流格式、分组流格式,或者一个或者多个编码媒体比特流可以封装到容器文件中。编码器110、储存器120和发送器130可以驻留于同一物理设备中,或者它们可以包含于分开的设备中。编码器110和发送器130可以用现场实时内容来操作,在该情况下编码媒体比特流通常未被持久地存储而是被缓存于内容编码器110中和/或发送器130中一段短时间以缓解处理延迟、传送延迟和/编码媒体比特速率中的变化。
发送器130使用通信协议栈来发送编码媒体比特流。该栈可以包括但不限于实时传送协议(RTP)、用户数据报协议(UDP)和互联网协议(IP)。当通信协议栈是面向分组时,发送器130将编码媒体比特流封装成分组。例如,当使用RTP时,发送器130根据RTP净荷格式将编码媒体比特流封装成RTP分组。通常,各媒体类型具有专用RTP净荷格式。应当再次注意:系统可以包含多个发送器130,但是以下描述为求简化仅考虑一个发送器130。
发送器130可以或者可以不通过通信网络连接到网关140。网关140可以执行不同类型的功能,比如将根据一个通信协议栈的分组流转译成另一通信协议栈、合并和分流数据流、以及根据下行链路和/或接收器能力来操控数据流,比如根据主导下行链路网络条件来控制转发流的比特速率。网关140的例子包括多点会议控制单元(MCU)、电路交换与分组交换视频电话之间的网关、蜂窝一键通(PoC)服务器、数字视频广播手持(DVB-H)系统中的IP封装器或者将广播传输本地转发到归属无线网络的机顶盒。当使用RTP时,网关140被称为RTP混合器并且充当RTP连接的端点。
该系统包括通常能够接收发送的信号、将该信号解调和解封装成为编码媒体比特流的一个或者多个接收器150。编码媒体比特流通常进一步由解码器160处理,该解码器的输出是一个或者多个未压缩媒体流。最后,呈现器(renderer)170例如可以用扬声器或者显示器来再现未压缩媒体比特流。接收器150、解码器160和呈现器170可以驻留于相同物理设备中,或者它们可以包含于单独设备中。
在比特速率、解码复杂度和图片大小方面的缩放性是异构和易错环境所希望的性质。需要这一性质以便应对比如对比特速率、显示分辨率、网络吞吐量和接收设备中的计算能力的约束之类的限制。
应当理解,虽然这里包含的文字和例子可以具体地描述编码过程,但是本领域技术人员将容易理解相同概念和原理也适用于对应解码过程并且反之亦然。应当注意可以位于实质上任一类网络内的远程设备接收待解码的比特流。此外,可以从本地硬件或者软件接收比特流。
本发明的通信设备可以使用各种传输技术来通信,这些传输技术包括但不限于码分多址(CDMA)、全球移动通信系统(GSM)、通用移动电信系统(UMTS)、时分多址(TDMA)、频分多址(FDMA)、传输控制协议/互联网协议(TCP/IP)、短消息收发服务(SMS)、多媒体消息收发服务(MMS)、电子邮件、即时消息收发服务(IMS)、蓝牙、IEEE 802.11等。通信设备可以使用各种介质来通信,这些介质包括但不限于无线电、红外线、激光、线缆连接等。
图5和图6示出了本发明可以实施于其中的一个有表示性的移动设备12。然而应当理解本发明并非意欲局限于一个特定类型的移动设备12或者其它电子设备。图5和图6中所示的一些或者所有特征可以并入到可以在图4中所示的任何或者所有设备中。
图5和图6的移动设备12包括壳30、形式为液晶显示器的显示器32、小键盘34、麦克风36、耳机38、电池40、红外端口42、天线44、根据本发明一个实施例的形式为UICC的智能卡46、读卡器48、无线电接口电路52、编码解码器电路54、控制器56和存储器58。独立电路和单元都是本领域中、例如Nokia移动设备范围中公知的类型。
本发明提供一种用于在多视点视频编码中实施有效解码图片缓存器管理的改进系统和方法。为了解决围绕当前JMVM语法没有包括用信号发送某个视点的解码可以从其开始的图片(除非该时间索引的所有视点包含锚定图片)这一事实的问题,用信号发送新标志,该新标志指示是否可以从某一图片访问视点、即是否可以从某一图片开始视点的解码。在本发明的一个实施例中,在NAL单元报头中用信号发送这一标志。下文是根据一个具体实施例的标志的语法和语义的例子。然而,也有可能类似地改变语法元素anchor_pic_flag的语义而不是添加新语法元素。
对于视点中的某一图片,来自视点间预测中所用的其它视点的在相同时间位置处的所有图片称为“直接依赖视点图片”,并且来自当前图片解码所需的其它视点的在相同时间位置处的所有图片称为“依赖视点图片”。
在一个实施例中可以用四种方式指定view_refresh_flag的语义。用于指定view_refresh_flag的语义的第一方式涉及:使view_refresh_flag指示相同视点中的当前图片和按照输出顺序的所有后续图片在相同视点中的当前和后续图片的所有直接依赖视点图片在无需对相同视点或者其它视点中的任何在前图片进行解码的情况下也被(可能部分地)解码时被正确地解码。这意味着(1)依赖视点图片都不倚赖于任何视点中按照解码顺序的任何在前图片,或者(2)如果任何依赖视点图片倚赖于任何视点中按照解码顺序的任何在前图片,则相同视点中的当前和后续图片的直接依赖视点图片的受约束内编码区域仅用于视点间预测。受约束内编码区没有将来自编码间相邻区域的数据用于内预测。
用于指定view_refresh_flag的语义的第二方式涉及:使view_refresh_flag指示相同视点中的当前图片和按照解码顺序的所有后续图片可以在相同视点中的当前图片和后续图片的所有直接依赖视点图片在无需对任何在前图片进行解码的情况下被完全地或者在一个实施例中被部分地解码时也被正确地解码。
用于指定view_refresh_flag的语义的第三方式涉及:使view_refresh_flag指示相同视点中的当前图片和按照输出顺序的所有后续图片可以在相同视点中的当前和后续图片的所有依赖视点图片被完全地或者在一个实施例中被部分地解码时也被正确地解码。这一定义类似于在单视点编码中开始开放式GOP的内图片。按照规范文本,可以将这一选项书写如下:等于1的view_refresh_flag指示当前图片和与在当前图片相同的视点中并且按照输出顺序跟随在当前图片之后的按照解码顺序的任何后续图片在交互预测过程中没有参考按照解码顺序在当前图片之前的图片。等于0的view_refresh_flag指示当前图片或者在与当前图片相同的视点中并且按照输出顺序跟随在当前图片之后的按照解码顺序的后续图片可以在交互预测过程中参考按照解码顺序在当前图片之前的图片。
用于指定view_refresh_flag的语义的第四方式涉及:使view_refresh_flag指示相同视点中的当前图片和按照解码顺序的所有后续图片可以在相同视点中的当前图片和后续图片的所有依赖视点图片被完全地或者在一个实施例中被部分地解码时也被正确地解码。这一定义类似于在单视点编码中开始闭合式GOP的内图片。
view_refresh_flag可以使用于比如图4中所示系统这样的系统中。在这一情形中,接收器150已经接收或者解码器160已经解码所有可用的N个视点的仅某个子集M,该子集排除视点A。例如由于用户动作,接收器150或者解码器160将希望从现在开始分别接收或者解码视点A。解码器可以从第一图片开始视点A的解码,其中让view_refresh_flag在视点A内等于1。如果没有接收视点A,则接收器150可以向网关140或者发送器130指示将视点A的编码图片包括到发送比特流中。网关140或者发送器130可以在发送视点A的任何图片之前等待直至视点A内view_refresh_flag等于1的下一图片,以免发送解码器160无法成功解码的来自视点A的不必要图片。
为了解决先前讨论的第二个问题,用信号发送新标志以指示视点是否用于视点间预测参考,并且语法元素nal_ref_idc仅指示图片是否用于时间预测参考。在一个具体实施例中,在NAL单元报头中用信号发送这一标志。下文是该标志的语法和语义例子。
等于0的inter_view_reference_flag指示当前图片未用作视点间参考图片。等于1的inter_view_reference_flag指示当前图片用作视点间参考图片。inter_view_reference_flag的值在profile_idc指示MVC简档并且view_id是0时推断为等于1。当对图片进行解码时,inter_view_reference_flag等于1并且时间轴与当前图片相同的所有图片称为当前图片的视点间图片。
可以在也称为媒体认知网元(MANE)的网关140中使用inter_view_reference_flag。当图片未用作视点间参考和视点内参考(inter_view_reference_flag等于0并且nal_ref_idc等于0)时,MANE可以选择不转发它而没有其余比特流的解码。当图片未用作视点间参考、但是用作视点内参考时,MANE仅在它也放弃传输依赖的视点时才应当丢弃图片。当图片未用作视点间参考、但是用作视点内参考时,MANE仅在不要求或者不希望对图片所在视点进行解码时才应当丢弃图片。
关于无法对为了视点间预测而必须被缓存的解码图片的管理有效地进行处理的在JMVM 1.0中指定的参考图片标记过程这一问题,重用标志inter_view_reference_flag。可以使用多个三种方法中的任何方法来标记inter_view_reference_flag等于1的图片。
用于标记inter_view_reference_flag等于1的图片的第一方法涉及:将视点间参考图片临时存储为长期图片。在编码过程中,在比特流中指示用于视点间预测的每个图片被标记为“用于长期参考”。用于指示被标记为“用于长期参考”的一种方式是inter_view_reference_flag。解码器通过将图片标记为“用于长期参考”和“临时多视点长期参考”来响应该指示。临时缓存以标记为“用于长期参考”和“临时多视点长期参考”的图片为目标的任何存储器管理控制操作。当对时间轴中的所有图片进行编码或者解码时,标记为“用于长期参考”和“临时多视点长期参考”的所有图片不再标记为“用于长期参考”和“临时多视点长期参考”,并且使用滑动窗操作或者缓存存储器管理控制操作(任一个适用于特定图片)按照它们的解码顺序针对它们重新完成参考图片标记。例如,如果图片用于交互预测(即nal_ref_idc的值大于0),则将它标记回为“用于短期参考”。如果图片未用于交互预测(即nal_ref_idc等于0),则将它标记为“未用于参考”。通常,图片在某一时间轴中仅有两种情况:所有图片是用于交互预测的参考图片,或者没有图片是用于交互预测的参考图片。这后一操作可以在对时间轴中的最后一个VCL NAL单元进行解码之后或者在将对后续时间轴中的下一个访问单元或者下一个图片进行解码之前执行。在解码过程中,可以通过时间轴的改变来隐式地触发这一阶段中的操作或者它可以例如作为MMCO命令用信号显式地发送。利用这一方法,对于加权预测以及在时间直接模式中,视点间参考图片具有与长期参考图片相同的影响。
用于标记inter_view_reference_flag等于1的图片的第二种方法涉及:将视点间参考图片标记为“用于视点间参考”。利用这一方法,用于交互预测的参考图片(标记为“用于短期参考”和“用于长期参考”)与AVC标准相比未变。对于与时间直接模式和加权预测有关的过程,与长期参考图片同等地对待标记为“用于视点间参考”的图片、即共享与当前图片相同的时间轴的那些视点间参考图片。当对时间轴中的所有图片进行编码或者解码时,标记为“用于视点间参考”的所有图片不再标记为“用于视点间参考”。
注意在处理时间轴中的所有图片之后去除标记“用于视点间参考”仅为本发明的一个实施例。也可以在解码过程的其它时间去除作为“用于视点间参考”的标记。例如,一旦当前图片或者任何后续图片根据SPS的MVC扩展中包括的视点依赖性信令不再直接地或者间接地依赖于图片,就可以去除特定图片的作为“用于视点间参考”的标记。
可以在对时间轴中的最后VCL NAL单元进行解码之后或者在将对后续时间轴中的下一访问单元或者下一图片进行解码之前完成让适当图片不再标记为“用于视点间参考”的操作。在解码过程中,这可以通过时间轴的改变来隐式地触发,或者它可以例如作为MMOC命令显式地用信号发送。
利用这一特定方法,对于加权预测以及在时间直接模式中,视点间参考图片具有与长期参考图片相同的影响。换而言之,对于加权预测以及在时间直接模式中,这一方法具有与上文讨论的第一种方法相同的效果。
在这一方法中,改进的滑动窗机制可以被应用来去除仅用于视点间预测的图片(即nal_ref_idc等于0并且标记为“用于视点间参考”的图片)的“用于视点间参考”的标记。这一改进的滑动窗机制使用例如命名为num_inter_view_ref_frames的变量(该变量优选地在用于MVC的SPS扩展中用信号发送),从而当标记为“用于视点间参考”并且nal_ref_idc等于0的图片的数目等于num_inter_view_ref_frames时,然后最早解码的图片变为未标记为“用于视点间参考”。因而,如果图片无需用于输出(已经输出或者有意不输出),则解码器可以调用用以将图片从DPB去除的过程,从而新解码的图片可以存储到DPB。
用于标记inter_view_reference_flag等于1的图片的第三种方法涉及:在相同时间轴/时间索引的所有图片的解码之后标记图片。取代了紧接在图片的解码之后标记图片,这一方法是基于在相同时间轴(即相同时间索引)的所有图片的解码之后标记图片的这一思想。按照图片的解码顺序来执行如每个编码图片中指示的滑动窗或者自适应参考图片标记。对于与时间直接模式和加权预测关联的过程,与长期参考图片同等地对待标记为时间轴与当前图片相同的图片。在初始参考图片列表构造中包括时间轴与当前图片相同的视点间参考图片,并且这些图片可以基于它们的view_id来重新排序或者先被分配长期参考索引、然后可以基于长期参考索引来重新映射。
如先前讨论的那样,在给定用以重新计算PicNum的方式时,如果使用滑动窗操作模式并且短期和长期图片的数目等于最大值,则将具有最小FrameNumWrap的短期参考图片标记为“未用于参考”。然而,由于这一图片由于当前JMVM中的FrameNum顺序没有遵循解码顺序而并非必然是最早编码的图片这一事实,在当前JMVM中滑动窗参考图片标记没有最优地操作。为了解决这一问题并且与JMVM标准比较,没有重新定义/缩放变量FrameNum和FrameNumWrap、即它们的定义与AVC标准相比保持不变。设计成可以通过滑动窗的先入先出机制来自动地管理短期图片。与JMVM1.0相比只需滑动窗机制的略微修改。修改如下(斜体字表示新文本):
G.8.2.5.3 滑动窗解码参考图片标记过程
当adaptive_ref_pic_marking_mode_flag等于0时调用这一过程。在包括计算numShortTerm和numLongTerm以及num_ref_frames适用值的过程中仅考虑view_id与当前分片相同的参考图片。
在上述方法中,用于整个MVC比特流的参考帧的总数(该总数指示用于对用于整个MVC比特流视点内或者视点间参考的图片进行存储的缓存器大小)应当等于适用于MVC比特流中所含的所有视点的num_ref_frames值之和加上用于对MVC比特流进行解码的视点间参考帧的最大数目。可替换地,可以针对所有视点中的所有图片全局地执行滑动窗。
对于时间优先编码,滑动窗过程被定义如下(斜体字表示JMVM 1.0的新文本):
G.8.2.5.3 滑动窗解码参考图片标记过程
...
...
-当numShortTerm+numLongTerm等于Max(num_ref_frames,1)时,应当满足numShortTerm大于0的条件,并且将按照以下规则选择的短期参考帧、互补参考字段对或者非配对参考字段标记为“未用于参考”。当它是帧或者互补字段对时,它的两个字段也被标记为“未用于参考”。
*选择规则是:从具有最小FrameNumWrap值的所有那些图片中选择按照解码顺序的第一图片。那些图片的解码顺序由view_id值来指示,或者由在用于MVC扩展的SPS中用信号发送的视点依赖性信息来指示。
对于时间优先编码,滑动窗过程被定义如下(斜体字表示JMVM 1.0的新文本):
G.8.2.5.3 滑动窗解码参考图片标记过程
...
...
-当numShortTerm+numLongTerm等于Max(num_ref_frames,1)时,应当满足numShortTerm大于0的条件,并且将按照以下规则选择的短期参考帧、互补参考字段对或者非配对参考字段标记为“未用于参考”。当它是帧或者互补字段对时,它的两个字段也被标记为“未用于参考”。
*选择规则是:从最早解码的视点的所有那些图片中选择具有最小FrameNumWrap的图片。视点解码顺序由view_id值来指示,或者由在用于MVC扩展的SPS中用信号发送的视点依赖性信息来指示。
如先前讨论的那样,由于根据重新定义和缩放的FrameNumWrap来导出PicNum的这一事实,应当平均缩放两个编码图片的PicNum值之差。例如,有利的是假设有在相同视点中并且frame_num分别等于3和5的两个图片。当仅有一个视点、即比特流是AVC流时,两个PicNum值之差将是2。当对frame_num等于5的图片进行编码时,如果需要MMCO命令以将PicNum等于3的图片标记为“未用于参考”,则两个值之差减去1等于1,这将在MMCO中用信号发送。这一个值需要3比特。然而,如果有256个视点,则两个PicNum值之差减去1将变为511。在这一情况下,需要19比特以便用信号发送该值。因而,MMCO命令的编码效率低得多。通常,与H.264/AVC的单视点编码相比,增加的比特数对于当前JMVM的MMCO命令而言等于2×log2(视点数目)。
为了解决这一问题并且与JMVM标准对照,没有重新定义/缩放变量FrameNum和FrameNumWrap,这与AVC标准中相同。在多数情况下,从DPB大小的观点来看不要求图片包含用以去除如下图片的MMCO命令,该图片与当前图片既不属于相同视点也不属于相同时间轴。甚至一些图片变得不在需要用于参考,并因此可以标记为“未用于参考”。在这一情况下,标记可以通过使用滑动窗过程来执行或者被推迟直至具有相同view_id的下一编码图片。因此,对于属于相同视点或者相同时间轴的图片,将MMCO命令约束成仅将图片标记为“未用于参考”,虽然DPB可以包含不同视点或者不同时间轴的图片。
用于视点内参考图片标记的JMVM 1.0的修改如下(用斜体字示出改变):
G.8.2.5.4.1 将短期参考图片标记为“未用于参考”的过程
当adaptive_ref_pic_marking_mode_flag等于1时调用这一过程。在该过程中仅考虑view_id与当前分片相同的参考图片。
用于视点间参考图片标记的语法和语义可以如下:
slice_header(){ | C | 描述符 |
... | | |
if(nal_ref_idc!=0) | | |
dec_ref_pic_marking() | 2 | |
if(inter_view_reference_flag) | | |
dec_view_ref_pic_marking_mvc() | 2 | |
} | | |
dec_view_ref_pic_marking_mvc(){ | C | 描述符 |
adaptive_view_ref_pic_marking_mode_flag | 2 | u(1) |
if(adaptive_view_ref_pic_marking_mode_flag) | | |
do{ | | |
view_memory_management_control_operation | 2 | ue(v) |
if(view_memory_management_control_operation==1‖view_memory_management_control_operation==2) | | |
abs_difference_of_view_id_minus1 | 2 | ue(v) |
}while(view_memory_management_control_operatio!=0) | | |
} | | |
} | | |
存储器管理控制操作
(view_memory_managemem_control_operation)值如下:
view_memory_man agement_control_operation | 存储器管理控制操作 |
0 | 结束视点memory_managemem_control_operation循环 |
1 | 去除标记“用于视点间参考”,或者将图片标记为“未用于参考”,abs_difference_of_view_id_minus1存在并且对应于用以从当前视点id减去的差值 |
2 | 去除标记“用于视点间参考”,或者将图片标记为“未用于参考”,abs_difference_of_view_id_minus1存在并且对应于用以向当前视点id添加的差值 |
adaptive_view_ref_pic_marking_mode_flag指定是滑动窗机制(当等于0时)在使用中还是自适应参考图片标记过程(当等于1时)在使用中。
修改了的用于视点间参考图片标记的解码过程如下:
8.2.5.5.2 视点间图片的标记
当view_memory_management_control_operation等于1时调用这一过程。
令viewIDX指定如下:
if(view_memory_managcment_control_operation==1)
viewIDX=CurrViewld_(difference_of_view_id_minusl+1)
elseif(view_memory_management_control_operation==2)
viewIDX=CurrViewld+(difference_of_view_id_minus1+1)
为了允许视点缩放性、即用以选择对那些视点进行传输、转发或者解码的可能性,存储器管理控制操作可以约束如下。如果currTemporalLevel等于当前图片的temporal_level并且dependentViews是依赖于当前视点的视点集,则MMCO命令可以仅以如下图片为目标,该图片具有与currTemporalLevel相等或者更大的temporal_level并且在依赖的视点内。为了允许这一点,向MMCO命令追加对view_id的指示或者指定具有对view_id的指示的新MMCO命令。
为了解决与先前描述的参考图片列表构造过程有关的问题,没有重新定义/缩放变量FrameNum和FrameNumWrap。这是与AVC标准中出现的动作相同的动作并且与JMVM标准对照,其中变量被重新定义/重新缩放。JMVM 1.0的修改如下(用斜体字示出了改变):在8.2.4.31用于短期参考图片的参考图片列表的重新排序过程中,8-38应当改变为:
for(cIdx=num_ref_idx_IX_active_minus1+1;cIdx>refIdxLX;cIdx--)
RefPicListX[cIdx]=RefPicListX[cIdx-1]
RefPicListX[refIdxLX++]=short-term reference picture with PicNum equal to
picNumLX and view_id equal to CurrViewID
nIdx=rcfIdxLX
for(cIdx=refIdxLX;cIdx<=num_tef_idx_IX_active_minus1+1;cIdx++)(8-38)
//if(PicNumF(RefPicListX[cIdx])!=picNumLX)
if(PicNumF(RefPicListX[cIdx])!=picNumLX‖ViewID(RefPicLiscX[cIdx])
-CurrVieID)
RefPicListX[nIdx++]=RefPicListX[cIdx]
其中CurrViewID是当前解码图片的view_id。
关于与先前讨论的参考图片列表初始化过程关联的问题,可以通过注明可以在初始化过程中仅考虑与当前分片属于相同视点的帧、字段或者字段对来解决这些问题。按照JMVM 1.0,这一表达可以添加到各子节8.2.4.2.1“用于帧中的P和SP分片的参考图片列表的初始化过程”至8.2.4.2.5“用于字段中的参考图片列表的初始化过程”的开头。
关于与参考图片列表构造过程有关的其它问题,可以使用多种方法来对视点间图片和用于内预测的图片两者有效地重新排序。第一种这样的方法涉及在列表中将视点间参考图片置于视点内参考图片前以及为视点间图片和用于视点内预测的图片指定单独的ROLR过程。用于视点内预测的图片也称为视点内图片。在这一方法中,执行如上文指定的用于视点内图片的参考图片列表初始化过程,其后是用于视点内图片的RPLR重新排序过程和列表截短过程。接着,视点间图片在视点内图片之后追加到列表。最后,还可以使用以下从JMVM 1.0修改的语法、语义和解码过程来选择各视点间图片并且将它置于参考图片列表的指定条目中。该方法适用于refPicList0和refPiclist1(如果存在)。
关于语法,等于1的view_ref_pic_list_reordering_flag_1X(X是0或者1)指定对于refPicListX存在语法元素view_reordering_idc。等于0的view_ref_pic_list_reording_flag_1X指定对于refPicListX不存在语法元素view_reordering_idc。ref_idx指示将视点间图片向参考图片列表置入的条目。
abs_diff_view_idx_minus1加上1指定将向由ref_idx指示的参考图片列表条目放置的图片的视点索引与视点索引预测值之间的绝对差值。abs_diff_view_idx_minus1的范围为0到num_multiview_refs_for_listX[view_id]-1。num_multiview_refs_for_listX[]是指用于锚定图片的anchor_reference_view_for_list_X[curr_view_id][]和用于非锚定图片的non_achor_reference_view_for_list_X[curr_view_id][],其中curr_view_id等于包含当前分片的视点的view_id。视点间图片的视点索引指示MVC SPS扩展中出现的视点间图片的view_id的顺序。对于视点索引等于view_index的图片,view_id等于num_multiview_refs_for_listX[view_index]。
abs_diff_view_idx_minus1加上1指定向列表中的当前索引移动的图片的视点索引与视点索引预测值之间的绝对差值。abs_diff_view_idx_minus1的范围为0到num_multiview_refs_for_listX[view_id]-1。num_multiview_refs_for_listX[]是指用于锚定图片的anchor_reference_view_for_list_X[curr_view_id][]和用于非锚定图片的non_achor_reference_view_for_list_X[curr_view_id][],其中curr_view_id等于包含当前分片的视点的view_id。视点间图片的视点索引指示MVC SPS扩展中出现的视点间图片的view_id的顺序。对于视点索引等于view_index的图片,view_id等于num_multiview_refs_for_listX[view_index]。
解码过程如下:
在用于视点内图片的截短之后完成NumRefIdxLXActive的定义:
NumRefIdxLXActive=num_rcf_idx_IX_active_minus1+1+
num_multiview_refs_for_listX[view_id]
G.8.2.4.3.3 用于视点间图片的参考图片列表的重新排序过程
向这一过程的输入是参考图片列表RefPicListX(X等于0或者1)。
这一过程的输出是可能修改的参考图片列表RefPicListX(X等于0或者1)。
如下导出变量picViewIdxLX。
If view_rcordering_idc is equal to 0
picVicwIdxLX=picViewIdxLXPred-(abs_diff_view_idx_minus1+1)
Otherwise(view_reordering_idc is equal to 1),
picViewIdxLX=pieViewIdxLXPred+(abs_diff_view_idx_minus1+1)
picViewIdxLXPred是用于变量picViewIdxLX的预测值。当针对分片首次调用这一子节中指定的过程时(也就是对于ref_pic_list_reording()语法中首次出现等于0或者1的view_reordering_idc),将picViewIdxL0Pred和picViewIdxL1Pred初始地设置成等于0。在picViewIdxLX的每次赋值之后,将picViewIdxLX的值赋给picViewIdxLXPred。
实施以下过程以将视点索引等于picViewIdxLX的视点间图片置于索引位置ref_Idx、将任何其它其余图片的位置移位到列表中的更后位置如下。
for(cIdx=NumRefIdxLXAetive;cIdx>ref_Idx;c[dx--)
RefPicListX[cIdx]=RefPieListX[eIdx-1]
RefPicListX[ref_Idx]=inter-view rcference picture with view id equal to
reference_view_for_list_X[picViewIdxLX]
nIdx=ref_Idx+1;
for(cIdx=refIdxLX;cIdx<=NumRefIdxLXActive;cIdx++)
if(ViewID(RefPicListX[cIdx])TargeView ID‖Time(RefPicListX[cIdx
])!=TargetTime)
RefPicListX[nIdx++]=RefPicListX[cIdx]
preView_id=PicViewIDLX
TargetViewID和TargetTime指示待重新排序的目标参考图片的view_id或者时间轴值,并且Time(pic)返回图片pic的时间轴值。
根据用于对视点间图片和用于内预测的图片两者有效地重新排序的第二种方法,进行如上文指定的用于视点内图片的参考图片列表初始化过程,然后按照视点间图片在MVC SPS扩展中出现的顺序将视点间图片追加到列表的末尾。随后应用用于视点内和视点间图片的RPLR重新排序过程、继而是列表截短过程。基于JMVM 1.0来修改的样本语法、语义和解码过程如下。
参考图片列表重新排序语法
G.7.4.3.1 参考图片列衣重新排序语义
表用于对参考图片列表重新排序的reordering_of_pic_nums_idc操作
reordering_of_pic_nums_idc | 指定的重新排序 |
0 | abs_diff_pic_num_minus1存在并且对应于用以从图片编号预测值减去的差值 |
1 | abs_diff_pic_num_minus1存在并且对应于用以向图片编号预测值添加的差值 |
2 | long_term_pic_num存在并且指定用于参考图片的长期图片编号 |
3 | 结束用于初始参考图片列表的重新排序的循环 |
4 | abs_diff_view_idx_minus1存在并且对 |
| 应于用以从视点索引预测值减去的差值 |
5 | abs_diff_view_idx_minus1存在并且对应于用以向视点索引预测值添加的差值 |
reordering_of_pic_nums_idc与abs_diff_pic_num_minus1或者long_term_pic_num一起指定重新映射哪些参考图片。在上表中指定reordering_of_pic_nums_idc的值。紧接在ref_pic_list_reordering_flag_10或者ref_pic_list_reordering_flag_11之后的第一reordering_of_pic_nums_idc的值不等于3。
abs_diff_view_idx_minus1加上1指定将向参考图片列表中的当前索引放置的图片的视点索引与视点索引预测值之间的绝对差值。abs_diff_view_idx_minus1的范围为0到num_multiview_refs_for_listX[view_id]-1。num_multiview_refs_for_listX[]是指用于锚定图片的anchor_reference_view_for_list_X[curr_view_id][]和用于非锚定图片的non_anchor_reference_view_for_list_X[curr_view_id][],其中curr_view_id等于包含当前分片的视点的view_id。视点间图片的视点索引指示MVC SPS扩展中出现的视点间图片的view_id的顺序。对于视点索引等于view_index的图片,view_id等于num_multiview_refs_for_listX[view_index]。
重新排序过程可以描述如下。
G.8.2.4.3.3 用于视点间参考图片的参考图片列表的重新排序过程
向这一过程的输入是索引refIdxLX(X等于0或者1)。
这一过程的输出是递增索引refIdxLX。
变量picViewIdxLX导出如下。
If eodering_of_picnums_idc is equal to 4
picViewIdxLX peViewIdxLX Pred(abs_dif_view_idx_minus1+1)
Otherise(reordering_of_pic_nums_idc is equal to 5),
peViewIdxIXpieViewIdxLX Prcd(diff_view_idx_mis1+1)
picViewIdxLXPred是用于变量picViewIdxLX的预测值。当针对分片首次调用这一子节中指定的过程时(也就是对于ref_pic_list_reording()语法中首次出现等于4或者5的reordering_of_pic_nums_idc),将picViewIdxL0Pred和picViewIdxL1Pred初始地设置成等于0。在picViewIdxLX的每次赋值之后,将picViewIdxLX的值赋给picViewIdxLXPred。实施以下过程以将视点索引等于picViewIdxLX的视点间图片置于索引位置refIdxLX、将任何其它其余图片的位置移位到列表中的更后位置并且递增refIdxLX的值。
for(cIdx=num_ref_idx_IX_active_minus1+1;cIdx>refIdxLX;cIdx-)
RefPicListX[cIdx]=RetPicListX[cIdx-1]
ReicListX[refIdxLX++]=inter-view reference picture with view id equal to
eference_view_for_list_X[picViewIdxLX]
nIdx=rcfIdxIX
for(eIdx=cfIdxLX;cIdx<=num_ref_idx_IX_active_minus1+1;cIdx++)
if(ViewID(RefPicListX[cIdx])!=TargerViewiDTime(RefPicListX[cIdx]}!=
TargetTime)
RefPicLisX[nIdx++]=RefPicListX[eIdx]
其中TargetViewID和TargetTime指示待重新排序的目标参考图片的view_id或者时间轴值,并且Time(pic)返回图片pic的时间轴值。
根据用于对视点间图片和用于内预测的图片两者有效地重新排序的第三种方法,初始参考图片列表包含标记为“用作短期参考”或者“用作长期参考”并且view_id与当前图片相同的图片。此外,初始参考图片列表包含可以用于视点间预测的图片。根据用于MVC的序列参数集扩展来推断用于视点间预测的图片并且也可以根据inter_view_reference_flag来推断之。向用于视点间预测的图片指派用于这一图片的解码过程的某些长期参考索引。用于视点间参考图片的分配长期参考索引例如可以是前N个参考索引,并且用于视点内长期图片的索引可以修改为等于它们用于这一图片的解码过程的先前值+N,其中N表示视点间参考图片的数目。可替换地,分配的长期参考索引可以范围为从MaxLongTermFrameIdx+1到MaxLongTermFrameIdx+n(含)。可替换地,用于MVC的序列参数集扩展可以包含这里称为start_lt_index_for_rplr的语法元素,并且指派的长期索引分配start_1t_index_for_rplr(含)到start_lt_index_for_rplr+N(不含)这一范围。可以按照view_id的顺序即相机顺序或者按照视点相关度在用于MVC的序列参数集扩展中列出的顺序来分派用于视点间参考图片的可用长期索引。RPLR命令(语法和语义)与H.264/AVC标准相比保持不变。
对于时间直接有关处理,例如对于运动向量缩放,如果两个参考图片均为交互预测(视点内预测)图片(即参考图片未标记为“用于视点间参考”),则遵循AVC解码过程。如果两个参考图片之一是交互预测图片而另一参考图片是视点间预测图片,则视点间预测图片视为长期参考图片。否则(如果两个参考图片均为视点间图片),将view_id或者相机顺序指示符值用于导出加权预测参数而不是POC值用于运动向量缩放。
对于导出用于隐式加权预测的预测权值,执行以下过程。如果两个参考图片均为交互预测(视点内预测)图片(即未标记为“用于视点间参考”),则遵循AVC解码过程。如果两个参考图片之一是交互预测图片而另一参考图片是视点间预测图片,则视点间预测图片视为长期参考图片。否则(即如果两个图片均为视点间预测图片),则将view_id或者相机顺序指示符值用于导出加权预测参数而不是POC值用于导出加权预测参数。
在如下方法步骤的一般背景中描述了本发明,这些方法步骤可以在一个实施例中由程序产品实施,该程序产品包括实施于计算机可读介质上并且由联网环境中的计算机执行的计算机可执行指令如程序代码。计算机可读介质的例子可以包括各种类型的存储介质,这些存储介质包括但不限于电子设备存储器单元、随机访问存储器(RAM)、只读存储器(ROM)、压缩盘(CD)、数字多功能盘(DVD)和其它内部或者外部存储设备。一般而言,程序模块包括执行特定任务或者实施特定抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、关联的数据结构和程序模块表示用于执行这里公开的方法步骤的程序代码的例子。这样的可执行指令或者关联的数据结构的特定序列表示用于实施在这样的步骤中描述的功能的对应动作的例子。
可以用具有基于规则的逻辑和用以实现各种数据库搜索步骤、相关步骤、比较步骤和判决步骤的其它逻辑的标准编程技术来实现本发明的软件和web实施。也应当注意,如这里和权利要求中使用的字眼“组件”和“模块”旨在于涵盖使用一行或者多行软件代码的实施和/或硬件实施和/或用于接收人工输入的设备。
为了说明和描述的目的已经给出了本发明的前述实施方式的描述。这不意味着穷举或是将本发明限制到公开的精确形式,并且按照上述教导,修改和变化是可能的,或者可以从本发明的实践中获取。这些实施方式是为了解释本发明的原理及其实际应用而被选择并描述,以便使本领域技术人员能够在各种实施方式中使用本发明并且将其用于适于所考虑的特定使用的不同修改。