vp9协议梳理-header头文件

vp9协议梳理-header头文件

本文是对vp9视频码流中header中包含的语法元素的一个分类整理,及其对具体的解码过程的影响的分析。

这里写目录标题

  • vp9协议梳理-header头文件
  • 1. Vp9码流中的header头文件
  • 2. profile
  • 3. show_existing_frame, frame_to_show_map_idx
  • 4. frame_type, color_config(),frame_size(),render_size(),refresh_frame_flags,frame_context_idx
  • 5 . show_frame, only_intra
  • 6. error_resilient_mode, reset_frame_context,frame_parallel_decoding_mode;
  • 7. ref_frame_idx,ref_frame_sign_bias,frame_size_with_refs(),allow_high_precision_mv,read_interpolation_filter()
  • 8. loop_filter_params( ), quantization_params( ),tile_info( ),header_size_in_bytes
  • 9. segmentation_params()
  • 10. 参考资料

1. Vp9码流中的header头文件


🐶Vp9码流中的一帧图像只有一个头文件,分为uncompressed_header(),和 compressed_header( )两种; 完整的解码函数参考协议第6章(参考资料【2】)


  • 🐭uncompressed_header()中的头文件为图像大小,渲染大小,量化参数,参考帧的更新等等信息;这些信息未进行压缩,因此解码时直接从码流中读取即可;

  • 🐹compressed_header()中的头文件主要是vp9对码流解码时需要用到的概率表(概率表的作用参考这篇文章【1】)的参数;


🐰本文主要对uncompressed_header()的信息按解码顺序进行分析;


2. profile

🐺profile_low_bit : Profile的低bit位
🐸profile_high_bit :Profile的高bit位
请添加图片描述

3. show_existing_frame, frame_to_show_map_idx

🐯show_existing_frame: 直接将之前解码存储的图像输出,输出格式和profile一致(show_existing_frame为1,则uncompressed_header在解码完frame_to_show_map_idx后,该帧图像解码结束);

🐨frame_to_show_map_idx:输出索引frame_to_show_map_idx所对应的图像

4. frame_type, color_config(),frame_size(),render_size(),refresh_frame_flags,frame_context_idx

🐻frame_type : 1表示KEY FRAME(关键帧), 0表示非关键帧;

🐷关键帧的含义:该帧独立解码🐽色彩空间(color_config())🐮帧尺寸(frame_size( ))🐗渲染尺寸(render_size( )),且该帧必为帧内编码,存放帧间编码时用到的参考帧的参考槽,都将在解码后替换为该帧图像(refresh_frame_flags = 0xFF,🐵refresh_frame_flags对为1的bit位对应的参考槽进行替换); 且vp9进行解码用到的概率表(索引为frame_context_idx,,取值范围0~3, 🐒vp9解码时,会先加载frame_context_idx对应的概率表,解码过程会更新这些表)会被初始化恢复为协议的默认值;

5 . show_frame, only_intra

🐴show_frame:该帧图像是否被显示;

  • 0: 不被显示, 需要解码only_intra;
  • 1:被显示, only_intra = 0;

🐑Only_intra : 1:只支持帧内预测;0:帧内帧间预测都支持;

6. error_resilient_mode, reset_frame_context,frame_parallel_decoding_mode;


🐘reset_frame_contex:

  • 0 , 1 表示无操作
  • 2表示 对frame_context_idx所指向的概率表进行初始化
  • 3 表示对所有概率表进行初始化

🐤error_resilient_mode:错误鲁棒模式,该flag为1时,该帧可以独立与前面的帧进行编码,具体表现为:

  • 对所有概率表进行初始化;
  • 分段参考功能(segmentation)所用到的FeatureData和 FeatureEnabled清零;
  • ref_frame_sign_bias清零(帧间预测时只能后向参考)
  • loop_filter关于参考帧的一些变量的清零

🐛总之就是该帧可以独立于前帧进行解码,相关的变量将都被清零化初始化;


🐝frame_parallel_decoding_mode :

  • frame_parallel_decoding_mode = 1表示启用并行解码模式;
  • frame_parallel_decoding_mode = 0表示禁用并行解码模式。

🐜并行解码模式意味着概率不根据观察结果进行调整频率。


请添加图片描述

🐞如图所示,一帧结束后会根据各个语法元素出现的频率来更新概率表(参考资料【2】),但error_resilient_mode 或Frame_parallel_decoding_mode为1时,将不会更新概率表;


7. ref_frame_idx,ref_frame_sign_bias,frame_size_with_refs(),allow_high_precision_mv,read_interpolation_filter()


🐌这些是帧间预测会用到的一些配置变量, 帧间编码一般用到4个可选的参考帧,存放参考帧的参考槽往往有更多个;

🐙4个ref_frame_idx,指定帧间使用哪些参考帧。对应的ref_frame_sign_bias指定每个参考帧的运动矢量在时间上的预期方向。符号偏差等于0表示参考系是向后参考系;符号偏差等于1表示参考帧是向前参考。


🐟allow_high_precision_mv:

  • allow_high_precision_mv = 0指定运动矢量为1/4精度;
  • allow_high_precision_mv = 1指定运动矢量为1/8精度。

🐠比如像素点值为0, 相邻像素点1 , 按1/4像素移动, 就得到0.25这个值;


🐳read_interpolation_filter帧间预测用到的过滤器的配置;


🐋frame_size_with_refs:判断图像的frame_size直接选用参考帧的frame size,还是单独解码frame_size作为图像的尺寸信息


8. loop_filter_params( ), quantization_params( ),tile_info( ),header_size_in_bytes

🐬loop_filter_params( ),:环路滤波器的一些工作模式的配置
🐏quantization_params( ):反量化需要用的qp相关的参数
🐀tile_info( ):tile的划分大小
🐉header_size_in_bytes:uncompressed_header()在码流中所占的字符串长度;

9. segmentation_params()

🐐 vp9解码过程中采用了一种分段工作;将多组信息存储在数组FeatureData 中,数组FeatureEnabled表示FeatureData 中的信息是否有效;

🐓MAX_SEGMENTS默认为8,表示FeatureData多少组信息;
🐕segment_id表示该帧获取segment_id对应的FeatureData的信息;

🐖FeatureData 中包含的信息:

  • SEG_LVL_ALT_Q : Index for quantizer segment feature
  • SEG_LVL_ALT_L : Index for loop filter segment feature
  • SEG_LVL_REF_FRAME : Index for reference frame segment feature
  • SEG_LVL_SKIP: Index for skip segment feature
  • SEG_LVL_MAX: Number of segment features

🐊我们可以简单理解为,QP,环路滤波器(lpf),skp,和帧间编码的一些信息,这些信息在解码帧头文件的过程中存储了8组(MAX_SEGMENTS);编码时若该帧采用的这些对应配置信息和某组数据一样,则直接编码输出segment_id,解码端解码时只需要解码出segment_id就可以得到这些数据了,从而达到节省码流的目的;

10. 参考资料

【1】Vp9解码方式概述 – Parsing Process-CSDN博客
【2】VP9_Bitstream_Specification_v0.7_ORIGINAL.docx
【3】vp9协议笔记

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac下查看、配置和使用环境变量

Mac下查看、配置和使用环境变量 一:Mac怎么查看环境变量命令 printenv一:这个命令会一次性列出所有环境变量的键值对,输出格式为: VAR1value1 VAR2value2 ...二: 也可以通过给这个命令加上环境变量名参数&#xff0…

C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

安装达梦数据库后,使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类,主要代码如下: SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){DbType DbType.Dm,ConnectionString "Serverlocalhost; User Id…

Nestjs 全局拦截器

一、拦截器 拦截器作用: 在函数执行之前、之后绑定额外的逻辑转换函数的返回结果转换从函数抛出的异常扩展基本函数的行为根据所选条件重写函数 期望接口返回一个标准的json格式,利用拦截器对数据做全局的格式化 {code: "200",data: [],mess…

搭建通讯猫类似的TCP服务端

最近需要一个公网的TCP服务端平台来做4G模组的发包测验,通讯猫(http://www.tongxinmao.com/App/Detail/id/1)貌似使用不了,就干脆在自己的腾讯云上搭建了简单的TCP服务端。 我们搭建可以在服务器上使用Python、Java、C#等语言自行编写服务器程序。 目前是…

AWS 专题学习 P10 (Databases、 Data Analytics)

文章目录 专题总览1. Databases1.1 选择合适的数据库1.2 数据库类型1.3 AWS 数据库服务概述Amazon RDSAmazon AuroraAmazon ElastiCacheAmazon DynamoDBAmazon S3DocumentDBAmazon NeptuneAmazon Keyspaces (for Apache Cassandra)Amazon QLDBAmazon Timestream 2. Data & …

如何将iPad连接到USB设备?这里提供了详细步骤

本文介绍了如何将iPad连接到USB设备。说明适用于所有版本的iPad。 将USB设备与带USB-C端口的iPad一起使用 以下iPad具有USB-C端口: 自2018年第三代以来的iPad Pro机型 自2020年第四代以来的iPad Air机型 自2021年第六代以来的iPad迷你机型 自2022年以来的第十代iPad机型 这些…

QT+VS实现Kmeans++

1、Kmeans的原理如下: (1)首先选取样本中任一数据点作为第一个聚类中心; (2)计算样本每一个数据点至现所有聚类中心的最近距离,并记录下来; (3)逐一挑选所…

2024.1.28 GNSS 学习笔记

1.基于 地球自转改正卫地距 以及 伪距码偏差 重构定位方程: 先验残差计算公式如下所示: 2.观测值如何定权?权重如何确定? 每个卫星的轨钟精度以及电离层模型修正后的误差都有差异,所以我们不能简单的将各个观测值等权…

qemu 抓取linux kernel vmcore

一、背景 在qemu调试linux kernel时 有时我们会遇到dump 情况,这时可以通过gdb 方式连接分析dump, 但实际中我们用得更多的是离线dump 分析,分析的文件通常是vmcore(linux kernel panic 生成的coredump文件)或者ramdu…

算法沉淀——二分查找(leetcode真题剖析)

算法沉淀——二分查找 01.二分查找02.在排序数组中查找元素的第一个和最后一个位置03.搜索插入位置04.x 的平方根05.山脉数组的峰顶索引06.寻找峰值07.寻找旋转排序数组中的最小值08.LCR 173. 点名 二分查找(Binary Search)是一种在有序数组中查找特定元…

wordpress找不回密码怎么办?4种方法设置新密码

有些WordPress站长太久不登录后台了,所以就忘记了管理员登录密码,这种情况我们应该怎么找回密码呢?或者设置一个新密码呢?下面boke112百科就跟大家分享4种方法设置WordPress新密码。 方法一、登录页面的“忘记密码?”…

在Windows上安装与配置Apache服务并结合内网穿透工具实现公网远程访问本地内网服务

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

Linux服务器配置与管理(第二次实验)

实验目的及具体要求 目的 1.掌握基于命令行的文件操作 2.掌握基于命令行的目录操作 3.掌握用户账户的命令行操作 4.掌握组账户的命令行操作 5.熟悉磁盘分区操作 6.掌握调整优先级的方法 具体要求 1.掌握基于命令行的文件和目录操作 ①创建测试目录 ②创建文件 ③复…

代码随想录算法训练营DAY6 | 哈希表(1)

DAY5休息一天,今天重启~ 哈希表理论基础:代码随想录 Java hash实现 :java 哈希表-CSDN博客 一、LeetCode 242 有效的字母异位词 题目链接:242.有效的字母异位词 思路:设置字典 class Solution {public boolean isAnag…

设计模式:简单工厂模式

工厂设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。 …

腾讯云幻兽帕鲁服务器创建教程,附4核16G服务器价格表

腾讯云0基础搭建帕鲁服务器4C16G14M服务器稳定无卡顿,先下载SteamCMD,并运行;然后下载Palserver,修改服务ini配置,启动PalServer,进入游戏服务器。腾讯云百科txybk.com分享腾讯云创建幻兽帕鲁服务器教程&am…

LabVIEW准分子激光器控制系统

LabVIEW准分子激光器控制系统是为了实现准分子激光光源在工业、医疗和科研领域的应用集成及其功能的扩展。系统由PC端和激光器端两部分构成,通过光隔离的RS232通讯连接,以实现稳定可靠的控制与通信。 系统主要由微控制单元(MCU)主…

【算法专题】动态规划综合篇

动态规划7.0 1. 最长公共子序列2. 不相交的线3. 不同的子序列4. 通配符匹配5. 正则表达式匹配6. 交错字符串7. 两个字符串的最小ASCII删除和8. 最长重复子数组 1. 最长公共子序列 题目链接 -> Leetcode -1143.最长公共子序列 Leetcode -1143.最长公共子序列 题目&#xf…

堆的概念,性质及其实现

1.堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&#x…

Java RC4加密算法

一、RC4加密算法 在密码学中&#xff0c;RC4&#xff08;来自Rivest Cipher 4的缩写&#xff09;是一种流加密算法&#xff0c;密钥长度可变。它加解密使用相同的密钥&#xff0c;因此也属于对称加密算法。 百度百科 - RC4&#xff1a;https://baike.baidu.com/item/RC4/34545…