goom2k1: Fix event handling and negotiate as soon as possible
authorSebastian Dröge <slomo@circular-chaos.org>
Wed, 17 Jul 2013 12:30:16 +0000 (14:30 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Wed, 17 Jul 2013 12:30:16 +0000 (14:30 +0200)
gst/goom2k1/gstgoom.c

index e124edcd7e6f20ea15676dbeb213f25e75b90d5c..6376d35b260416ebd2a645cf5b4d93c5cd5f68d1 100644 (file)
@@ -106,6 +106,8 @@ static gboolean gst_goom_sink_event (GstPad * pad, GstObject * parent,
 static gboolean gst_goom_src_query (GstPad * pad, GstObject * parent,
     GstQuery * query);
 
+static gboolean gst_goom_src_negotiate (GstGoom * goom);
+
 #define gst_goom_parent_class parent_class
 typedef GstGoom GstGoom2k1;
 typedef GstGoomClass GstGoom2k1Class;
@@ -203,10 +205,12 @@ gst_goom_sink_setcaps (GstGoom * goom, GstCaps * caps)
 
   res = gst_structure_get_int (structure, "channels", &goom->channels);
   res &= gst_structure_get_int (structure, "rate", &goom->rate);
+  if (!res)
+    return FALSE;
 
   goom->bps = goom->channels * sizeof (gint16);
 
-  return res;
+  return gst_goom_src_negotiate (goom);
 }
 
 static gboolean
@@ -356,11 +360,11 @@ gst_goom_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
         goom->earliest_time = timestamp + diff;
       GST_OBJECT_UNLOCK (goom);
 
-      res = gst_pad_push_event (goom->sinkpad, event);
+      res = gst_pad_event_default (pad, parent, event);
       break;
     }
     default:
-      res = gst_pad_push_event (goom->sinkpad, event);
+      res = gst_pad_event_default (pad, parent, event);
       break;
   }
 
@@ -385,12 +389,9 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
       gst_event_unref (event);
       break;
     }
-    case GST_EVENT_FLUSH_START:
-      res = gst_pad_push_event (goom->srcpad, event);
-      break;
     case GST_EVENT_FLUSH_STOP:
       gst_goom_reset (goom);
-      res = gst_pad_push_event (goom->srcpad, event);
+      res = gst_pad_event_default (pad, parent, event);
       break;
     case GST_EVENT_SEGMENT:
     {
@@ -399,11 +400,11 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
        * we can do QoS */
       gst_event_copy_segment (event, &goom->segment);
 
-      res = gst_pad_push_event (goom->srcpad, event);
+      res = gst_pad_event_default (pad, parent, event);
       break;
     }
     default:
-      res = gst_pad_push_event (goom->srcpad, event);
+      res = gst_pad_event_default (pad, parent, event);
       break;
   }
 
@@ -469,12 +470,7 @@ gst_goom_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
 static GstFlowReturn
 ensure_negotiated (GstGoom * goom)
 {
-  gboolean reconfigure;
-
-  reconfigure = gst_pad_check_reconfigure (goom->srcpad);
-
-  /* we don't know an output format yet, pick one */
-  if (reconfigure || !gst_pad_has_current_caps (goom->srcpad)) {
+  if (gst_pad_check_reconfigure (goom->srcpad)) {
     if (!gst_goom_src_negotiate (goom))
       return GST_FLOW_NOT_NEGOTIATED;
   }