From 73a071b77a7d3c3eb2bb0b652c4ecd46699a35f4 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 14 Feb 2004 09:06:06 +0000 Subject: [PATCH] ext/alsa/gstalsa.*: try xrun recovery when wait failed. Make xrun recovery function return TRUE/FALSE to indicate suc... Original commit message from CVS: 2004-02-14 Benjamin Otte * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait), (gst_alsa_xrun_recovery): * ext/alsa/gstalsa.h: try xrun recovery when wait failed. Make xrun recovery function return TRUE/FALSE to indicate success. (might fix #134354) --- ChangeLog | 8 ++++++++ ext/alsa/gstalsa.c | 12 +++++++++--- ext/alsa/gstalsa.h | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 83d8186677..b2d7e0bc2d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2004-02-14 Benjamin Otte + + * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait), + (gst_alsa_xrun_recovery): + * ext/alsa/gstalsa.h: + try xrun recovery when wait failed. Make xrun recovery function + return TRUE/FALSE to indicate success. (might fix #134354) + 2004-02-13 David Schleef * gst/sine/demo-dparams.c: (dynparm_log_value_changed), diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c index 09793bc837..4cfd524af7 100644 --- a/ext/alsa/gstalsa.c +++ b/ext/alsa/gstalsa.c @@ -800,8 +800,10 @@ gst_alsa_pcm_wait (GstAlsa *this) return FALSE; } } - GST_ERROR_OBJECT (this, "error waiting for alsa pcm: (%d: %s)", err, snd_strerror (err)); - return FALSE; + if (!gst_alsa_xrun_recovery (this)) { + GST_ERROR_OBJECT (this, "error waiting for alsa pcm: (%d: %s)", err, snd_strerror (err)); + return FALSE; + } } } return TRUE; @@ -843,7 +845,8 @@ gst_alsa_start (GstAlsa *this) } return TRUE; } -void + +gboolean gst_alsa_xrun_recovery (GstAlsa *this) { snd_pcm_status_t *status; @@ -879,7 +882,10 @@ gst_alsa_xrun_recovery (GstAlsa *this) if (!(gst_alsa_stop_audio (this) && gst_alsa_start_audio (this))) { GST_ELEMENT_ERROR (this, RESOURCE, FAILED, (NULL), ("Error restarting audio after xrun")); + return FALSE; } + + return TRUE; } /*** AUDIO SETUP / START / STOP ***********************************************/ diff --git a/ext/alsa/gstalsa.h b/ext/alsa/gstalsa.h index 7823bcb9b1..d610732d09 100644 --- a/ext/alsa/gstalsa.h +++ b/ext/alsa/gstalsa.h @@ -183,7 +183,7 @@ GstCaps * gst_alsa_caps (snd_pcm_format_t format, inline snd_pcm_sframes_t gst_alsa_update_avail (GstAlsa * this); inline gboolean gst_alsa_pcm_wait (GstAlsa * this); inline gboolean gst_alsa_start (GstAlsa * this); -void gst_alsa_xrun_recovery (GstAlsa * this); +gboolean gst_alsa_xrun_recovery (GstAlsa * this); /* format conversions */ inline snd_pcm_uframes_t gst_alsa_timestamp_to_samples (GstAlsa * this,