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

介绍

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

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

解析

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

is->swr_ctx = swr_alloc_set_opts(NULL, is->dst_tgt.channel_layout,(enum AVSampleFormat)is->dst_tgt.fmt,is->dst_tgt.freq,frame->channel_layout,(enum AVSampleFormat)frame->format,frame->sample_rate,0, NULL);
if(!is->swr_ctx || swr_init(is->swr_ctx) < 0){swr_free((SwrContext**)(&is->swr_ctx));return;
}

swr_alloc_set_opts 分配 SwrContext。

如果没分配或者初始化 swrcontext 失败,则释放并返回。

if(is->swr_ctx){const uint8_t** in = (const uint8_t**) frame->extended_data;uint8_t** out = &is->audio_buf1;int out_samples = frame->nb_samples * is->dst_tgt.freq / frame->sample_rate + 256;int out_bytes = av_samples_get_buffer_size(NULL, is->dst_tgt.channels, out_samples, is->dst_tgt.fmt, 0);if(out_bytes < 0){return;
}

如果 swrcontext 分配且初始化成功,并赋值。

然后通过 av_samples_get_buffer_size,获取 buffer_size,如果小于 0,则返回。

好了,今天就解析到这里。

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

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

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

相关文章

透视maven打包编译正常,intellj idea编译失败问题的本质

前言 maven多模块类型的项目&#xff0c;在Java的中大型应用中非常常见&#xff0c; 在 module 很多的情况&#xff0c;经常会出现各种各样的编辑依赖错误问题&#xff0c;今天记录一种比较常见的 case &#xff1a; A 子模块依赖 B 子模块&#xff0c;在 Terminal 上终端上 …

迷你型洗衣机好用吗?内衣洗衣机便宜好用的牌子

随着科技的快速发展&#xff0c;现在的人们越来越注重自己的卫生问题&#xff0c;不仅在吃上面会注重卫生问题&#xff0c;在用的上面也会更加严格要求&#xff0c;而衣服做为我们最贴身的东西&#xff0c;我们对它的要求也会更加高&#xff0c;所以最近这几年较火爆的无疑是内…

机器学习第8天:SVM分类

文章目录 机器学习专栏 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 非线性SVM分类 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用&#xff1a;判别种类 原理&#xff1a;找出一个决策边界&#xff0c;判断数据所处区域来识别种类 简单…

在js中a标签加入单击事件屏蔽href跳转页面

在JS中&#xff0c;我们可以通过添加单击事件来屏蔽a标签的href跳转页面。下面是实现这个功能的完整攻略&#xff1a; 1.使用addEventListener函数添加单击事件 我们可以通过addEventListener函数来为a标签添加单击事件&#xff0c;代码如下&#xff1a; document.querySele…

2311rust,到43版本更新

1.38.0 流水编译 要编译仓库,编译器不需要完全构建依赖项.相反,只需要它们的"元数据"(即类型,依赖关系,导出列表). 在编译过程的早期生成此元数据.从Rust1.38.0开始,Cargo利用这一点,在准备好元数据后立即自动开始构建依赖的仓库. 检查错误使用mem::{uninitialize…

【灾备】灾难恢复

文章目录 概述灾备指标虚拟化恢复灾难恢复计划四种方式灾难恢复相关技术来源 概述 灾难恢复&#xff08;Disaster recovery&#xff0c;也称灾备&#xff09;&#xff0c;指自然或人为灾害后&#xff0c;重新启用信息系统的数据、硬件及软体设备&#xff0c;恢复正常商业运作的…

Matlab通信仿真系列——图形处理函数

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、plot函数 (1)绘制一…

振弦式渗压计与振弦采集仪组成大坝水库安全监测的案例

振弦式渗压计与振弦采集仪组成大坝水库安全监测的案例 振弦式渗压计是一种常用的水文地质监测仪器&#xff0c;主要用于测量土体中的渗流压力、水位变化等参数。而振弦采集仪则是一种数据采集和传输装置&#xff0c;可以将振弦式渗压计采集到的数据进行处理和传输。 在大坝水库…

以makefile的方式在linux上编译代码(小白级别)

作者&#xff1a;爱塔居 作者简介&#xff1a;大四学生&#xff0c;分享自己的学习片段~ 目录 前言 一、创建主要文件 二、makefile 前言 多有不足&#xff0c;以供参考&#xff0c;欢迎大佬们指点。我是在虚拟机上执行的&#xff0c;应该都一样。我用的VirtualBox&#xff0c;…

【18年扬大真题】定义一个Point类,要求如下所述。(1)用构造函数初始化Point类的对象(2)定义函数Distance,计算平面上两点之间的距离

【18年扬大真题】定义一个Point类&#xff0c;要求如下所述。 &#xff08;1&#xff09;用构造函数初始化Point类的对象 &#xff08;2&#xff09;定义函数Distance&#xff0c;计算平面上两点之间的距离 #include<stdio.h> #include<math.h> typedef struct {d…

Proxmox download

Proxmox VE proxmox Virtual Environment是一个基于 QEMU/KVM 和 LXC 的开源服务器虚拟化管理解决方案。您可以使用集成的、易于使用的 Web 界面或通过 CLI 管理虚拟机、容器、高可用性集群、存储和网络。Proxmox VE 代码根据 GNU Affero 通用公共许可证第 3 版获得许可 Prox…

LeetCode7-整数反转

需要判断整数溢出,我这里的思路就是判断新的ans的值是否与(ans-mod)/10相等,如果溢出了,必然不相等,这是代码简洁且时间复杂度最快的做法! class Solution {public int reverse(int x) {if(x0){return 0;}boolean negativefalse;if(x<0){negativetrue;x-x;}int ans0;while(…

使用SpringBoot Actuator监控应用

使用SpringBootActuator监控应用 微服务的特点决定了功能模块的部署是分布式的&#xff0c;大部分功能模块都是运行在不同的机器上&#xff0c;彼此通过服务调用进 行交互&#xff0c;前后台的业务流会经过很多个微服务的处理和传递&#xff0c;出现了异常如何快速定位是哪个…

Python大数据之linux学习总结——day11_ZooKeeper

ZooKeeper ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构&#xff0c;ZooKeeper树中的每个节点被称为—Znode。且树…

Python scipy.spatial.distance.squareform() 函数的用法

scipy.spatial.distance.squareform 调用方法注意示例1 调用方法 from scipy.spatial.distance import pdist, squareformscipy.spatial.distance.squareform(X, forceno, checksTrue)各个参数意义&#xff1a; X&#xff1a;一个压缩或冗余的距离矩阵。 force&#xff1a;可以…

万字解析设计模式之 适配器模式

一、 适配器模式 1.1概述 将一个接口转换成客户希望的另一个接口&#xff0c;适配器模式使接口不兼容的那些类可以一起工作。 适配器模式分为类适配器模式和对象适配器模式&#xff0c;前者类之间的耦合度比后者高&#xff0c;且要求程序员了解现有组件库中的相关组件的内部结…

spring面试题合集介绍

订阅本合集&#xff0c;您将学习到一下内容&#xff1a; 一、Spring Framework 1.谈谈你对Spring的理解 2.Spring的优缺点是什么&#xff1f; 二、Spring IOC 3.什么是Spring IOC 容器&#xff1f;有什么作用&#xff1f; 4.Spring IoC 的实现机制是什么&#xff1f; 5.什么…

目标分割技术-语义分割总览

前言 博主现任高级人工智能工程师&#xff0c;曾发表多篇SCI且获得过多次国际竞赛奖项&#xff0c;理解各类模型原理以及每种模型的建模流程和各类题目分析方法。目的就是为了让零基础快速使用各类代码模型&#xff0c;每一篇文章都包含实战项目以及可运行代码。欢迎大家订阅一…

2023年度注册电气工程师(供配电)执业资格考试专业考试规范及设计手册

一&#xff0e;规程、规范&#xff1a; 1&#xff0e;《防止静电事故通用导则》GB 12158-2006&#xff1b; 2&#xff0e;《电能质量 供电电压偏差》GB/T 12325-2008&#xff1b; 3&#xff0e;《电能质量 电压波动和闪变》GB/T 12326-2008&#xff1b; 4&#xff0e;《电流…

录制第一个jmeter性能测试脚本2(http协议)——webtour

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录webtour&#xff0c;然后进入 页面进行查看。 目录 欢迎访问我的免费课程 PPT、安装包、视频应有尽有&#xff01; …