gst/modplug/gstmodplug.cc: handle events - don't do crap when a discont arrives that...
authorBenjamin Otte <otte@gnome.org>
Sun, 14 Mar 2004 12:40:57 +0000 (12:40 +0000)
committerBenjamin Otte <otte@gnome.org>
Sun, 14 Mar 2004 12:40:57 +0000 (12:40 +0000)
Original commit message from CVS:
* gst/modplug/gstmodplug.cc:
handle events - don't do crap when a discont arrives that's not
necessary
This allows correct loading and playback of mods in Rhythmbox

ChangeLog
gst/modplug/gstmodplug.cc

index ff48eec0d3bfe77912897b312408ed12aa2daeee..7e8566daf140e21e4f4907c140d77253f9d28477 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-03-14  Benjamin Otte  <otte@gnome.org>
+
+       * gst/modplug/gstmodplug.cc:
+         handle events - don't do crap when a discont arrives that's not
+         necessary
+         This allows correct loading and playback of mods in Rhythmbox
+
 2004-03-14  Benjamin Otte  <otte@gnome.org>
 
        * configure.ac:
index c4f143d53a0aaf62fc8df8c247558c7ce8f5397a..06701c6deb064cadbcd00fca4bbdff687b0855da 100644 (file)
@@ -270,6 +270,7 @@ gst_modplug_init (GstModPlug *modplug)
   modplug->buffer_in = NULL;
   
   modplug->state = MODPLUG_STATE_NEED_TUNE;
+  GST_FLAG_SET (modplug, GST_ELEMENT_EVENT_AWARE);
 }
 
 static void
@@ -484,6 +485,7 @@ gst_modplug_fixate (GstPad *pad, const GstCaps *caps)
 static void
 gst_modplug_handle_event (GstModPlug *modplug)
 {
+  gint64 value;
   guint32 remaining;
   GstEvent *event;
 
@@ -495,7 +497,16 @@ gst_modplug_handle_event (GstModPlug *modplug)
   }
 
   switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      gst_event_unref (event);
+      break;
     case GST_EVENT_DISCONTINUOUS:
+      if (gst_event_discont_get_value (event, GST_FORMAT_BYTES, &value)) {
+       if (remaining == value) {
+         gst_event_unref (event);
+         break;
+       }
+      }
       gst_bytestream_flush_fast (modplug->bs, remaining);
     default:
       gst_pad_event_default (modplug->sinkpad, event);