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协议笔记

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【国科大】应用矩阵理论 / 矩阵论习题与解答

【国科大】应用矩阵矩阵理论 / 矩阵论 习题与解答 包括“参考教材”,“平时习题”以及“上机题”,之后还会更新历年试卷 下载地址:https://mbd.pub/o/bread/ZZqXmZhw

Matlab基础语法

基础语法 %% Matlab基本的小常识 % (1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子;)表示不显示运行结果 a 3; a 5% (2)多行注释:选中要注释的若干语句,快捷键CtrlR % a 3; % a 5% (3)取消注释:选中要取消注释的语句,快捷键CtrlT % 我想要取…

idea创建golang项目

目录 1、设置环境 2、创建项目 3、设置项目配置 4、初始化项目 5、安装本项目的外部依赖包 6、运行项目 7、访问页面查看结果 1、设置环境 1 启用 Go Modules 功能go env -w GO111MODULEon 2. 阿里云go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct上述命…

Linux之系统安全与应用续章

一. PAM认证 1.2 初识PAM PAM是Linux系统可插拔认证模块。 1.2.1 PAM及其作用 1)PAM是一种高效且灵活便利的用户级别认证方式,也是当前Linux服务器普遍使用的认证方式。 2)PAM提供了对所有服务进行认证的中央机制,适用于本地…

matlab appdesigner系列-app程序打包成可执行exe程序

提供了3种打包方式: 1)Matlab App ,这种方式是生成Matlab内部使用的小程序,可添加到matlab app菜单栏中的常用程序中,也就是应用该程序之前,你必须安装了matlab; 2)Web app 3&…

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上,后续会慢慢把注释都给加上,先看代码了解个大概(待更新) 前置: RendererAPI.h: #pragma once namespace YOTO {enum class RendererAPI {None 0,OpenGL1};class Renderer {public:inline static R…

Electron桌面应用实战:Element UI 导航栏橙色轮廓之谜与Bootstrap样式冲突解决方案

目录 引言 问题现象及排查过程 描述问题 深入探索 查明原因 解决方案与策略探讨 重写样式 禁用 Bootstrap 样式片段 深度定制 Element UI 组件 隔离样式作用域 结语 引言 在基于 Electron 开发桌面应用的过程中,我们可能时常遇到各种意想不到的问题…

存储技术架构演进

一. 演进过程 存储技术架构的演进主要是从集中式到分布式的一种呈现,集中式存储模式凭借其在稳定性和可靠性方面的优势成为许多业务数据库的数据存储首选,顾名思义,集中式存储主要体现在集中性,一套集中式管理的存储系统&#xff…

day35WEB 攻防-通用漏洞XSS 跨站反射存储DOMBeef-XSS

目录 一,XSS 跨站-原理&分类&手法&探针 1、原理 2、分类 3、危害 二,反射型XSS 1,案例演示 三,存储型XSS 1,案例演示 四,DOM 型XSS 五,XSS 利用环境-XSS 平台&Beef-XS…

【Linux】压缩脚本、报警脚本

一、压缩搅拌 要求: 写一个脚本,完成如下功能 传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一; (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc…

美国将限制中国,使用Azure、AWS等云,训练AI大模型

1月29日,美国商务部在Federal Register(联邦公报)正式公布了,《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS(云服务)厂商在提供云服务时,要验证外国…

前端框架---Vue2学习教程(上)

从HTML到现在一路跟过来的小伙伴们,坚持固然不容易,但我相信大家已经学到了不少,那么我们开始马不停蹄的进入前端的框架吧,下面讲的是Vue2,大家继续加油鸭!!!! Vue2 Vu…

记录一次腾讯云服务器部署宝塔

一、查看是否安装 宝塔面板 bt 14 1 已安装会列出宝塔登录地址; 否则-bash: bt: command not found; 下载及安装命令(这条是目前最新的宝塔安装命令) yum install -y wget && wget -O install.sh http://download.bt.cn/…

关于在Tkinter + Pillow图片叠加中出现的问题

这段时间我一直在尝试对多图层图片进行一个叠加的操作,想用tkinter实现出来,先看错误 这里我其实已经选择了图片,但是发现是ValueError,我尝试断点检测但是也无动于衷,因为设置变量检测的时候发现变量并没有错误&…

粒子群算法求解港口泊位调度问题(MATLAB代码)

粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,它通过模拟鸟群或鱼群的行为来寻找最优解。在泊位调度问题中,目标是最小化所有船只在港时间的总和,而PSO算法可以帮助我们找到一…

腾讯云Linux(OpenCloudOS)安装tomcat9(9.0.85)

腾讯云Linux(OpenCloudOS)安装tomcat9 下载并上传 tomcat官网 https://tomcat.apache.org/download-90.cgi 下载完成后上传至自己想要放置的目录下 解压文件 输入tar -xzvf apache-tomcat-9.0.85.tar.gz解压文件,建议将解压后的文件重新命名为tomcat,方便后期进…

跟着pink老师前端入门教程-day13

品优购案例 一、品优购项目规划 1. 品优购项目整体介绍 项目名称:品优购 项目描述:品优购是一个电商网站,我们要完成 PC 端首页、列表页、注册页面的制作 2. 品优购项目学习目的 1. 电商类网站比较综合,里面需要大量的布…

com.alicp.jetcache.support.CacheEncodeException: Java Encode error 报错解决

目录 一、报错截图:二、报错原因三、解决方式 一、报错截图: Spring boot 整合 JetCache 使用Cached。报错如下: 二、报错原因 带有Cached注解的方法返回值对象没有实现序列化接口,如下图所示 三、解决方式 带有Cached注解的…

【docker】Docker-compose单机容器集群编排

一、Compose的相关知识 1. Compose的相关概念 Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。 Docker-Compose是一…

【AI_Design】Midjourney学习笔记

目录 后缀解析Promot合格使用prompt关键词描述 关键词化合作用关键词网站推荐 联合Chatgpt 后缀解析 –ar:宽高比设置–c:多样性设置(数值0-100,默认值0)–s:风格化设置(数值0-1000&#xff0c…