linux audio(1)-pulseaudio模块数据流

本文主要讨论pulseaudio模块的数据流。这里的模块(module)主要限制在sink和source这两种类型。其他类型的数据流后续有空
再撰文讨论。

pulseaudio的模块一般会启动一路线程进行数据的搬运和处理。
下面的是module-null-source模块的数据搬运线程启动代码。

在这里插入图片描述

进入thread_func函数内部看看函数做了哪些工作。

a.设置线程优先级。

在这里插入图片描述

b.设置消息处理队列。

在这里插入图片描述

c.for循环处理数据。

在这里插入图片描述

接下来看看for循环里面如何处理数据。

1.获取当前的系统时间。

在这里插入图片描述
2.判断是否到了新的一次写数据周期

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d368741d443c497a96810c50a0cb02e7.png

3.向pulseaudio申请内存块memblock。

在这里插入图片描述

4.往内存块里写数据。

在这里插入图片描述

5.通知pulseaudio框架往内存块数据写完毕, 并释放内存块。

在这里插入图片描述

6.统计处理数据的时长。

在这里插入图片描述

7.设置定时器到下一个写数据的周期

在这里插入图片描述

8.休眠等待计时器以及货区本次休眠的时长。

在这里插入图片描述

整个搬运数据的过程中我们比较关注的就是u->block_usec。这个变量决定了每个读写周期的时长(不考虑系统抖动的情况下)以及每次读写数据的时长。这个时长最好和底层的硬件读写数据周期时长保持一致!!!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyc_audio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值