ffplay分析(视频解码线程的操作)

《ffplay的数据结构分析》
《ffplay分析(从启动到读取线程的操作)》
《ffplay分析(音频解码线程的操作)》
《ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)》
《ffplay分析 (视频从Frame(解码后)队列取数据到SDL输出)》
《ffplay分析 (音视频同步:主时钟为音频)》
《ffplay分析 (暂停 / 播放处理)》
《ffplay分析 (seek操作处理)》

ffplay分析(视频解码线程的操作)(版本:ffmpeg-4.2.1)

  • 一、分析:
    • 1、stream_component_open():开启视频解码线程video_thread()
    • 2、video_thread():初始化timebase和framerate操作
    • 3、video_thread():调用get_video_frame()得到解码完成的一帧数据
    • 4、get_video_frame():调用decoder_decode_frame()得到解码后一帧数据
    • 5、decoder_decode_frame():循环调用avcodec_receive_frame()获取解码后的帧数据
    • 6、decoder_decode_frame():avcodec_receive_frame()获取的结果判断是否正常返回,还是退出循环往下走
    • 7、decoder_decode_frame():从Packet(解码前)队列获取新的Packet
    • 8、decoder_decode_frame():获取的Packet判断是否是flush Packet
    • 9、decoder_decode_frame():调用avcodec_send_packet() 进行解码
    • 10、get_video_frame():调用decoder_decode_frame()得到解码后一帧数据后,判断是否需要drop帧
    • 11、video_thread():调用get_video_frame()得到解码完成的一帧数据后,计算这帧pts/duration,调用queue_picture()保存到Frame(解码后)队列
    • 12、queue_picture():调用frame_queue_peek_writable()获取可写Frame,设置相应参数
    • 13、queue_picture():调用av_frame_move_ref()移动AVFrame->buffer,调用frame_queue_push()表示添加到Frame(解码后)队列
    • 14、video_thread():视频解码线程结束处理,除了请求退出或异常退出,否则不会退出的。

一、分析:

1、stream_component_open():开启视频解码线程video_thread()

在这里插入图片描述

2、video_thread():初始化timebase和framerate操作

在这里插入图片描述

3、video_thread():调用get_video_frame()得到解码完成的一帧数据

在这里插入图片描述

4、get_video_frame():调用decoder_decode_frame()得到解码后一帧数据

在这里插入图片描述

5、decoder_decode_frame():循环调用avcodec_receive_frame()获取解码后的帧数据

在这里插入图片描述

6、decoder_decode_frame():avcodec_receive_frame()获取的结果判断是否正常返回,还是退出循环往下走

在这里插入图片描述

7、decoder_decode_frame():从Packet(解码前)队列获取新的Packet

在这里插入图片描述

8、decoder_decode_frame():获取的Packet判断是否是flush Packet

在这里插入图片描述

9、decoder_decode_frame():调用avcodec_send_packet() 进行解码

在这里插入图片描述

10、get_video_frame():调用decoder_decode_frame()得到解码后一帧数据后,判断是否需要drop帧

在这里插入图片描述

11、video_thread():调用get_video_frame()得到解码完成的一帧数据后,计算这帧pts/duration,调用queue_picture()保存到Frame(解码后)队列

在这里插入图片描述

12、queue_picture():调用frame_queue_peek_writable()获取可写Frame,设置相应参数

在这里插入图片描述

13、queue_picture():调用av_frame_move_ref()移动AVFrame->buffer,调用frame_queue_push()表示添加到Frame(解码后)队列

在这里插入图片描述

14、video_thread():视频解码线程结束处理,除了请求退出或异常退出,否则不会退出的。

在这里插入图片描述

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

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

相关文章

【转】.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间,完善《.NET深入学习笔记》系列(基本都是.Net重要的知识点,我都做了详细的总结,是什么、为什么、和怎么实现)。想必很多人也接触过这两个概念。做过C的人对深浅拷贝的概念一…

abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏

100万职场人都在看后台回复礼包领199元职场干货大家好,我是小可~今天跟大家分享一个提高Excel操作效率的小技巧自定义你的快速访问工具栏设置后的效果▼▼▼也就是把你最经常用到的两三个功能放到快速访问工具栏可以一眼就找到这些功能不需要靠快捷键或者功能选项卡…

用递归法求1²+2²+...+n²的值

思路分析: 谈到递归,我个人会联想到数学里面的通式。因为递归调用的函数的对应法则是相同的。例如这道题:f(x)=x。这个就是函数通式,只不过把每个求得的结果进行累加求和即可。用户输入5的时候,会出现f(5)=5,之后再进行x减一操作,执行f(4)=4,最后将每个进行累加即可。…

编写一个函数,计算下式当n=10和n=100的值。

思路分析: 首先,我个人看法:当我拿到这道题的时候,我会把它当成一道数学题对待。分子是动的,恒为一,分母是进行依次增加的。且奇数项为正,偶数项为负。因为设计运算出现的是分数,故,设计选取存储类型为double。 找出问题: ①正负号问题、②分母问题、③累计求和问题…

POJ 1001 大数的乘法

对这道题的理解 大数的乘法 关键是 实型的 那么首先就是数出来小数点有几位这个相信很简单 从后面往前数刚开始0 不算接着就是遇到小数点结束如果没有小数点 那么置为0 接着就是输出地时候首先算出小数点的位置然后输出 你想怎么样都行 从后往前数这个时候输出 那么就是你也…

铃木uy125摩托车机油_济南铃木安徽发布国四新车—6480元瑞梦125、9380元UY125

安徽合肥,这个具有两千多年历史的古城,以“三国故地、包拯家乡”而闻名海内外,2019年4月22日济南铃木为这座城市带来一份惊喜,今年正值国四执行,济南铃木旗下两款国四新车瑞梦125与UY125正式在合肥与大家相见。济南铃木…

编写一个程序,计算用户输入的起始时间到终止时间之间相隔的天数。

思路分析: 闰年:闰年又分为普通闰年和世纪闰年 普通闰年:能被4整除且不能被100整除的为闰年(2004为闰年,1999不是闰年) 世纪闰年:能被400整除的是闰年(2020年是闰年,1900年不是闰年) 闰年共有366天&#x…

mvc的Controller返回值类型ActionResult详解

一、简介 ActionResult 操作方法通过执行工作并返回操作结果来响应用户输入。 操作结果表示框架将代表操作方法执行的命令。 ActionResult 类是操作结果的基类。 以下类型从 ActionResult 派生: ContentResult EmptyResult FileResult HttpUnauthorizedResult …

栅格布局一般怎么用_建筑混凝土色差大怎么办?用这种方法处理,一般都看不出来...

由于模板锈蚀、脱模剂污染、原材料等原因,建筑混凝土成形后经常会遇到颜色不一致的现象,为此我们总结了混凝土面色差调整施工工艺,可供大家参考使用。一、混凝土面色差调整施工工艺流程及说明基层表面打磨→吸尘器吸尘→湿润墙面→素水泥处理…

FusionChart完全入门手册4

想不想打造让人震撼的图表系统,想不想做出和别人不一样的图表,从本节起,我就带领大家走入这片神奇的土地,让大家去采摘属于自己的创意之果,我们的目标是------个性无罪,个性万岁! 问题三、如何做…

ffplay分析(音频解码线程的操作)

《ffplay的数据结构分析》 《ffplay分析(从启动到读取线程的操作)》 《ffplay分析(视频解码线程的操作)》 《ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)》 《ffplay分析 (视频从Fram…

More Effective C++ (运算符)

4.1&#xff1a;谨慎定义类型转换函数<1>容易的方法是利用一个最新的编译器特性&#xff1a;explicit关键字<2>C编译器把">>"作为一个符号来解释&#xff0c;在两个">"间没有空格&#xff0c;语句会产生语法错误。<3>隐式类型转…

php微信获取mediaid超出限制_Python实现每日微信自动打卡

众所周知&#xff0c;因为疫情的原因&#xff0c;很多高校和公司都要求员工每日在微信上进行打卡&#xff0c;来汇报自己的当前身体状态和所处地区。但绝大多数情况下&#xff0c;每天打卡的信息其实是不会变的&#xff0c;我们要做的就是进入公众号——自动登录点进打卡页面—…

ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)

《ffplay的数据结构分析》 《ffplay分析&#xff08;从启动到读取线程的操作&#xff09;》 《ffplay分析&#xff08;视频解码线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay分析 &#xff08;视频从Frame(解码后)队列取数据到…

pandas 根据列名索引多列数据_Pandas 数据聚合与分组运算[groupby+apply]速查笔记

利用Pandas将数据进行分组&#xff0c;并将各组进行聚合或自定义函数处理。Pandas中Groupby分组与聚合过程导入模块import pandas as pd缩写df表示Dataframe对象分组df.groupby(col1)&#xff1a; 根据col1列将df全部列分组&#xff08;默认&#xff1a;axis0行&#xff09;df[…

ffplay分析 (视频从Frame(解码后)队列取数据到SDL输出)

《ffplay的数据结构分析》 《ffplay分析&#xff08;从启动到读取线程的操作&#xff09;》 《ffplay分析&#xff08;视频解码线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay 分析&#xff08;音频从Frame(解码后)队列取数据到…

redis 备份导出rdb_Redis数据迁移利器之redisshake

“当需要进行Redis实例或集群数据迁移时&#xff0c;我们可以采用导出/导入的方式进行数据迁移&#xff0c;但当需要做数据异地灾备或双活时&#xff0c;再使用传统的方式就不合适了&#xff0c;我们需要借助工具(如redis-port/redis-shake)来完成。”redis-shake介绍redis-sha…

线性结构常规操作(四)

定义存储结构(以单向链表为主) 对于链表的定义&#xff0c;通过结构体进行定义&#xff0c;包括两部分&#xff0c;一是数据域&#xff0c;另一个就是指针&#xff0c;用于指向下一个节点。 1&#xff0c;创建链表 定义链表&#xff1a; struct nodesq{int data;//数据域&a…

ffplay分析 (暂停 / 播放处理)

《ffplay的数据结构分析》 《ffplay分析&#xff08;从启动到读取线程的操作&#xff09;》 《ffplay分析&#xff08;视频解码线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay 分析&#xff08;音频从Frame(解码后)队列取数据到…

源码 状态机_[源码阅读] 阿里SOFA服务注册中心MetaServer(1)

[源码阅读] 阿里SOFA服务注册中心MetaServer(1)0x00 摘要0x01 服务注册中心1.1 服务注册中心简介1.2 SOFARegistry 总体架构1.3 为什么要分层0x02 MetaServer2.1简介2.2 问题0x03 代码结构0x04 启动运行4.1 集成部署4.2 独立部署0x05 总体逻辑5.1 程序主体5.2 配置0x06 启动6.1…