Hi all,
I am trying to have dmix plugin work ( I succeeded) with the audio card that does not have hardware mmap support and uses pcm_indirect method to map software buffer for mmap feature.
Most of the plugins were working quite well with mmap/pcm_indirect combo. However, dmix plugin did not work (no sound). I debugged and realized that appl_ptr in pcm_direct.h(snd_pcm_indirect_playback_transfer()) was always 0 and hence nothing got copied to slave pcm buffer. I then discovered that dmix operates in freewheeling-mode..
I have made a small workaround patch (I believe it can be cleaned up) in case of free-wheeling mode, basically using sw_ready to hold bytes that need to be copied. I used rec->sw_ready because it looked safest to use for this purpose. As a result of this patch, normally period_size bytes are copied to pcm buffer every period and sound is playing smooth.
I am a noob in alsa and linux in general. So, I would like your opinion on the patch. I would much prefer if I could write a patch that is generic and clean enough, so that it could be used by others. New pcm-indirect.h attached.
Thanks a lot for your help. Regards Yogesh