summaryrefslogtreecommitdiff
path: root/gr-audio/lib/alsa
diff options
context:
space:
mode:
authorTom Rondeau2011-07-10 22:38:18 -0400
committerTom Rondeau2011-07-10 22:38:18 -0400
commit4f760496574a79379eff07e3d7cec33592be5b1b (patch)
tree93e32f837acc47560dbffedddf418f328f6e1d8e /gr-audio/lib/alsa
parent9d385102eb45a3eb4b55ec6c2c414d909d6e705d (diff)
downloadgnuradio-4f760496574a79379eff07e3d7cec33592be5b1b.tar.gz
gnuradio-4f760496574a79379eff07e3d7cec33592be5b1b.tar.bz2
gnuradio-4f760496574a79379eff07e3d7cec33592be5b1b.zip
audio: fixing alsa source like we did for alsa sink before.
Diffstat (limited to 'gr-audio/lib/alsa')
-rw-r--r--gr-audio/lib/alsa/audio_alsa_source.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/gr-audio/lib/alsa/audio_alsa_source.cc b/gr-audio/lib/alsa/audio_alsa_source.cc
index 4f0042b22..2f4506f71 100644
--- a/gr-audio/lib/alsa/audio_alsa_source.cc
+++ b/gr-audio/lib/alsa/audio_alsa_source.cc
@@ -217,8 +217,14 @@ audio_alsa_source::check_topology (int ninputs, int noutputs)
unsigned int nchan = noutputs;
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_stereo_to_mono;
if (special_case)