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

Reply via email to