[pulseaudio-discuss] Pulse Audio Sample Cache & resampling

Lennart Poettering lennart at poettering.net
Tue Feb 13 03:34:17 PST 2007


On Mon, 12.02.07 13:35, keith preston (keithpre at gmail.com) wrote:

> I was wondering about a status update on getting a fixed point
> resampler into pulseaudio.  I heard some of this work was taking
> place, but had not yet seen anything.  I am interested in helping if
> it would speed things along.

During FOMS and linux.conf.au Jean-Marc Valin from Speex hacked up a
fixed-point resampler:

http://svn.xiph.org/trunk/speex/libspeex/resample.h
http://svn.xiph.org/trunk/speex/libspeex/resample.c

It has a nice API and is reasonably high-quality. As soon as I am done
with my thesis and can focus full-time on PulseAudio again I will add
support for this new resampler.

If you are interested to work on this: it should be not too difficult,
probably requires substantial changes only in resampler.[ch] and a few
minor changes in some other files. (such as all files where
PA_RESAMPLER_SRC_ is referenced.)

Of course, libsamplerate support should be kept in, because it has
better quality. The current resampler.h API already supports two
implementations (a naive internal one, and libsamplerate), hence
adding a third one shouldn't be too difficult. libsamplerate should
be downgraded to an optional dependency, however.

To become truly useful on non-FP CPUs the current (naive) mixing code
needs to be rewritten, based on liboil. That however is not trivial,
since liboil lacks a few features (like adding 16bit integer arrays
into 32bit integer arrays), and we don't have a thread-safe bounce
buffer abstraction yet. And then we enter squishy ground, since the
whole thread-safety stuff is only available in the "lockfree" branch
for now - and that branch doesn't really work yet.

(BTW: If you interested read
http://0pointer.de/blog/projects/foms-lca-recap.html for a longer
list of what's new and what's coming in PulseAudio land.)

> I'm also interesting in helping with APIs especially like what gsmartmix was
> going to try and do.

This area is very much in flux right now. Since I am not quite sure
how a good API might look like I implemented only "automatic" policy
modules for now - which don't need a user API. Those are
module-volume-restore and module-rescue-streams.

In short: for now, feel free to work on adding the Speex resampler
into PA, but the rest is too unsettled, please wait with any further
work until I am done with my thesis and can focus on PA full-time
again (some time next month)

Thanks for your interest!

Lennart

-- 
Lennart Poettering; lennart [at] poettering [dot] net
ICQ# 11060553; GPG 0x1A015CC4; http://0pointer.net/lennart/



More information about the pulseaudio-discuss mailing list