当前位置: 首页 > 编程日记 > 正文

(转)I 帧和 IDR 帧的区别

帧和 IDR 帧的区别:http://blog.csdn.net/skygray/article/details/6223358

IDR 帧属于 I 帧。解码器收到 IDR frame  时,将所有的参考帧队列丢弃 (用x264_reference_reset 函数实现——在 encoder.c 文件中) 。这点是所有 I 帧共有的特性,但是收到IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。由此可见,在编码器端,每发一个 IDR ,就相应地发一个  PPS&SPS_nal_unit

这是网上搜索到的一个答案,有一定参考价值吧。

先说明:所有的 IDR 帧都是 I 帧,但是并不是所有 I 帧都是 IDR 帧。就是说, IDR 帧是 I 帧的子集。 (我们程序中设定的是每250帧出现一个 IDR 帧)

我们用的程序是这样的:

/* ------------------- Setup frame context ----------------------------- */

/* 5: Init da ta dependant of frame type */

if ( h->fenc->i_type ==  X264_TYPE_IDR  )

{

/* reset ref pictures */

x264_reference_reset ( h );

i_nal_type      =  NAL_SLICE_IDR ;

i_nal_ref_idc = NAL_PRIORITY_ HIGHEST ;

i_slice_type = SLICE_TYPE_ ;

}

else if ( h->fenc->i_type ==  X264_TYPE_I  )

{

i_nal_type      =  NAL_SLICE ;

i_nal_ref_idc = NAL_PRIORITY_ HIGH ;  /* Not completely true but for now it is (as all I/P are kept as ref)*/

i_slice_type = SLICE_TYPE_ ;

}

else if ( h->fenc->i_type ==  X264_TYPE_P  )

{

i_nal_type      = NAL_SLICE;

i_nal_ref_idc = NAL_PRIORITY_HIGH;  /* Not completely true but for now it is (as all I/P are kept as ref)*/

i_slice_type = SLICE_TYPE_P;

}

else if ( h->fenc->i_type ==  X264_TYPE_BREF  )

{

i_nal_type      = NAL_SLICE;

i_nal_ref_idc = NAL_PRIORITY_HIGH;  /* maybe add MMCO to forget it? -> low */

i_slice_type = SLICE_TYPE_B;

}

else       /*  B  frame */

{

i_nal_type      = NAL_SLICE;

i_nal_ref_idc = NAL_PRIORITY_DISPOSABLE;

i_slice_type = SLICE_TYPE_B;

}

    x264_reference_reset 函数的定义如下: (其实,因为这个代码是通用的,所以应该是参考帧队列。但是,我们只用一个参考帧,“队列”并没有意义。)

static inline void  x264_reference_reset( x264_t *h )

{

int i;

/* reset ref pictures */

for ( i = 1; i < h->frames.i_max_dpb; i++ )

{

h->frames.reference[i]->i_poc = -1;

}

h->frames.reference[0]->i_poc = 0;

}

看来,好像是遇到 IDR 帧时才会 将所有的参考帧队列丢弃( x264_reference_reset ( h ); ) 。其实,我们的程序默认只用一个参考帧,这个问题就不是十分有意义了。

多参考帧情况下。

    举个例子 :有如下帧序列: IPPPP PPP ……(我们程序没有 B 帧,所以帧序列简单些,但道理是一样的)。按照 3 个参考帧编码。

因为“按照 3 个参考帧编码”,所以参考帧队列长度为 3 。

遇到绿色的 时,并不清空参考帧队列,把这个 I 帧加入参考帧队列(当然 I 编码时不用参考帧。)。再检测到红色的 帧时,用到的就是 PPI 三帧做参考了。

不怕自己罗嗦(好记性不如烂笔头),再强调一个: 一个参考帧,就是参考当前帧的前面的那帧(因为没涉及到 B 帧,所以“前面的那帧”既是播放顺序的,也是编码顺序的)。多个参考帧是一个道理 。 ( 我以前一直误解为从前面的几帧中找到最合适的一个参考帧)

最后,“ 但是收到 IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。由此可见,在编码器端,每发一个 IDR ,就相应地发一个  PPS&SPS_nal_unit ”应该是对的吧。先这样认为:)

偶然机会,查到: IDR-instantaneous decoding refresh (IDR)picture ;

A coded picture in which all slices are I or SI slices that causes the decoding process to mark all reference pictures as "unused for reference" immediately after decoding the IDR picture. After the decoding of an IDR picture all following coded pictures in decoding order can be decoded without inter prediction from any picture decoded prior to the IDR picture. The first picture of each coded video sequence is an IDR picture.

“也就是说 ,IDR 的出现其实是相当于向解码器发出了一个清理 reference buffer 的信号吧,上面说前于这一帧的所有已编码帧不能为 inter 做参考帧了。”

还有:“ 因为 264 采用了多帧预测,就有可能在 display order 下 I 帧后的 P 会参考 I 帧前的帧,这样在 random access 时如果只找 I 帧,随后的帧的参考帧可能 unavailable , IDR 就是这样一种特殊的I 帧,把它定义为确保后面的 P 一定不参考其前面的帧,可以放心地 random access 。

相关文章:

ExtJs 备忘录(3)—— Form表单(三) [ 数据验证 ]

正文一、资料 1.1. 表单提示的方式设置&#xff0c;如&#xff1a; Ext.form.Field.prototype.msgTargetside 该设置为枚举值&#xff1a;qtip,side,title,under qtip&#xff1a;把鼠标移动到控件就可以显示提示信息了&#xff0c;有点像设置了title的input标签一样的效果…

Dynamo 以及一致性哈希简介

本介绍参考 Amazon 的 Dynamo 论文。需要更详细更准确信息的同学请直接阅读原文。 (原文地址http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) 这篇论文本身没提出什么新的思想&#xff0c;正如论文中所说&#xff0c;贡献在于把非常多的技术结…

如何更快速加载你的JS页面

确保代码尽量简洁 不要什么都依赖JavaScript。不要编写重复性的脚本。要把JavaScript当作糖果工具&#xff0c;只是起到美化作用。别给你的网站添加大量的JavaScript代码。只有必要的时候用一下。只有确实能改善用户体验的时候用一下。 尽量减少DOM访问 使用JavaScript访问DOM元…

性价比超高:苹果发布了新数据集,助力室内场景理解

作者&#xff1a;刘媛媛 来源&#xff1a;数据实战派前言计算机视觉界一直渴望能够找到一种方法&#xff0c;让计算机和人们都能够理解室内场景的复杂性。对于许多基本的场景理解任务&#xff0c;很难或不可能从真实图像中获得每像素地面实况标签。一部分研究人员选择通过使用交…

42. fastjson处理下划线和驼峰问题的方法和源码分析

一. 前言 在开发过程中经常遇到json解析和生成的问题&#xff0c;所以用自己也一直用fastjson来实现这个功能。 但是&#xff0c;最近遇到一个问题: json字符串里面的数据很多都是"_"下划线的比如&#xff0c;op_id。 而在java里面&#xff0c;很多都是驼峰的写法&…

Cacti Weathermap添加主机在线状态图示检测

Weathermap 中文名称翻译为 气象图weathermap版本支持&#xff1a;0.94及最新版1、首先添加气象图 图例像这样。编辑需要添加图例的气象图配置文件 (气象图配置文件默认在/var/www/html/plugins/weathermap/configs/ 目录中)其中 KEYPOS指定全局图例名称以及 图例位置和 图例标…

jquery技巧总结

一、简介1.1、概述随着WEB2.0及ajax思想在互联网上的快速发展传播&#xff0c;陆续出现了一些优秀的Js框架&#xff0c;其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等&#xff0c;通过将这些JS框架应用到我们的项目中能够使程序员从设计和书…

Unet网络实现叶子病虫害图像分割

作者|李秋键 出品|AI科技大本营(ID:rgznai100) 智能化农业作为人工智能应用的重要领域&#xff0c;对较高的图像处理能力要求较高&#xff0c;其中图像分割作为图像处理方法在其中起着重要作用。图像分割是图像分析的关键步骤, 在复杂的自然背景下进行图像分割, 难度较大。 在传…

SilverLight 4页面跳转大全

http://blog.csdn.net/lihaiyin/article/details/5674766 //Silverlight页面的跳转 //(Application.Current.RootVisual as IContent).Content new DragControl(); //普通页面跳转 HtmlWindow html HtmlPage.Window; //html.Navigate(new Uri("http://www.0379zd.co…

Linux 性能监控常用命令

工具简单介绍top查看进程活动状态以及一些系统状况vmstat查看系统状态、硬件和系统信息等iostat查看CPU 负载&#xff0c;硬盘状况sar综合工具&#xff0c;查看系统状况mpstat查看多处理器状况netstat查看网络状况iptraf实时网络状况监测tcpdump抓取网络数据包&#xff0c;详细…

jquery 1.6以上版本 全选

2019独角兽企业重金招聘Python工程师标准>>> <html xmlns"http://www.w3.org/1999/xhtml"> <head><title>全选&#xff0c;不全选&#xff0c;反选</title><script src"jquery.js" type"text/javascript"…

想提高代码水平,做到这点就够了

【CSDN 编者按】本篇文章来自于《程序员》杂志的一位老读者&#xff0c;他从大学时最深刻的记忆谈起&#xff0c;到编程路上的心得体会&#xff0c;再到对广大年轻程序员的建议&#xff0c;全篇娓娓道来&#xff0c;希望能对大家有所帮助。作者 | 姜宁 华为开源能力中心技术专…

modified: xxx(modified content, untracked content)

from:://http://blog.csdn.net/huguohu2006/article/details/7045052 提交代码到服务器后发现git clone下来的有些目录是空的。 查看服务器的目录果然是空的。看本季git add . 后查看git status modified: xxx(modified content, untracked content) 大概意思是xxx目录没有…

一些JSON相关的函数

JSON作为一种轻量的数据传输格式&#xff0c;越来越受到人们的青睐。下面是我仿照Prototype的一些实现。 JSONFilter:/^///*-secure-([/s/S]*)/*///s*$/, unfilterJSON:function(json,filter) { return json.replace((filter || dom.JSONFilter), function(a,b){ return b |…

太任性!17 岁少年买不到回国机票,因“泄愤”攻击航司系统,被判刑 4 年

整理 | 王晓曼出品 | 程序人生&#xff08;ID&#xff1a;coder _life&#xff09;因买不到回国机票&#xff0c;一气之下&#xff0c;身处境外的17岁少年陈某竟多次、持续攻击某航空公司计算机系统&#xff0c;致使该航空公司对外服务网络全面瘫痪近四小时&#xff0c;5000余万…

hbase2.0.0-安装部署

依赖hadoop 环境&#xff0c;我这边的版本是hadoop-2.6.5 选择hbase2.0.0版本的时候&#xff0c;去官网查看支持的hadoop版本 1、伪分布式安装 下载&#xff1a;http://mirror.bit.edu.cn/apache/hbase/2.0.0-alpha4/ 版本&#xff1a;hbase-2.0.0-alpha4-bin.tar.gz 2、tar -z…

Git详解之二 Git基础

Git 基础 读完本章你就能上手使用 Git 了。本章将介绍几个最基本的&#xff0c;也是最常用的 Git 命令&#xff0c;以后绝大多数时间里用到的也就是这几个命令。读完本章&#xff0c;你就能初始化一个新的代码仓库&#xff0c;做一些适当配置&#xff1b;开始或停止跟踪某些文件…

一致性哈希(Consistent Hashing)

在大型web应用中&#xff0c;缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中&#xff0c;应运而生了分布式缓存系统。分布式缓存系统的基本原理&#xff0c;大家也有所耳闻。key-value如何均匀的分散到集群中&#xff1f;说到此&#xff0c;最常规的方式莫过于hash…

CT片居然可以这么玩:用头部CT断层扫描片复原三维头像

作者&#xff1a;天元浪子 来源&#xff1a;Python作业辅导员前言CT是现代医学影像的主力设备&#xff0c;寻常百姓并不陌生。通常&#xff0c;一张CT片由多张连续断层扫描的图像组成。在医生眼中&#xff0c;CT片展示了人体器官的形态和性质&#xff0c;是判断病人健康状况的重…

Nginx学习笔记(一) Nginx架构

Nginx全程是什么&#xff1f; Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 daemon守护线程 nginx在启动后&#xff0c;在unix系统中会以daemon的方式在后台运行&#xff0c;后台进程包含一个master…

PXE实现批量部署linux系统

pxe批量部署linux服务器1、pxe介绍PXE是有intel设计的协议&#xff0c;它可以使计算机通过网络启动&#xff0c;协议分为client和server两端&#xff0c;PXEclient在网卡的ROM中&#xff0c;当计算机引导时&#xff0c;BIOS把PXE client调入内存中执行&#xff0c;并显示出命令…

首场见习挑战赛倒计时3天!20000元奖学金瓜分就等你了!

CSDN软件开发精英赛是基于“C认证—软件工程师能力认证考试”而设立的编程比赛&#xff0c;大赛联合广大科技企业设置丰厚礼品及30万元奖学金。从7月22日官宣到今日&#xff0c;短短一个月内&#xff0c;大赛已经吸引了来自全国的2000&#xff0b;开发者参与其中。第一轮“见习…

一致性哈希算法以及其PHP实现

在做服务器负载均衡时候可供选择的负载均衡的算法有很多&#xff0c;包括&#xff1a; 轮循算法&#xff08;Round Robin&#xff09;、哈希算法&#xff08;HASH&#xff09;、最少连接算法&#xff08;Least Connection&#xff09;、响应速度算法&#xff08;Response Time…

Linux入门(四)

目录&#xff1a; 1234567891011121314一、根文件系统层级标准FHS二、bash的基础特性&#xff08;一&#xff09;1.命令历史 2.命令行补全 3.路径补全 4.命令行展开 5.命令执行的状态结果 6.引用 7.快捷键 三、目录管理相关命令mkdir、rmdir、tree四、引用命令的执行结果五、文…

OSI[七层]与TCP/IP[四层]模型简述简图

OSI参考模型&#xff08;OSI/RM&#xff09;的全称是开放系统互连参考模型&#xff08;Open System Interconnection Reference Model&#xff0c;OSI/RM&#xff09;&#xff0c;它是由国际标准化组织&#xff08;International Standard Organization&#xff0c;ISO&#xf…

中国国际消费电子博览会拥抱转型,全新面貌拭目以待!

2021年9月24—26日&#xff0c;第十九届中国国际消费电子博览会&#xff08;简称电博会&#xff09;将在青岛国际会展中心隆重举行&#xff0c;如今距离电博会开幕已不到3个月的时间&#xff0c;全国各地的参展企业跃跃欲试、积极筹备。 长久以来&#xff0c;电博会为全球消费…

Fragment提交transaction导致state loss异常

下面自从Honeycomb发布后&#xff0c;下面栈跟踪信息和异常信息已经困扰了StackOverFlow很久了。 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.j…

ASP网络编程从入门到精通 下载

《ASP网络编程从入门到精通》 清华大学出版社 特点&#xff1a; 面向ASP零基础读者&#xff0c;循序渐进 全面分析ASP技术细节 用代码描述个个知识点&#xff0c;操作性强 通过典型模块设计&#xff0c;体会ASP的奥妙 通过网上商城购物系统&#xff0c;增加项目开发经验 适合的…

项目Makefile文件模板

整理出来的一个Makefile模板,新增了一个内容,调用gcc生成依赖文件,这样如果某个c文件包含的头文件被更新了,该c文件以及依赖于该c文件的obj文件都会被重新编译.这个模板是按照我习惯的项目文件组织形式进行定义的,我的习惯是头文件放在include文件夹,代码放在src文件夹,目标文件…

小撒、金晨都想拥有!百度全球首款汽车机器人亮相,车内躺着看星星

整理 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 金晨坐了都想带回家的车、无人车出行服务、撒贝宁与祝融号对话等等。 这届百度世界大会真的很惊艳。 8月18日&#xff0c;百度与央视新闻联合举办“AI这时代&#xff0c;星辰大海——百度世界大会2021…