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

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

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

  • 一、分析:
    • 1、audio_open():设置期望使用到SDL的音频参数
    • 2、audio_open():使用期望的音频打开SDL设备
    • 3、audio_open():判断打开SDL设备后参数的变化
    • 4、audio_open():保存SDL设备使用的音频参数
    • 5、sdl_audio_callback():SDL音频读取回调函数(判断待拷贝到SDL的缓冲区(is->audio_buf)中是否有数据,否则调用audio_decode_frame()添加数据到is->audio_buf)
    • 6、audio_decode_frame():从Frame(解码后)队列中获取一帧数据
    • 7、audio_decode_frame():获取这一帧数据的大小(字节)如果不用重采样操作就将这个数据和数据长度返回上一层了
    • 8、audio_decode_frame():获取同步调整后采样数和判断是否需要重采样的操作
    • 9、audio_decode_frame():需要重采样情况下,设置重采样的输入输入缓冲区
    • 10、audio_decode_frame():需要重采样情况下,设置开启重采样的补尝功能
    • 11、audio_decode_frame():需要重采样情况下,分配重采样输出缓冲区内存
    • 12、audio_decode_frame():需要重采样情况下,调用swr_convert()进行重采样操作
    • 13、audio_decode_frame():需要重采样情况下,将重采样缓冲区设置到is->audio_buf
    • 13、audio_decode_frame():不需要重采样情况下,将重采样缓冲区设置到is->audio_buf
    • 14、audio_decode_frame():设置音频时钟相关
    • 15、sdl_audio_callback():将数据拷贝到SDL缓冲区中设置播放,并更新读取操作的位置索引
    • 16、sdl_audio_callback():最后音频时钟设置

一、分析:

1、audio_open():设置期望使用到SDL的音频参数

在这里插入图片描述

2、audio_open():使用期望的音频打开SDL设备

在这里插入图片描述

3、audio_open():判断打开SDL设备后参数的变化

在这里插入图片描述

4、audio_open():保存SDL设备使用的音频参数

在这里插入图片描述

5、sdl_audio_callback():SDL音频读取回调函数(判断待拷贝到SDL的缓冲区(is->audio_buf)中是否有数据,否则调用audio_decode_frame()添加数据到is->audio_buf)

在这里插入图片描述

6、audio_decode_frame():从Frame(解码后)队列中获取一帧数据

在这里插入图片描述

7、audio_decode_frame():获取这一帧数据的大小(字节)如果不用重采样操作就将这个数据和数据长度返回上一层了

在这里插入图片描述

8、audio_decode_frame():获取同步调整后采样数和判断是否需要重采样的操作

在这里插入图片描述

9、audio_decode_frame():需要重采样情况下,设置重采样的输入输入缓冲区

在这里插入图片描述

10、audio_decode_frame():需要重采样情况下,设置开启重采样的补尝功能

在这里插入图片描述

11、audio_decode_frame():需要重采样情况下,分配重采样输出缓冲区内存

**加粗样式**

12、audio_decode_frame():需要重采样情况下,调用swr_convert()进行重采样操作

在这里插入图片描述

13、audio_decode_frame():需要重采样情况下,将重采样缓冲区设置到is->audio_buf

在这里插入图片描述

13、audio_decode_frame():不需要重采样情况下,将重采样缓冲区设置到is->audio_buf

在这里插入图片描述

14、audio_decode_frame():设置音频时钟相关

在这里插入图片描述

15、sdl_audio_callback():将数据拷贝到SDL缓冲区中设置播放,并更新读取操作的位置索引

在这里插入图片描述

16、sdl_audio_callback():最后音频时钟设置

在这里插入图片描述

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

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

相关文章

绪论(一)

一、问题驱动—>画出唯一的逻辑结构—>定义存储结构—>实现相应的操作 二、算法—>(定义\特点)步骤—>实现—>评价标准 算法有五大特点: 可行性确定性有穷性(有限性)0个或0个以上的输入至少一个以上的输出 评价标准: 时间复杂度 …

利用 dbghelp.dll 生成 dump 文件

dbghelp.dll windows的系统目录system32下,都有dbghelp.dll,但在实际使用时,往往会让exe加载自己目录下的dll,以避免系统目录下的dll版本不一导致的程序异常。 故一般都是用LoadLibrary()的方式加载Dll,先加载当前目录…

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

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

杀毒软件对InstallShield编译过程以及安装包运行的影响

版权声明: 可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。在某些情况下,杀毒软件会导致InstallShield编译过程崩溃。比如 McAfee VirusScan Enterprise 8.5.0i版本,在某些情况下会在InstallScript工程编译过程中,将ISSe…

Java FileInputStream close()方法与示例

FileInputStream类close()方法 (FileInputStream Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close this FileInputStream and free all system resources linked with this stream. c…

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

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

线性结构节点类型(三)

一、线性结构 特点 第一个数据元素没有前驱最后一个数据元素没有后继1:1逻辑上相邻、物理上也相邻 类型 线性表(就是一张二维表)(为主研究对象)栈队列 学习方法 画逻辑结构—>定义存储结构—>实现相应的操作 二、线性表 线性结构 逻辑上的1:1存储结构 顺序存储结…

PL/SQL详细介绍

PL/SQL笔记PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DDL语句(CREATE,ALTER,DROP)和DCL语句(GRANT,REVOKE) 1.检索单行数据 1.1使用标量变量接受数据 v_ename emp.ename%type; v_sal emp.sal%…

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

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

从Live Space搬家到这里

听说Live Space很快要关闭了,所以从http://peking2toronto.spaces.live.com/搬家到这里。转载于:https://www.cnblogs.com/pentest/archive/2010/08/29/1811726.html

java 方法 示例_Java Collectionsfrequency()方法与示例

java 方法 示例集合类的frequency()方法 (Collections Class frequency() method) frequency() method is available in java.util package. frequency()方法在java.util包中可用。 frequency() method is used to return the frequency of the given Object (obj) to the give…

线性结构常规操作(四)

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

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

《ffplay的数据结构分析》 《ffplay分析(从启动到读取线程的操作)》 《ffplay分析(视频解码线程的操作)》 《ffplay分析(音频解码线程的操作)》 《ffplay 分析(音频从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…

HttpService远程校验

今天学了下HttpService,和大家分享一下。HttpService是用来读取远程数据的一个对象,数据格式为XML。 我做了一个登陆校验的功能,主要是通过HttpService将服务器端的用户数据得到,然后在客户端判断输入的用户名和密码是否存在。 主…

免费开源FTP Server软件FileZilla Server

很多朋友在实际应用中都可能需要用到FTP Server类的软件,这类软件有很多,比较知名的有Serv-U、G6等,这里向大家介绍一下FileZilla Server,Windows平台下一款不错的FTP Server软件,而且是免费的、开源的。 S…

Java BigDecimal floatValue()方法与示例

BigDecimal类floatValue()方法 (BigDecimal Class floatValue() method) floatValue() method is available in java.math package. floatValue()方法在java.math包中可用。 floatValue() method is used to convert a BigDecimal to a float value and when this BigDecimal m…

明明的随机数(快排)

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数…

ffplay分析 (seek操作处理)

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

android 代码设置 键盘适应_硬核软件,能在电脑上控制iPhone和Android手机

在电脑上控制手机大概已经不是什么新鲜操作,小米、华为都为自家手机和电脑的联动推出了同屏操作之类的功能,此外也可以通过开源软件Scrcpy来在Windows或者macOS上实现对安卓手机的控制,这些基本都只针对安卓手机。近期,奇客君发现…