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():最后音频时钟设置

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37599645/article/details/113093653