本申请要求2005年10月12日提交的、名称为“METHOD ANDAPPARATUS FOR WEIGHTED PREDICTION IN SCALABLE VIDEOENCODING AND DECODING”的美国临时专利申请序列号第60/725687号的权益,其内容通过引用而被整体合并于此。
具体实施方式
本发明针对用于可分级视频编码和解码中的加权预测的方法和装置。
本描述例示本发明的原理。因此应了解本领域技术人员将能够设计出虽然未在这里明确描述或示出、但是体现本发明的原理并且包括在本发明的精神和范围内的各种布置。
这里所述的所有示例和条件语句意在教学目的,以帮助读者理解由发明人贡献以促进本领域的本发明的原理和构思,并应被解释为不局限为如此具体叙述的例子和条件。
此外,这里叙述本发明原理、方面和实施例的所有陈述、以及本发明的具体例子意在包含本发明的结构的与功能的等价物。另外,意在使得这样的等价物包括当前已知的等价物以及将来开发的等价物,即,无论结构如何,所开发的执行相同功能的任何元件。
因此,例如本领域技术人员将了解这里呈现的框图代表实现本发明原理的示例电路的构思视图。相似地,将了解:任何流程图、图示、状态转换图、伪代码等等代表各种处理,所述各种处理可基本上在计算机可读介质中表现,并被计算机或处理器执行,无论这样的计算机或处理器是否被明确示出。
附图中所示的各种元件的功能可通过使用专用硬件以及能够执行软件的硬件与适合的软件相结合来提供。当由处理器提供时,所述功能可由单个专用处理器、单个共享处理器、或其中一些可被共享的多个独立处理器提供。此外,术语“处理器”或“控制器”的明确使用不应被解释为排外性地只代表能够执行软件的硬件,其也可以隐含地并非限制地包括数字信号处理器(“DSP”)硬件、用于存储软件的只读存储器(“ROM”)、随机存取存储器(“RAM”)、以及非易失性存储。
也可包括其它的传统的和/或定制的硬件。类似地,附图中所示的任何开关只是概念性的。其功能可通过程序逻辑的运行、通过专用逻辑电路、通过程序控制和专用逻辑电路间的交互作用、或甚至手动地执行,具体技术可由实施者选择,其可从上下文中被具体地理解。
在其权利要求书中,被表示为执行特定功能的部件的任何元件意在包含执行该功能的任何手段,包括:例如,a)执行该功能的电路元件的组合或者b)与用于执行软件的适合的电路结合以执行该功能的任何形式的软件,因此其包括固件、微码等等。由这样的权利要求书限定的本发明归于这样的事实:以权利要求书要求的方式组合并集合由各种所述部件提供的功能。因此应认为:可提供那些功能的任何部件等价于这里所示的那些部件。
转到图1,可应用本发明的示例的联合可分级视频模型(下文中称为“JSVM”)编码器通常由参考标号100表示。JSVM编码器100使用三个空间层以及运动补偿时间滤波。JSVM编码器100包括二维(2D)抽取器(decimator)104、2D抽取器106、以及运动补偿时间滤波(MCTF)模块108,其每个具有用于接收视频信号数据102的输入端。
2D抽取器106的输出端与MCTF模块110的输入端信号通信地连接。MCTF模块110的第一输出端与运动编码器112的输入端信号通信地连接,MCTF模块110的第二输出端与预测模块116的输入端信号通信地连接。运动编码器112的第一输出端与多路复用器114的第一输入端信号通信地连接。运动编码器112的第二输出端与运动编码器124的第一输入端信号通信地连接。预测模块116的第一输出端与空间变换器118的输入端信号通信地连接。空间变换器118的输出端与多路复用器114的第二输入端信号通信地连接。预测模块116的第二输出端与内插器120的输入端信号通信地连接。内插器的输出端与预测模块122的第一输入端信号通信地连接。预测模块122的第一输出端与空间变换器126的输入端信号通信地连接。空间变换器126的输出端与多路复用器114的第二输入端信号通信地连接。预测模块122的第二输出端与内插器130的输入端信号通信地连接。内插器130的输出端与预测模块134的第一输入端信号通信地连接。预测模块134的输出端与空间变换器136信号通信地连接。空间变换器的输出端与多路复用器114的第二输入端信号通信地连接。
2D抽取器104的输出端与MCTF模块128的输入端信号通信地连接。MCTF模块128的第一输出端与运动编码器124的第二输入端信号通信地连接。运动编码器124的第一输出端与多路复用器114的第一输入端信号通信地连接。运动编码器124的第二输出端与运动编码器132的第一输入端信号通信地连接。MCTF模块128的第二输出端与预测模块122的第二输入端信号通信地连接。
MCTF模块108的第一输出端与运动编码器132的第二输入端信号通信地连接。运动编码器132的输出端与多路复用器114的第一输入端信号通信地连接。MCTF模块108的第二输出端与预测模块134的第二输入端信号通信地连接。多路复用器114的输出端提供输出比特流138。
对于每个空间层,执行运动补偿时间分解(decomposition)。此分解提供时间可分级性。来自较低空间层的运动信息可被用于较高层上的运动的预测。对于纹理编码,可以应用连续的空间层之间的空间预测来去除冗余。对由帧内预测或者运动补偿帧间预测产生的残差信号进行变换编码(transformencode)。质量(quality)基本层残差在每个空间层处提供最小重建质量。如果不应用层间预测,则可将此质量基本层编码为适应H.264标准的流。对于质量可分级性,另外对质量增强层进行编码。可以选择这些增强层以提供粗糙或者精细颗粒质量(SNR)可分级性。
转到图2,可应用本发明的示例的可分级视频解码器通常由参考标号200表示。解多路复用器202的输入端可用作可分级视频解码器200的输入端,以接收可分级比特流。解多路复用器202的第一输出端与空间逆变换SNR可分级熵解码器204的输入端信号通信地连接。空间逆变换SNR可分级熵解码器204的第一输出端与预测模块206的第一输入端信号通信地连接。预测模块206的输出端与逆MCTF模块208的第一输入端信号通信地连接。
空间逆变换SNR可分级熵解码器204的第二输出端与运动向量(MV)解码器210的第一输入端信号通信地连接。MV解码器210的输出端与逆MCTF模块208的第二输入端信号通信地连接。
解多路复用器202的第二输出端与空间逆变换SNR可分级熵解码器212的输入端信号通信地连接。空间逆变换SNR可分级熵解码器212的第一输出端与预测模块214的第一输入端信号通信地连接。预测模块214的第一输出端与内插模块216的输入端信号通信地连接。内插模块216的输出端与预测模块206的第二输入端信号通信地连接。预测模块214的第二输出端与逆MCTF模块218的第一输入端信号通信地连接。
空间逆变换SNR可分级熵解码器212的第二输出端与MV解码器220的第一输入端信号通信地连接。MV解码器220的第一输出端与MV解码器210的第二输入端信号通信地连接。MV解码器220的第二输出端与逆MCTF模块218的第二输入端信号通信地连接。
解多路复用器202的第三输出端与空间逆变换SNR可分级熵解码器222的输入端信号通信地连接。空间逆变换SNR可分级熵解码器222的第一输出端与预测模块224的输入端信号通信地连接。预测模块224的第一输出端与内插模块226的输入端信号通信地连接。内插模块226的输出端与预测模块214的第二输入端信号通信地连接。
预测模块224的第二输出端与逆MCTF模块228的第一输入端信号通信地连接。空间逆变换SNR可分级熵解码器222的第二输出端与MV解码器230的输入端信号通信地连接。MV解码器230的第一输出端与MV解码器220的第二输入端信号通信地连接。MV解码器230的第二输出端与逆MCTF模块228的第二输入端信号通信地连接。
逆MCTF模块228的输出端可用作解码器200的输出端以输出层0信号。逆MCTF模块218的输出端可用作解码器200的输出端以输出层1信号。逆MCTF模块208的输出端可用作解码器200的输出端以输出层2信号。
根据本原理的实施例,从基本层权重和增强层权重中选择增强层加权预测的加权参数。特别对于局部亮度变化,这可以造成改进编码性能。在本原理的各种实施例中,自适应地执行该选择以及/或者该选择是取决于宏块模式的。也为编码器处的模式选择例示了各种示例实施例。
如果编码器选择对基本层和增强层使用不同的算法或者如果基本层未选择使用加权预测而增强层使用加权预测,则在增强层中显式地发送加权参数。
在JSVM中,如在双(两层)空间可分级性的情况下使用“BASE_LAYER_MODE”或者“QPEL_REFINEMENT_MODE”,增强层宏块可以采用使用分级的基本层运动数据的层间运动预测。另外,在宏块(或者子宏块)预测模式中,运动向量预测值可以通过motion_prediction_flag_lx[]选择基本层运动向量或者空间相邻的增强层运动向量预测值。motion_prediction_flag_lx[]等于1指定将(分级的)基本层运动向量用作运动向量预测值。motion_prediction_flag_lx[]等于0指定将空间相邻的增强层运动向量用作运动向量预测值。
当base_mode_flag等于1,或者base_mode_refinemend_flag等于1,或者motion_prediction_flag_lx[]等于1时,我们将这些宏块称为层间预测宏块。
码片首标标记base_pred_weight_table_flag当前取2个值:0或者1。值0指示将发送增强层(EL)权重。值1指示对于增强层应继承基本层(BL)权重。
对于层间预测模式,H.264标准不明确指定使用哪组权重。为了关于本原理阐明这些情况,提供了五个示例实施例,如关于图3到图12的方法所描述的。当然,本原理不仅限于该五个所述的示例实施例,而是给出这里提供的本原理的教学,本领域和相关领域的普通技术人员将在维持本原理的范围的情况下预期这些和各种其它的实施例。
在第一和第二示例实施例中,在没有任何语法改变的情况下、我们阐明base_pred_weight_table_flag的使用,对于层间预测宏块,base_pred_weight_tale_flag等于0。在第三示例实施例中,通过在宏块层中添加新的语法元素base_mode_weight_flag来扩展上述的第一现有技术方案的方法,该新的语法元素base_mode_weight_flag以宏块为基础指示对于层间预测宏块在增强层中使用哪组权重。在第四示例方法中,扩展base_mode_weight_flag以取下述的三个值。在第五实施例中,我们扩展第四方法以在宏块层处添加语法元素base_mode_weight_flag,以指示要使用BL权重还是EL权重。
下面,图1例示第一、第二和第三示例实施例的码片首标语法。表2例示第四和第五示例实施例的码片首标语法。表3例示第三示例实施例的宏块层语法。表4例示第五示例实施例的宏块层语法。
表1
slice_header_in_scalable_extension(){ |
C |
描述符 |
first_mb_in_slice |
2 |
ue(v) |
slice_type |
2 |
ue(v) |
pic_parameter_set_id |
2 |
ue(v) |
if(slice_type==PR){ |
|
|
num_mbs_in_slice_minus1 |
2 |
ue(v) |
luma_chroma_sep_flag |
2 |
u(l) |
} |
|
|
frame_num |
2 |
u(v) |
if(!frame_mbs_only_flag){ |
|
|
field_pic_flag |
2 |
u(l) |
if(fild_pic_flag) |
|
|
bottom_field_flag |
2 |
u(l) |
} |
|
|
if(nal_unit_type==21) |
|
|
idr_pic_id |
2 |
ue(v) |
if(pic_order_cnt_type==0){ |
|
|
pic_order_cnt_lsb |
2 |
u(v) |
if(pic_order_present_flag&&!field_pic_flag) |
|
|
delta_pic_order_cnt_bottom |
2 |
se(v) |
} |
|
|
if(pic_order_cnt_type==1 &&!delta_pic_order_always_zero_flag){ |
|
|
delta_pic_order_cnt[0] |
2 |
se(v) |
if(pic_order_present_flag&&!field_pic_flag) |
|
|
delta_pic_order_cnt[1] |
2 |
se(v) |
} |
|
|
if(slice_type!=PR){ |
|
|
if(redundant_pic_cnt_present_flag) |
|
|
redundant_pic_cnt |
2 |
ue(v) |
if(slice_type==EB) |
|
|
direct_spatial_mv_pred_flag |
2 |
u(l) |
key_picture_flag |
2 |
u(l) |
decomposition_stages |
2 |
ue(v) |
base_id_plus1 |
2 |
ue(v) |
if(base_id_plus1!=0){ |
|
|
adaptive_prediction_flag |
2 |
u(l) |
} |
|
|
if(slice_type==EP||slice_type==EB){ |
|
|
num_ref_idx_active_override_flag |
2 |
u(l) |
if(rnum_ref_idx_active_override_flag){ |
|
|
num_ref_idx_10_active_minus1 |
2 |
ue(v) |
if(slice_type==EB) |
|
|
num_ref_idx_11_active_minus1 |
2 |
ue(v) |
} |
|
|
} |
|
|
ref_pic_list_reordering() |
2 |
|
for(decLvl=temporal_level;decLvl<decomposition_stages;decLvl++){ |
|
|
num_ref_idx_update_10_active[decLvl+1] |
2 |
ue(v) |
num_ref_idx_update_11_active[decLvl+1] |
2 |
ue(v) |
} |
|
|
if((weighted_pred_flag && slice_type==EP)||(weighted_bipred_idc==1 && slice_type==EB)) |
|
|
{ |
|
|
if((base_id_plus1!=0)&&(adaptive_prediction_flag==1)) |
|
|
base_pred_weight_table_flag |
2 |
u(l) |
if(base_pred_weight_table_flag==0) |
|
|
pred_weight_table() |
2 |
|
} |
|
|
if(nal_ref_idc!=0) |
|
|
dec_ref_pic_marking() |
2 |
|
if(entropy_coding_mode_flag && slice_type !=EI) |
|
|
cabac_init_idc |
2 |
ue(v) |
} |
|
|
slice_qp_delta |
2 |
se(v) |
if(deblocking_filter_control_present_flag){ |
|
|
disable_deblocking_filter_idc |
2 |
ue(v) |
if(disable_deblocking_filter_idc!=1){ |
|
|
slice_alpha_c0_offset_div2 |
2 |
se(v) |
slice_beta_offset_div2 |
2 |
se(v) |
} |
|
|
} |
|
|
if(slice_type!=PR) |
|
|
if(num_slice_groups_minus1>0 &&slice_group_map_type>=3 && slice_group_map_type<=5) |
|
|
slice_group_change_cycle |
2 |
u(v) |
if(slice_type!=PR && extended_spatial_scalability>0){ |
|
|
if(chroma_format_idc>0){ |
|
|
base_chroma_phase_x_plus1 |
2 |
u(2) |
base_chroma_phase_y_plus1 |
2 |
u(2) |
} |
|
|
if(extended_spatial_scalability==2){ |
|
|
scaled_base_left_offset |
2 |
se(v) |
scaled_base_top_offset |
2 |
se(v) |
scaled_base_right_offset |
2 |
se(v) |
scaled_base_bottom_offset |
2 |
se(v) |
} |
|
|
} |
|
|
SpatialScalabilityType=spatial_scalability_type() |
|
|
} |
|
|
表2
slice_header_in_scalable_extension(){ |
C |
描述符 |
first_mb_in_slice |
2 |
ue(v) |
slice_type |
2 |
ue(v) |
pic_parameter_set_id |
2 |
ue(v) |
if(slice_type==PR){ |
|
|
num_mbs_in_slice_minus1 |
2 |
ue(v) |
luma_chroma_sep_flag |
2 |
u(l) |
} |
|
|
frame_num |
2 |
u(v) |
if(!frame_mbs_only_flag){ |
|
|
fleld_pic_flag |
2 |
u(l) |
if(field_pic_flag) |
|
|
bottom_field_flag |
2 |
u(l) |
} |
|
|
if(nal_unit_type==21) |
|
|
idr_pic_id |
2 |
ue(v) |
if(pic_order_cnt_type==0){ |
|
|
pic_order_cnt_lsb |
2 |
u(v) |
if(pic_order_present_flag &&!field_pic_flag) |
|
|
delta_pic_order_cnt_bottom |
2 |
se(v) |
} |
|
|
if(pic_order_cnt_type==1 &&!delta_pic_order_always_zero_flag){ |
|
|
delta_pic_order_cnt[0] |
2 |
se(v) |
if(pic_order_present_flag &&!field_pic_flag) |
|
|
delta_pic_order_cnt[1] |
2 |
se(v) |
} |
|
|
if(slice_type!=PR){ |
|
|
if(redundant_pic_cnt_present_flag) |
|
|
redundant_pic_cnt |
2 |
ue(v) |
if(slice_type==EB) |
|
|
direct_spatial_mv_pred_flag |
2 |
u(l) |
key_picture_flag |
2 |
u(l) |
decomposition_stages |
2 |
ue(v) |
base_id_plusl |
2 |
ue(v) |
if(base_id_plus1 !=0){ |
|
|
adaptive_prediction_flag |
2 |
u(l) |
} |
|
|
if(slice_type==EP||slice_type==EB){ |
|
|
num_ref_idx_active_override_flag |
2 |
u(l) |
if(num_ref_idx_active_override_flag){ |
|
|
num_ref_idx_10_active_minusl |
2 |
ue(v) |
if(slice_type==EB) |
|
|
num_ref_idx_11_active_minus1 |
2 |
ue(v) |
} |
|
|
} |
|
|
ref_ pic_list_reordering() |
2 |
|
for(decLvl=temporal_level;decLvl<decomposition_stages;decLvl++){ |
|
|
num_ref_idx_update_10_active[decLvl+1] |
2 |
ue(v) |
num_ref_idx_update_11_active[decLvl+1] |
2 |
ue(v) |
} |
|
|
if((weighted_pred_flag && slice_type==EP)||(weighted_bipred_idc==1 && slice_type==EB)) |
|
|
{ |
|
|
if((base_id_plus1!=0)&&(adaptive_prediction_flag==1)) |
|
|
base_pred_weight_table_flag |
2 |
u(2) |
if((base_pred_weight_table_flag==0)||(base_pred_weight_table_flag==2)) |
|
|
pred_weigh_table() |
2 |
|
} |
|
|
if(nal_ref_idc!=0) |
|
|
dec_ref_pic_marking() |
2 |
|
if(entropy_coding_mode_flag && slice_type !=EI) |
|
|
cabac_init_idc |
2 |
ue(v) |
} |
|
|
slice_qp_delta |
2 |
se(v) |
if(deblocking_filter_control_present_flag){ |
|
|
disable_deblocking_filter_idc |
2 |
ue(v) |
if(disable_deblocking_filter_idc!=1){ |
|
|
slice_alpha_c0_offset_div2 |
2 |
se(v) |
slice_beta_offset_div2 |
2 |
se(v) |
} |
|
|
} |
|
|
if(slice_type!=PR) |
|
|
if(num_slice_groups_minusl>0 &&slice_ group_map_type>=3 && slice_group_map_type<=5) |
|
|
slice_group_change_cycle |
2 |
u(v) |
if(slice_type!=PR && extended_spatial_scalability>0){ |
|
|
if(chroma_format_idc>0){ |
|
|
base_chroma_phase_x_plus1 |
2 |
u(2) |
base_chroma_phase_y_plus1 |
2 |
u(2) |
} |
|
|
if(extended_spatial_scalability==2){ |
|
|
scaled_base_left_offset |
2 |
se(v) |
scaled_base_top_offset |
2 |
se(v) |
scaaled_base_right_offset |
2 |
se(v) |
scaled_base_bottom_offset |
2 |
se(v) |
} |
|
|
} |
|
|
SpatialScalabilityType=spatial_scalability_type() |
|
|
} |
|
|
表3
macroblock_layer_in_scalable_extension(){ |
C |
描述符 |
if(in_crop_window(CurrMbAddr)) |
|
|
If((base_pred_weight_table_flag=0)&&(slice_type==EP||slice_type==EB)) |
|
|
base_mode_weight_flag |
2 |
ae(v) |
if(adaptive_prediction_flag){ |
|
|
base_mode_flag |
2 |
ae(v) |
if(!base_mode_flag && SpatialScalabilityType>0 &&!intra_base_mb(CurrMbAddr)) |
|
|
base_mode_refinement_flag |
2 |
ae(v) |
} |
|
|
} |
|
|
if(!base_mode_flag &&!base_mode_refinement_flag){ |
|
|
mb_type |
2 |
ae(v) |
if(mb_type==I_NxN && in_crop_window(CurrMbAddr) &&(iutra_base_mb(CurrMbAddr)||!consirained_inter_layer_pred())) |
|
|
intra_base_flag |
2 |
ae(v) |
} |
|
|
if(mb_type==I_PCM){ |
|
|
while(!byte_aligned()) |
|
|
pcm_alignment_zero_bit |
2 |
f(l) |
for(i=0;i<256;i++) |
|
|
pcm_sample_luma[i] |
2 |
u(v) |
for(i=0;i<2*MbWidthC*MbHeightC;i++) |
|
|
pcm_sample_chroma[i] |
2 |
u(v) |
}else{ |
|
|
NoSubMbPartSizeLessThan8x8Flag=1 |
|
|
if(mb_type !=I_NxN &&MbPartPredMode(mb_type,0)!=Intra_16x16 &&NumMbPart(mb_type)==4){ |
|
|
sub_mb_pred_in_scalabl_extension(mb_type) |
2 |
|
for(mbPartIdx=0;mbPartldx<4;mbPartIdx++) |
|
|
if(sub_mb_type[mbPartIdx]!=B_Direct_8x8){ |
|
|
if(NumSubMbPart(sub_mb_type[mbPartIdx])>1) |
|
|
NoSubMbPartSizeLessThan8x8Flag=0 |
|
|
}elseif(!direct_8x8_inference_flag) |
|
|
NoSubMbPartSizeLessThan8x8Flag=0 |
|
|
}else{ |
|
|
if(transform_8x8_mode_flag && mb_type==I_NxN) |
|
|
transform_size_8x8_flag |
2 |
ae(v) |
mb_pred_in_scalable_cxtension(mb_type) |
2 |
|
} |
|
|
if(MbPartPredMode(mb_type,0)!=Intra_16x16){ |
|
|
coded_block_pattern |
2 |
ae(v) |
if(CodedBlockPattemLuma>0&&transform_8x8_mode_flag && mb_type!=I_NxN &&NoSubMbPartSizeLessThan8x8F1ag &&!(MbPartPredMode(mb_type,0)==B_Direct_16x16 &&!direct_8x8_inference_flag)) |
|
|
transform_size_8x8_flag |
2 |
ae(v) |
} |
|
|
if(CodedBlockPattemnLuma>0||CodedBlockPatternChroma>0||MbPartPredMode(mb_type,0)==Intra_16x16){ |
|
|
mb_qp_delta |
2 |
ae(v) |
residual_in_scalable_extension() |
3|4 |
|
} |
|
|
} |
|
|
} |
|
|
表4
macroblock_layer_in_scalable_extension(){ |
C |
描述符 |
if(in_crop_window(CurrMbAddr)) |
|
|
If(((base_pred_weight_table_flag=0)||(base_pred_weight_table_flag=2))&&(slice_type=EP||slice_type=EB)) |
|
|
base_mode_weight_flag |
2 |
ae(v) |
if(adaptive_prediction_flag){ |
|
|
base_mode_flag |
2 |
ae(v) |
if(!base_mode_flag && SpatialScalabilityType>0 &&!intra_base_mb(CurrMbAddr)) |
|
|
base_mode_reflnement_flag |
2 |
ae(v) |
} |
|
|
} |
|
|
if(!base_mode_flag &&!base_mode_refinement_flag){ |
|
|
mb_type |
2 |
ae(v) |
if(mb_type==I_NxN && in_crop_window(CurrMbAddr) &&(intra_base_mb(CurrMbAddr)||!constrained_inter_layer_pred())) |
|
|
intra_base_flag |
2 |
ae(v) |
} |
|
|
if(mb_type==I_PCM){ |
|
|
while(!byte_aligned()) |
|
|
pcm_alignment_zero_bit |
2 |
f(l) |
for(i=0;i<256;i++) |
|
|
pcm_sample_luma[i] |
2 |
u(v) |
for(i=0;i<2*MbWidthC*MbHeightC;i++) |
|
|
pcm_sample_chroma[i] |
2 |
u(v) |
}else { |
|
|
NoSubMbPartSizeLessThan8x8Flag=1 |
|
|
if(mb_type!=I_NxN &&MbPartPredMode(mb_type,0)!=Intra_16x16 &&NumMbPart(mb_type)==4){ |
|
|
sub_mb_pred_in_scalable_extension(mb_type) |
2 |
|
for(mbPartIdx=0;mbPartIdx<4;mbPartIdx++) |
|
|
if(sub_mb_type[mbPartIdx]!=B_Direct_8x8){ |
|
|
if(NumSubMbPart(sub_mb_type[mbPartIdx])>1) |
|
|
NoSubMbPartSizeLessThan8x8Flag=0 |
|
|
}else if(!direct_8x8_inference_flag) |
|
|
NoSubMbPartSizeLessThan8x8Flag=0 |
|
|
}else{ |
|
|
if(transform_8x8_mode_flag && mb_type==I_NxN) |
|
|
transform_size_8x8_flag |
2 |
ae(v) |
mb_pred_in_scalable_extension(mb_type) |
2 |
|
} |
|
|
if(MbPartPredMode(mb_type,0)!=Intra_16x16){ |
|
|
coded_block_pattern |
2 |
ae(v) |
if(CodedBlockPattemLuma>0 &&transform_8x8_mode_flag && mb_type!=I_NxN&&NoSubMbPartSizeLessThan8x8Flag &&!(MbPartPredMode(mb_type,0)==B_Direct_16x16 &&!direct_8x8_inference_flag)) |
|
|
transform_size_8x8_flag |
2 |
ae(v) |
} |
|
|
if(CodedBlockPattemLuma>0||CodedBlockPatternChroma>0||MbPartPredMode(mb_type,0)==Intra_16x16){ |
|
|
mb_qp_delta |
2 |
ae(v) |
residual_in_scalable_extension() |
3|4 |
|
} |
|
|
} |
|
|
将关于第一示例实施例给出描述。在第一示例实施例中,我们不改变任何语法元素。当base_pred_weight_table_flag等于0并且增强层宏块是层间宏块时,使用基本层权重来对相应的宏块进行加权看上去是直观的。结果,解码器也应当知道此事实。因此,我们提出对于motion_prediction_flag_lx[]、base_mode_flag、以及base_mode_refinement_flag的语义改变。具体地,我们提出将下列行添加到已经存在的语法定义:
motion_prediction_flag_10[mbPartldx]等于1指定将使用基本层pred_weight_table()来对当前宏块执行加权预测。
base_mode_flag等于1指定将使用基本层pred_weight_table()来对当前宏块执行加权预测。
base_mode_refinement_flag等于1指定将使用基本层pred_weight_table()来对当前宏块执行加权预测。
转到图3,使用加权预测对增强层进行编码的方法通常由参考标号300表示。方法300包括开始块305,其开始对增强层进行编码并且将控制传递给确定块310。确定块310确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块315。否则,将控制传递给功能块340。
功能块315对层间宏块使用基本层加权参数,并且将控制传递给功能块320。功能块320利用所获得的权重对参考画面进行加权,并将控制传递给功能块325。功能块325在对应于增强层的码片首标中写入base_pred_weight_table_flag,并将控制传递给确定块330。确定块330确定base_pred_weight_table_flag是否等于1(真)。如果其等于1,则将控制传递给功能块335。否则,将控制传递给功能块350。
功能块335使用加权后的参考画面对增强层画面进行编码,并将控制传递给结束块399。
功能块350在码片首标中写入权重,并将控制传递给功能块335。
功能块340计算增强层画面的权重,并将控制传递给功能块345。功能块345对增强层画面中的层间宏块使用基本层加权参数,对增强层画面中的其它宏块使用增强层加权参数,并将控制传递给功能块320。
转到图4,使用加权预测对增强层进行解码的方法通常由参考标号400表示。方法400包括开始块405,其开始对增强层进行解码并且将控制传递给确定块410。确定块410确定base_pred_weight_table_flag是否等于0。如果其等于0,则将控制传递给功能块415。否则,将控制传递给功能块420。
功能块415对层间宏块使用基本层加权参数,对所有其它宏块使用增强层加权参数,并将控制传递给结束块499。
控制块420对所有宏块使用基本层加权参数,并将控制传递给结束块499。
将关于第二示例方法给出描述。除了我们对motion_prediction_flag_lx[]、base_mode_flag、以及base_mode_refinement_flag的语义做如下改变之外,第二示例方法的目的与第一示例方法类似。当base_pred_weight_table_flag等于0时,增强层总是使用增强层权重,而从不使用基本层权重。
motion_prediction_flag_10[mbPartldx]等于1指定将使用增强层pred_weight_table()来对当前宏块执行加权预测。
base_mode_flag等于1指定将使用增强层pred_weight_table()来对当前宏块执行加权预测。
base_mode_refinement_flag等于1指定将使用增强层pred_weight_table()来对当前宏块执行加权预测。
转到图5,使用加权预测对增强层进行编码的方法通常由参考标号500表示。该方法包括开始块505,其开始对增强层进行编码并且将控制传递给确定块510。确定块510确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块515。否则,将控制传递给功能块540。
功能块515对所有宏块使用基本层加权参数,并且将控制传递给功能块520。功能块520利用所获得的权重对参考画面进行加权,并将控制传递给功能块525。功能块525在对应于增强层的码片首标中写入base_pred_weight_table_flag,并将控制传递给确定块530。确定块530确定base_pred_weight_table_flag是否等于1(真)。如果其等于1,则将控制传递给功能块535。否则,将控制传递给功能块550。
功能块535使用加权后的参考画面对增强层画面进行编码,并将控制传递给结束块599。
功能块550在码片首标中写入权重,并将控制传递给功能块535。
功能块540计算增强层画面的权重,并将控制传递给功能块545。功能块545对所有宏块使用基本层加权参数,并将控制传递给功能块520。
转到图6,使用加权预测对增强层进行解码的方法通常由参考标号600表示。方法600包括开始块605,开始对增强层进行解码并且将控制传递给确定块610的。确定块610确定base_pred_weight_table_flag是否等于0。如果其等于0,将控制传递给功能块615。否则,将控制传递给功能块620。
功能块615对所有宏块使用增强层加权参数,并将控制传递给结束块699。
功能块620对所有宏块使用基本层加权参数,并将控制传递给结束块699。
现在将关于第三示例实施例给出描述。在第三示例实施例中,我们保留现有的码片首标语法base_pred_weight_table_flag,但在宏块层中添加新的语法元素base_mode_weight_flag,如表3所示。
base_mode_weight_flag等于1指定将依赖对应的基本宏块来推测加权参数。base_mode_weight_flag等于0指定加权参数不是推测的。
此标记只在base_pred_weight_table_flag等于0时出现。在此情况下,编码器可以使用率失真优化(rate distortion optimization RDO)技术来判断哪组权重为当前的增强层层间预测宏块提供最佳性能。如果使用基本层权重提供较佳的性能,则将base_mode_weight_flag设置为1;否则,将base_mode_weight_flag设置为0。解码器然后可以对base_mode_weight_flag进行解码,并确定要使用哪组加权参数来重建当前的MB。
转到图7,使用加权预测对增强层进行编码的方法通常由参考标号700表示。该方法700包括开始块705,其开始对增强层进行编码并且将控制传递给确定块710。确定块710确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块715。否则,将控制传递给功能块740。
功能块715从基本层画面获得权重,并且将控制传递给功能块720。功能块720利用加权后的参考画面对增强层画面进行编码,并将控制传递给确定块725。确定块725确定base_pred_weight_table_flag是否等于1(真)。如果其等于1,则将控制传递给功能块730。否则,将控制传递给功能块735。
功能块730写入增强层画面,并且将控制传递给结束块799。
功能块735在对应于增强层的码片首标中写入加权,并将控制传递给功能块730。
功能块740使用率失真优化(RDO)技术来判断对于每个层间预测宏块是使用基本层权重还是使用增强层权重,对所有其它的宏块使用增强层权重,并将控制传递给确定块745。确定块745确定base_mode_weight_flag是否等于1以及当前宏块是否是层间预测宏块。如果确定是,则将控制传递给功能块750。否则,将控制传递给功能块760。
功能块750对当前宏块使用基本层权重,并将控制传递给确定块755。
功能块760对当前宏块使用增强层权重,并将控制传递给确定块755。
确定块755确定是否已经对所有宏块进行了加权,如果确定是,则将控制传递给确定块725。否则,将控制返回给功能块740。
转到图8,使用加权预测对增强层进行解码的方法通常由参考标号800表示。方法800包括开始块805,其开始对增强层进行解码并且将控制传递给确定块810。确定块810确定base_pred_weight_table_flag是否等于0。如果其等于0,则将控制传递给功能块815。否则,将控制传递给功能块835。
对于码片间(inter-slice)的每个宏块,功能块815都读取base_mode_weight_flag,并将控制传递给确定块820。确定块820确定base_mode_weight_flag是否等于1以及当前宏块是否是层间宏块。如果确定是,则将控制传递给功能块825。否则,将控制传递给功能块830。
功能块825对当前宏块使用基本层加权参数,并将控制传递给结束块899。
功能块830对当前宏块使用增强层参数,并将控制传递给结束块899。
功能块835对所有的宏块使用基本层加权参数,并将控制传递给结束块899。
现在将关于第四示例实施例给出描述。在第四实施例中,我们提出改变base_pred_weight_table_flag语法以假定三个值,并且也改变语义以反映此改变。
base_pred_weight_table_flag等于0类似于add_ref_num,这是因为增强层不从基本层继承加权参数,除非阐明是针对层间预测模式,否则我们总是使用增强层权重。
base_pred_weight_table_flag等于1类似于我们对于增强层中的所有宏块都继承基本层权重。
base_pred_weight_table_flag等于2,在此情况下,我们提出取决于MB类型在基本层权重和增强层权重之间自适应地选择。对于层间预测宏块,我们提出使用基本层权重,而对于所有其它的宏块,我们提出使用增强层权重。
在第四方法中,编码器以码片为基础判断选择哪个模式(0、1、2)。不需要发送额外的语法来指示对每个宏块使用哪组加权参数。当基本层不使用加权预测而增强层使用加权预测,并且序列包括局部亮度变化时,模式2特别有用。这是因为在包括局部亮度变化的画面中,对于一个参考画面可以选择两个不同的权重。对于不包括这样的局部亮度变化的画面,我们不需要使用加权参数。
转到图9,使用加权预测对增强层进行编码的方法通常由参考标号900表示。该方法900包括开始块905,其开始对增强层进行编码并且将控制传递给确定块910。确定块910确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块915。否则,将控制传递给确定块940。
功能块915从基本层画面获得权重,并且将控制传递给功能块920。功能块920利用加权后的参考画面对增强层画面进行编码,并将控制传递给确定块925。确定块925确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块930。否则,将控制传递给功能块935。
功能块930写入增强层画面,并且将控制传递给结束块999。
功能块935在对应于增强层的码片首标中写入权重,并将控制传递给功能块930。
功能块940确定base_pred_weight_table_flag是否等于2。如果其等于2,则将控制传递给功能块945。否则,将控制传递给功能块950。
功能块945对每个层间预测宏块使用基本层权重,对所有其它的宏块使用增强层权重,并将控制传递给确定块925。
功能块950对所有宏块都使用增强层权重,并将控制传递给确定块925。
转到图10,使用加权预测对增强层进行解码的方法通常由参考标号1000表示。该方法包括开始块1005,其开始对增强层进行解码并且将控制传递给确定块1010。确定块1010确定base_pred_weight_table_flag是否等于0。如果其等于0,则将控制传递给功能块1015。否则,将控制传递给确定块1020。
功能块1015对所有的宏块使用增强层加权参数,并将控制传递给结束块1099。
确定块1020确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块1025。否则,将控制传递给功能块1030。
功能块1025对所有的宏块都使用基本层加权参数,并将控制传递给结束块1099。
功能块1030对层间宏块使用基本层加权参数,对所有其它的宏块使用增强层加权参数,并将控制传递给结束块1099。
现在将关于第五示例实施例给出描述。在第五示例实施例中,扩展第四实施例的方案,并在宏块层中添加新的语法元素base_mode_weight_fag,如表4所示。我们如上面关于第三实施例定义的那样定义此标记。
base_mode_weight_flag只在base_pred_weight_table_flag等于0或2时出现。与第三方法类似,编码器可以使用率失真优化(RDO)技术来判断对于当前的增强层层间预测宏块哪组权重提供最佳性能。如果使用基本层权重提供较佳的性能,则将base_mode_weight_flag设置为1;否则,将base_mode_weight_flag设置为0。解码器然后可以判断base_mode_weight_flag并确定使用哪组加权参数来重建当前宏块。
对于具有例如闪光、爆炸等的局部亮度变化的情况,自适应地选择权重可以产生更好的编码效率。可替换地,当存在例如褪色等的亮度的全局变化时,提出简单地使用base_pred_weight_table_flag等于1。
自适应地选择权重要求以宏块为基础、而不是以码片为基础来存储加权参数。这是因为当我们具有多于2层时,较高层可以再次以宏块为基础选择加权参数。因此,对当前层使用层间预测要求知道其对应的较低层的加权参数。
转到图11,使用加权预测对增强层进行编码的方法通常由参考标号1100表示。该方法包括开始块1105,其开始对增强层进行编码并且将控制传递给确定块1110。确定块1110确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块1115。否则,将控制传递给确定块1140。
功能块1115从基本层画面获得权重,并且将控制传递给功能块1120。功能块1120利用加权后的参考画面对增强层画面进行编码,并将控制传递给确定块1125。确定块1125确定base_pred_weight_table_flag是否等于1。如果其等于1,则将控制传递给功能块1130。否则,将控制传递给功能块1135。
功能块1130写入增强层画面,并且将控制传递给结束块1199。
功能块1135在码片首标中写入权重,并将控制传递给功能块1130。
功能块1140确定base_pred_weight_table_flag是否等于2。如果其等于2,则将控制传递给功能块1145、功能块1150、以及功能块1155。
功能块1145对层间宏块使用基本层权重(成本A(COSTA)),并将控制传递给功能块1160。
功能块1150对层间宏块使用增强层权重(成本B),并将控制传递给功能块1160。
功能块1155对非层间宏块使用增强层权重(成本C),并将控制传递给确定块1160。
功能块确定成本A、成本B、以及成本C中的最小值,并且将控制传递给确定块1165。确定块1165确定成本A是否具有最小值。如果确定是,则将控制传递给功能块1170。否则,将控制传递给功能块1175。
功能块1170设置base_mode_weight_flag等于1,将该base_mode_weight_flag写入增强层比特流,并将控制传递给确定块1180。
功能块1175设置base_mode_weight_flag等于0,将该base_mode_weight_flag写入增强层比特流,并将控制传递给确定块1180。
确定块1180确定是否已经对所有宏块进行了加权。如果确定是,则将控制传递给确定块1125。否则,将控制返回给功能块1145。
功能块1185使用增强层权重,并将控制传递给确定块1125。
转到图12,使用加权预测对增强层进行解码的方法通常由参考标号1200表示。该方法包括开始块1205,其开始对增强层进行解码并且将控制传递给确定块1210。确定块1210确定base_pred_weight_table_flag是否等于0。如果其等于0,则将控制传递给功能块1215。否则,将控制传递给确定块1230。
对于码片间的每个宏块,功能块1215读取base_mode_weight_flag,并将控制传递给确定块1220。确定块1220确定base_mode_weight_flag是否等于1以及当前宏块是否是层间宏块。如果确定是,则将控制传递给功能块1225。否则,将控制传递给功能块1235。
功能块1225对当前宏块使用基本层加权参数,并将控制传递给结束块1299。
功能块1235对当前宏块使用增强层加权参数,并将控制传递给结束块1299。
确定块1230确定base_pred_weight_table_flag是否等于1。如果确定是,则将控制传递给功能块1240。否则,将控制传递给功能块1215。
功能块1240为所有的宏块使用基本层加权参数,并且将控制传递给结束块1299。
现在将给出本发明的许多附带的优点/特征中的一些,其中的一些已经在上面提及。例如,一个优点/特征是可分级视频编码器,其包括用于通过将加权参数应用到增强层参考画面来对画面的增强层中的块进行编码的编码器。在被应用于较低层参考画面以对画面的较低层中的块进行编码的加权参数和可应用于增强层中的不同的加权参数之间自适应地选择用于对增强层中的块进行编码的加权参数。增强层中的块对应于较低层中的块。增强层参考画面对应于较低层参考画面。
另一个优点/特征是如上所述的可分级视频编码器,其中所述编码器在对应的首标元素中添加重新描述(rephrase)的base_pred_weight_table_flag语法元素。该重新描述的base_pred_weight_table_flag语法元素能够假定两个不同的值之一。该两个不同的值中的第一个值用于指示:使用也分别被用于较低层中以对与增强层中的层间预测块相对应的块进行编码的加权参数来对所述层间预测块进行编码,以及使用与分别被用于较低层中以对与增强层中的非层间预测块相对应的块进行编码的加权参数不同的加权参数来对所述非层间预测块进行编码。
此外,另一个优点/特征是如上所述的可分级视频编码器,其中编码器在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素。该重新描述的base_pred_weight_table_flag语法元素能够假定两个不同的值之一。该两个不同的值中的第一个值用于指示:无论增强层中的块具有层间预测的状态还是非层间预测的状态,都使用与分别被用于对较低层中的对应块进行编码的加权参数不同的加权参数来对所述增强层中的块进行编码。
另外,另一个优点/特征是如上所述的可分级视频编码器,其中当base_pred_weight_table_fag语法元素等于第一个值时,编码器在对应的首标元素中添加base_mode_weight_flag宏块级语法元素。该base_mode_weight_flag宏块级语法元素用于指示相对于对增强层中的层间预测宏块进行编码而在第一组加权参数和第二组加权参数之间进行的选择。该第一组包括也分别被用于对较低层中的对应宏块进行编码的加权参数。该第二组包括与分别被用于对较低层中的对应宏块进行编码的加权参数不同的加权参数。
而且,另一个优点/特征是如上所述的可分级视频编码器,其中所述编码器在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素。该重新描述的base_pred_weight_table_flag语法元素能够假定三个不同的值之一。
另外,另一个优点/特征是可分级视频编码器,该可分级视频编码器具有如上所述地在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素的编码器,该重新描述的base_pred_weight_table_flag语法元素能够假定三个不同的值之一,其中该编码器将该重新描述的base_pred_weight_table_flag语法元素设置为等于该三个不同的值中的一个特定的值以指示:将使用与分别被用于对较低层中的对应宏块进行编码的加权参数不同的加权参数来对增强层中的所有宏块进行编码。
此外,另一个优点/特征是可分级视频编码器,该可分级视频编码器具有如上所述地在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素的编码器,该重新描述的base_pred_weight_table_flag语法元素能够假定三个不同的值之一,其中该编码器将重新描述的base_pred_weight_table_flag语法元素设置为等于该三个不同的值中的一个特定的值以指示:对于增强层中的所有宏块,总是将被应用于较低层中的特定的参考画面以对较低层中的给定宏块进行编码的加权参数也应用于该特定的参考画面以对增强层中的对应的一个宏块进行编码。
另外,另一个优点/特征是可分级视频编码器,该可分级视频编码器具有如上所述地在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素的编码器,该重新描述的base_pred_weight_table_flag语法元素能够假定三个不同的值之一,其中该编码器将重新描述的base_pred_weight_table_flag语法元素设置为等于该三个不同的值中的一个特定的值以指示:使用也分别被用于较低层中以对与增强层中的层间预测块相对应的块进行编码的加权参数来对所述层间预测块进行编码,以及使用与分别被用于较低层中以对与增强层中的非层间预测块相对应的块进行编码的加权参数不同的加权参数来对所述非层间预测块进行编码。
而且,另一个优点/特征是可分级视频编码器,该可分级视频编码器具有如上所述地在对应的首标元素中添加重新描述的base_pred_weight_table_flag语法元素的编码器,该重新描述的base_pred_weight_table_flag语法元素能够假定三个不同的值之一,其中当重新描述的base_pred_weight_table_flag语法元素等于三个不同的值中两个预定的值之一时,该编码器在对应的首标元素中添加base_mode_weight_flag宏块级语法元素。该base_mode_weight_flag宏块级语法元素用于指示对于对画面的增强层中的层间预测宏块进行编码而在第一组加权参数和第二组加权参数之间进行的选择。该第一组包括也分别被用于对较低层中的对应宏块进行编码的加权参数。该第二组包括与分别被用于对较低层中的对应宏块进行编码的加权参数不同的加权参数。
本相关领域普通技术人员基于这里的教学可以容易地确定本发明的这些或其它特征和优点。应理解:本发明的教学可由各种形式的硬件、软件、固件、专用处理器或其组合来实施。
最优选地,将本发明的教学实施为硬件和软件的组合。此外,所述软件可以实施为确实包含在程序存储单元上的应用程序。所述应用程序可被上载到包括任何合适结构的机器,并由其执行。优选地,所述机器在具有诸如一个或多个中央处理单元(“CPU”)、随机存取存储器(“RAM”)、以及输入/输出(“I/O”)接口之类的硬件的计算机平台上实施。所述计算机平台也可包括操作系统和微指令代码。这里所述的各种处理和功能可以是可由CPU执行的微指令代码的部分、或应用程序的部分、或其任何组合。另外,诸如附加数据存储单元和打印单元的各种其它的外部单元可以连接到计算机平台。
还应理解:由于在附图中描述的一些组成系统组件和方法优选地以软件实现,所以依赖本发明被编程的方式,系统组件或处理功能块之间的实际连接可能不同。给出这里的教学,本相关领域普通技术人员将能够预期本发明的这些和相似的实施或配置。
虽然这里参考附图描述了示例实施例,但是应理解本发明不限于那些确切的实施例,在不偏离本发明的范围或精神的情况下,本领域普通技术人员可在其中做出各种改变和修改。意在将所有这样的改变和修改包括在如由所附权利要求书中提出的本发明的范围内。