H.264 sequence_parameter_sets成员值含义

来源:互联网 发布:如何卸载mac的office 编辑:程序博客网 时间:2024/05/29 16:55

 

SPS: sequence parameter sets
它指的是码流对应的profile.
 
1.1 基线profile(Baseline profile)
遵循基线profile的码流应该遵循以下的约束:
 
a) 只有IP切片存在
b) NAL单元流不应该有范围在24nal_unit_type,包括24.
c) 序列参数集(sps)frame_mbs_only_fag(之后介绍)应该等于1
d) 图象参数值(psp)weighted_pred_flagweighted_bipred_idc都应该为0
e) 图象参数值(psp)entropy_coding_mode_flag应该等于0
f) 图象参数值(psp)num_slice_groups_minus1应该在07之间,包括07**psp部分参数含义在关于psp的文章中给出。
g) 对于基线profile对应的level度应该满足.
 
符合基线profile的码流的profile_idc被赋66.符合一定level的基线Baseline的解码器应该可以解码所有的profile_idc等于66的码流或constrained_set0_flag(等会介绍)1而且level_idc(level部分介绍)少于或等于一个指定的level的码流。
 
1.2 profile(Main profile)
符合主profile的码流应该遵循以下的约束:
 
a) 只有I,P,B切片存在.
b) NAL单元流不包括nal_unit_type值范围在2-4之内的值。包括24.
c) 不能允许有随意顺序的切片
d) 图像参数集(psp)num_slice_groups_minus1应该只为0
e) 图像参数集(psp)redundant_pic_cnt_present_flag应该只为0
f) 对于主profile所要求的level级需要达到。
 
符合主profile的码流的profile_idc应为77。符合指定level的主profile的解码器应该可以解码所有的profile_idc77的或constrained_set1_flag值为1level_idc值小于或等于指定level的码流。
 
1.3 扩展profile(Extended profile)
符合扩展profile的码流应该遵循以下的约束:
 
a) 序列参数集的direct_8x8_inference_flag值应该为1
b) 图像参数集的entropy_coding_mode_flag值应该为0
c) 图像参数集的num_slice_groups_minus1的值范围为07,包括07
d) 对于扩展profile指定的level级应该被达到
 
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为88的或constrained_set2_flag值为1的,而且level_idc小于等于指定level级的码流。
 
符合指定level级的扩展profile的解码器可以解码所有的profile_idc值为66的或constrained_set0_flag值为1的,而且level_idc小于等于指定level级的码流。
constrained_set0_flag值为1的时候,就说明码流应该遵循基线profile(Baseline profile)的所有约束.constrained_set0_flag值为0时,说明码流不一定要遵循基线profile的所有约束。
constrained_set1_flag值为1的时候,就说明码流应该遵循主profile(Main profile)的所有约束.constrained_set1_flag值为0时,说明码流不一定要遵循主profile的所有约束。
constrained_set2_flag值为1的时候,就说明码流应该遵循扩展profile(Extended profile)的所有约束.constrained_set2_flag值为0时,说明码流不一定要遵循扩展profile的所有约束。
注意:当constraint_set0_flag,constraint_set1_flagconstraint_set2_flag中不只一个值为1的话,那么码流必须满足所有相应指明的profile约束。
Reserved. Set to 0.
Reserved. Set to 0.
它指的是码流对应的level.
 
5.1 独立于profilelevel约束
fR是这样一个变量:
a) 如果图像n是一帧,fR设为1/172
b) 如果图像n是一个场,fR设为1/(172*2)
 
任何profile下的指定的level都应该满足如下约束:
a) 理论上可访问单元nCPB中的移除时间满足这样的约束:t(n)-t(n-1)要比Max(PicSizeInMbs,MaxMBPS,fR)值大或相等,MaxMBPS是说在level表中指出的对于图像n的值,PicSizeInMbs是指在图像n中的宏块数。
b) 如果图像n是一个输出图像而且它不是码流的最后一个输出图象,从DPB中取出的连续的输出图象差满足:Dt(n) >= Max(PicSizeInMbs, MaxMBPS, fR), MaxMBPS是指对于图象n来说的相应的值。PicSizeInMbs指图象n的宏块。
c) 对于可访问单元0NumBytesInNALunit变量的总和少于或等于256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCRMaxMBPSMinCR是图象0level表中相应的值,PicSizeInMbs是图象0的宏块数量。
d) 对于可访问单元nNumBytesInNALunit值的总和是小于或等于256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPSMinCR的值是图像nlevel级表中对应的值。
e) PicWidthInMbs * FrameHeightInMbs <= MaxFS, MaxFS是在level表中指定的值。
f) PicWidthInMbs <= Sqrt(MaxFS * 8)
g) FrameHeightInMbs <= Sqrt(MaxFS * 8)
h) max_dec_frame_buffering <=MaxDpbSize, MaxDpbSize等于Min(1024 * MaxDPB / (PicWidthInMbs * FrameHeightInMbs * 256 * ChromaFormatFactor,16)MaxDPB是对于1024字节单元的MaxDPB值,max_dec_frame_buffering也叫做DPB大小值。
i) 对于VCL HRD参数值,至少对于一个SchedSelIdx值来说,码率BitRate[SchedSelIdx] <= 1000 * MaxBRCpbSize[SchedSelIdx] <= 1000 * MaxCPBMaxBRMaxCPB是对于1000bits/s1000位单元对应于level级表的值。码流应该为0cpb_cnt_minus1中的一个值,包括0cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 对于NAL HRD参数来说,BitRate[SchSelIdx] <= 1200 * MaxBRCpbSize[SchedSelIdx] <= 1200 * MaxCPBMaxBRMaxCPB是在1200bits/s1200位的单元值在极限level下的值。码流应该满足至少SchedSelIdx值从0cpb_cnt_minus1中的一个值。
k) 在亮度帧采样中,垂直运动向量元素范围不能超过MaxVmvRMaxVmvR值在level极限表中提供
l) 在亮度帧采样单元中,水平运动向量范围不能超过-20482047.75,包括-20482047.75
m) 按解码顺序的两个连续的宏愉的运动向量的数量不超过MaxMvsPer2Mb(对于当前宏块的最后一个切片和下一个宏块的第一个切片也适用),MaxMvsPer2Mb值在level极限表中提供.
n) 对于任何宏块的macroblock_layer()的位数值都不能大于128 + 2048 * ChromaFormatFactor.依赖于entropy_coding_mode_flag值,macroblock_layer()的值由如下方式计算
 如果entropy_coding_mode_flag值为0的话,macroblock_layer()的值由macroblock_layer()的对于一个macroblock的语法结构给出
 其他情况下,对于一个宏块的macroblock_layer()值是由read_bits(1)给出的.
5.2 profile相关的level
对于基线profile,profile和扩展profile的相应的level级约束在H.264的文档中有表可查。
seq_parameter_set_id指定了由图像参数集指明的序列参数集。seq_parameter_set_id值应该是从031,包括031
注意:当可用的情况下,编码器应该在sps值不同的情况下使用不同的seq_parameter_set_id值,而不是变化某一特定值的seq_parameter_set_id的参数集的语法结构中的值。
log2_max_frame_num_minus4指定了变量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值应该在012之间,包括012.
pic_order_cnt_type指定了解码图像顺序的方法。pic_order_cnt_type的值是0,1,2
pic_order_cnt_type在当一个编码视频序列有如下限定时不为2
a) 包含非参考帧的可访问单元,并紧接着一个包含非参考可访问单元
b) 两个可访问单元,它们分别包含两个场中的一个,它们一块儿组成了一个互补的非参考场对,被紧接着一个包括非参考图像的可访问单元。
c) 一个包含非参考场的可访问单元,并紧接着一个包含另一个非参考图像的可访问单元,它们不组成互补的非参考场对。
log2_max_pic_order_cnt_lsb_minus4指出变量MaxPicOrderCntLsb的值,它是在解码过程中使用到的图像顺序计算值:
MaxPicOrderCntLsb = 2(log2_max_pic_order_cnt_lsb_minus4+4)
log2_max_pic_order_cnt_lsb_minus4的值为包括012以及它们之间的值。
delta_pic_order_always_zero_flag等于1的时候表示当delta_pic_order_cnt[0]delta_pic_order_cnt[1]在序列的切片头中不存在,并被认为是0
delta_pic_order_always_zero_flag值等于0时表示delta_pic_order_cnt[0]在序列的切片头中存在而delta_pic_order_cnt[1]可能在序列的切片头中存在。
offset_for_non_ref_pic被用来计算一个非参考图像的图像顺序值。offset_for_non_ref_pic值取值范围为(-2)^(31)2^(31)-1,包括边界值。
offset_for_top_to_bottom_field被用来计算一帧中的下场的图像顺序值。
offset_for_top_to_bottom_field值的取值范围为(-2)^(31)(2)^(31)-1,包括边界值。
num_ref_frames_in_pic_order_cnt_cycle在解码过程中被用来计算图像顺序值。
num_ref_frames_in_pic_order_cnt_cycle0255之间取值,包括边界值。
[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一个元素,它被在解码过程的解码顺序值中使用。
offset_for_ref_frame[i]的值为(-2)^31(2)^(31)-1,包括边界值。
num_ref_frames指定了长期的和短期的参考帧的最大总数目,互补的参考场对和在解码过程。
gaps_in_frame_num_value_allowed_flag值指明了frame_num允许的值和解码过程中的frame_num的差距值。
pic_width_in_mbs_minus11指明了对于每个解码图像中的宽度值。在宏块单元中的图像宽度的变量值为:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
对于亮度元素来说图像宽度变量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
对于色度元素来说图像宽度变量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
pic_height_in_map_units_minus1指明了解码帧或场中的一个切片组的高度。变量PicHeightInMapUnits的值和PicSizeInMapUnits
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
frame_mbs_only_flag等于0指明了视频序列的编码图象可能是编码场或编码帧。frame_mbs_only_flag等于1指明了每个编码视频序列的编码图像都是只含帧宏块的编码帧。
依赖于frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定义:
frame_mbs_only_flag等于0pic_height_in_map_units_minus1就是宏块单元的场高
frame_mbs_only_flag等于1pic_height_in_map_units_minus1就是宏块单元的场宽
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
mb_adaptive_frame_field_flag等于0表明在一个图像内不能切换使用帧和场宏块。
mb_adaptive_frame_field_flag等于1表示在一帧中有可能使用场和帧的切换,当mb_adaptive_frame_field_flag没有设定的时候,应该赋给0.
direct_8x8_inference_flag指明了在亮度运动向量生成B_SkipB_Direct_16x16B_Direct_8x8的方法。
frame_mbs_only_flag0时,direct_8x8_inference_flag应为1
frame_cropping_flag等于1表明在sps中下一个使用的帧剪切偏移量参数。frame_cropping_flag等于0表明帧剪切偏移量不存在。
指明了在一个窗中一帧的采样值。
vui_parameters_present_flag等于1表示vui_parameters()在码流中是存在的,vui_parameters_present_flag等于0表明vui_parameters()在码流中不存在。
rbsp_stop_one_bit        恒等于1
rbsp_alignment_zero_bit      恒等于0.
Note:
       More detail need refer to
       1). Advanced video coding for generic audiovisual services.pdf P63.
       2). Refer to ISOIEC 14496-10-2005-PDAM 3.doc P40
 
 
rbsp_trailing_bits( ) {
C
Descriptor
    rbsp_stop_one_bit /* equal to 1 */
All
f(1)
    while( !byte_aligned( ) )
 
 
       rbsp_alignment_zero_bit /* equal to 0 */
All
f(1)
}
 
 
 
seq_parameter_set_rbsp( ) {
C
Descriptor
    profile_idc
0
u(8)
    constraint_set0_flag
0
u(1)
    constraint_set1_flag
0
u(1)
    constraint_set2_flag
0
u(1)
    constraint_set3_flag
0
u(1)
    reserved_zero_4bits /* equal to 0 */
0
u(4)
    level_idc
0
u(8)
    seq_parameter_set_id
0
ue(v)
    if( profile_idc = = 83 ) {
 
 
       seq_parameter_set_svc_extension( ) /* specified in Annex F */
 
 
    }
 
 
    if( profile_idc = = 100 | | profile_idc = = 110 | |
        profile_idc = = 122 | | profile_idc = = 144  | |
        profile_idc = = 83 ) {
 
 
       chroma_format_idc
0
ue(v)
       if( chroma_format_idc = = 3 )
 
 
           residual_colour_transform_flag
0
u(1)
       bit_depth_luma_minus8
0
ue(v)
       bit_depth_chroma_minus8
0
ue(v)
       qpprime_y_zero_transform_bypass_flag
0
u(1)
       seq_scaling_matrix_present_flag
0
u(1)
       if( seq_scaling_matrix_present_flag )
 
 
           for( i = 0; i < 8; i++ ) {
 
 
               seq_scaling_list_present_flag[ i ]
0
u(1)
               if( seq_scaling_list_present_flag[ i ] )
 
 
                  if( i < 6 )
 
 
                      scaling_list( ScalingList4x4[ i ], 16, 
                                       UseDefaultScalingMatrix4x4Flag[ i ])
0
 
                  else
 
 
                      scaling_list( ScalingList8x8[ i – 6 ], 64,
                                       UseDefaultScalingMatrix8x8Flag[ i – 6 ] )
0
 
           }
 
 
    }
 
 
    log2_max_frame_num_minus4
0
ue(v)
    pic_order_cnt_type
0
ue(v)
    if( pic_order_cnt_type = = 0 )
 
 
       log2_max_pic_order_cnt_lsb_minus4
0
ue(v)
    else if( pic_order_cnt_type = = 1 ) {
 
 
       
0
u(1)
       offset_for_non_ref_pic
0
se(v)
       offset_for_top_to_bottom_field
0
se(v)
       num_ref_frames_in_pic_order_cnt_cycle
0
ue(v)
       for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )
 
 
           offset_for_ref_frame[ i ]
0
se(v)
    }
 
 
    num_ref_frames
0
ue(v)
    gaps_in_frame_num_value_allowed_flag
0
u(1)
    pic_width_in_mbs_minus1
0
ue(v)
    pic_height_in_map_units_minus1
0
ue(v)
    frame_mbs_only_flag
0
u(1)
    if( !frame_mbs_only_flag )
 
 
       mb_adaptive_frame_field_flag
0
u(1)
    direct_8x8_inference_flag
0
u(1)
    frame_cropping_flag
0
u(1)
    if( frame_cropping_flag ) {
 
 
       frame_crop_left_offset
0
ue(v)
       frame_crop_right_offset
0
ue(v)
       frame_crop_top_offset
0
ue(v)
       frame_crop_bottom_offset
0
ue(v)
    }
 
 
    vui_parameters_present_flag
0
u(1)
    if( vui_parameters_present_flag )
 
 
       vui_parameters( )
0
 
    rbsp_trailing_bits( )
0
 
}
 
 

 

delta_pic_order_cnt_bottom 表示一个编码帧的底场和顶场的图像顺序数之间的差.

 

PicInterlace代表帧级隔行扫描,MbInterlace代表宏块级隔行扫描 
PicInterlace             =  0     # Picture AFF    (0: frame coding, 1: field coding, 2:adaptive frame/field coding) 
MbInterlace              =  0     # Macroblock AFF (0: frame coding, 1: field coding, 2:adaptive frame/field coding) .

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中山房子网签不了怎么办 物业服务太差该怎么办 取完公积金的卡怎么办 车卖了对方不过户怎么办 卫生间下水道堵了怎么办妙招 教练不让你练车怎么办 教练不让我练车怎么办 考三要练车教练不给练怎么办 科目二指纹打卡指纹不清楚怎么办 教练凶你的时候怎么办 人行聘用制3年后怎么办 道路运输从业资格证过期了怎么办 码头如果要危险运输证怎么办? 7座车怎么办载客营运证 商调函到了原单位不配合怎么办 公司车辆超证了怎么办? 准迁证过期了5年怎么办 天津中派木业不发工资怎么办 在香港餐厅嫌冷怎么办 出国读研报到证怎么办 高中后出国留学档案怎么办 爱迪花园拆了怎么办 燕郊房子卖了户口怎么办 强制险单子丢了怎么办 车辆保险贴丢了怎么办 车险原单子丢了怎么办 车险保单丢了该怎么办? 审车保险单丢了怎么办 湖州公积金贷款买房具体信用怎么办 驾驶本扣分满了怎么办 摩托车被扣12分怎么办 驾照被扣12分怎么办 骑摩托被扣12分怎么办 摩托车没有驾照违章被扣分怎么办 高考登录密码丢了怎么办 高中档案遗失里面体检表怎么办 驾校不给补科一成绩单怎么办 外地驾照转广州体检表怎么办 驾照体检表签名签错怎么办 改完名字后护照怎么办 办健康证没有身份证怎么办