pulseaudio
文章平均质量分 50
cgipro
这个作者很懒,什么都没留下…
展开
-
pulseaudio新建立模块的编译
<br />关于编写模块的文档,http://www.pulseaudio.org/wiki/WritingModules,有关于编译模块的说明,下面这样gcc -g -shared -o module-<yourmodule>.so module-<yourmodule>.c<br />但是这样很明显是不行的。<br />第一:有些库文件是没有办法找到的,必须在后面增加选项<br />-lpulse -lpulsecommon-0.9.21 -lpulsecore-0.9.21<br />第二:有些头原创 2010-06-30 11:02:00 · 1435 阅读 · 0 评论 -
基于mainloop io_event 的signal机制
<br />在看paplay.c代码的时候,发现其处理信号的方式比较特殊<br />过年之前这个是写好的,但不知道怎么回事,按了个空格键,1个多小时的记录全部丢失了。。。。注意保存<br />paplay.c中385行<br /> mainloop_api = pa_mainloop_get_api(m);<br /> r = pa_signal_init(mainloop_api);<br /> assert(r == 0);<br /> pa_signal_new(SIG原创 2010-12-21 14:12:00 · 936 阅读 · 0 评论 -
关于memblock
<br />memblock使用了共享内存技术,pulseaudio使用memblock来传递大块数据,这种用在进程间数据传递的时候是非常高效率的。内存分配与使用<br />PA启动后先分一大块共享内存(mempool),如果没有启动参数指定的话, 这个mempool的总大小为64KB * 1024,因为采用共享内存技术,所以实际在运行的时候用多少内存就实际分配这么多,不会一下子需要64MB。对于mempool,系统调用下面的API分配释放。<br />pool = pa_mempool_new原创 2010-12-21 14:11:00 · 1759 阅读 · 0 评论 -
pulseaudio调试信息输出控制机制
<br />pulseaudio的调试信息可以通过系统变量来控制。<br />PA中 trace信息分为:<br /> typedef enum pa_log_level {<br /> PA_LOG_ERROR = 0, /* Error messages */<br /> PA_LOG_WARN = 1, /* Warning messages */<br /> PA_LOG_NOTICE = 2, /* Notice messages */<br原创 2010-12-21 14:08:00 · 1117 阅读 · 0 评论 -
pulseaudio编译 -- ALP X86模拟器环境
<br /> <br />环境:<br />alp-sim 1.1.0<br />rootstrap: Main_Monolith_x86_rel_prod_gcc423_Validation_Roms<br />pulseaudio 0.9.15<br /> <br />依赖关系<br />1. > Libtool 2.0. From 0.9.15 onwards, libtool 2.x will be required. 我使用的2.2.6b<br />./configure --原创 2010-12-21 14:05:00 · 1146 阅读 · 0 评论 -
pulseaudio编译 -- ALP Monolith Device环境
<br /> 1. 代码的修改<br />除了之前模拟器环境编译的问题,还有个针对arm的<br /> src/pulsecore/svolume_arm.c<br />把这个文件的193行注释掉,不要优化soft volume 算法。因为优化所使用的arm 汇编在编译时有些问题。<br />补充:如果编译的时候有这样的错误<br /> modules/module-cli.c:108: error: 'O_CLOEXEC' undeclared (first use in this functio原创 2010-12-21 14:04:00 · 2598 阅读 · 0 评论 -
pulseaudio的 mainloop
<br />mainloop应该说是pulseaudio的控制核心,pulseaudio的任何工作是离不开mainloop的,看过wiki上的文档,知道pulseaudio提供给client使用的api分为简单方式和异步方式(相对的也叫复杂方式吧)。<br />但是,无论什么方式,都少不了mainloop,对于简单方式,或许从api上,无需关心mainloop, 但是,这些简单的api同样使用了mainloop, 可以参考simple.c, 可以发现在pa_simple_new的实现中,使用了pa_原创 2010-12-21 14:01:00 · 1496 阅读 · 0 评论 -
pulseaudio退出时的Aborting错误
<br />E: core.c: Assertion 'pa_hashmap_isempty(c->shared)' failed at pulsecore/core.c:199, function core_free(). Aborting.<br />最近编写audiomanager这个模块,发现一旦pulseaudio退出,系统就会出现上面的错误。<br />通过排除法发现问题出在 protocol extension 方面。由于protocol扩展这段代码的写法完全参照moblin的,所以没有太在意原创 2010-12-21 14:10:00 · 734 阅读 · 0 评论 -
Native Protocol 命令扩展
<br />任何stream试图连接到PA的时候,socket的callback会调用这个函数<br />pa_native_protocol_connect (pa_native_protocol *p, pa_iochannel *io, pa_native_options *o)<br />改函数,将建立一个S端stream对应这个io,同时注册这个stream的callback,在命令扩展中,关注的是如下这个cb<br />static void pstream_packet_callback(pa原创 2010-12-21 13:58:00 · 822 阅读 · 0 评论 -
pacmd命令行和pulseaudio -nC命令行方式的区别
<br />pacmd是通过socket方式连接,需要加载一个模块:module-cli-protocol-unix<br /> module-cli-protocol-unix这个模块接收socket发送的数据,然后将一行字符串交给CLI处理,即交给cli.c的line_callback函数来处理。<br />而pulseaudio -nC方式的命令行,属于pulseaudio进程本身。少了socket过程,后面还是用CLI处理用户输入的行。注意在处理行(字符串)数据的callback是iol原创 2010-12-21 13:59:00 · 1542 阅读 · 0 评论 -
client和sink之间的数据传递与同步
<br />之前分析过代码,也能基本确定大概的数据传输与数据同步的过程。但是没有实践总是感觉虚的很,所以通过GDB验证了自己前段时间的分析。<br /> 通过在命令行模式下执行<br /> >>> play-file /alpcode/s11.wav 0<br />将数据播放到sink 0,就是alsa-sink。<br />以下是代码在唤醒rtpoll之前的一个backtrace。下面简单分析一下这个过程。<br />#5 0xb7ef39f1 in sink_input_pop_cb (i=0x852原创 2010-12-21 13:56:00 · 1644 阅读 · 1 评论 -
pulseaudio模块的编写
<br /> <br />http://www.pulseaudio.org/wiki/WritingModules<br />简单总结一下这篇文档。<br />1. 要编写一个模块,你必须得实现下面两个函数int pa_init(pa_module* m);<br /><br />void pa_done(pa_module* m);<br />看函数名称就可以知道pa_init是在做初始化的工作,这个函数在load-module的时候被调用。pa_done做一些资源释放的工作,在module被卸原创 2010-06-30 11:08:00 · 2154 阅读 · 0 评论 -
如何查看pulseaudio系统日志
<br /> <br />一般情况下,pulseaudio是这样启动的<br /> pulseaudio --start --log-target=syslog<br />这个时候,可以用pacmd以命令行方式控制pulseaudio<br />如果这个时候想看pulseaudio的log怎么办<br />1. pacmd<br />2. set-log-level 4<br /> set-log-meta 1<br />3 打开菜单:系统 , 系统管理,系统日志查看器<br />4 看 syslog原创 2010-06-30 10:32:00 · 2109 阅读 · 3 评论 -
module-audiomanager无法加载的问题
<br />在编写好一个模块的雏形后,和pa一起编译没有什么问题,但是独立编译后的模块(.so),总是无法加载成功, ltdl_open失败。<br /> <br />我在解决这个问题的时候,大部分精力消耗在各个问题孤立的分析与孤立的尝试过程中。这样就不可避免的认为自己一部分正确的工作是错误的。<br />后来发现有些函数我用了,但是在库里面是local。这也会导致ltdl_open打开失败。1. libpulse的local限制<br />代码里面使用了pa_operation_done, pa_op原创 2010-06-30 11:20:00 · 937 阅读 · 0 评论 -
关于pulseaudio的一些总结
今年上半年一直在开发一个Limo的sound server,在ALP中是叫做AUDIO MANAGER的,所以在Limo项目里面开发的这个sound server我们也叫做Audio Manager(AM)。在开发这个新的AM之前,我们所有的人对pulseaudio是陌生的。所以这半年的时间是开发也是学习。在当时的开发过程和学习过程中遇到了不少的问题,便随手记录到了公司的confluence(和blog类似,公司内部共享)上面。 当时就想把这部分学习pulseaudio的经历记录在自己的blo原创 2010-12-21 14:34:00 · 2823 阅读 · 2 评论