H.265的参考帧管理

2023-11-08

原文地址:https://blog.csdn.net/VioletHan7/article/details/81384424


HM参考帧管理分析

HEVC采用了参考帧集(RPS)的技术来管理已解码的帧,用作后续图像的参考。与之前的视频编码标准中参考帧管理策略不同的是,HEVC中的RPS技术,通过直接在每一帧开始的片头码流中传输DPB中各个帧的状态变化,而H.264/AVC中的滑动窗和MMCO(Memory Management Control Opreation) 这两种参考帧管理技术,是通过传输每一个片的DPB的相对变化来实现,一旦发生数据丢失,将会有持续的影响。

H.265帧间预测帧分为:低延时P帧、低延时B帧,随机接入B帧。

  • P帧为单向预测帧–前向预测,但是P帧中的编码单元可以为帧间预测块(前向预测)也可以为帧内预测块。P帧一般有4个参考帧,编码器根据率失真代价准则,在4个参考帧中搜索当前块的匹配块;
  • B帧采用双向预测,B帧中的编码单元可以采用帧间预测(前向预测、后向预测、双向预测都可以),也可以是帧内预测。B帧一般有2个参考帧列表(List0、List1),一般每个参考列表都有两个参考帧。List0为前向参考列表,存放都是当前帧前面的帧(即POC小于当前帧的POC),List1为后向参考列表,存放当前帧后面的帧(即POC大于当前帧的POC),有时候也有前面的帧,但是对于LowDelay B则不然,List0和List1存放的都是当前帧前面的帧,这是为了适应低延时 的要求

1、参考帧管理的基本知识

H.263 H.264/AVC HEVC中都采用了多帧参考技术,来提高帧间预测的准确性。解码已经完成的图像,被缓存在DPB中,供后续帧用作参考图像,因此,标准需要对DPB中的图像进行管理。DPB中的每一个图像,有3种状态“Unused for reference”、“Used for short-term reference”和“Used for long-term reference”,这3种状态之间的转化,是通过解码图像标记过程进行控制的。
H.264/AVC中采用了滑动窗和MMCO两种方式。滑动窗管理方式,是以DPB可以存放的帧数为窗口,随着当前解码的图像,以先入先出的方式,将新的解码图像移入,将超出窗口的解码图像移出,因此,DPB中保存的是最近解码的多个图像。MMCO是通过在码流中传输控制命令,完成对DPB中图像的状态标记的,它可以将一个“Used for reference(short-term or long-term)”标记为“Unused for reference”,也可以将当前帧或者“Used for short-term referene”的帧标记为“Used for long-term reference”等。

2、HEVC参考帧集技术(RPS)

为了增强参考帧管理的抗差错能力,HEVC采用了参考帧集技术,它通过直接在每一帧开始的片头码流中传输DPB中各个帧的状态变化,将当前帧以及后续帧可能用到的参考帧在DPB中都进行描述,描述以POC作为一帧的身份标识。因此,它不需要依赖于前面帧的DPB状态,从而增强了抗差错性能。简言之,每帧的第一个片中包含一个RPS,它是由一组“δ POC”(当前帧POC与其POC的差)和“是否用作当前帧/后续帧的参考”这些标识信息组成,DPB根据片头中RPS的描述,对参考帧进行标记。例如,POC=4的B帧,只能参考POC=0的I帧,其RPS为{(δPOC=3,UsedByCurPic)};POC=3的B帧,可以参考POC=4和POC=2的两个B帧,其RPS为{(δPOC=-1,UsedByCurPic),(δPOC=1,UsedByCurPic)};若POC=0的I帧,不再出现在RPS中,则它被标记为“Unused for reference”,然后从DPB中移除。

参考帧RPS更新:

  1. 在解码POC=1的帧前,DPB中3个参考帧,分别是POC=0,4,2的帧;
  2. 当接到POC=1的片头中传输的RPS信息(描述了解码POC=1的帧时,DPB的状态,即POC=0和2的帧用作当前帧的short-term参考,POC=4的帧用作后续帧的参考)后,对DPB中的帧进行状态标记,将POC=0和2的帧标记为“Used for short-term reference”,并且保留POC=4的帧,以用作后续参考;然后解码POC=1的帧,解码完成,将POC=1的帧放入DPB中。此时,DPB中有POC=0,4,2,1四帧;
  3. 当接收到POC=3的片头中传输的RPS信息(描述了解码POC=3的帧时,DPB中,POC=2和4的帧用作当前帧的short-term参考,POC=0的帧用作后续帧的参考,POC=1的帧不再用作参考)后,对DPB中的帧进行状态标记,将POC=2和4的帧标记为“Used for short-term reference”,将POC=1的帧移出DPB,然后解码POC=3的帧,解码完成,将其放入DPB中。此时,DPB中有POC=0,4,2,3四帧;

3、RPS预测

从上述描述中可以看出,在用POC值对参考帧进行身份描述时,不同帧的RPS中的多个δPOC值的差值是相同的,例如上述中,POC为1的帧的RPS描述中,δPOC值分别是{1,-3,1},POC为3的帧的RPS描述中,δPOC值分别为{3,-1,1}。因此不同帧的RPS描述中,δPOC值仍然可以进行预测,即δRPS=δPOC(RPScurr)-δPOC(RPSref),以进一步减少传输代价。

4、HM中的多参考帧配置

参考软件HM在RA配置中采用了Hierachical-B的GOP结构,参考帧数目为4(或者3),但在编码配置中,活动的参考帧数目为2,即只对最近的两个参考帧进行运动估计和运动补偿。与此类似,在LowDelay配置下,参考帧数目为4,活动的参考帧数目为4

5、HM多参考帧优化选择

从前分析中,HEVC及其参考软件HM都支持多参考帧技术,HM中可以配置4或者2个活动参考帧,这使得每个PU的运动估计的复杂度成倍增加。HEVC参考软件中仍然采用传统的块匹配技术进行运动矢量的搜索,并选择最佳的预测方向和参考帧索引。其过程可以简单总结为一下流程:

  1. ListX=0开始(即前向预测),将参考帧索iRefIndex设置为0;
  2. 在当前iRefIndex下,生成高级运动矢量预测(AMVP)候选列表,并进行AMVP索引的选择;
  3. 以 2 中选中的AMVP为起始点,在当前iRefIndex帧内,以SA(T)D+λpred*Bits为代价进行运动估计,得到最佳的运动矢量和最小代价;
  4. 设置iRefIndex=iRefIndex+1,重复步骤 2 到 3,得到当前iRefIndex下的最佳运动矢量和最小代价;直到参考帧队列ListX中的所有标记为“Used for reference”的参考帧都完成最佳运动矢量和最小代价计算,并从中挑选出代价最小的iRefIndex作为当前预测方向下,最佳的参考索引;
  5. ListX=1(即后向预测),重复 2 到 4,并挑选代价最小的iRefIndex作为当前预测方向下的最佳参考索引;
  6. 固定以List0(或List1)中最佳的参考索引和运动矢量为双向预测中的其中之一,对List1(或者List0)中所有参考索引进行 2 到 4 步骤,并找到最佳的双向预测参考索引和运动矢量;
  7. 比较前向预测、后向预测、以及双向预测的最小代价,选择出最佳的预测方向;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H.265的参考帧管理 的相关文章

  • k8s - kubelet启动失败处理记录

    测试环境好久没有使用了 启动kubelet发现失败了 查看状态 每看到具体报错点 root node1 systemctl status kubelet kubelet service kubelet The Kubernetes Node
  • 一条SQL语句实现查询成绩-60、60~80、+80的人数的方法

    总结一下学到的一个SQL方法 下面我创建一个数据表 SELECT FROM students 可以看到数据表中存在六条数据 如果使用传统的查询方法 我们需要三条SQL语句 分别是 select count from students whe
  • 百度云盘登录二维码刷不出来

    1 我尝试安装最新的百度云盘 没有作用 不是云盘的问题 2 包括登录的时候需要输入验证码 也没有刷出来 我应该就想到是ie浏览器的问题 在浏览器设置 删除重置信息后解决 win R运行 inetcpl cpl 点击上方的高级 点击下面重置

随机推荐

  • 【转】盘点 MySQL 慢查询的 12 个原因

    转 https mp weixin qq com s gz wQPsaerf4k7ymG8DiDA https mp weixin qq com s h9jWeoyiBGnQLvDrtXqVWw https mp weixin qq com
  • [web][攻防世界]

    web 攻防世界 xff referer 题目 过程 总结 题目 过程 题目 过程 总结 题目 https adworld xctf org cn challenges details hash cd168887 2438 4370 aea
  • [C语言]文件操作

    目录 1 文件 1 1程序文件 1 2数据文件 2 文件名 3 文件的打开和关闭 3 1文件指针 3 2文件的打开和关闭 4 文件的顺序读写 4 1fgetc 4 2fputc 4 3fgets 4 4fputs 4 5fscanf 4 6
  • 编译CGAL

    CGAL是做计算机图形进行几何处理必不可以的库 CGAL http www cgal org 主页上可以进行下载 最新版本4 6版本 在Windows下安装可以下载对应的CGAL安装包 下载的CGAL包由三部分组成 CGAL核心库 附带的e
  • C语言面试题:与malloc(0)相关的问题,附答案和详解的代码

    把代码过程较好的一些代码珍藏起来 下面的代码是关于C语言面试题 与malloc 0 相关的问题 附答案和详解的代码 include
  • 随机森林算法Matlab实现

    随机森林算法Matlab实现 瞎BB 代码 计算当前自身gini系数 求最优划分点及其gini系数 对data中按decision属性值从小到大排列 生成结点 生成随机采样样本数据 生成决策树 评价函数 随机森林 样本决策函数 正确率计算函
  • 数字心电图仪综合系统设计与实现verilog

    求以FPGA为控制核心 完成模拟端的设计 实现一个数字心电图仪综合设计系统 主要包括传感器驱动 电压放大 滤波器 模数转换 数字处理显示模块 系统构成如下图所示 该设计包括工程代码和报告 timescale 1ns 1ps module e
  • Java毕设 SSM 毕业设计管理系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 2 1 系统开发流程 3 3 2 教师登录流程 3 3 3 系统操作流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位
  • 单引号、双引号、倒引号

    单引号 单引号在shell中用于字符串的输出 在单引号里的字符串 所有的字符都被认为是普通的字符 即不会转译特殊字符 演示示例如下 root Centos8 echo I am a boy I am a boy root Centos8 e
  • win+e快捷键失效或恢复的解决方案

    新建xxx reg文件 加入4个注册表项 Windows Registry Editor Version 5 00 HKEY CLASSES ROOT Folder shell explore command DelegateExecute
  • 为什么根域名服务器只有 13 台?

    今天聊个有意思的话题 世界上共有 13 个根域名服务器 其中主根域名服务器是在美国 那美国有没有可能通过根域名服务器掐断中国的互联网呢 在说结论之前 我们先来了解 DNS到底是怎么工作的 为什么根域名服务器只有 13 台 美国可以让中国从互
  • RabbitMQ —— 初窥门径

    前言 RabbitMQ作为当下主流的消息中间件之一 无疑是我们Java后端开发技术成长路线的重要一环 在这篇文章中荔枝将会梳理入门RabbitMQ的知识 文章涉及RabbitMQ的基本概念及其环境配置 荔枝的RabbitMQ是在Docker
  • update_configure.sh

    bin bash Author DT Date 20190725 游戏目录 RELEASE home sealgull sealgullgame release RE TBX RELEASE tbx RE XML RELEASE Confi
  • ES嵌套(Nested)文档使用

    1 nested介绍 nested 嵌套对象 用于数组中的元素是对象的 该nested类型是object数据类型的专用版本 它允许可以彼此独立地查询它们的方式对对象数组进行索引 其他相关ES操作及介绍请参考 ElasticSearch6 5
  • Symbol.iterator的理解

    es6中有三类结构生来就具有Iterator接口 数组 类数组对象 Map和Set结构 var arr 1 2 3 4 let iterator arr Symbol iterator console log iterator next v
  • MySQL 安装指南

    本教程教你如何在基于 Ubuntu 的 Linux 发行版上安装 MySQL 对于首次使用的用户 你将会学习到如何验证你的安装和第一次怎样去连接 MySQL Sergiu MySQL 是一个典型的数据库管理系统 它被用于许多技术栈中 包括流
  • c++ 写x64汇编 5参数_V8 引擎如何生成 x64 机器码——以浮点数加法为例

    摘要 本文将主要从以下两个方面介绍 V8 引擎如何在 Intel x64 平台下生成浮点数加法的机器码 首先 从 C 语言和 x64 汇编的角度举例说明为什么浮点数加法的运算结果不准确 然后 查看 V8 引擎中生成浮点数加法机器码相关的源码
  • Qt FTP地址下载中文乱码问题

    Qt FTP地址下载中文乱码问题 前言 一 为什么乱码 二 解决办法 1 使用QUrl的编码和解码函数 2 使用时遇到的其他问题 总结 前言 最近在做Qt项目 使用FTP下载 需要存储ftp地址 ftp地址中文直接复制出现乱码如下 正常 f
  • 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)

    目录 一 集合容器概述 1 什么是集合 2 集合的特点 3 集合和数组的区别 4 使用集合框架的好处 5 常用的集合类有哪些 6 List Set Map三者的区别 7 集合框架底层数据结构 8 哪些集合类是线程安全的 9 Java集合的快
  • H.265的参考帧管理

    原文地址 https blog csdn net VioletHan7 article details 81384424 文章目录 HM参考帧管理分析 1 参考帧管理的基本知识 2 HEVC参考帧集技术 RPS 3 RPS预测 4 HM中的