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