pulseaudio编译 -- ALP Monolith Device环境

本文介绍如何解决ARM环境下脉冲音频交叉编译遇到的问题,包括代码修改、配置编译、安装及试运行步骤,并针对音质不佳和CPU占用率过高的问题给出了解决方案。

 

1. 代码的修改

除了之前模拟器环境编译的问题,还有个针对arm的

 src/pulsecore/svolume_arm.c

把这个文件的193行注释掉,不要优化soft volume 算法。因为优化所使用的arm 汇编在编译时有些问题。

补充 :如果编译的时候有这样的错误

 modules/module-cli.c:108: error: 'O_CLOEXEC' undeclared (first use in this function)

那么,请修改 /usr/include/bits/fcntl.h

# define O_NOATIME     01000000 /* Do not set atime.  */
+ # define O_CLOEXEC     02000000 /* Set close_on_exec.  */

 补充

./configure 的时候加入选项CFLAGS=-march=armv7-a 可以避免arm汇编出错,参考下面的configure配置。

 这样, src/pulsecore/svolume_arm.c代码可以不用修改。

2. 配置编译

这里列出概要

>>> libtool
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc && make

>>> sndfile
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-cpu-clip --disable-sqlite --disable-external-libs && make

>>> speex
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-oggtest --disable-vbr && make

使用 make CFLAGS=-mfpu=vfp -mfloat-abi=softfp 可以提升执行效率,降低CPU占用率

>>> alsa-lib
./configure  --prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-alisp --disable-python --disable-old-symbols --disable-seq --disable-rawmidi --disable-maintainer-mode && make

>>> intltool 

 如果参照模拟器环境设置了,它在这个scratchbox的所有targets中都是有效的

>>> pulseaudio
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-rpath --disable-nls --disable-dbus --disable-bluez --disable-samplerate --disable-solaris --disable-gconf --disable-avahi --disable-jack --disable-lirc --disable-hal --disable-polkit --disable-xmltoman --enable-ltdl-install=no --disable-oss --disable-glib2 --disable-gtk2 --disable-openssl --disable-ipv6 --disable-asyncns --disable-per-user-esound-socket --disable-x11 --disable-oss-output --disable-oss-wrapper --with-database=simple  CFLAGS=-march=armv7-a && make

3. 安装

进入各个代码目录,执行

 make DESTDIR=~/vroot install

这样,所有安装都以指定的 ~/vroot为 root 了。然后将该目录打包

cd ~/vroot

 tar cjf ../vroot.tar.bz2 .

将这个包传到板子,解压

 rdbc put ./vroot.tar.bz2 /var/home/

telnet 登录到板子

tar xjvf vroot.tar.bz2 -C /

4. 试运行

移除 /etc/asound.conf

kill audiomgrd

snd_ctrl 7         // 打开Speaker

>>> pulseaudio -nC

>>> load-module module-alsa-sink mmap=0    (注意,如果不指定 mmap=0, 那么此操作将导致进程阻塞。具体原因有待进一步分析)

试着用paplay放了个wav, 恩,有声音出来! 尽管音质不好,但我们的第一步目标已经达到 : 将PA整个交叉编译流程走了一遍。

2010.3.8 补充:

发现一些问题:

1. 上面提到的音质不好的问题

    这个和cpu占用率高有一定关系 ,如果 pulseaudio -nC --resample-method=trivial ,这样PA用最简单的resample,则声音会连续一些。

2. CPU占用率过高

    a> 和resample算法有关系,采用trivial算法,则cpu占用率从70%减少到50%,尽管这个占用率还是很高,但说明resample算法和 cpu占用率直接相关。另外发现,alsa sink这个模块本身也导致cpu占用率居高不下。测试发现,用 -nC启动,cpu占用率为0,加载 module-pipe-sink之后 cpu 占用率为 0. 一旦加载 alsa sink, cpu占用率在10%以上(此时,不播放任何声音)

3. ALSA sink 导致 pulseaudio 异常退出

-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值