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

2024-06-19 04:04
文章标签 管理 预测 参考 av1

本文主要是介绍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

这篇关于AV1:帧间预测(一)参考帧管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073954

相关文章

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应