From: James Courtier-Dutton <James@superbug.co.uk>
To: James Courtier-Dutton <James@superbug.co.uk>,
ALSA Development Mailing List <alsa-devel@alsa-project.org>
Subject: Re: Disabling buffer fill level preprocessing by ALSA
Date: Mon, 07 Jan 2008 22:34:32 +0000 [thread overview]
Message-ID: <4782A8F8.8080609@superbug.co.uk> (raw)
In-Reply-To: <20080107202104.GB31128@tango.0pointer.de>
Lennart Poettering wrote:
> 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
>
>
Are you going to be at FOMS. It might be easier to explain to you there.
You are making assumptions about sound cards that might be wrong. E.g.
2secs hw buffer for instance.
next prev parent reply other threads:[~2008-01-07 22:34 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
2008-01-07 22:34 ` James Courtier-Dutton [this message]
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=4782A8F8.8080609@superbug.co.uk \
--to=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.