高效视频编码 (HEVC) -H.265(结构解析)

版本

 HEVC (H.265) 规范的第一个版本于 2013 年 4 月发布。该标准的版本如下:

结构术语

  • 四叉树(通常连字符)。一个树的数学术语,其中一个父节点可以分成四个子节点,每个子节点都可以成为另一个子节点的父节点,分成四个子节点。有关 HEVC 中使用的四叉树示例,请参阅 HEVC 中的块结构和并行功能:图 3
  • CTU(编码树单元)。在 HEVC 中,图片被划分为 CTU,它们是方形块,可能除了底部行和右侧列。一个 CTU 可进一步分为 4 个子 CTU。
  • 瓷砖和切片。HEVC 有两种附加类型的分区可用于图片。它们由 CTU 序列组成。瓦片是构成图片的矩形瓦片网格内的 CTU 矩形区域;瓷砖被视为独立图片。切片是可以独立于同一图片的其他切片进行解码的 CTU 序列。切片可以是整个图片或图片的区域。切片的主要用途之一是在数据丢失时重新同步。与常见用法相比,HEVC 中的切片不限于矩形网格中的单行块。请参阅 HEVC 规范中的子条款 6.3 或 HEVC 中的块结构和并行功能:图 6
  • I 切片(内部切片)是独立压缩的 HEVC 切片。仅使用帧内预测对 I-slice 进行解码。更常见的术语I-frame的扩展。
  • P 切片(预测切片)基于与视频源中先前图片的差异,采用图片间编码。更常见的术语P-frame的扩展。
  • B 切片(双向预测切片)是双向预测切片,使用当前图片与前后图片之间的差异来导出当前切片的编码内容。更常见的术语B-frame的扩展。
  • 帧内编码使用各种空间预测模式来利用源信号中的空间统计相关性,用于单个图片或图块。
  • 帧间编码使用运动矢量进行基于块的预测,以利用不同图片之间的时间统计相关性。在 HEVC 中,帧间预测可以应用于块和切片子结构,而不仅仅是整个图片或图块。
  • SEI:补充增强信息。SEI 消息包含的信息(通常称为消息有效负载)不是简单地对编码图片样本进行解码所必需的,而是对解码器的标准化结构化消息,可以帮助与解码、显示或其他相关的过程。目的。某些高级功能(例如 3-D)在无法识别相应 SEI 消息的应用程序中无法正常运行。
  • 级别由一组定义的约束组成,这些约束对 HEVC 语法元素和变量可能采用的值或缩放之前的变换系数的值进行。为所有 HEVC 配置文件定义了一组通用的“通用”级别。因此,每个级别定义的大多数方面在不同的配置文件中都是通用的。在编码的视频序列中,配置文件、级别和层在参数集中以非常简洁的方式标识,简单工具无法访问。请参阅上面的文件类型指示符
  • 是对比特流中的语法元素的值施加的指定级别约束类别,其中级别约束嵌套在层内,并且符合特定层和级别的解码器将能够解码符合同一层的所有比特流或该级别的较低级别或低于该级别的任何级别。
  • CPB(编码图像缓冲区)是一个缓冲区,其中包含解码单元,其解码顺序在 HEVC 规范的附件 C 中的假设参考解码器中指定。编码器生成的内容编码中 CPB 的大小是解码器的一个重要因素。级别以位为单位指定最大 CPB 大小。
  • HEVC 中的参数集与 H.264/AVC 中的参数集相似,具有相同的基本设计目标——即比特率效率、错误恢复能力和支持系统层接口。HEVC 中存在参数集的层次结构,包括序列参数集 (SPS) 和图像参数集 (PPS),它们与 AVC 中的对应部分相似。HEVC 引入了一种称为视频参数集 (VPS) 的新型参数集。参数集存储在特殊的网络抽象层 (NAL) 单元中,特定的 NAL 单元类型在单元的开头编码为二进制整数。请参阅 HEVC 规范中的表 7-1 或高效视频编码 (HEVC) 标准概述中的表 I用于将整数代码映射到人类可读的名称。为了压缩效率,这些参数集的编码非常简洁,主要使用 1 位标志和二进制整数。请注意,如果按照ISO/IEC 14496-15的规定将 HEVC 编码的视频序列或静止图像嵌入到ISO_BMFF容器中,则 VPS 和 SPS 参数集将在类型为hvcC的框中的HEVC 配置项属性中找到。
  • SPS(序列参数集)。包含适用于整个编码视频序列的参数,并且不会在编码视频序列内的图片之间更改。SPS 具有比特深度、色度格式、图片宽度和图片高度等特性的代码。NAL 单元类型为 33。
  • VPS(视频参数集)。HEVC 中定义的新参数集,适用于比特流的所有层。一个层可以包含多个时间子层。NAL 单元类型为 32,存储在 SPS 之前。
  • PPS(图片参数集)。每张图片有一个 PPS。此参数集中存储的详细信息包括:平铺行数;瓷砖列的数量;与是否使用特定扩展(例如,用于 3D 或屏幕内容编码 (SCC))相关的标志;以及解码图片所需的其他参数。NAL 单元类型为 34。​​​​​

有用的参考资料

通用SPS RBSP语法结构

seq_parameter_set_rbsp( ) {Descriptor
    sps_video_parameter_set_id u(4)
    sps_max_sub_layers_minus1 u(3)
    sps_temporal_id_nesting_flag u(1)
    profile_tier_level( 1,sps_max_sub_layers_minus1 )
    sps_seq_parameter_set_id ue(v)
    chroma_format_idc ue(v)
    if( chroma_format_idc = = 3 )
        separate_colour_plane_flag u(1)
    pic_width_in_luma_samples ue(v)
    pic_height_in_luma_samplesue(v)
    conformance_window_flag u(1)
    if( conformance_window_flag ) {
        conf_win_left_offset ue(v)
        conf_win_right_offset ue(v)
        conf_win_top_offset ue(v)
        conf_win_bottom_offset ue(v)
    }
    bit_depth_luma_minus8 ue(v)
    bit_depth_chroma_minus8 ue(v)
    log2_max_pic_order_cnt_lsb_minus4 ue(v)
    sps_sub_layer_ordering_info_present_flag u(1)
    for( i = ( sps_sub_layer_ordering_info_present_flag ? 0 : sps_max_sub_layers_minus1 );
        i <= sps_max_sub_layers_minus1; i++ ) {
        sps_max_dec_pic_buffering_minus1[ i ] ue(v)
        sps_max_num_reorder_pics[ i ] ue(v)
        sps_max_latency_increase_plus1[ i ] ue(v)
    }
    log2_min_luma_coding_block_size_minus3 ue(v)
    log2_diff_max_min_luma_coding_block_size ue(v)
    log2_min_luma_transform_block_size_minus2 ue(v)
    log2_diff_max_min_luma_transform_block_size ue(v)
    max_transform_hierarchy_depth_inter ue(v)
    max_transform_hierarchy_depth_intra ue(v)
    scaling_list_enabled_flag u(1)
    if( scaling_list_enabled_flag ) {
        sps_scaling_list_data_present_flag u(1)
        if( sps_scaling_list_data_present_flag )
            scaling_list_data( )
    }
    amp_enabled_flag u(1)
    sample_adaptive_offset_enabled_flag u(1)
    pcm_enabled_flag u(1)
    if( pcm_enabled_flag ) {
        pcm_sample_bit_depth_luma_minus1 u(4)
        pcm_sample_bit_depth_chroma_minus1 u(4)
        log2_min_pcm_luma_coding_block_size_minus3 ue(v)
        log2_diff_max_min_pcm_luma_coding_block_size ue(v)
        pcm_loop_filter_disabled_flag u(1)
    }
    num_short_term_ref_pic_sets ue(v)
    for( i = 0; i < num_short_term_ref_pic_sets; i++)
        st_ref_pic_set( i )
    long_term_ref_pics_present_flag u(1)
    if( long_term_ref_pics_present_flag ) {
        num_long_term_ref_pics_sps ue(v)
        for( i = 0; i < num_long_term_ref_pics_sps; i++ ) {
            lt_ref_pic_poc_lsb_sps[ i ] u(v)
            used_by_curr_pic_lt_sps_flag[ i ] u(1)
        }
    } 
    sps_temporal_mvp_enabled_flag u(1)
    strong_intra_smoothing_enabled_flag u(1)
    vui_parameters_present_flag u(1)
    if( vui_parameters_present_flag )
        vui_parameters( )
    sps_extension_present_flag u(1)
    if( sps_extension_present_flag ) {
        sps_range_extension_flag u(1)
        sps_multilayer_extension_flagu(1)
        sps_3d_extension_flag u(1)
        sps_scc_extension_flag u(1)
        sps_extension_4bits u(4)
    }
    if( sps_range_extension_flag )
    sps_range_extension( )
    if( sps_multilayer_extension_flag )
        sps_multilayer_extension( ) /* specified in Annex F */
    if( sps_3d_extension_flag )
        sps_3d_extension( ) /* specified in Annex I */
    if( sps_scc_extension_flag )
        sps_scc_extension( )
    if( sps_extension_4bits )
        while( more_rbsp_data( ) )
            sps_extension_data_flag u(1)
    rbsp_trailing_bits( ) 
}

序列参数集范围扩展语法

sps_range_extension( ) {Descriptor
    transform_skip_rotation_enabled_flagu(1)
    transform_skip_context_enabled_flagu(1)
    implicit_rdpcm_enabled_flagu(1)
    explicit_rdpcm_enabled_flagu(1)
    extended_precision_processing_flagu(1)
    intra_smoothing_disabled_flagu(1)
    high_precision_offsets_enabled_flagu(1)
    persistent_rice_adaptation_enabled_flagu(1)
    cabac_bypass_alignment_enabled_flagu(1)
}

序列参数集屏幕内容编码扩展语法

sps_scc_extension( ) {Descriptor
    sps_curr_pic_ref_enabled_flagu(1)
    palette_mode_enabled_flagu(1)
    if( palette_mode_enabled_flag ) {
        palette_max_sizeue(v)
        delta_palette_max_predictor_sizeue(v)
        sps_palette_predictor_initializers_present_flagu(1)
            if( sps_palette_predictor_initializers_present_flag ) {
                sps_num_palette_predictor_initializers_minus1ue(v)
                numComps = ( chroma_format_idc = = 0 ) ? 1 : 3
                    for( comp = 0; comp < numComps; comp++ )
                        for( i = 0; i <= sps_num_palette_predictor_initializers_minus1; i++ )
                            sps_palette_predictor_initializer[ comp ][ i ]u(v)
            }
    }
    motion_vector_resolution_control_idcu(2)
    intra_boundary_filtering_disabled_flag
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值