mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
Added element query
Original commit message from CVS: Added element query
This commit is contained in:
parent
225d11913c
commit
9e238148e1
2 changed files with 43 additions and 0 deletions
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue