From: Lennart Poettering <mznyfn@0pointer.de>
To: James Courtier-Dutton <James@superbug.co.uk>
Cc: ALSA Development Mailing List <alsa-devel@alsa-project.org>
Subject: Re: Disabling buffer fill level preprocessing by ALSA
Date: Mon, 7 Jan 2008 21:21:04 +0100 [thread overview]
Message-ID: <20080107202104.GB31128@tango.0pointer.de> (raw)
In-Reply-To: <4782759B.5000208@superbug.co.uk>
On Mon, 07.01.08 18:55, James Courtier-Dutton (James@superbug.co.uk) wrote:
>
> Lennart Poettering wrote:
> > Hi!
> >
> > In PulseAudio I want to schedule on my own when I need to write audio
> > data into the device and when not. To achieve that I want to be
> > notified via poll() whenever a period boundary is passed (i.e. when an
> > IRQ happens), but only then. That's different from the usual mode
> > where you are notified via poll() whether there is space in the
> > playback buffer that needs to be filled up.
> >
> > On OSS the mmap() mode enables a mode like I described above. After
> > enabling mmap() the application can decide by itself what it considers
> > full and what empty in the dma buffer, and use GETOPTR to query the
> > playback position. poll() on the OSS fd will directly reflect the
> > sound card IRQs and is not influenced if you ever wrote data to device
> > or not.
> >
> > I assume that I can enable a mode like that with one of the SW
> > params. But quite frankly the docs for it are not enlighening at all.
> >
> > Lennart
> >
>
> What would you want to do that for? Surely you just want to be told "I
> need X samples now please", and that is what the current alsa
> poll/callback method does.
Not so "surely". In PA I want to schedule the wakeup frequency
dynamically, based on the strongest requirement of all conncteded
clients. To achieve that configure ALSA to use a large (2s) hw
playback buffer, and then want to disable sound cards interrupts
(except for time keeping), and schedule everything with system
timers. Because those I can reconfigure without having to fully reset
the audio device, and thus without getting any drop outs.
In effect, as long as the user just plays an MP3 or so, the system
will wakeup only every 2s or so and I will make use of the full hw
playback buffer I previously configured, and thus save power. However
as soon as a VoIP application connects which has stronger latency
requirements I set my wakeups (with system timers) more often and only
use a smaller part of the large hw audio buffer.
Since ALSA doesn't allow me to reconfigure the the audio interrupt
frequency dynamically during playback without having to reset the
device I use those system timers. And because I do use those, I don't
have much use for the buffer fill level management of ALSA -- because
it is almost always wrong, because it doesn't know anything about my
current latency constraints.
Now, with setting snd_pcm_sw_params_set_avail_min() to something
perversly huge I can make sure that ALSA never wakes me up. However,
that also has the effect that I can no longer user the sound card IRQ
for getting the most accurate timing information from the sound card.
Which sucks.
I only want to use notification via poll() for keeping time, I don't
want ALSA's buffer management.
Lennart
--
Lennart Poettering Red Hat, Inc.
lennart [at] poettering [dot] net ICQ# 11060553
http://0pointer.net/lennart/ GnuPG 0x1A015CC4
next prev parent reply other threads:[~2008-01-07 20:21 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-31 17:12 Disabling buffer fill level preprocessing by ALSA Lennart Poettering
2008-01-07 11:07 ` Takashi Iwai
2008-01-07 16:07 ` Lennart Poettering
2008-01-07 18:33 ` Jaroslav Kysela
2008-01-07 22:38 ` Lennart Poettering
2008-01-08 8:00 ` Jaroslav Kysela
2008-01-12 18:06 ` Lennart Poettering
2008-01-07 18:55 ` James Courtier-Dutton
2008-01-07 20:21 ` Lennart Poettering [this message]
2008-01-07 22:34 ` James Courtier-Dutton
2008-01-08 0:03 ` Lennart Poettering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080107202104.GB31128@tango.0pointer.de \
--to=mznyfn@0pointer.de \
--cc=James@superbug.co.uk \
--cc=alsa-devel@alsa-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.