Hevc 档次和层级
在h264中就有对档次profile和级别level的划分,它们规定了比特流必须要遵守的一些限制要求,而H265/HEVC在此基础上又定义了一个新的概念,层Tier,档次,层和级别为多种不同应用提供了兼容性。档次主要规定编码器可采用哪些编码工具或者算法,级别则是根据解码端的负载和存储空间情况对关键参数加以限制,比如最大采样频率,最大图像尺寸,分辨率,最小压缩率。最大比特和CPB 解码缓冲区 大小等。考虑到应用可以依据最大的码率和CPB大小来区分,因此有些level定义了两个Tier,主层Main Tier和高层,主层用于大多数应用。高层用于最苛刻的应用,满足某一level或Tier的解码器应当可以解码当前Level个Tier,以及比当前Level和Tier更低的Level和Tier的所有码流,满足某一Profile的解码器必须支持该Profile中的所有特性,编码器不必实现Profile中的所有特性,但是生成的码流必须遵守标准规定。
一 档次
在H265/HEVC标准中提出了三种档次,分别是Main,Main 10和Main StillPicture 这三个档次的限制条件如下。
(1) 只支持4:2:0色度采样信号
(2)使用了Tiles便不能使用WPP,每一个Tile的亮度分辨率至少要256x64。
(3) Main和Main Still Picture档次支持8位像素深度,Main 10档次则支持10位像素深度,Main Still Picture档次不支持帧间预测。
1 main 支持每像素8比特位深,4:2:0的采样格式。最常见的档次。
2 main10
2012年10月会议上,提案JCTVC 提出了10比特位深的档次,其指出10比特位深的图像有助于提高视频质量。该提案获得通过,这一技术主要应用于消费电子领域,Main 10档次支持每个像素8比特或者10比特的位深,4:2:0的采样格式。由于采用更多的比特来描述像素值。Main 10可以大幅度提高重构视频的质量,支持Main10档次的解码器必须同时可以解码Main和Main10档次的码流。
3 Main Still Picture
Main Still Picture档次支持单个静止图像,按照Main档次的规定进行编码,为了测试Main Still Picture档次下静态图像的压缩性能。将H265 /HEVC HM rc2,jpeg 2000 等进行实验对比,视频质量评价标准基于PSNR 的客观评价和机遇平均意见的分MOS的主观评价。对于4:2:0色度采样信号,相比JPEG 2000 和JPEG,相同PSNR的分下,码率分别下降了20.26%和61.63%,在相同的重构视频质量下,MOS度量。H265 HEVC编码得到了码率分别下降30.96%和43.10%
下面主要给出Main和Main10这两个档次各自可采样的编码工具,关于Main Still Picture档次,可按照Main档次中提供的编码工具进行编码
Main | Main10 |
支持8比特位深的样点 | 支持8/10比特位深的样点 |
基于四叉树结构的编码单元(亮度块大小可以达到64x64) | |
不同类型的预测单元,包括对称结构和非对称结构 | |
基于四叉树结构的变换单元(最大分割深度位3) | |
35种帧内预测模式以及PCM | |
基于MV竞争和合并机制的先进运动矢量预测 | |
基于亮度的1/4像素精度插值,基于色度的1/8像素精度插值滤波 | |
支持大块DCT变换,帧内编码同时支持DST变换 | |
支持Transform skip | |
上下文自适应二元算数编码 | |
基于码率是真优化的量化 | |
块效应滤波器 | |
样点自适应补偿滤波器 |
2 层和级别
H265/HEVC标准定义了两个层和13个级,见表3.12.两个层分别是Main Tier和High Tier。4和4以上的8个Level支持High Tier。Tier按照其最高比特率来处理应用问题,Main Tier可以适用于大多数应用,High Tier应用于高需求应用,符合某一Tier/Level的解码器能够解码当前以及比当前Tier/Level低的所有码流。
同一个Level实际上就是一套对编码比特流的一系列编码参数的限制,H265/hevc 的13个级别支持从QCIF到8K多种分辨率的图像。图像的宽高受到该级别定义参数MaxLumaPS的限制--图像的宽和高均必须小于等于8倍的MaxLumaPS再开方。此外,Level还约束了每幅图像中垂直和水平方向Tile的最大数量,以及每秒最大的Tile数量。此外,表3.13还给出了它们相关的语法元素。
general_profile_space 在该版本中,其取值为0,该语法元素的其它值保留将来使用,规定了一个档次空间,包含了所有档次的ID号和对应的内容。
general_tier_flag 规定了当前档次中使用的层的内容
General_profile_idc 其取值为0时,表示当前CVS编码过程使用的档次的ID号,其他值保留提供ITU-T以及ISO/IEC将来使用。
general_profile_compatibility_flag[j] 当general_profile_space值等于0时,该语法元素取值为1,表示当前CVS编码过程使用的档次的ID号为j。
general_progressive_source_flag 和 general_interlaced_source_flag 用于指定CVS中图像的扫描方式,逐行扫描或者隔行扫描。
general_non_pakced_constraint_flag 指明CVS中是否存在frame_packing_arrangement SEI message
general_frame_only_constraint_flag 指定field_seq_flag 的值是否为0
general_reserved_zero_44bits 值为0,解码器忽略
general_level_idc 指明CVS中使用的level的ID号
sub_layer_profile_present_flag[i] 表示在TemporalID等于i的子层中,其Profile tier level语法结构体中是否存在档次的信息。
sub_layer_level_present_flag[i] 表示在TemporalId等于i的子层中,其profile tier level语法结构体中是否存在级的信息。
reserved_zero_2bits 值为0.,忽略
以下时跟子层有关的语法元素,它们适用于TemporalId等于i的子层,其语义和前的general部分相同。
sub_layer_profile_space[i]
sub_layer_tier_flag[i]
sub_layer_profile_idc[i]
sub_layer_profile_compatibility_flag[i][j]
sub_layer_progressive_source_flag[i]
sub_layer_interlaced_source_flag[i]
sub_layer_non_pakced_constraint_flag[i]
sub_layer_frame_onle_constraint_flag[i]
sub_layer_reserved_zero_44bits[i]
sub_layer_level_idc[i]