X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=gr-audio-alsa%2Fsrc%2Faudio_alsa_sink.cc;h=d44a93b3f37a44ccfb3635eeadf3419f6a8b9892;hb=64ee9a2973e6c217c54f8cb0433ab24b0e52e2cc;hp=c28e23fea64bfaa06e6800c752d1905e38963a9e;hpb=a8e58dba4d820e0b66d89bf05af29c381e46eef9;p=debian%2Fgnuradio diff --git a/gr-audio-alsa/src/audio_alsa_sink.cc b/gr-audio-alsa/src/audio_alsa_sink.cc index c28e23fe..d44a93b3 100644 --- a/gr-audio-alsa/src/audio_alsa_sink.cc +++ b/gr-audio-alsa/src/audio_alsa_sink.cc @@ -221,9 +221,15 @@ audio_alsa_sink::check_topology (int ninputs, int noutputs) int nchan = ninputs; int err; - // FIXME check_topology may be called more than once. + // Check the state of the stream // Ensure that the pcm is in a state where we can still mess with the hw_params - + snd_pcm_state_t state; + state=snd_pcm_state(d_pcm_handle); + if ( state== SND_PCM_STATE_RUNNING) + return true; // If stream is running, don't change any parameters + else if(state == SND_PCM_STATE_XRUN ) + snd_pcm_prepare ( d_pcm_handle ); // Prepare stream on underrun, and we can set parameters; + bool special_case = nchan == 1 && d_special_case_mono_to_stereo; if (special_case) nchan = 2;