From 9e238148e18b0ac8a2dda780af670e9d2dacfbef Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 8 Jun 2002 14:59:34 +0000 Subject: [PATCH] Added element query Original commit message from CVS: Added element query --- gst/gstelement.c | 39 +++++++++++++++++++++++++++++++++++++++ gst/gstelement.h | 4 ++++ 2 files changed, 43 insertions(+) diff --git a/gst/gstelement.c b/gst/gstelement.c index b9e5f67..471c0e1 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -64,6 +64,8 @@ static void gst_element_dispatch_properties_changed (GObject * object, guint n static void gst_element_dispose (GObject *object); static gboolean gst_element_send_event_default (GstElement *element, GstEvent *event); +static gboolean gst_element_query_default (GstElement *element, GstPadQueryType type, + GstFormat *format, gint64 *value); static GstElementStateReturn gst_element_change_state (GstElement *element); static void gst_element_error_func (GstElement* element, GstElement *source, gchar *errormsg); @@ -162,6 +164,7 @@ gst_element_class_init (GstElementClass *klass) klass->padtemplates = NULL; klass->numpadtemplates = 0; klass->send_event = GST_DEBUG_FUNCPTR (gst_element_send_event_default); + klass->query = GST_DEBUG_FUNCPTR (gst_element_query_default); } static void @@ -1658,6 +1661,42 @@ gst_element_send_event (GstElement *element, GstEvent *event) return FALSE; } +static gboolean +gst_element_query_default (GstElement *element, GstPadQueryType type, + GstFormat *format, gint64 *value) +{ + GList *pads = element->pads; + gboolean res = FALSE; + + while (pads) { + GstPad *pad = GST_PAD_CAST (pads->data); + + if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { + if (GST_PAD_IS_CONNECTED (pad)) { + res = gst_pad_query (GST_PAD_PEER (pad), type, format, value); + break; + } + } + pads = g_list_next (pads); + } + return res; +} + +gboolean +gst_element_query (GstElement *element, GstPadQueryType type, + GstFormat *format, gint64 *value) +{ + g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE); + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + if (CLASS (element)->query) + return CLASS (element)->query (element, type, format, value); + + return FALSE; +} + + /** * gst_element_error: diff --git a/gst/gstelement.h b/gst/gstelement.h index c86bf09..f58e0ce 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -172,6 +172,8 @@ struct _GstElementClass { /* vtable*/ gboolean (*release_locks) (GstElement *element); gboolean (*send_event) (GstElement *element, GstEvent *event); + gboolean (*query) (GstElement *element, GstPadQueryType type, + GstFormat *format, gint64 *value); /* change the element state */ GstElementStateReturn (*change_state) (GstElement *element); /* request a new pad */ @@ -263,6 +265,8 @@ void gst_element_disconnect_pads (GstElement *src, const gchar *srcpadname, GstElement *dest, const gchar *destpadname); gboolean gst_element_send_event (GstElement *element, GstEvent *event); +gboolean gst_element_query (GstElement *element, GstPadQueryType type, + GstFormat *format, gint64 *value); void gst_element_set_eos (GstElement *element); -- 2.7.4