some more fixes for weird situations
authorBenjamin Otte <otte@gnome.org>
Fri, 18 Apr 2003 23:32:29 +0000 (23:32 +0000)
committerBenjamin Otte <otte@gnome.org>
Fri, 18 Apr 2003 23:32:29 +0000 (23:32 +0000)
Original commit message from CVS:
some more fixes for weird situations

ext/alsa/gstalsa.c

index f04d337..f7c120c 100644 (file)
@@ -1131,6 +1131,9 @@ gst_alsa_start (GstAlsa *this)
     case SND_PCM_STATE_XRUN:
       gst_alsa_xrun_recovery (this);
       return gst_alsa_start (this);
+    case SND_PCM_STATE_SETUP:
+      ERROR_CHECK (snd_pcm_prepare (this->handle), "error preparing: %s");
+    case SND_PCM_STATE_SUSPENDED:
     case SND_PCM_STATE_PREPARED:
       ERROR_CHECK (snd_pcm_start(this->handle), "error starting playback: %s");
       break;
@@ -1139,6 +1142,11 @@ gst_alsa_start (GstAlsa *this)
       break;
     case SND_PCM_STATE_RUNNING:
       break;
+    case SND_PCM_STATE_DRAINING:
+    case SND_PCM_STATE_OPEN:
+      /* this probably happens when someone replugged a pipeline and we're in a
+         really weird state because our cothread wasn't busted */
+      return FALSE;
     default:
       /* it's a bug when we get here */
       g_assert_not_reached ();
@@ -1147,7 +1155,6 @@ gst_alsa_start (GstAlsa *this)
   avail = (gint) gst_alsa_update_avail (this);
   if (avail < 0)
     return FALSE;
-  //this->transmitted = this->period_count * this->period_size - avail;
   gst_alsa_clock_start (this->clock);
   return TRUE;
 }