H.264 sequence_parameter_sets成员值含义学习笔记
来源:互联网 发布:易知投资待遇 编辑:程序博客网 时间:2024/06/15 19:09
H.264 sequence_parameter_sets成员值含义学习笔记
SPS: sequence parameter sets
01. Profile_idc
它指的是码流对应的profile.
1.1 基线profile(Baseline profile)
遵循基线profile的码流应该遵循以下的约束:
a) 只有I和P切片存在
b) NAL单元流不应该有范围在2到4的nal_unit_type值,包括2和4.
c) 序列参数集(sps)的frame_mbs_only_fag(之后介绍)应该等于1
d) 图象参数值(psp)的weighted_pred_flag和weighted_bipred_idc都应该为0
e) 图象参数值(psp)的entropy_coding_mode_flag应该等于0
f) 图象参数值(psp)的num_slice_groups_minus1应该在0到7之间,包括0和7**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之内的值。包括2和4.
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_idc为77的或constrained_set1_flag值为1且level_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的值范围为0到7,包括0和7
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级的码流。
02. Constraint_set0_flag
当constrained_set0_flag值为1的时候,就说明码流应该遵循基线profile(Baseline profile)的所有约束.constrained_set0_flag值为0时,说明码流不一定要遵循基线profile的所有约束。
03. Constraint_set1_flag
当constrained_set1_flag值为1的时候,就说明码流应该遵循主profile(Main profile)的所有约束.constrained_set1_flag值为0时,说明码流不一定要遵循主profile的所有约束。
04. Constraint_set2_flag
当constrained_set2_flag值为1的时候,就说明码流应该遵循扩展profile(Extended profile)的所有约束.constrained_set2_flag值为0时,说明码流不一定要遵循扩展profile的所有约束。
注意:当constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一个值为1的话,那么码流必须满足所有相应指明的profile约束。
05. Constraint_set3_flag
Reserved. Set to 0.
06. Reserved_zero_4bits
Reserved. Set to 0.
07. Level_id: 12[Level 1.2]
它指的是码流对应的level级.
5.1 独立于profile的level约束
让fR是这样一个变量:
a) 如果图像n是一帧,fR设为1/172
b) 如果图像n是一个场,fR设为1/(172*2)
任何profile下的指定的level都应该满足如下约束:
a) 理论上可访问单元n从CPB中的移除时间满足这样的约束: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) 对于可访问单元0的NumBytesInNALunit变量的总和少于或等于256*ChromaFormatFactor*(PicSizeInMbs+MaxMBPS*tr(0)-trn(0)/MinCR,MaxMBPS和MinCR是图象0在level表中相应的值,PicSizeInMbs是图象0的宏块数量。
d) 对于可访问单元n的NumBytesInNALunit值的总和是小于或等于256*ChromaFormatFactor*MaxMBPS*(tr(n)-trn(n-1))/MinCR,MaxMBPS和MinCR的值是图像n在level级表中对应的值。
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 * MaxBR且CpbSize[SchedSelIdx] <= 1000 * MaxCPB。MaxBR和MaxCPB是对于1000bits/s和1000位单元对应于level级表的值。码流应该为0到cpb_cnt_minus1中的一个值,包括0和cpb_cnt_minus1.CpbSize[SchedSelIdx]也叫做CPB大小值。
j) 对于NAL HRD参数来说,BitRate[SchSelIdx] <= 1200 * MaxBR且CpbSize[SchedSelIdx] <= 1200 * MaxCPB,MaxBR和MaxCPB是在1200bits/s和1200位的单元值在极限level下的值。码流应该满足至少SchedSelIdx值从0到cpb_cnt_minus1中的一个值。
k) 在亮度帧采样中,垂直运动向量元素范围不能超过MaxVmvR,MaxVmvR值在level极限表中提供
l) 在亮度帧采样单元中,水平运动向量范围不能超过-2048到2047.75,包括-2048和2047.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的文档中有表可查。
08. seq_parameter_set_id
seq_parameter_set_id指定了由图像参数集指明的序列参数集。seq_parameter_set_id值应该是从0到31,包括0和31
注意:当可用的情况下,编码器应该在sps值不同的情况下使用不同的seq_parameter_set_id值,而不是变化某一特定值的seq_parameter_set_id的参数集的语法结构中的值。
09. log2_max_frame_num_minus4
log2_max_frame_num_minus4指定了变量MaxFrameNum的值, MaxFrameNum = 2(log2_max_frame_num_minus4+4)
log2_max_frame_num_minus的值应该在0到12之间,包括0和12.
10. pic_order_cnt_type
pic_order_cnt_type指定了解码图像顺序的方法。pic_order_cnt_type的值是0,1,2。
pic_order_cnt_type在当一个编码视频序列有如下限定时不为2
a) 包含非参考帧的可访问单元,并紧接着一个包含非参考可访问单元
b) 两个可访问单元,它们分别包含两个场中的一个,它们一块儿组成了一个互补的非参考场对,被紧接着一个包括非参考图像的可访问单元。
c) 一个包含非参考场的可访问单元,并紧接着一个包含另一个非参考图像的可访问单元,它们不组成互补的非参考场对。
11. log2_max_pic_order_cnt_lsb_minus4
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的值为包括0和12以及它们之间的值。
12. delta_pic_order_always_zero_flag
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]可能在序列的切片头中存在。
13. offset_for_non_ref_pic
offset_for_non_ref_pic被用来计算一个非参考图像的图像顺序值。offset_for_non_ref_pic值取值范围为(-2)^(31)到2^(31)-1,包括边界值。
14. offset_for_top_to_bottom_field
offset_for_top_to_bottom_field被用来计算一帧中的下场的图像顺序值。
offset_for_top_to_bottom_field值的取值范围为(-2)^(31)到(2)^(31)-1,包括边界值。
15. num_ref_frames_in_pic_order_cnt_cycle
num_ref_frames_in_pic_order_cnt_cycle在解码过程中被用来计算图像顺序值。
num_ref_frames_in_pic_order_cnt_cycle在0到255之间取值,包括边界值。
16. offset_for_ref_frame[i]
offset_for_ref_frame[i]是一列num_ref_frames_in_pic_order_cnt_cycle中的一个元素,它被在解码过程的解码顺序值中使用。
offset_for_ref_frame[i]的值为(-2)^31到(2)^(31)-1,包括边界值。
17. num_ref_frames
num_ref_frames指定了长期的和短期的参考帧的最大总数目,互补的参考场对和在解码过程。
18. gaps_in_frame_num_value_allowed_flag
gaps_in_frame_num_value_allowed_flag值指明了frame_num允许的值和解码过程中的frame_num的差距值。
19. pic_width_in_mbs_minus1
pic_width_in_mbs_minus1加1指明了对于每个解码图像中的宽度值。在宏块单元中的图像宽度的变量值为:
PicWidthInMbs = pic_width_in_mbs_minus1+1;
对于亮度元素来说图像宽度变量的值:
PicWidthInSamplesL = PicWidthInMbs * 16;
对于色度元素来说图像宽度变量的值:
PicWidthInSamplesC = PicWidthInMbs * 8;
20. pic_height_in_map_units_minus1
pic_height_in_map_units_minus1指明了解码帧或场中的一个切片组的高度。变量PicHeightInMapUnits的值和PicSizeInMapUnits:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1;
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits
21. frame_mbs_only_flag
frame_mbs_only_flag等于0指明了视频序列的编码图象可能是编码场或编码帧。frame_mbs_only_flag等于1指明了每个编码视频序列的编码图像都是只含帧宏块的编码帧。
依赖于frame_mbs_only_flag的值,pic_height_in_map_units_minus1如下定义:
如frame_mbs_only_flag等于0,pic_height_in_map_units_minus1就是宏块单元的场高
如frame_mbs_only_flag等于1,pic_height_in_map_units_minus1就是宏块单元的场宽
FrameHeightInMbs的值:
FrameheightInMbs = ( 2 - frame_mbs_only_flag ) * PicHeightInMapUnits
22. mb_adaptive_frame_field_flag
mb_adaptive_frame_field_flag等于0表明在一个图像内不能切换使用帧和场宏块。
mb_adaptive_frame_field_flag等于1表示在一帧中有可能使用场和帧的切换,当mb_adaptive_frame_field_flag没有设定的时候,应该赋给0.
23. direct_8x8_inference_flag
direct_8x8_inference_flag指明了在亮度运动向量生成B_Skip,B_Direct_16x16和B_Direct_8x8的方法。
当frame_mbs_only_flag为0时,direct_8x8_inference_flag应为1
24. frame_cropping_flag
frame_cropping_flag等于1表明在sps中下一个使用的帧剪切偏移量参数。frame_cropping_flag等于0表明帧剪切偏移量不存在。
25. frame_crop_left_offset
26. frame_crop_left_offset
27. frame_crop_top_offset
28. frame_crop_bottom_offset
指明了在一个窗中一帧的采样值。
29. vui_parameters_present_flag
vui_parameters_present_flag等于1表示vui_parameters()在码流中是存在的,vui_parameters_present_flag等于0表明vui_parameters()在码流中不存在。
30. rbsp_trailing_bits( )
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)
}
Sequence parameter set RBSP syntax
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 ])
UseDefaultScalingMatrix4x4Flag[ i ])
0
else
scaling_list( ScalingList8x8[ i – 6 ], 64,
UseDefaultScalingMatrix8x8Flag[ i – 6 ] )
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 ) {
delta_pic_order_always_zero_flag
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
}
0 0
- H.264 sequence_parameter_sets成员值含义学习笔记
- H.264 sequence_parameter_sets成员值含义学习笔记
- H.264 sequence_parameter_sets成员值含义学习笔记(转载)
- H.264 sequence_parameter_sets成员值含义学习笔记
- H.264 sequence_parameter_sets成员值含义学习笔记
- H.264 sequence_parameter_sets成员值含义
- H.264 sequence parameter sets成员值含义学习笔记
- H.264 picture parameter sets成员值含义学习笔记
- H.264 PPS成员值含义学习笔记
- H.264 picture parameter sets成员值含义学习笔记
- H.264 sequence parameter sets成员值含义学习笔记
- H.264 picture parameter sets成员值含义学习笔记
- H.264 SPS成员值含义学习笔记
- H.264 picture parameter sets成员值含义学习笔记
- H.264 SPS成员值含义学习笔记
- H.264 PPS成员值含义学习笔记
- H.264 sequence parameter sets成员值含义学习笔记
- H.264 picture parameter sets成员值含义学习笔记
- ,随便点击屏幕任何位子都可以resignFirstResponder,隐藏键盘的两种方法
- int a = (int)(((int*)0)+4);
- iphone 在电话来的时候会 触发事件
- c语言运算符优先级及口决
- ffmpeg里的结构关联
- H.264 sequence_parameter_sets成员值含义学习笔记
- 音视频参数解释
- h264 Nalu 详解
- H264 ~~~RTP
- shell脚本启动程序,防止重复启动
- h264 sps pps
- h264 图像宽度与高度的获取
- 微软cortana中文版 新鲜出炉
- 有用的小代码
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
儿童床品牌排行榜
什么床比较好
什么样的床比较好
什么样的床好
如何购买床
软床价格
床棕垫价格
软床那种好
棕垫好吗
国内一线品牌床垫
独立袋装弹簧床垫
怎么鉴别乳胶床垫
床头方向
床头朝向
床头柜尺寸
床头朝西
床头窗户
床头三件宝
床头柜图片
床头床尾
床头柜高度
床头靠背
床头背景图
床头效果图
床头墙
床头朝南
床头朝东
床头设备带
床头装饰板
床头设计
床头对门
中式床头
床头向西
手机放床头
床头朝
板式床头
单人床头
床头千万别放5样东西
床头朝向图解
床头柜放一个好吗
床头朝哪个方向好图片