Jaroslav Kysela <perex <at> perex.cz> writes:
Nope, you probably use dmix plugin. This thread is only for management for shared device and has nothing to do with sample transfers.
Jaroslav
Sorry, I am confused with the mechanism of ALSA library. I roughly viewed the implementation of snd_pcm_writei(). In my config, snd_pcm_writei() will call snd_pcm_mmap_writei(). In snd_pcm_mmap_writei(), the available space is checked, and will wait for available space if the pcm is in block mode and the space is not large enough. Then snd_pcm_mmap_write_area() is called. I think that snd_pcm_mmap_commit() do the work of put data into the buffer in user space. Function snd_pcm_mmap_commit() shoud call snd_pcm_dmix_mmap_commit in my config. I saw snd_pcm_dmix_start_timer() here, and snd_pcm_dmix_start_timer() calls ioctl(). I don't know which file in ALSA driver will receive this ioctl system call. Does this function start something like timer, and this timer will put the buffer in user space into the buffer in kernel space automatically? I can't understand this mechanism. I am confused with the interaction between ALSA library and ALSA driver. I think the mixing procedure is implemented in user space, and ALSA driver only put the mixed buffer from user space to the soundcard. Am I right?