AV1:帧间预测(一)参考帧管理

​AV1中帧类型


在H.26X系列标准中,根据帧允许的预测模式可以将帧分为I帧、P帧和B帧,根据帧在码流中前后的参考关系又可以分为IRAP、RADL等。AV1也类似地将帧分为4种类型,在码流中用frame_type来标识帧类型。

KEY_FRAME:相当于IDR帧;

INTER_FRAME:相当于265中的P/B帧;

INTRA_ONLY_FRAME:相当于265中的I帧;

SWITCH_FRAME(S-FRAME):当码流在不同分辨率间切换时可以插入S-FRAME来代替部分IDR帧,S-FRAME可以参考不同分辨率的帧;

AV1中帧的显示顺序


由于后向参考的存在使得帧的编码顺序和显示顺序可能不同,在H265中为了按正确的顺序播放视频,使用POC来控制解码后帧的显示。而AV1中没有POC,为了按正确顺序播放帧AV1采用show_frame / showable_frame / show_existing_frame机制来完成这一功能。这三个语法元素都写在frame_header中。

show_frame:当前帧解码完后是否立刻输出。对于解码顺序在播放顺序前的帧该值为0。

showable_frame:这个标志只在show_frame=0时有意义,它是指当前帧是否可以显示。AV1有一个ARNR技术,它会对GPB帧进行一些时域滤波产生ARF帧,ARF帧只用作参考而不显示。

show_existing_frame:输出图像是否已经在DPB中。这个语法元素是为了显示那些延迟输出的图像。

frame_to_show_map_idx:当show_existing_frame=1时输出对应帧。

参考帧管理

AV1中解码后的帧放入DFB(Decoded Frame Buffer)中,其作用类似于265中的DPB。DFB最多只能放8帧,其中7帧可以作为参考帧。AV1为这7个参考帧分别命名,

参考帧名称

含义

LAST_FRAME

POC小于当前帧的图像中最近的帧

LAST2_FRAME

POC小于当前帧的图像中第二接近的帧

LAST3_FRAME

POC小于当前帧的图像中第三接近的帧

GOLDEN_FRAME

POC小于当前帧的I帧或者GPB帧,类似于长期参考帧

BWDREF_FRAME

POC大于当前帧的图像中最接近当前帧的

ALTREF2_FRAME

POC大于当前帧的图像中第二接近当前帧的

ALTREF_FRAME

POC大于当前帧的图像中离当前帧最远的图像

注意,上面参考帧和当前帧的位置关系只是建议不是必须的,例如ALFREF_FRAME的POC可以小于当前帧。

AV1中参考帧管理涉及两个方面,一个是DFB管理,一个是当前帧如何在DFB中找到自己的参考帧。

DFB管理


更新类型Update Type

update type不是编码标准的一部分,它是编码器为了进行码率控制和参考帧管理而引入的,包括KF_UPDATE, LF_UPDATE, GF_UPDATE, ARF_UPDATE, OVERLAY_UPDATE,  INTNL_OVERLAY_UPDATE, INTNL_ARF_UPDATE等7种。frame_update_type在编码前由帧类型和其在GOP中的位置决定。

更新类型

备注

KF_UPDATE

IDR

LF_UPDATE

不被其他帧参考的B帧

ARF_UPDATE

GPB

INTNL_ARF_UPDATE

层级高于GPB帧,低于普通B帧的帧

INTNL_OVERLAY_UPDATE

参考GPB,同时被其他B帧参考的图像的延迟输出帧

OVERYLAY_UPDATE

GPB的延迟输出帧

GF_UPDATE

DFB更新过程

AV1通过语法元素refresh_frame_flags 来管理DFB状态。refresh_frame_flags 是一个8比特数据,每一位对应DFB中的一个位置,某位置1表示当前帧解码后替换DFB中的该帧。

DFB具体更新过程为:

1、每帧图像编码前根据帧类型和其在GOP中的位置决定更新类型frame_update_type。

2、DPB中的帧根据和当前帧的位置关系等被分为三类:arf_stack、lst_stack、gld_stack。每类包含对应类型的参考帧。

1、当前帧编码完后检查DFB是否填满,若未填满则将当前帧加入DFB。若DFB已填满则根据每类帧的数量和类型选择最老的一帧替换掉。并根据该帧在DFB中的位置计算refresh_frame_flags 。

参考列表构建:

DFB构建完毕后当前帧需要使用DFB中的帧构建自己的参考列表,av1规定参考列表只能包含7帧。

  1. DPB中的帧被分为三类:arf_stack、lst_stack、gld_stack。

  2. 确定后向的参考帧,将arf_stack中的POC最大的帧作为ALTREF_FRAME(这一帧一般是当前GOP的GPB);如果alt_stack中还有其他帧,则第0帧作为BWDREF_FRAME,第1帧作为ALTREF2_FRAME。若alf_stack中只有1帧则将其作为BWDREF_FRAME。

  3. 确定前向的参考帧,将lst_stack中的第0帧作为LAST_FRAME,第1帧作为LAST2_FRAME,如果lst_stack中还有帧则将第2帧作为LAST3_FRAME。

  4. 确定GOLDEN_FRAME,将golden_stack中的第0帧作为GOLDEN_FRAME,若golden_stack中还有帧且BWDREF_FRAME或者ALTREF_FRAME或者LAST3_FRAME未被指定,则用第1帧填充。

  5. 从后向前检查所有帧类型是否都已经被指定,如果还有一些帧还没有被指定,那么它分别在arf_ref、last_ref和golden_ref队列中寻找仍然没有被分配的帧,并将它指定为所需要的帧类型。

  6. 如果有些参考帧类型仍然没有被指定,那就将golden_ref中的第0帧指定为该类型的参考帧。

  7. 填充之后所有类型的参考帧都是可用的。编码器会记录下所有类型的参考帧在DPB中的位置,并把结果写入码流。这样解码器拿到DFB之后立刻就可以组合出参考帧队列。

  8. 这些参考帧类型有可能会有重复。在实际编码时需要进行去重,避免重复搜索。

参考列表如何在码流中传输?构建完参考列表后需要在码流中写入每个参考帧对应在DFB中的位置,相关语法元素为ref_frame_idx

i:0-6,0表示LAST_FRAME,1表示LAST2_FRAME,2表示LAST3_FRAME,3表示GOLDEN_FRAME,4表示BWDREF_FRAME,5表示ALTREF2_FRAME,6表示ALTREF_FRAME。那ref_frame_idx[LAST_FRAME]=5 就表示DPB 下标为5的位置上存在的帧(ref_frame_map[5])就是当前帧的LAST_FRAME。

ref_frame_idx的值有2种传输方式,当frame_refs_short_signaling=0的时候,所有的参考值都是显示传递的,也就是直接通过码流读取到的,当frame_refs_short_signaling=1的时候,只有last_frame_idx和gold_fame_idx是显示传递的,其他参考值则是通过计算得到的。

 ARF参考帧和overlay帧


ARF(Alternate Reference Frame)帧是一类特殊参考帧,它会被编码并在DFB中存储用于其他帧的帧间预测参考,但是不会在解码端显示。它对应的showable_frame语法元素值为0。

ARF帧往往是对原始帧们进行时域滤波处理,以降低原始帧里的噪声而得到的帧,用它作为参考帧可以提高视频编码的性能。

上图是含有ARF的AV1编码结构,这里的GOP大小4,灰色框表示的是需要显示的帧,ARF不需要显示用白色表示。

从上图可以看出,每一帧在显示之前需要完成解码,且ARF帧的解码顺序很靠前。这是因为通常ARF帧是时域滤波处理得到的,而时域滤波处理一般只对低layer的帧进行,这也意味着,在一个GOP里面并不是谁都可以成为ARF帧。

因为ARF帧解码后不显示,这会导致编码器送入的帧会比播放端的帧多,这时就需要overlay帧和ARF帧配合使用,这个Overlay它会以(相同帧号的)ARF作为参考帧进行预测编码得到压缩码流,当在解码端解码以后,可以显示它的画面,而且它自身不会被用来作参考帧。

感兴趣的请关注微信公众号Video Coding

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

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

相关文章

HTB Editorial

Editorial User Nmap ┌──(kali㉿kali)-[~/…/machine/SeasonV/linux/Editorial] └─$ nmap -A 10.129.24.67 -T 4 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-16 21:54 EDT Nmap scan report for 10.129.2…

C#使用轻量级深度学习模型进行车牌颜色识别和车牌号识别

看到这个文章时候请注意这个不涉及到车牌检测,这个仅仅是车牌颜色和车牌号识别,如果想涉及到车牌检测可以参考这个博客:[C#]winform部署yolov7CRNN实现车牌颜色识别车牌号检测识别_c# yolo 车牌识别-CSDN博客 【训练源码】 https://github.…

DBeaver windows下载、安装与连接数据库

下载 官网下载地址:https://dbeaver.io/download/ 安装 1、双击安装 2、下一步…… 选择所有用户 3、组件选择 配置连接数据库 下载驱动

【记录44】【案例】echarts地图

效果&#xff1a;直接上效果图 环境&#xff1a;vue、echarts4.1.0 源码 // 创建容器 <template><div id"center"></div> </template>//设置容器大小&#xff0c;#center { width: 100%; height: 60vh; }这里需注意&#xff1a;笔者在echar…

Git的下载安装及可视化工具小乌龟

一、 Git 的下载 第1步&#xff1a;下载Git&#xff0c;下载地址&#xff1a;Git for Windows 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#…

什么是云恶意软件攻击,如何进行有效的防护

一切都在向云转移。云端数据越多&#xff0c;恶意攻击者攻击云平台的兴趣就越大。 攻击者使用恶意软件窃取数据并破坏服务。虽然恶意软件在云端可能不像在个人电脑上那么普遍&#xff0c;但大行其道的云恶意软件令人担忧。此外&#xff0c;组织不像您预料的那样意识到这点。 …

鸿蒙开发网络管理:【@ohos.request (上传下载)】

上传下载 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import request from ohos.request;限制与约束 默认支持https&#xff0c;如果要支持http&#xff0c;需要在config.json里…

所以spring mvc异常处理工作原理是啥

文章目录 spring mvc异常处理&#xff08;源码分析&#xff09;概述原理&#xff08;源码角度&#xff09;模拟debug前期提要分析4个map4个map的初始化为什么需要基于mappedMethods缓存 总结一下 spring mvc异常处理&#xff08;源码分析&#xff09; 概述 spring mvc有下面三…

力扣每日一题 6/18 字符串/模拟

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2288.价格减免 【中等】 题目&#xff1a; 句子 是由若干个单词组成的字符…

‘引爆增长·赋能十堰’第一届学习峰会在十堰东方汉宫国际酒店成功举办

‘引爆增长赋能十堰’第一届学习峰会在十堰东方汉宫国际酒店成功举办 2024年6月 17 至18 日&#xff0c;为期两天的“引爆增长赋能十堰”第一届学习交流峰会在湖北十堰东方汉宫国际酒店一号盛大举行&#xff0c;学习峰会现场&#xff0c;来自十堰地区及邻边地市的上百位实体企业…

netty服务端与客户端的启动流程

如图所示&#xff0c;右侧是服务端Server&#xff0c;左侧是客户端Client 要点说明&#xff1a; 1.在Server中&#xff0c;在NioEventLoopGroup()中&#xff0c;会有1个selector和线程在不断循环&#xff0c;等待是否有accept事件&#xff0c;在accept事件发生后&#xff0c;才…

四款让人大开眼界的高质量软件,个个实力超群,使用起来爱不释手

电脑里的Windows软件&#xff0c;简直多得数不清&#xff0c;啥都有。 像那个电子表格、写文章的、玩游戏聊天的、还有修图的&#xff0c;这些都太常见了&#xff0c;它们确实给咱们生活带来方便&#xff0c;但有时候也会让那些不太懂电脑的小伙伴们头疼不已。 讲真&#xff0…

重学java 73.设计模式

本想送你一本沉思录&#xff0c;可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern)&#xff0c;是一套被反复使用、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…

全网最全 Kimi 使用手册,看完 Kimi 效率提升 80%

在当前AI文字大模型领域&#xff0c;ChatGPT4.0无疑是最强大。然而&#xff0c;最近最火爆的大模型非国产Kimi莫属。 相较于其它大模型&#xff0c;Kimi 最大的优势在于&#xff0c;超长文本输入&#xff0c;支持200万汉字&#xff0c;是全球范围内罕见的超长文本处理工具&…

在Linux系统中安装凸语言

凸语言在2023国产编程语言蓝皮书中的介绍如下&#xff1a; 凸语言gitee页面&#xff1a;凸语言: tu-lang 是一种动态类型编译型的通用编程语言, 已实现自举 (gitee.com) 使用git克隆源码&#xff1a; git clone https://github.com/tu-lang/tu.git 安装凸语言环境&#xff1a…

文件系统崩溃一致性、方法、原理与局限

前言 先提几个问题&#xff1a;什么是文件系统崩溃一致性&#xff1f;为什么会出现文件系统崩溃一致性问题&#xff1f;有哪些方法可以解这个问题&#xff1f;它们各自又有哪些局限性&#xff1f; window系统电脑异常后会蓝屏、手机死机卡顿后我们会手动给它重启&#xff0c;大…

范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式

一、范式的作用 根据关系模式间属性的数据依赖来评价关系模式的好坏 以下我们将基于函数依赖的范围内来讨论范式 二、范式的定义 1、数据依赖满足一定约束的关系模式是范式 2、范式是符合某一级别的关系模式的集合&#xff0c;关系模式R为第几范式可记为 三、第一范式&am…

APP渗透、WIFI近源渗透之透明代理下的流量分析与嗅探

APP渗透、WIFI近源渗透之透明代理下的流量分析与嗅探 原文链接&#xff1a;https://xz.aliyun.com/t/14864 前言 在攻防中对APP进行渗透时可能会遇到代理及VPN的检测&#xff0c;以及在近源渗透时可能会有WIFI钓鱼的需求&#xff0c;而透明代理是一个很好的解决方案&#xf…

Autodesk Inventor 机械三维设计软件下载安装,Inventor 专业的三维制图软件

Inventor&#xff0c;它的一大亮点在于能够将三维尺寸、标注以及尺寸公差直接融入三维模型中&#xff0c;使得这些关键信息能够无缝对接下游应用&#xff0c;极大地提升了设计流程中的连贯性和一致性。 谈及Inventor的尺寸公差功能&#xff0c;更是让人赞不绝口。在复杂的设计过…

【html】用html5+css3+JavaScript制作一个计数器

目录 简介&#xff1a; 效果图&#xff1a; 源码&#xff1a; html: CSS: JS: 源码解析&#xff1a; 简介&#xff1a; 在日常生活当中很多事情都需要用到计数器特别是在体育运动当中&#xff0c;可以我们那么我们可不可以通过网页来制作一个计数器呢答案是肯定的我们需要利…