[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