Hello
I have an application that has many different threads.
The sound card's PCM buffer is full during playback, and one thread is
currently in snd_pcm_wait() waiting for enough space to appear in the
buffer before doing the next snd_pcm_write().
A different thread wants to flush the buffer. There are two types of
flush: -
1) Immeadiately empty the buffer.
2) Stop accepting snd_pcm_write() commands until the current buffer has
drained.
Can someone please tell me which API calls I should make to get the
buffer to flush properly.
I am currently doing things like: -
int flush() {
<snip...>
if ((result=snd_pcm_reset(this->audio_fd)) < 0) {
printf("audio_alsa_out: Reset call failed err=%d\n",result);
}
if ((result=snd_pcm_drain(this->audio_fd)) < 0) {
printf("audio_alsa_out: Drain call failed err=%d\n",result);
}
if ((result=snd_pcm_prepare(this->audio_fd)) < 0) {
printf("audio_alsa_out: Prepare call failed err=%d\n",result);
}
}
But this is causing all sorts of problems, one of which is that the
application hangs, and has to be killed with -9, and the audio hardware
ring buffer is left playing a repeated sound even with: -
/proc/asound/card0/pcm0p/sub0# cat status
closed
Cheers
James
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel