音视频项目—基于FFmpeg和SDL的音视频播放器解析(十七)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)

解析

接着上文,我们继续解析 fill_audio_pcm 函数

av_fast_malloc(&is->audio_buf1, &is->audio_buf1_size, out_bytes);
int len2 = swr_convert(is->swr_ctx, out, out_samples, in, frame->nb_samples);
if(len2 < 0){return;
}
is->audio_buf = is->audio_buf1;
is->audio_buf_size = av_samples_get_buffer_size(NULL, is->dst_tgt.channels, len2, is->dst_tgt.fmt, 1);

av_fast_malloc 重新分配 buffer 的大小。

swr_convert 切换采样率

然后给一些变量赋值

}else {audio_size = av_samples_get_buffer_size(NULL, is->dst_tgt.channels, frame->nb_samples, (enum AVSampleFormat) frame->format, 1);av_fast_malloc(&is->audio_buf1, &is->audio_buf1_size, audio_size);is->audio_buf = is->audio_buf1;is->audio_buf_size = audio_size;memcpy(is->audio_buf, frame->data[0], audio_size);
}

如果 swrcontext 没有分配成功,则进行上面的操作。

好了,今天先讲这么多,剩余的下文解析。

欲知后事如何,请听下回分解。

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

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

相关文章

[EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件

硬件型号驱动情况主板ASUS EX-B365M-V5处理器Intel(R) Pentium(R) Gold G5400 CPU已驱动内存8GB Kingmax Dual Channel已驱动硬盘Vaseky V800 128GB SATA已驱动显卡Radeon RX 560已驱动声卡Realtek ALC887已驱动网卡RTL8111已驱动无线网卡蓝牙Killer(R) Wi-Fi 6 AX1650需要自行…

服务器系列之 成功解决 com.jcraft.jsch.JSchException: Auth fail

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS

在多云策略与数据迁移趋势下&#xff0c;企业往往需要将数据在不同云服务提供商之间进行迁移。本文介绍如何使用rclone工具同步腾讯云COS&#xff08;Cloud Object Storage&#xff09;桶中的数据到华为云OBS&#xff08;Object Storage Service&#xff09;。先决条件是您已经…

【SQL SERVER】序列

原来sqlserver也能用序列呀&#xff0c;我原来以为只有oracle有呢 浅薄了~ 创建序列 CREATE SEQUENCE A_SequenceSTART WITH 1INCREMENT BY 1;使用序列 oracle使用序列是A_Sequence.NEXTVAL&#xff0c;而sqlserver是NEXT VALUE FOR A_Sequence CREATE TABLE A_TABLE (ID IN…

PAT甲级 1023 高精度

1023 Have Fun with Numbers 分数 20 Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the…

vb圣经加注释

Imports System.Data.OleDbPublic Class Form1小目录简写Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "得", "撒上", "撒下", "王上&quo…

Python---函数的应用案例(多个)

案例&#xff1a;使用print方法打印一条横线 print(- * 40) 案例&#xff1a;对上个案例进行升级&#xff0c;可以根据输入的num数值&#xff0c;生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

cocoapods使用

macOS/iOS系统上做原生开发&#xff0c;需要用到的开源包管理工具&#xff1a;cocoapods。 类似&#xff1a; 语言包管理工具官方仓库镜像仓库私有仓库jsnpm,cnpm,pnpm,yarnpythonpip c#nugetjavagradle&#xff0c;mavenrubygemoc/c/swiftco…

快速幂极简写法快速幂求逆元

快速幂原理介绍 快速幂模板 int qmi(int a, int k, int p) {int res 1;while (k) {//后面的a其实是底数与其指数的运算结果了&#xff0c;是不断迭代的//第一个a其实就是a的2的0次方if (k & 1) res (res * a) % p;a (a * a) % p;//注意&#xff0c;a是一个不断变化的过…

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议&#xff0c;是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…

Android 获取设备内存和外存

参考 Android 获取设备运行内存信息 https://blog.csdn.net/b1tb1t/article/details/131290808 Android 获取设备外存 // 全部外存, 和手机标称不一样public static long getTotalStorage() {File path Environment.getExternalStorageDirectory();StatFs stat new StatFs(p…

Qt TCP相关的一些整理:客户端常见操作 socket 通信 network

目录 1、相关的库和类 2、一些常用的API 3、帖子用到的完整核心代码&#xff1a; 1、相关的库和类 Qt下使用tcp协议&#xff0c;需要在工程的pro文件中添加&#xff1a; QT network 需要添加network网络库之后&#xff0c;才可以使用对应的类 客户端的类头文件&#xf…

python趣味编程-5分钟实现一个简单弹跳球游戏(含源码、步骤讲解)

简单的Python弹跳球程序是使用Python编程语言开发的。 Python 中的弹跳球游戏是 使用 Tkinter 和图形用户界面 (GUI) 设计的,它是一个桌面应用程序。 Python 中的弹跳球游戏代码使用Canvas 在 Python 中绘制对象和随机模块。

UVM项目笔记——通过寄存器模型实现AHB接口的寄存器读写(内含源码)

目录 1.前言 2.DRIVER实现 2.1 AHB二级流水时序 2.2 “队列错位法”实现driver 2.3 driver代码 2.4 仿真log与波形 2.5 多级流水拓展方法 1.前言 UVM driver在接口协议的实现中起着非常重要的作用&#xff0c;因为它一端处理基于类的事务级sequence&#xff0c;另一端处…

45-设计问题-最小栈

原题链接&#xff1a; 198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&a…

Pytorch从零开始实战10

Pytorch从零开始实战——ResNet-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50算法实战环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c…

QT专栏2 -Qt for Android

#2023年11月18日 # Qt version 6.6 JDK17 JDK 安装 Java Downloads | Oracle 设置环境变量 鼠标右键我的电脑&#xff0c;出现如下界面 Qt配置 改用JDK18&#xff0c;没有乱码&#xff0c;由于不影响APK产生。 做了好多尝试&#xff0c;更换JDK版本(11,18,19,21)&…

mac gitee新建工程遇到的一些问题

首先&#xff0c;记录一下mac系统显示隐藏文件夹的快捷键&#xff1a;commandshift句号&#xff0c;可以显示工程目录下的隐藏的git文件夹 一 git报错:‘origin‘does not appear to be a git repository的解决方法 找到工程目录下的.git/config文件发现里边没有remote orig…

labelImg

labelImg 在anaconda虚拟环境中安装labelImg 进入conda虚拟环境DL2中 输入命令&#xff1a; pip install PyQt5 pip install pyqt5-tools pip install lxml pip install labelimg PyQt5:是用于创建GUI应用程序的跨平台工具包&#xff0c;它将Python与Qt库融为一体 Lxml&#…

GDB Debugging Notes

1 Debugging programs using gdb 1.1 gdb简介 gdb是一个功能强大的调试工具&#xff0c;可以用来调试C程序或C程序。在使用这个工具进行程序调试时&#xff0c;主要涉及下面几个方面的操作&#xff1a; 启动程序:在启动程序时&#xff0c;可以设置程序运行环境。设置断点:程序…