HEVC 片与片段(Slice 和Slice Segment)说明

一幅图像可以被分割为一个或多个片(Slice),每个片的压缩数据都是独立的,Slice头信息无法通过前一个Slice的头信息推断得到。这就要求Slice不能跨过它的边界来进行帧内或帧间预测,且在进行熵编码前需要进行初始化。但在进行环路滤波时,允许滤波器跨越Slice的边界进行滤波。除了Slice的边界可能受环路滤波影响外,Slice的解码过程可以不使用任何来自其他Slice的影响,且有利于实现并行运算。使用Slice的主要目的是当数据丢失后能再次保证解码同步。根据编码类型不同,Slice可分为以下几部分。
1 I Slice:该Slice中所有CU的编码过程都使用帧内预测。
2 P Slice:在I Slice的基础上,该Slice中的CU还可以使用帧间预测,每个预测块(PB)使用至多一个运动补偿预测信息。PSlice只使用图像参考列表list0。
3 B Slice:在P Slice的基础上,B Slice中的CU也可以使用帧间预测,但是每个PB可以使用至多两个运动补偿预测信息。B Slice可以使用图像参考列表list0和list1。一个独立的Slice可以被进一步划分为若干SS,包括一个独立SS和若干个依赖SS,并且以独立SS作为该Slice的开始。一个SS包含整数个CTU(至少一个),并且这些CTU分布在同一个NAL单元中。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组成。下表显示了Slice、独立SS、依赖SS3者之间的关系。

H.265/HEVC编码的最高层为SS层,SS层所需要的图像层信息可以通过引用相应的PPS来获得。SS头包含其引用的PPS的标识号,同一幅图像中的所有SS引用同一个PPS。此外,SS头中会存在一些与PPS中相同的参数,SS头中的这些参数值会对PPS中的该参数值进行覆盖。以下部分对H.265/HEVC中SS相关语法语义做详细介绍。

SS的语法元素

end_of_slice_segment_flag:用于判断当前SS是否结束。
end_of_sub_stream_one_bit:取值应改为1。

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的编码类型。其值为0,表示该Slice是B Slice;其值为1,表示该Slice是P Slice;其值为2,表示该Slice是I Slice。
pic_outputf_lag:该句法元素影响解码图像的输出和移除过程。
colour_plane_id:当separate_colour_plane_flag为1时,该语法元素规定了彩色平面。其值为0,1,2时,分别对应着Y,Cb,Cr。
slice_pic_order_cnt_Isb:规定了当前图像的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:表示当前图像使用哪一个短期参考图像集(由当前激活的SPS中指定)。
num_long_term_sps:表示当前图像的长期参考图像(在当前激活的SPS中指定)的数目。
num_long_term_pics:表示当前图像的长期参考图像(在Slice头中指定)的数目。
It_idx_sps[i]:表示当前图像的第i个长期参考图像在候选长期参考图像列表中的索引号。
poc_Isb_It[i]:表示当前图像的第i个长期参考图像的POC值与MaxPicOrderCntLsb取模之后的值。
used_by_curr_pic_It_flag[i]:表示当前图像长期参考图像集中第i个参考图像是否可以用做当前图像的参考。
delta_poc_msb_present_flag[i]:表示delta_poc_msb_cycleIt[i]是否存在。delta_poc_msb_cycleIt[i]:用于计算当前图像的第i个长期参考图像的POC值(长期参考图像包括两部分一SPS和Slice头中分别指定的长期参考图像,该句法元素中的delta表示任一部分中相邻两个长期参考图像的poc_msb_cycle_It的差值)。slice_temporal_mvp_enabled_flag:表示帧间预测是否使用时域MV预测。slice_sao_luma_flag:表示当前Slice的亮度分量是否使用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_I0_active_minus1:表示可能用于解码当前Slice的参考图像list0中的最大参考索引值,其取值范围为[0,14]。
num_ref_idx_I1_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还是listl。
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的值即为量化参数变量Qp’cb的值。
slice_cr_qp_offset:该语法元素值加上变量pps_cr_qp_offset的值即为量化参数Qp’cr的值。
deblocking_filter_override_flag:表示Slice头是否存在去方块滤波参数。slice_deblocking_filter_disabled_flag:表示当前Slice是否使用去方块滤波。该语法元素不存在时,可推测出其值等于pps_deblocking_filter_disabled_flag。slice_beta_offset_div2和slice_tc_offset_div2:用于获取当前Slice的去方块滤波补偿参数β和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:表示Slice头中句法元素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:可以是任意值,解码器忽略该语法元素。在该版本中,其值不影响解码。

摘自《新一代高效视频编码 H.265/HEVC:原理、标准与实现》 万帅 杨付正 编著

HEVC 片与片段(Slice 和Slice Segment)说明相关推荐

  1. HEVC标准中的图像分割(2),slice,tile,CTU,CU,PU,TU等

    接着来说HEVC的图像分割. HEVC的标准中有这么一段话,翻译过来就是: 图像分成分量(Y,Cb,Cr). 分量分成coding tree blocks 图像分成tile列 图像分成tile行 Ti ...

  2. slice python_Python slice()

    slice python Python slice() function returns a slice object representing the set of indices specifie ...

  3. HEVC之tiles、slice、slice segment、CU、PU、TU分析

    (一) (1)   编码树单元(CTU)和编码树块(CTB)结构: 在之前的标准中,编码层的核心是宏块,一个宏块包含一个16×16的亮度块,以及对于常用的4:2:0采样格式来说还包含两个8×8的色度块 ...

  4. 【JavaScript String对象方法】字符串片段提取:slice()、substring()、substr()

    当参数相同时,返回结果是否相同 slice() substring() substr() 单正参 ✅ ✅ ✅ 单负参 ✅ ❌ (负参转换为 0,返回全字符串) ✅ 双正参 ✅ ✅ ❌ 双负参 ✅ nu ...

  5. HEVC编码结构:Slice和Tile

    1.Slice片段层 一幅图像可以被划分为一个或多个片或称为条带(Slice),每个片的数据编码都是独立的. 如下图,一幅图像被划分为N个Slice,Slice成条带形.在编码时,每一个Slice中的 ...

  6. H265/HEVC编解码系列(1):图像分割(Slice、Tile、CTU)

    H265/HEVC编解码系列(1):图像分割(Slice.Tile.CTU) 一.Slice 和 Slice Segment 二.Tile单元 三.CTU.CU 参考 一.Slice 和 Slice ...

  7. HEVC区域划分Slice Tile CTU CU PU TU

    Slice Slice是可以不依赖同一张图片其他Slice独立编码的数据结构,包括信号预测.残差信号重建和熵编码.一张图片可以分为一个活多个Slice.Slice包含一个或多个Slice segmen ...

  8. Golang slice原理

    数组 slice类型是建立在Go数组类型之上的抽象,因此要了解slice我们必须首先了解数组. 数组类型定义了长度和元素类型.例如,[4]int 类型表示一个由四个整数组成的数组.数组的大小是固定的, ...

  9. go slice切片详解:定义、遍历、追加切片、切片拷贝

    引入 [1]切片(slice)是golang中一种特有的数据类型 [2]数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在 Go 语言的代码里并不是特别常见.相对的切片却是随处可见的,切 ...

最新文章

  1. Entity Framework中的Migration问题
  2. 高通加大5G应用力度:发布又一款手机芯片,还推出机器人和无人机5G系统
  3. 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
  4. 服务器共享文件和电脑同步,云服务器共享文件夹同步
  5. 请问华为三层交换机里面的那个从IP是个什么意思? -
  6. python实例化对象是什么意思_请帮我理解python对象的实例化.
  7. 链接克隆 完整克隆_深入克隆
  8. 在过渡到Agile中的十种错误
  9. 这里有10个优质Python开源项目,来帮你学好Python
  10. python学习——numpy库
  11. 【超直白】算法:斐波那契数列
  12. 今年护网蓝队防御具体实施方案
  13. 中国5级行政区域MySQL数据库库
  14. 【verbs】ibv_query_port()
  15. Minecraft 材质包制作入门 保姆级教程 (一)
  16. Android使用XML做动画UI
  17. PHP7.2中AES加密解密方法mcrypt_module_open()替换方案
  18. 黑名单(诸如反爬虫等)
  19. 算法题:将十进制转化为其他进制
  20. 杭电ACM 1000题

热门文章

  1. 计算机共享的users,win10关闭共享,详细教您win10怎么关闭user共享
  2. 为什么计算机专业要学概率统计,计算机类专业概率统计教学探讨与尝试
  3. 数字货币钱包开发需要注意哪些问题?
  4. 成功把Ubuntu安装到U盘完整教程!
  5. (一)数字逻辑基础1
  6. 屌丝的逆袭和互联网+时代
  7. 趣味python教学_《趣味python》学习笔记,好玩,的,记录,贴
  8. OpenGL: 混合
  9. 喝酒问题:啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒
  10. 操作系统与嵌入式开发专家周末北京聚会