ALSA 音频数据传输 underrun 和 overrun
在 ALSA 数据传输中,最容易出现的错误是 underrun 和 overrun。
pcm 播放的时候,接口 snd_pcm_writei 返回 -EPIPE,为 underrun(不足)
录制音频的时候, 接口 snd_pcm_readi 返回 -EPIPE, 为 overrun(超载)
使用 ALSA 架构的驱动程,在实际开发使用过程中,比较常见的错误有 -EPIPE,为什么会出现呢?肯定是系统内部不和谐了!
在 Playback 时出现 EPIPE 错误是因为 ALSA 驱动 buffer 没有数据可以丢给 codec 所致,通俗一点就是上层给下面喂数据的速度慢了,下面饿晕了,所以抱怨你上层慢啊,给你一个 -EPIPE 错误,让你自己去找原因。
在 Capture 时出现 EPIPE 也是有原因的,ALSA 的驱动也有一块专门用来存储录音数据的 buffer,上层从该 buffer 搬运数据再存储起来就能得到我们需要的录音文件。一旦驱动的 buffer 满了,就会出现 EPIPE 的错误,因为上层读录音 buffer 数据的速度慢了,这就不能抱怨下层不给面子了。
通过分析出现原因后,我们得找找对策,说起来容易,做的可能因为系统的原因并不是想的那么容易。在播放的时候,如果会出现这种 -EPIPE 的错误,请调整下发数据的数据,加快一点点!录音的时候出现这种错误,请读得更快一点!可以提高任务的优先级来处理,也可以把驱动 buffer 扩大一下,给系统更多一些缓冲时间!
在录音时由于录音数据过快会产生overrun现象;在放音时由于用户层的音频数据到 DDR 中的速度比控制器到 codec 放出的速度慢,于是出现underrun 现象。
建议检查:
DMA 没有及时的从 DDR 中将数据搬到 FIFO
DDR 中申请的 buffer 不够大
DDR 中的 buffer 没有数据
ALSA 音频数据传输 underrun 和 overrun相关推荐
- 解决Android5.1系统下音频Xrun(underrun或overrun)问题
基于RK3288解决Android5.1系统下音频Xrun(underrun或overrun)问题 2018年11月23日 16:35:06 21cnhui 阅读数:38 标签: Android a ...
- 音频出现Xrun(underrun或overrun)的原因与解决办法
音频出现Xrun(underrun或overrun)的原因与解决办法 2016年11月09日 16:14:44 Qidi_Huang 阅读数:4614 标签: xrununderrunoverrun原 ...
- linux下lamealsa进行音频流操作(三)alsa音频编程教程
1. ALSA音频编程介绍 ALSA 代表高级 Linux 声音架构.它由一组内核驱动程序.一个应用程序编程接口 (API) 库和用于在 Linux 下支持声音的实用程序组成.在本文中,我简要概述 ...
- Linux ALSA 音频系统:物理链路篇
原址 1. Overview 硬件平台及软件版本: Kernel - 3.4.5 SoC - Samsung exynos CODEC - WM8994 Machine - goni_wm8994 U ...
- Linux ALSA音频驱动一:音频系统概述
音频系统概述 音频系统通过数据+控制总线与CODEC连接,控制通路用I2C,数据通常为I2S,框图如图1所示. I2C:寄存器读写,用于配置CODEC控制通路. I2S:音频数据传输,通常与platf ...
- Linux ALSA音频框架分析五:HDA Driver分析
Linux ALSA音频框架分析五:HDA Driver分析 一 概述 HDA(High Definition Audio)是intel设计的用来取代AC97的音频标准,硬件架构上由hda dodec ...
- Linux ALSA音频系统:platform,machine,codec
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_41965270/arti ...
- 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
**************************************************************************************************** ...
- linux音频时钟bclk,linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系
转:https://blog.csdn.net/lugandong/article/details/72468831 一. 拿512fs说话: 看图知道采样的位深是32bit(位),左右声道各占了8* ...
最新文章
- Python编程基础:第八节 判断语句If Statements
- [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解...
- 关于oracle监听程序的相关问题及解决方法
- zabbix监控ntpd服务
- C#规范整理·资源管理和序列化
- 6.Strings and Dictionaries
- 修复Mysql主从不同步shell
- php处理XML数据
- (转)JavaScript导出Word后对Word分页的处理
- Python学习---Python的框架基础学习
- python socket清空接受区_用 Python 开发一个 「聊天室」
- 【常用模块】OLED显示模块(原理讲解、STM32实例操作)
- 什么是 Hook 技术
- 中文讲解 机器学习 Machine Learning in Business 第二版,约翰.赫尔(John C. Hull ),Chenghsi Hsieh老师
- vs2017优雅配色
- 计算机网络谢希仁第七版课后习题答案(第九章)
- 从0开始构建一个k8s集群
- 追风筝的人 第九章
- 【空间描述与位姿变换】(台大林沛群课程学习笔记)持续更新~
- iOS 获取手机外网IP地址的成功与失败
热门文章
- 好像还挺好玩的GAN重制版2——Keras搭建SRGAN平台进行图片超分辨率提升
- 7.类型转换、消息处理与国际化
- 【人生苦短,我学 Python】基础篇——初步认识(Day1)
- Android系统的HAL层分析 -- Sensors
- 【微话】究竟什么是大数据?
- 高效率同步4开关Buck-Boost DC/DC控制器TMI5700
- STM32获取唯一身份标识unique ID
- 均值与期望:傻傻分不清?
- 河北省中考计算机操作试题2019,2019年河北省中考试卷、答案、解析
- 如何用python爬取图片数据_“python爬取微博图片教程“用Python爬虫爬取的图片怎么知道图片有没有水印...