[alsa-devel] Disabling buffer fill level preprocessing by ALSA
Takashi Iwai
tiwai at suse.de
Mon Jan 7 12:07:00 CET 2008
At Mon, 31 Dec 2007 18:12:27 +0100,
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.
Set the stop_threshould sw_params to the boundary size.
snd_pcm_sw_params_get_boundary(sw_params, &boundary);
snd_pcm_sw_params_set_stop_threshold(pcm, sw_params, boundary);
then the driver behaves in the "freewheel" mode. The dmix plugin uses
this technique.
Takashi
More information about the Alsa-devel
mailing list