3.5 片分层
一副图像可以背分割为一个或者多个片slice,每个片的压缩数据都是独立的,Slice头信息无法通过前一个slice的头信息推断到。这就要求slice不能跨过它的边界来进行帧内或者帧间预测,并且在进行墒编码前需要进行初始化。但是进行环路滤波时,允许滤波器跨slice的边界进行滤波。除了Slice的边界可能受环路滤波影响外,Slice的解码过程可以不实用任何来自其它Slice的影响,且有利于实现并行计算,使用Slice的主要目的是当数据丢失后能再次保证解码同步。
根据编码类型的不同,Slce可以分为以下几种
ISlice 该Slice中所有CU编码过程中都使用帧内预测,
PSlice在ISlice的基础上,该Slice中的CU还可以使用帧间预测。每个预测块PB使用至多一个运动补偿预测信息,PSlice只使用图像参考列表List0
BSlice在PSlice的基础上,BSlice中的CU也可以使用帧间预测,但是每个PNB可以使用至多两个运动补偿预测信息。BSlice 可以使用图像参考列表List0 List1.
一个独立的Slice可以被进一步划分成若干个SS,包括一个独立的SS和若干个依赖SS,
并且以独立SS作为该Slice的开始,一个SS包含证书个CTU,并且这些CTU分布在同一个NAL单元中,SS可以作为一个分组来传送视频编码数据。其中,独立SS是指它所涉及的句法元素可以由自身确定,依赖SS是指它所涉及的某些句法元素由已经解码的独立SS推导得到,依赖SS可以共享独立SS携带的一些信息。例如RPS信息,SAO的可用性和加权预测可用性等等。预测过程不能跨越独立Slice的边界。但是可以跨越依赖SS的边界,一个Slice内的SS之间可以相互参考,下面的例子将分别对一副图像中的Slice以及所包含的SS做详细的说明。
例如 一幅图像划分为两个Slice,第一个Slice由一个包含4个CTU的独立Slice Segment,一个包含32个CTU的依赖SS和另外一个包含24个CTU的依赖SS组成,而第二个Slice由唯一一个包含39个CTU的独立SS组成。
H265编码的最高层为SS曾,SS曾所需要的图像曾信息可以通过饮用相应的PPS来获得,SS头包含其饮用的PPS的标示号,同一副图像中所有的SS引用同一个PPS,此外,SS头中会存在一些与PPS相同的参数,SS头中这些参数值会对PPS中该参数值进行覆盖,以下部分对H265中SS相关的愈发语义做详细介绍。
First_slice_segment_in_pic_flag 表示按照解码顺序,当前SS是否为第一个SS
No_output_of_prior_pics_flag 在IDR和BLA图像解码之后该愈发元素会影响解码图像缓冲器中已经解码图像的输出。
Slice_pic_parameter_set_id 表示当前Slice所引用的PPS的ID号。
Dependent_slice_segment_flag 表示当前SS是否依赖SS。
Slice_segment_address 对一副图像的CTU进行光栅扫描后,当前SS中第一个CTU的地址。
Slice_reserved_flag[i] 其值和语义保留,供ITU-T以及ISO/IEC将来使用,解码器应该忽略该愈发元素。
Slice_type 指明该Slice类型
Pic_output_flag 该语法元素影响解码图像的输出和移除过程。
Color_plane_id ,当separate_color_plane_flag 为1时,该语法元素规定了彩色平面,其值为0,1,2时,分别对应着Y,Cb,Cr
Slice_pic_order_cnt_lsb 规定了当前图像的POC与MaxPicOrderCntLsb取模后的值,用于计算当前图像的POC值。
Short_term_ref_pic_set_sps_flag 值为1,表示当前图像的短期参考图像集可以通过SPS中的语法结构ST_REF_PIC_SET 得出,值为0,则表示当前图像的短期参考语法通过Slice头中的语法结构st_ref_pic_set 得出,当num_short_term_ref_pic_sets 取值为0时,short_term_ref_pic_set_sps_flag 应该等于0.
Short_term_ref_pic_set_idx 表示当前图像使用哪一个短期参考帧图像集。
Num_long_term_sps 表示当前图像的长期参考帧的树木。
Num_long_term_pics 表示当前图像的长期参考图像的数目。
It_idx_sps[i] 表示当前图像的第i个长期参考图像在候选长期参考图像列表中的索引好。
Poc_lsb_it[i] 表示当前图像的第i个长期参考图像的POC值与MaxPicOrderCntLsb 取摸之后的值。
used_by_curr_pic_it_flag[i] 表示当前图像长期参考图像集中第i个参考图像是否可以用作当前图像的参考。
Delta_poc_msb_present_flag[i] 表示delta_poc_msb_cycle_lt[i] 是否存在。
Delta_poc_msb_cycle_lt[i] 用于计算当前图像的第i个长期参考图像的POC值,(长期参考图像包括两部分--SPS和Slice 头中的分别制定的长期参考图像。该句法元素中的delta表示任一部分中相邻两个长期参考图像的poc_msb_cycle_lt的差值。)
Slice_temporal_mvp_enabled_flag 表示帧间预测是否使用时域MV预测。 是否使用时域MVP。
Slice_sao_luma_flag luma是否打开sao
Slice_sao_chroma_flag, 表示当前Slice色度分量是否使用SAO
Num_ref_idx_active_override_flag 表示当前Slice中语法元素的num_ref_idx_l0_active_minus1和num_ref_idx_l1_active_minus1是否存在。
Num_ref_idx_l0_active_minus1 表示可能用于解码当前Slice的参考图像list0 中的最大参考索引值,其取值范围为【0, 14】
Num_ref_idx_l1_active_minus1 表示可能用于解码当前Slice的参考图像list1 中的最大参考索引值,其取值范围为[0,14]
Mvd_l1_zero_flag 其值为1表示mvd_coding(x0, y0, 1)未被解析。
且对于compIdx = 0.1 MvdL1[x0][y0][compIdx] 被设为0,其值为0表示mvd_coding(x0,y0,1)已经被解析。
Cabac_init_flag 规定在上下文变量的初始化过程中,是否使用初始化表。
Collocated_from_l0_flag 规定用于时域MV预测的collocated图像来自参考图像列表list0还是list1。
Collocated_ref_idx 规定用于时域MV预测的collocated 图像的参考索引号。
Five_minus_max_num_merge_cand 制定MVP候选点可以合并的最大数目。
Slice_qp_delta 规定当前Slice中CB可以使用的量化参数。QPy
Slice_cb_qp_offset 该语法元素值加上变量PPS_CB_QP_OFFSET 的值即为量化参数变量QpCb的值。
Slice_cr_qp_offset 该语法元素值加上变量pps_cr_qp_offst的值即为量化参数QP的值。
Deblocking_filter_override_flag 表示slice头是否存在去方块滤波参数。
Slice_deblocking_filter_disabled_flag 表示当前Slice是否使用去方块滤波,该语法元素不存在时,可以推测出其值等于pps_deblocking_filter_disable_flag。
Slice_beta_offset_div2和slice_tc_offset_div2 用于获取当前Slice去块滤波补偿参数beta和tC。该两个语法元素不存在时,可推测出其值分别等于pps_beta_offset_div2和pps_tc_offset_div2。
Slice_loop_filter_across_slices_enabled_flag 表示环路滤波是否可以跨越当前slice的上边界和左边界。语法不存在是,用pps_loop_filter_across_slices_enabled_flag。
Num_entry_point_offsets 表示Sliced头中句法缘聚Entry_point_offset_minus1[i] 数目。
Offset_len_minus1 表示句法元素entry_point_offset_minus1[i]的比特长度,
Entry_point_offset_minus1[i] 规定i个entry point的以字节为单位的偏移量。
Slice_segment_header_extension_length 表示SS头扩充数据的长度。
Slice_segment_header_extension_data_byte 可以是任意值,解码器忽略该语法元素,在该版本中,其值不影响解码。