av1学习笔记(二):sequence_header_obu

news2025/1/9 14:05:21

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_profileBit depthYUV
08 or 10YUV420,YUV400
18 or 10YUV444
28 or 10YUV422,YUV400
212YUV420,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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【xLua】xLua-master签名、加密Lua文件

GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作,又发现项目工程并没导入Tools,可以从xLua-master工程拷贝到项目工程Assets…

Linux(上):基本知识篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux初识1 Linux简介2 Linux学习环境配置(1)安装Linux(2)FinalShell远程连接Linux服务器二、Linux基础命令1 Linux目录结构,根目录 /2 Linux命令基础(1)什么是命令、命令行?(2)…

【安卓开发】【Android Studio】项目构建失败提示【Could not read metadata.bin】解决方法

一、问题说明 在Android Studio中开发安卓项目时,项目构建失败,提示如下: Could not read workspace data from xxx/xxx/(某个目录,和gradle有关):could not read ...metadata.bin&#xff08…

细说STM32F407单片机以轮询方式读写外部SRAM的方法

目录 一、实例的功能 二、工程配置 1、KEYLED 2、时钟、DEBUG、USART6、NVIC、GPIO、CodeGenerator 3、FSMC (1) 模式设置 (2) Bank 1子区3参数设置 1) NOR/PSRAM control组,子区控制参数 2) NOR/PSRAM timi…

下载ffmpeg执行文件

打开网址:Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了,需要通过命令行进行使用: ffmpeg命令行使用参考: ffmpeg 常用命令-CSDN博客

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…

【合作原创】使用Termux搭建可以使用的生产力环境(九)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(八)-CSDN博客中我们讲到了如何安装IDEA社区版,并在Termux中安装VNC服务器,在proot-distro的Debian中启动xfce桌面,并通过这个方式解决了IDEA社区版中无…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

STM32学习(十)

I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线‌。 ‌硬件连接简单‌:I2C通信仅需要两条总线,即SCL&…

Flutter:吸顶效果

在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…

数据结构基础之《(13)—前缀树》

一、前缀树 1、前缀树(Trie),又称字典树或单词查找树,是一种用于存储字符串集合的数据结构。 2、前缀树的操作 (1)单个字符串中,字符从前到后的加到一棵多叉树上 (2)字…

道品科技智慧农业与云平台:未来农业的变革之路

随着全球人口的不断增长,农业面临着前所未有的挑战。如何在有限的土地和资源上提高农业生产效率,成为了各国政府和农业从业者亟待解决的问题。智慧农业的兴起,结合云平台的应用,为农业的可持续发展提供了新的解决方案。 ## 一、智…

【Linux基础指令】第一期

一、Linux的介绍 Linux是一个开源的操作系统,性能、稳定性、安全性方面上都是很优秀的,所以它一直是企业后端系统的首选。所以其图形化界面并不是Linux的必需品,所以我们避免不了要使用命令行的形式来使用Linux,也就离不开…

​​​​​​芯盾时代以数据为核心的车联网业务安全解决方案

芯盾时代车联网业务安全建设聚焦智能网联业务运行过程产生的多维度、多模态、多视角数据以及因业务需求产生的过程数据和业务衍生数据,以网络安全等级保护为基础,坚持网络安全管理体系和技术体系并重的原则,加强网络安全体系化、实战化、常态…

剖析 Claim-Check 模式:以小传大,赋能分布式系统与微服务

1. 前言 1.1 写作背景与目的 在当今分布式系统与微服务架构盛行的时代,服务间的消息传递与数据交换越来越频繁。传统的消息传输在面对海量数据时,往往会遇到以下痛点: 消息体过大:直接通过消息队列或服务间接口发送大体量数据&…

VS2022引入sqlite数据库交互

法一:用官网编译好的动态库(推荐) 下载所需文件 sqlite官网地址:https://www.sqlite.org/howtocompile.html 下载以下的2个压缩包 第一个压缩包 sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h 第…

计算机的错误计算(二百零五)

摘要 基于一位读者的问题,提出题目:能用数值计算证明 吗?请选用不同的点(即差别大的数)与不同的精度。实验表明,大模型理解了题意。但是,其推理能力值得商榷。 例1. 就摘要中问题&#xff0…

设计形成从业务特点到设计模式的关联

规范和指引在应用架构、数据架构等各架构方向上形成规范性约束指导。同一个决策要点、架构单元在统一的架构原则指导下,会因业务特点差异有不同的实现,经过总结形成了最佳实践。在开展新应用的设计时,根据决策要点以及相关的业务特点&#xf…

深度学习blog-深刻理解线性变换和矩阵

深度学习中避免不了矩阵运算,或者张量(其实是矩阵数组)运算。卷积是矩阵加、乘法,注意力也是一样。本质都一样,所谓注意力,卷积、滤波,是对不必了解数学的人说的,底层都是矩阵运算&a…

C/C++程序性能测试方法综述

摘要 性能测试是软件开发中不可或缺的一部分,特别是在对性能要求较高的C/C程序中。本文将详细介绍多种C/C程序性能测试方法,包括时间复杂度分析、事后统计方法、事前分析估算方法、使用性能测试工具(如Google Benchmark、gprof、Valgrind等&…