av1sequence_header_obu_0">av1学习笔记(二):sequence_header_obu
目录
- av1学习笔记(二):sequence_header_obu
- 1,图片的编解码方式
- 1.1 seq_profile:
- 1.2 still_picture
- 1.3 reduced_still_picture_header
- 1.4 编解码图像的宽高
- 1.5 use_128x128_superblock
- 1.6 enable_filter_intra
- 1.7 enable_intra_edge_filter
- 1.8 enable_superres
- 1.9 enable_cdef
- 1.10 enable_restoration
- 1.11 film_grain_params_present
- 2,播放视频时的相关参数设置
- 2.1 timing_info()视频帧率相关的一些信息;
- 2.2 decoder_model_info()解码器的一些配置信息;
- 2.3 视频设置
- 2.4 sequence支持的编码策略的配置
- 3,色彩空间配置color_config
- 4,总结
- 5,参考资料
obu_type = OBU_SEQUENCE_HEADER时,obu为sequence_header_obu,剩下的码流表示图像最大宽高等一系列的配置信息;此后的obu将采用这些信息来解码后续码流。
1,图片的编解码方式
1.1 seq_profile:
seq_profile | Bit depth | YUV |
---|---|---|
0 | 8 or 10 | YUV420,YUV400 |
1 | 8 or 10 | YUV444 |
2 | 8 or 10 | YUV422,YUV400 |
2 | 12 | YUV420,YUV422,YUV444,YUV400 |
- YUV表示图片为Y(亮度)和U,V(色度)三个矩阵组成;
- YUV400表示图片只含有Y分量;
- YUV420表示一个8x8的图片,由8x8的Y和4x4的U,4x4的V组成;
- Bit depth表示单个像素点的位宽;
- 结合color_config内的内容,才能确定最终图片类型;
1.2 still_picture
♈️still_picture : 若为 1,表示这些配置只对后面一个frame有效,否则表示对后面多个frame有效。
1.3 reduced_still_picture_header
♉️若该flag为1,则只需编码seq_level_idx[0] ;帧率等一些播放相关的参数,变为默认值,不需要在码流里进行编解码;
♊️seq_level_idx: 对图像播放时的最大宽高,支持的最大帧率等的限制参数;软硬件可以根据seq_level_idx对后续视频的编解码工作进行合理的资源配置;
1.4 编解码图像的宽高
- frame_width_bits_minus_1 : 表示图像最大宽度的变量的位宽
- frame_height_bits_minus_1: 表示图像最大高度的变量的位宽
- max_frame_height_minus_1: 表示该后续obu编解码图像的最大高度
- max_frame_width_minus_1: 表示该后续obu编解码图像的最大宽度
1.5 use_128x128_superblock
♋️ 表示图像编码单位(1:128x128,0:64x64)
1.6 enable_filter_intra
♌️ 表示是否允许开启帧内滤波; 编解码时协议是按照128x128,64x64为单位进行的,后续会被划分成更小,最小至4*4,因此恢复后的图像可能存在块状效应。帧内滤波可以使得该区域的块状效应得到减轻,视觉上更加平滑自然。
1.7 enable_intra_edge_filter
♍️ 也表示是否允许开启帧内滤波。与enable_filter_intra相比,enable_intra_edge_filter更侧重于块边缘部分的滤波。enable_filter_intra则更广泛些;
1.8 enable_superres
♎️ enable_superres 表示是否支持启用超分辨率功能(提高视频分辨率);可以根据是否启用这个功能对后续视频的编解码工作进行合理的资源配置;
1.9 enable_cdef
♏️ 是否允许使用CDEF滤波器;
♐️ CDEF:Constrained Directional Enhanced Filter(约束方向增强滤波器),是非线性空间滤波器,该滤波器以8x8 为基本单位,通过沿着物体的方向进行滤波。CDEF目的是为了消除变换、量化带来的振铃效应,同时还能保留物体边缘的清晰度,提升重建图像的质量【2】。
1.10 enable_restoration
♑️ 是否开启图像或视频的恢复功能。开启后可以通过各种算法来修复图像模糊的地方,降低噪声污染等问题;
1.11 film_grain_params_present
♒️ film_grain_params_present表示是否开启胶片颗粒(film grain)相关功能;
♓️ 胶片颗粒模仿了老电影中看到的颗粒感。这个效果能够让画面看起来有年代感【3】。
2,播放视频时的相关参数设置
⛎ reduced_still_picture_header为1时,以下参数为默认值,不在码流里进行编解码
- timing_info_present_flag为1时,decoder_model_info_present_flag从码流中解码得出。
- 若timing_info_present_flag为0时,decoder_model_info_present_flag为0。
- 这两个flag表示了以下一些语法元素是由码流中解码得出,还是默认值;
2.1 timing_info()视频帧率相关的一些信息;
🔯timing_info_present_flag为1时,该函数下的语法元素有效;否则为默认值
- num_units_in_display_tick :画面的更新频率(多少个时间单位更新一次)
- time_scale : 时间单位(1秒里包含了多少个时间单位)
- equal_picture_interval:表示视频帧之间是否具有相等的间隔时间,若不相等,需要在码流里编码这个时间;
- num_ticks_per_picture_minus_1(equal_picture_interval为1时有效):每帧显示多久,和num_units_in_display_tick,time_scale共同决定帧率;
2.2 decoder_model_info()解码器的一些配置信息;
🅰️decoder_model_info_present_flag为1时,该函数下的语法元素有效;否则为默认值
- buffer_delay_length_minus_1:缓冲的buffer设置相关参数,解码器根据收到的 “buffer_delay_length_minus_1” 的值来确定缓冲策略
- num_units_in_decoding_tick:一个解码周期(decoding tick)内所包含的时间单位数量(时间单位time_scale),也会影响到实际帧率;
- buffer_removal_time_length_minus_1:buffer缓存的时间单位长度
- frame_presentation_time_length_minus_1:图像呈现时间,通过修改该参数可以实现快进放慢等效果;
2.3 视频设置
- initial_display_delay_present_flag是否存在初始视频显示延迟
- operating_points_cnt_minus_1 :视频操作点数量。一个视频可能有多种分辨率版本(如高清、标清),每种分辨率对应的播放设置就是一个操作点。
- operating_point_idc[i] 每个操作点的标识符;
- seq_tier:序列层级(分辨率,帧率方面)。编解码器会根据设定的 “seq_tier” 来决定采用何种编码参数和策略。
- decoder_model_present_for_this_op[i]:是否存在关于这个层级的解码器配置信息;
- operating_parameters_info[i]: 不同层级的解码器的buffer的配置信息;
- initial_display_delay_present_for_this_op[ i ]:这个i层级是否存在初始视频显示延迟
- initial_display_delay_minus_1[ i ]:i层级初始视频显示延迟时间;
- frame_id_numbers_present_flag,delta_frame_id_length_minus_2,additional_frame_id_length_minus_1(frame_id_numbers_present_flag为1时,后两者才有效),为frame提供id标识,方便在复杂情况下准确定位;
2.4 sequence支持的编码策略的配置
- enable_interintra_compound : 是否采用帧间和帧内复合预测的编码方式【4】
- enable_masked_compound:是否采用带掩码的复合编码技术。掩码用于界定或区分视频帧内不同区域,以便将不同的编码方式应用到特定的区域上,实现更高效且有针对性的视频编码。
- enable_warped_motion:是否启用扭曲运动(warped motion)相关的编码技术。能更好的捕捉视频的动态变化;
- enable_dual_filter:是否启用双滤波器。(可以提升画质)
- enable_order_hint:是否启用顺序提示(order hint)功能,该功能可以方便视频正确的呈现对应顺序的画面。
- enable_jnt_comp:是否启用联合压缩(joint compression)技术,实现更好的压缩效果(enable_order_hint为1时有效)。
- enable_ref_frame_mvs:是否启用参考帧运动矢量技术(enable_order_hint为1时有效)
- order_hint_bits_minus_1:后续frame的顺序信息所占的位宽(enable_order_hint为1时有效)
- seq_choose_screen_content_tools,seq_force_screen_content_tools : 屏幕内容处理工具的选择,及其是否使用的配置信息
- seq_choose_integer_mv,seq_force_integer_mv运动矢量是否采用整数形式的选择机制的配置信息(seq_force_screen_content_tools > 0有效)
3,色彩空间配置color_config
🅱️ 该函数里解码出的内容和seq_profile结合,共同判断图像bit位宽,YUV格式等信息。
🆎此外还有separate_uv_delta_q,会影响到uv量化所用到的QP值;
4,总结
💠 sequence_header_obu内的信息是视频帧率配置,后续几组图像支持的最大宽高,图片位宽,YUV格式以及解码器的配置,还有是否支持一些编解码策略的配置;
5,参考资料
【1】 av1官方协议文档
【2】 AV1中的CDEF滤波器解析-CSDN博客
【3】 Unity 后处理(Post-Processing) – (2)创建后处理配置文件_unity volume下的color adjustments怎么用代码控制-CSDN博客
【4】 av1学习笔记(一):码流的整体框架-CSDN博客