ext/alsa/gstalsa.c: really start/stop clock only on PLAYING <=> PAUSED
authorBenjamin Otte <otte@gnome.org>
Sat, 31 Jan 2004 20:57:21 +0000 (20:57 +0000)
committerBenjamin Otte <otte@gnome.org>
Sat, 31 Jan 2004 20:57:21 +0000 (20:57 +0000)
Original commit message from CVS:
2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>

* ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
(gst_alsa_drain_audio), (gst_alsa_stop_audio):
really start/stop clock only on PLAYING <=> PAUSED
* ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
remove \n from debugging lines
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
make it work when seeking does not
* ext/vorbis/vorbisdec.c: (vorbis_dec_event):
reset on DISCONT

ChangeLog
ext/alsa/gstalsa.c
ext/alsa/gstalsasink.c
ext/ogg/gstoggdemux.c
ext/vorbis/vorbisdec.c

index 94b685e00e22f4f69e2614410fe06904c1911ddd..edf7b9b1b5cbd55d72fdf1aaa4b2605051e5e66d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
+       (gst_alsa_drain_audio), (gst_alsa_stop_audio):
+         really start/stop clock only on PLAYING <=> PAUSED
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         remove \n from debugging lines
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
+         make it work when seeking does not
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+         reset on DISCONT
+
 2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
 
        * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start):
index 85b297ec59b13f5e8aa8b5b7efe8b4f1fce6585d..a030ac67d6b1a6673bd78445000bf084e6275863 100644 (file)
@@ -720,6 +720,9 @@ gst_alsa_change_state (GstElement *element)
         GST_ERROR_OBJECT (this, "Error unpausing sound: %s", snd_strerror (err));
         return GST_STATE_FAILURE;
       }
+    } else if (! (GST_FLAG_IS_SET (element, GST_ALSA_RUNNING) ||
+       gst_alsa_start_audio (this))) {
+      return GST_STATE_FAILURE;
     }
     gst_alsa_clock_start (this->clock);
     break;
@@ -730,11 +733,13 @@ gst_alsa_change_state (GstElement *element)
           GST_ERROR_OBJECT (this, "Error pausing sound: %s", snd_strerror (err));
           return GST_STATE_FAILURE;
         }
-        gst_alsa_clock_stop (this->clock);
       }
       break;
     }
+    gst_alsa_clock_stop (this->clock);
     /* if device doesn't know how to pause, we just stop */
+    if (GST_FLAG_IS_SET (element, GST_ALSA_RUNNING)) gst_alsa_stop_audio (this);
+    break;
   case GST_STATE_PAUSED_TO_READY:
     if (GST_FLAG_IS_SET (element, GST_ALSA_RUNNING)) gst_alsa_stop_audio (this);
     g_free (this->format);
@@ -836,7 +841,6 @@ gst_alsa_start (GstAlsa *this)
       g_assert_not_reached ();
       break;
   }
-  /* gst_alsa_clock_start (this->clock); */
   return TRUE;
 }
 void
@@ -1071,7 +1075,6 @@ gst_alsa_drain_audio (GstAlsa *this)
   switch (snd_pcm_state (this->handle)) {
     case SND_PCM_STATE_XRUN:
     case SND_PCM_STATE_RUNNING:
-      gst_alsa_clock_stop (this->clock);
       /* fall through - clock is already stopped when paused */
     case SND_PCM_STATE_PAUSED:
       /* snd_pcm_drain only works in blocking mode */
@@ -1098,7 +1101,6 @@ gst_alsa_stop_audio (GstAlsa *this)
   switch (snd_pcm_state (this->handle)) {
     case SND_PCM_STATE_XRUN:
     case SND_PCM_STATE_RUNNING:
-      gst_alsa_clock_stop (this->clock);
       /* fall through - clock is already stopped when paused */
     case SND_PCM_STATE_PAUSED:
       ERROR_CHECK (snd_pcm_drop (this->handle),
index e82698d8da4c415e834c09f76411c7308941a618..2e9ee223ebeded1cf848984737b214af47bf0b36 100644 (file)
@@ -374,7 +374,7 @@ no_difference:
          int samples = MIN (bytes, sample_diff) *
                     (element->numpads == 1 ? this->format->channels : 1);
          int size = samples * snd_pcm_format_physical_width (this->format->format) / 8;
-         GST_INFO_OBJECT (this, "Allocating %d bytes (%ld samples) now to resync: sample %ld expected, but got %ld\n", 
+         GST_INFO_OBJECT (this, "Allocating %d bytes (%ld samples) now to resync: sample %ld expected, but got %ld", 
                           size, MIN (bytes, sample_diff), time_sample, samplestamp);
          sink->data[i] = g_try_malloc (size);
          if (!sink->data[i]) {
@@ -387,7 +387,7 @@ no_difference:
          }
          sink->behaviour[i] = 1;
        } else if (gst_alsa_samples_to_bytes (this, -sample_diff) >= sink->buf[i]->size) {
-         GST_INFO_OBJECT (this, "Skipping %lu samples to resync (complete buffer): sample %ld expected, but got %ld\n", 
+         GST_INFO_OBJECT (this, "Skipping %lu samples to resync (complete buffer): sample %ld expected, but got %ld", 
                           gst_alsa_bytes_to_samples (this, sink->buf[i]->size), time_sample, samplestamp);                   
          /* this buffer is way behind */
          gst_buffer_unref (sink->buf[i]);
@@ -395,7 +395,7 @@ no_difference:
          continue;
        } else if (sample_diff < 0) {
          gint difference = gst_alsa_samples_to_bytes (this, -samplestamp);
-         GST_INFO_OBJECT (this, "Skipping %lu samples to resync: sample %ld expected, but got %ld\n",
+         GST_INFO_OBJECT (this, "Skipping %lu samples to resync: sample %ld expected, but got %ld",
                           (gulong) -sample_diff, time_sample, samplestamp);
          /* this buffer is only a bit behind */
           sink->size[i] = sink->buf[i]->size - difference;
index c6c9a04c660c2a5c56b3847ee88ec7db567fd3fd..9858f73c5d7ba2d1a443082e56cdfb1e0131d6ce 100644 (file)
@@ -564,6 +564,7 @@ gst_ogg_demux_chain (GstPad *pad, GstData *buffer)
              GST_FLAG_SET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT);
              goto out;
            }
+           gst_ogg_add_chain (ogg);
            GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY);
            /* fall through */
          case GST_OGG_STATE_SEEK:
index 82cb749178c9268257ec0c3983f308659b73d4f5..b8ab48409db1c4fe431e76a74cd926da0234763c 100644 (file)
@@ -276,6 +276,7 @@ vorbis_dec_event (GstVorbisDec *dec, GstEvent *event)
        } else {
          GST_ERROR_OBJECT (dec, "failed to parse data for DISCONT event, not sending any");
        }
+       vorbis_synthesis_restart (&dec->vd);
       }
       break;
     default: