[转载][原]SVC标准解读系列--G.7语法和语义
(2013-05-09 16:39:17)
标签:
转载 |
先把NALU的type附在最前面,这是JSVM9.19中的定义
enum NalUnitType
{
};
G.7 Syntax
and semantics
G.7.3列出语法,G.7.4讲解这些语法的含义,这里合并起来总结。其实比较浮浅,因为几乎没有看H.264标准的第7章。直接就看了附录G的第7章。建议还是要先看264的标准正文,再看SVC的标准。不然会很吃力。
先补充一下G.7.4的提纲中的注意点:
1.nal_ref_idc代表了NALU的重要性。0~3,取值越大,表示当前NAL越重要,需要优先受到保护。如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,本句法元素必需大于0。
2.对于nal_unit_type=14的NALU,它的nal_ref_idc与它身后紧跟着的NALU的nal_ref_idc一样。
3.对于同一个dependency representation,所有VCL NALU的nal_ref_idc是一样的。
一、G.7.3.1.1 NAL unit SVC extension syntax
1.idr_flag:代表本帧是否是IDR帧,本dependency representation内的所有NALU的idr_flag都是一致的。如果一个prefix NULU的idr_flag是1,那么它随后的associated NAL unit的nal_unit_type就是5;如果prefix NALU的idr_flag是0,那么它随后的associated NAL unit的nal_unit_type就是1.(如果nal_ref_idc=0,那么idr_flag应该设为0)
附:nal_unit_type常用取值翻译:1(非IDR图像的编码条带)、2(编码条带数据分割块A)、3(编码条带数据分割块B)、4(编码条带数据分割块C)、5(IDR图像的编码条带)、14(prefix)、20(带有层间预测宏块的编码条带)
2.priority_id:代表了NALU的优先级
3.no_inter_layer_pred_flag:为0则说明本NALU需要用到层间预测来解码,为1代表不用层间预测。对于prefix NAL units,此flag应该为1;对于nal_unit_type is equal to 20 and quality_id is greater than 0(也就是用到了层间预测编码的帧中的非基本层的NALU),此flag应该为0;
4.dependency_id:标识本NALU属于哪一个D层,可以理解为空间可分级的层标识,
5.quality_id:标识本NALU属于哪一个Q层,可以理解为某一个空间层中的多个MGS层中的层标识,从0到15。
6.temporal_id:标识本NALU属于哪一个T层,可以理解为某一个空间曾中的多个时间层中的层标识;对于IDR帧,temporal_id应该为0;对于一个access unit中的NALU,temporal_id应该都一致。(dependency_id和quality_id可以不一样),
7.use_ref_base_pic_flag:标明当前的nalu使用什么帧作为参考。需要注意的是对于Dependency ID相同的nalu,use_ref_base_pic_flag都得是相同的。如果use_ref_base_pic_flag为1,那么reference
8.discardable_flag:当前图像没有被作为层间参考层,则该标记置1。在码流提取的时候,如果该层不是目标层,则会被丢弃。
9.output_flag:标识该NALU是否会输出,比如对于reference
10.reserved_three_2bits:默认为3,保留。解码器不用管。
先补充一下G.7.4.1.2.1和G.7.4.2中提到的RBSP:
1.RBSP(raw byte sequence payload,原始字节序列载荷)是封装于网络抽象单元中的数据。RBSP共分视频编码数据和控制数据两种,其可以应用到不同的对象,主要有序列参数集(Sequence parameter set)的RBSP、序列参数集扩展的RBSP、图像参数集(Picture parameter set)的RBSP、辅助增强信息(Supplemental enhancement information)的RBSP等等。
2.RBSP与SODB、EBSP的关系
SODB:最原始的编码数据,没有任何附加数据
RBSP:在
EBSP:在
3.用到的地方:就相当于NALU包的负载,数据部分。先调用xConvertPayloadToRBSP ( uiPacketLength
)将"0x03"
补充一下G.7.4.1.2.x
1.一个视频序列的第一个access unit一定是IDR的。
2.DQId:某一特定layer
3.编好的access unit中,D小的NALU在前,大的在后,Q小的NALU在前,大的在后;本access unit的第一个NALU的D和Q,要比上一个access的最后一个NALU的D和Q小
4.nal_unit_type=0、12、21、22、23或更大的NALU,假如出现在access unit中,也不能排在第一个VCL NALU前。
二、G.7.3.2.1.4 Sequence parameter set SVC extension syntax
1. inter_layer_deblocking_filter_control_present_flag:为1表示在slice header中有用于控制层间去块滤波的参数,为0的话没有,只能推算。
2. extended_spatial_scalability_idc:代表ESS,为0、1或2.为0表示不采用ESS,为1表示采用ESS,参数放置在子序列参数集中,为2表示采用ESS,参数放置在slice header中。
3. chroma_phase_x_plus1_flag、chroma_phase_y_plus1、等四个关于色度的没有仔细看。
4. seq_scaled_ref_layer_left_offset等4个表示经过重采样之后用来层间预测的亮度样值与当前帧的亮度样值的偏移。
5. seq_tcoeff_level_prediction_flag:用来表示是否存在adaptive_tcoeff_level_prediction_flag
6. adaptive_tcoeff_level_prediction_flag:用来表示是否存在tcoeff_level_prediction_flag(此语法元素在G.7.4.3.4中出现,同时可以参考
http://blog.csdn.net/l35633/archive/2010/10/20/5953313.aspx)
三、G.7.3.2.12.1 Prefix NALU SVC syntax (SVC对prefix nalu新加的语法)
1. store_ref_base_pic_flag:指定当前nalu包含的reference base picture是不是要被存入DPB中用作将来的参考。再观察可以发现,store_ref_base_pic_flag这个语法元素一般情况下只会在Qid=0的NALU中。
2. additional_prefix_nal_unit_extension_flag:为0表示additional_prefix_nal_unit_extension_data_flag不出现在prefix_nal_unit_svc( )结构中,是符合标准的。
3.additional_prefix_nal_unit_extension_data_flag可以是任意值。
补充一下G.7.4.3~G.7.4.3.4之间的重要信息:
1.
2.
3.
4.
四、G.7.3.3.4 Slice header in scalable extension syntax
1.first_mb_in_slice:当前slice中第一个MB的地址。要比之前编码过的slice的第一个MB的地址大才行。(除非启用了ASO)
2.slice_type:0和5是EP、P;1和6是EB、B;2和7是EI、I
3.pic_parameter_set_id:位于每一个slice header中,标识picture parameter set的id。当然picture parameter set本身是建议采用更可靠的信道去传送的。The value of pic_parameter_set_id shall be in the
range of 0 to
4.colour_plane_id:specifies the colour plane associated with the current slice RBSP when separate_colour_plane_flag is equal to 1. The value of colour_plane_id shall be in the range of 0 to 2, inclusive. colour_plane_id equal to 0, 1, and 2 correspond to the Y, Cb, and Cr planes, respectively.
NOTE 1 – There is no dependency between the decoding processes of pictures having different values of colour_plane_id.
5.frame_num:H.264中是代表图像编码顺序(num),SVC中是dependency
6.
7.bottom_field_flag:在被启用后,为1代表本slice是底场图像的slice,为0代表本slice是顶场图像的slice
8.
9.
10.
11.
12.
13.
num_ref_idx_active_override_flag
14. num_ref_idx_l0_active_minus1 表示将用于解码该条带的参考图像列表 0的最大参考序号。同理,num_ref_idx_l1_active_minus1表示列表1的。。。
15. base_pred_weight_table_flag:为1表明加权预测中的变量是需要推测的。
16. store_ref_base_pic_flag:指定当前nalu包含的reference base picture是不是要被存入DPB中用作将来的参考
17.ref_layer_dq_id:在当前编码图像中被当前layer representation用作层间参考的layer representation的ID。
18. slice_skip_flag:为1表示slice data不会出现在NALU中
19. adaptive_base_mode_flag:表示是否自动使用层间模式估计,可以配合default_base_mode_flag。如下:两者都为0,那么一直不用层间模式预测;adaptive_base_mode_flag为0,default_base_mode_flag为1,那么一直用;adaptive_base_mode_flag为1,则default_base_mode_flag失效,此时宏块自适应的使用层间模式预测。
20. adaptive_motion_prediction_flag:类似上边,只不过从模式预测变成了运动预测。
21. adaptive_residual_prediction_flag:类似上边,只不过从运动预测变成了残差预测。
22. tcoeff_level_prediction_flag:为0时表示spatial domain inter-layer prediction;为1时表示frequency domain inter-layer prediction,同时为1的时候,即在变换域系数有预测的时候,应该是发生在没有空间分辨率变化的时候,即MGS和CGS层间预测的时候。
五、G. 7.3.6 Macroblock layer in scalable extension syntax(宏块的层间预测模式标记)
1. base_mode_flag:表示宏块是否使用层间类型和运动参数预测,直接使用层间预测的运动参数,码流中不再传。比如层间帧内预测模式Intra_BL就是在intra slice里,base_mode_flag=1对应的宏块类型。
2. coded_block_pattern:表示六个亮度和色度 8x8 块可能含有非零的变换系数幅值。对预测模式不等Intra_16x16的宏块,比特流中存在coded_block_pattern且变量 CodedBlockPatternLuma和CodedBlockPatternChroma由如下公式得出:
CodedBlockPatternLuma = coded_block_pattern
CodedBlockPatternChroma = coded_block_pattern/16
其中,CodedBlockPatternLuma为1表示8x8亮度块中的一个或多个 4x4亮度块的一个或多个变换系数幅值不为 0;为0表示8x8亮度块中的四个 4x4亮度块的所有变换系数幅值都等于 0;
然后,CodedBlockPatternChroma为0表示:全为零;1表示:DC参数不为零;2表示:有不为零的参数。
3. residual_prediction_flag:宏块是否启用层间残差预测。
4. motion_prediction_flag_l0[ mbPartIdx ]:宏块分割是否启用运动矢量层间预测,这种模式还会传层间预测运动矢量和实际运动矢量的残差。这里是list0.对于motion_prediction_flag_l1[ mbPartIdx ]也一样,只不过是li

加载中…