dtmfsrc: Make the dtmfsrc accept events sent with gst_element_send_event
authorYouness Alaoui <youness.alaoui@collabora.co.uk>
Thu, 26 Aug 2010 06:54:55 +0000 (02:54 -0400)
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>
Mon, 6 Sep 2010 10:45:44 +0000 (13:45 +0300)
The doc says to use gst_element_send_event on the pipeline, but if
we are to call it on the element itself, it's a noop. This should make it
handle the event properly before delegating it to basesrc.

gst/dtmf/gstdtmfsrc.c

index 8ed76e0356d12f757a31d4d5f6cba7d7e907362b..48d359bfe968f93473c4bd86192a78c4f3c561ed 100644 (file)
@@ -223,6 +223,7 @@ static void gst_dtmf_src_set_property (GObject * object, guint prop_id,
 static void gst_dtmf_src_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 static gboolean gst_dtmf_src_handle_event (GstBaseSrc * src, GstEvent * event);
+static gboolean gst_dtmf_src_send_event (GstElement * src, GstEvent * event);
 static GstStateChangeReturn gst_dtmf_src_change_state (GstElement * element,
     GstStateChange transition);
 static GstFlowReturn gst_dtmf_src_create (GstBaseSrc * basesrc,
@@ -275,6 +276,7 @@ gst_dtmf_src_class_init (GstDTMFSrcClass * klass)
 
   gstelement_class->change_state =
       GST_DEBUG_FUNCPTR (gst_dtmf_src_change_state);
+  gstelement_class->send_event = GST_DEBUG_FUNCPTR (gst_dtmf_src_send_event);
   gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_dtmf_src_unlock);
   gstbasesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_dtmf_src_unlock_stop);
 
@@ -403,6 +405,17 @@ gst_dtmf_src_handle_event (GstBaseSrc * src, GstEvent * event)
   return result;
 }
 
+
+static gboolean
+gst_dtmf_src_send_event (GstElement * element, GstEvent * event)
+{
+
+  if (gst_dtmf_src_handle_event (GST_BASE_SRC (element), event))
+    return TRUE;
+
+  return GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
+}
+
 static void
 gst_dtmf_src_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)