当前位置: 首页 > news >正文

AV1技术学习:Reference Frame System

一、Reference Frames

AV1 Codec 允许在其解码的帧缓冲区中最多允许保存 8 帧。对于一个编码帧,可以从解码的帧缓冲区中选择任意 7 个帧作为它的参考帧。编码端可以通过比特流显式地传输参考帧索引,范围从 1到 7。原则上,参考帧索引 1-4 为当前帧显示顺序之前的帧,而索引 5-7 则为当前帧显式顺序之后的帧。对于双向融合(bidirectional compound)预测,可以将两个参考帧组合起来生成预测值。

如果两个参考帧在当前帧之前或之后,这被认为是单向融合预测。实际上,编解码器可以将参考帧索引链接到被解码帧缓冲区中的任何帧,通过此方法可以保证它在两边没有足够的参考帧时填充所有参考帧索引。

运动估计理论上,通常认为单向融合预测不如双向融合预测准确。因此,允许的单向参考帧组合仅限于四对,即(1,2),(1,3),(1,4)和(5,7),但双向情况下的所有12种组合都被支持。这一限制将融合参考帧组合的总数从21个减少到16个。假设当前帧两侧的参考帧数量按照显示顺序上基本平衡,双向预测可能会提供更好的预测,当大多数参考帧位于当前帧的同一侧时,距离当前帧更近的参考帧可能和当前帧更相关。

当一帧编码完成后,编码器可以决定将该帧替换解码帧缓冲区中的哪个参考帧,并在比特流中显式地发出信号。此外,允许不将当前帧加入到缓冲区中,及可以不更新解码帧缓冲区。这对于某些帧与相邻帧不太相关的高动态视频特别有用。

二、Alternate Reference Frame

Alternate Reference Frame (ARF) 被编码并存储在已解码的帧缓冲区中,作为后续编码帧的参考帧,可以选择不显示。为了传输显示帧,AV1编解码器既可以编码一个新帧,也可以直接使用已解码帧缓冲区中的帧——这被称为“显示现有帧”。稍后直接显示的ARF可以有效地用于在金字塔编码结构中对未来的帧进行编码。

此外,编码器还可以选择合成一帧,该帧可以潜在地减少若干显示帧之间的集体预测误差。一个例子是沿着连续的原始帧的运动轨迹应用时间滤波来构建一个ARF,它保留了共同的信息,并且在很大程度上去除了每一帧的采集噪声。

编码器通常使用相对较低的量化步长对公共信息(即ARF)进行编码,以优化整体率失真性能。这里的一个潜在的缺点是,这会导致解码器需要处理额外的帧,这可能会扩大某些硬件的吞吐量。为了平衡压缩性能和解码器吞吐量,每个级别定义定义了允许解码采样率的上限,即最大解码率。由于解码的采样率是根据可显示帧和不用作“显示现有帧”的ARF中的样本总数计算的,因此它有效地限制了允许的合成ARF帧的数量。

三、Frame Scaling

AV1编解码器支持将原始帧缩放到较低的分辨率进行压缩,并将重建帧重新缩放到原始帧分辨率。

该方法对于一些帧过于复杂而无法压缩时适应目标流带宽范围时,特别有用。缩放系数限制在8/16-15/16的范围内。

首先将重建帧线性缩放到原始大小,然后使用环路重建滤波器(loop restoration filter )作为后处理阶段。线性上采样滤波器和环路恢复滤波器操作都是标准定义的。为了保持一个经济有效的硬件实现,除了常规帧解码的大小之外,不需要额外的行缓冲区费用,重新缩放过程被限制在水平方向上。解码帧上采样和滤波后的帧将作为编码后续帧的参考帧。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker基础镜像
  • OCR识别采购单小程序管理助手
  • 大语言模型-文本向量模型评估基准 MTEB
  • centos系统mysql数据库差异备份与恢复
  • 【Python Tips】判断两个list是否存在相同元素——集合set的使用
  • SQL-REGEX-常见正则表达式的使用
  • python黑马笔记
  • Android C++系列:Linux信号(三)
  • TCP客户端connect断线重连
  • macOS 10.15中屏蔽Microsoft Edge浏览器的更新提示
  • C# 匿名函数与Lambda表达式
  • GitHub 详解教程
  • 密码错误springboot也正常启动了
  • 基于重要抽样的主动学习不平衡分类方法ALIS
  • EXCEL 排名(RANK,COUNTIFS)
  • @angular/forms 源码解析之双向绑定
  • CSS盒模型深入
  • JavaScript新鲜事·第5期
  • JavaScript异步流程控制的前世今生
  • js中的正则表达式入门
  • nodejs调试方法
  • PHP面试之三:MySQL数据库
  • php中curl和soap方式请求服务超时问题
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Twitter赢在开放,三年创造奇迹
  • Xmanager 远程桌面 CentOS 7
  • 程序员该如何有效的找工作?
  • 初探 Vue 生命周期和钩子函数
  • 服务器之间,相同帐号,实现免密钥登录
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 技术胖1-4季视频复习— (看视频笔记)
  • 近期前端发展计划
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 鱼骨图 - 如何绘制?
  • Nginx实现动静分离
  • ​520就是要宠粉,你的心头书我买单
  • ​渐进式Web应用PWA的未来
  • ​香农与信息论三大定律
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1)虚拟机的安装与使用,linux系统安装
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (编译到47%失败)to be deleted
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (全注解开发)学习Spring-MVC的第三天
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)大道至简,职场上做人做事做管理
  • .CSS-hover 的解释
  • .form文件_一篇文章学会文件上传
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Micro Framework初体验