/**
* gst_proxy_pad_query_default:
* @pad: a #GstPad to invoke the default query on.
+ * @parent: the parent of @pad or NULL
* @query: (transfer none): the #GstQuery to perform.
*
* Invoke the default query function of the proxy pad.
* Since: 0.10.36
*/
gboolean
-gst_proxy_pad_query_default (GstPad * pad, GstQuery * query)
+gst_proxy_pad_query_default (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res;
GstPad *target;
gboolean gst_proxy_pad_event_default (GstPad *pad, GstEvent *event);
-gboolean gst_proxy_pad_query_default (GstPad *pad, GstQuery *query);
+gboolean gst_proxy_pad_query_default (GstPad *pad, GstObject *parent,
+ GstQuery *query);
GstIterator* gst_proxy_pad_iterate_internal_links_default (GstPad *pad);
GstFlowReturn gst_proxy_pad_chain_default (GstPad *pad, GstBuffer *buffer);
GstFlowReturn gst_proxy_pad_chain_list_default (GstPad *pad, GstBufferList *list);
/**
* gst_pad_query_default:
* @pad: a #GstPad to call the default query handler on.
+ * @parent: the parent of @pad or NULL
* @query: (transfer none): the #GstQuery to handle.
*
* Invokes the default query handler for the given pad.
* Returns: TRUE if the query was performed successfully.
*/
gboolean
-gst_pad_query_default (GstPad * pad, GstQuery * query)
+gst_pad_query_default (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean forward = TRUE, ret = FALSE;
if ((func = GST_PAD_QUERYFUNC (pad)) == NULL)
goto no_func;
- res = func (pad, query);
+ res = func (pad, parent, query);
RELEASE_PARENT (parent);
/**
* GstPadQueryFunction:
* @pad: the #GstPad to query.
+ * @parent: the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT flag is set,
+ * @parent is guaranteed to be not-NULL and remain valid during the
+ * execution of this function.
* @query: the #GstQuery object to execute
*
* The signature of the query function.
*
* Returns: TRUE if the query could be performed.
*/
-typedef gboolean (*GstPadQueryFunction) (GstPad *pad, GstQuery *query);
+typedef gboolean (*GstPadQueryFunction) (GstPad *pad, GstObject *parent,
+ GstQuery *query);
/* linking */
gboolean gst_pad_query (GstPad *pad, GstQuery *query);
gboolean gst_pad_peer_query (GstPad *pad, GstQuery *query);
void gst_pad_set_query_function (GstPad *pad, GstPadQueryFunction query);
-gboolean gst_pad_query_default (GstPad *pad, GstQuery *query);
+gboolean gst_pad_query_default (GstPad *pad, GstObject *parent,
+ GstQuery *query);
/* misc helper functions */
gboolean gst_pad_forward (GstPad *pad, GstPadForwardFunction forward,
static void gst_base_parse_handle_tag (GstBaseParse * parse, GstEvent * event);
static gboolean gst_base_parse_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_base_parse_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_base_parse_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_base_parse_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_base_parse_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_base_parse_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstFlowReturn gst_base_parse_chain (GstPad * pad, GstBuffer * buffer);
static void gst_base_parse_loop (GstPad * pad);
}
static gboolean
-gst_base_parse_sink_query (GstPad * pad, GstQuery * query)
+gst_base_parse_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstBaseParse *parse;
GstBaseParseClass *bclass;
gboolean res;
- parse = GST_BASE_PARSE (gst_pad_get_parent (pad));
+ parse = GST_BASE_PARSE (parent);
bclass = GST_BASE_PARSE_GET_CLASS (parse);
switch (GST_QUERY_TYPE (query)) {
}
default:
{
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
}
- gst_object_unref (parse);
return res;
}
}
static gboolean
-gst_base_parse_src_query (GstPad * pad, GstQuery * query)
+gst_base_parse_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstBaseParse *parse;
gboolean res = FALSE;
- parse = GST_BASE_PARSE (GST_PAD_PARENT (pad));
+ parse = GST_BASE_PARSE (parent);
GST_LOG_OBJECT (parse, "handling query: %" GST_PTR_FORMAT, query);
gst_query_parse_position (query, &format, NULL);
/* try upstream first */
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
if (!res) {
/* Fall back on interpreting segment */
GST_OBJECT_LOCK (parse);
gst_query_parse_duration (query, &format, NULL);
/* consult upstream */
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
/* otherwise best estimate from us */
if (!res) {
gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
/* consult upstream */
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
/* we may be able to help if in TIME */
if (fmt == GST_FORMAT_TIME && gst_base_parse_is_seekable (parse)) {
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
static GstStateChangeReturn gst_base_sink_change_state (GstElement * element,
GstStateChange transition);
-static gboolean gst_base_sink_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_base_sink_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstFlowReturn gst_base_sink_chain (GstPad * pad, GstBuffer * buffer);
static GstFlowReturn gst_base_sink_chain_list (GstPad * pad,
GstBufferList * list);
/* FIXME: Casting to GstClockEntry only works because the types
* are the same */
if (G_LIKELY (sink->priv->cached_clock_id != NULL
- && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink->
- priv->cached_clock_id) == clock)) {
+ && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink->priv->
+ cached_clock_id) == clock)) {
if (!gst_clock_single_shot_id_reinit (clock, sink->priv->cached_clock_id,
time)) {
gst_clock_id_unref (sink->priv->cached_clock_id);
break;
}
default:
- res = gst_pad_query_default (basesink->sinkpad, query);
+ res =
+ gst_pad_query_default (basesink->sinkpad, GST_OBJECT_CAST (basesink),
+ query);
break;
}
return res;
}
static gboolean
-gst_base_sink_sink_query (GstPad * pad, GstQuery * query)
+gst_base_sink_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstBaseSink *basesink;
GstBaseSinkClass *bclass;
gboolean res;
- basesink = GST_BASE_SINK_CAST (gst_pad_get_parent (pad));
- if (G_UNLIKELY (basesink == NULL)) {
- gst_query_unref (query);
- return FALSE;
- }
-
+ basesink = GST_BASE_SINK_CAST (parent);
bclass = GST_BASE_SINK_GET_CLASS (basesink);
if (bclass->query)
else
res = FALSE;
- gst_object_unref (basesink);
-
return res;
}
static gboolean gst_base_src_send_event (GstElement * elem, GstEvent * event);
static gboolean gst_base_src_default_event (GstBaseSrc * src, GstEvent * event);
-static gboolean gst_base_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_base_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_base_src_activate_pool (GstBaseSrc * basesrc,
gboolean active);
}
static gboolean
-gst_base_src_query (GstPad * pad, GstQuery * query)
+gst_base_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstBaseSrc *src;
GstBaseSrcClass *bclass;
gboolean result = FALSE;
- src = GST_BASE_SRC (gst_pad_get_parent (pad));
- if (G_UNLIKELY (src == NULL))
- return FALSE;
-
+ src = GST_BASE_SRC (parent);
bclass = GST_BASE_SRC_GET_CLASS (src);
if (bclass->query)
result = bclass->query (src, query);
- gst_object_unref (src);
-
return result;
}
GstPadDirection direction, GstCaps * caps);
static gboolean gst_base_transform_setcaps (GstBaseTransform * trans,
GstPad * pad, GstCaps * caps);
-static gboolean gst_base_transform_query (GstPad * pad, GstQuery * query);
+static gboolean gst_base_transform_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_base_transform_default_query (GstBaseTransform * trans,
GstPadDirection direction, GstQuery * query);
static gboolean gst_base_transform_default_transform_size (GstBaseTransform *
}
static gboolean
-gst_base_transform_query (GstPad * pad, GstQuery * query)
+gst_base_transform_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstBaseTransform *trans;
GstBaseTransformClass *bclass;
gboolean ret = FALSE;
- trans = GST_BASE_TRANSFORM (gst_pad_get_parent (pad));
- if (G_UNLIKELY (trans == NULL))
- return FALSE;
-
+ trans = GST_BASE_TRANSFORM (parent);
bclass = GST_BASE_TRANSFORM_GET_CLASS (trans);
if (bclass->query)
ret = bclass->query (trans, GST_PAD_DIRECTION (pad), query);
- gst_object_unref (trans);
-
return ret;
}
GValue * value, GParamSpec * pspec);
static void gst_fd_sink_dispose (GObject * obj);
-static gboolean gst_fd_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_fd_sink_query (GstBaseSink * bsink, GstQuery * query);
static GstFlowReturn gst_fd_sink_render (GstBaseSink * sink,
GstBuffer * buffer);
static gboolean gst_fd_sink_start (GstBaseSink * basesink);
gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_fd_sink_unlock);
gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_fd_sink_unlock_stop);
gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_fd_sink_event);
+ gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_fd_sink_query);
g_object_class_install_property (gobject_class, ARG_FD,
g_param_spec_int ("fd", "fd", "An open file descriptor to write to",
static void
gst_fd_sink_init (GstFdSink * fdsink)
{
- GstPad *pad;
-
- pad = GST_BASE_SINK_PAD (fdsink);
- gst_pad_set_query_function (pad, GST_DEBUG_FUNCPTR (gst_fd_sink_query));
-
fdsink->fd = 1;
fdsink->uri = g_strdup_printf ("fd://%d", fdsink->fd);
fdsink->bytes_written = 0;
}
static gboolean
-gst_fd_sink_query (GstPad * pad, GstQuery * query)
+gst_fd_sink_query (GstBaseSink * bsink, GstQuery * query)
{
+ gboolean res = FALSE;
GstFdSink *fdsink;
- GstFormat format;
- fdsink = GST_FD_SINK (GST_PAD_PARENT (pad));
+ fdsink = GST_FD_SINK (bsink);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
+ {
+ GstFormat format;
+
gst_query_parse_position (query, &format, NULL);
+
switch (format) {
case GST_FORMAT_DEFAULT:
case GST_FORMAT_BYTES:
gst_query_set_position (query, GST_FORMAT_BYTES, fdsink->current_pos);
- return TRUE;
+ res = TRUE;
+ break;
default:
- return FALSE;
+ break;
}
-
+ break;
+ }
case GST_QUERY_FORMATS:
gst_query_set_formats (query, 2, GST_FORMAT_DEFAULT, GST_FORMAT_BYTES);
- return TRUE;
-
+ res = TRUE;
+ break;
case GST_QUERY_URI:
gst_query_set_uri (query, fdsink->uri);
- return TRUE;
-
+ res = TRUE;
+ break;
default:
- return gst_pad_query_default (pad, query);
+ res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
+ break;
+
}
+ return res;
}
static GstFlowReturn
static GstFlowReturn gst_funnel_sink_chain (GstPad * pad, GstBuffer * buffer);
static gboolean gst_funnel_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_funnel_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_funnel_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_funnel_src_event (GstPad * pad, GstEvent * event);
}
static gboolean
-gst_funnel_sink_query (GstPad * pad, GstQuery * query)
+gst_funnel_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstFunnel *funnel = GST_FUNNEL (GST_PAD_PARENT (pad));
+ GstFunnel *funnel = GST_FUNNEL (parent);
gboolean forward = TRUE;
gboolean res = TRUE;
static gint64 gst_selector_pad_get_running_time (GstSelectorPad * pad);
static void gst_selector_pad_reset (GstSelectorPad * pad);
static gboolean gst_selector_pad_event (GstPad * pad, GstEvent * event);
-static gboolean gst_selector_pad_query (GstPad * pad, GstQuery * query);
+static gboolean gst_selector_pad_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstIterator *gst_selector_pad_iterate_linked_pads (GstPad * pad);
static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstBuffer * buf);
}
static gboolean
-gst_selector_pad_query (GstPad * pad, GstQuery * query)
+gst_selector_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = FALSE;
switch (GST_QUERY_TYPE (query)) {
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
element, GstStateChange transition);
static gboolean gst_input_selector_event (GstPad * pad, GstEvent * event);
-static gboolean gst_input_selector_query (GstPad * pad, GstQuery * query);
+static gboolean gst_input_selector_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gint64 gst_input_selector_block (GstInputSelector * self);
/* FIXME: create these marshallers using glib-genmarshal */
/* query on the srcpad. We override this function because by default it will
* only forward the query to one random sinkpad */
static gboolean
-gst_input_selector_query (GstPad * pad, GstQuery * query)
+gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = FALSE;
GstInputSelector *sel;
- sel = GST_INPUT_SELECTOR (GST_PAD_PARENT (pad));
+ sel = GST_INPUT_SELECTOR (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_LATENCY:
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
}
static gboolean
-gst_multi_queue_sink_query (GstPad * pad, GstQuery * query)
+gst_multi_queue_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res;
case GST_QUERY_CAPS:
default:
/* default handling */
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
}
static gboolean
-gst_multi_queue_src_query (GstPad * pad, GstQuery * query)
+gst_multi_queue_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res;
/* FIXME, Handle position offset depending on queue size */
switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_ACCEPT_CAPS:
- case GST_QUERY_CAPS:
default:
/* default handling */
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
static GstStateChangeReturn gst_output_selector_change_state (GstElement *
element, GstStateChange transition);
static gboolean gst_output_selector_event (GstPad * pad, GstEvent * event);
-static gboolean gst_output_selector_query (GstPad * pad, GstQuery * query);
+static gboolean gst_output_selector_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static void gst_output_selector_switch_pad_negotiation_mode (GstOutputSelector *
sel, gint mode);
}
static gboolean
-gst_output_selector_query (GstPad * pad, GstQuery * query)
+gst_output_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = TRUE;
GstOutputSelector *sel;
GstPad *active = NULL;
- sel = GST_OUTPUT_SELECTOR (GST_PAD_PARENT (pad));
+ sel = GST_OUTPUT_SELECTOR (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_CAPS:
break;
}
default:
+ res = gst_pad_query_default (pad, parent, query);
break;
}
-
return res;
}
static void gst_queue_loop (GstPad * pad);
static gboolean gst_queue_handle_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_queue_handle_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_queue_handle_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_queue_handle_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_queue_handle_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_queue_handle_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstPadLinkReturn gst_queue_link_sink (GstPad * pad, GstPad * peer);
static GstPadLinkReturn gst_queue_link_src (GstPad * pad, GstPad * peer);
}
static gboolean
-gst_queue_handle_sink_query (GstPad * pad, GstQuery * query)
+gst_queue_handle_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstQueue *queue = GST_QUEUE (GST_PAD_PARENT (pad));
gboolean res;
switch (GST_QUERY_TYPE (query)) {
- case GST_QUERY_ACCEPT_CAPS:
- case GST_QUERY_CAPS:
default:
- if (!(res = gst_pad_peer_query (queue->srcpad, query)))
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
-
return res;
}
}
static gboolean
-gst_queue_handle_src_query (GstPad * pad, GstQuery * query)
+gst_queue_handle_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstQueue *queue = GST_QUEUE (GST_PAD_PARENT (pad));
+ GstQueue *queue = GST_QUEUE (parent);
gboolean res;
res = gst_pad_peer_query (queue->sinkpad, query);
- if (!res) {
+ if (!res)
return FALSE;
- }
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
static void gst_queue2_loop (GstPad * pad);
static gboolean gst_queue2_handle_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_queue2_handle_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_queue2_handle_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_queue2_handle_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_queue2_handle_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_queue2_handle_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_queue2_handle_query (GstElement * element,
GstQuery * query);
}
static gboolean
-gst_queue2_handle_sink_query (GstPad * pad, GstQuery * query)
+gst_queue2_handle_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
gboolean res;
switch (GST_QUERY_TYPE (query)) {
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
}
static gboolean
-gst_queue2_handle_src_query (GstPad * pad, GstQuery * query)
+gst_queue2_handle_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstQueue2 *queue;
- queue = GST_QUEUE2 (GST_PAD_PARENT (pad));
+ queue = GST_QUEUE2 (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
}
default:
/* peer handled other queries */
- if (!gst_pad_query_default (pad, query))
+ if (!gst_pad_query_default (pad, parent, query))
goto peer_failed;
break;
}
static gboolean
gst_queue2_handle_query (GstElement * element, GstQuery * query)
{
+ GstQueue2 *queue = GST_QUEUE2 (element);
+
/* simply forward to the srcpad query function */
- return gst_queue2_handle_src_query (GST_QUEUE2_CAST (element)->srcpad, query);
+ return gst_queue2_handle_src_query (queue->srcpad, GST_OBJECT_CAST (element),
+ query);
}
static void
static GstFlowReturn gst_tee_chain (GstPad * pad, GstBuffer * buffer);
static GstFlowReturn gst_tee_chain_list (GstPad * pad, GstBufferList * list);
static gboolean gst_tee_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_tee_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_tee_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_tee_sink_activate_push (GstPad * pad, gboolean active);
-static gboolean gst_tee_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_tee_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static gboolean gst_tee_src_activate_pull (GstPad * pad, gboolean active);
static GstFlowReturn gst_tee_src_get_range (GstPad * pad, guint64 offset,
guint length, GstBuffer ** buf);
}
static gboolean
-gst_tee_sink_query (GstPad * pad, GstQuery * query)
+gst_tee_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res;
switch (GST_QUERY_TYPE (query)) {
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
}
static gboolean
-gst_tee_src_query (GstPad * pad, GstQuery * query)
+gst_tee_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstTee *tee;
gboolean res;
GstPad *sinkpad;
- tee = GST_TEE (GST_PAD_PARENT (pad));
+ tee = GST_TEE (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_SCHEDULING:
break;
}
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
static gboolean gst_type_find_element_src_event (GstPad * pad,
GstEvent * event);
-static gboolean gst_type_find_handle_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_type_find_handle_src_query (GstPad * pad,
+ GstObject * parent, GstQuery * query);
static gboolean gst_type_find_element_sink_event (GstPad * pad,
GstEvent * event);
}
static gboolean
-gst_type_find_handle_src_query (GstPad * pad, GstQuery * query)
+gst_type_find_handle_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
GstTypeFindElement *typefind;
gboolean res = FALSE;
- GstPad *peer;
- typefind = GST_TYPE_FIND_ELEMENT (GST_PAD_PARENT (pad));
-
- peer = gst_pad_get_peer (typefind->sink);
- if (peer == NULL)
- return FALSE;
+ typefind = GST_TYPE_FIND_ELEMENT (parent);
- res = gst_pad_query (peer, query);
+ res = gst_pad_peer_query (typefind->sink, query);
if (!res)
goto out;
}
out:
- gst_object_unref (peer);
return res;
}
static GstFlowReturn gst_valve_chain (GstPad * pad, GstBuffer * buffer);
static gboolean gst_valve_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_valve_query (GstPad * pad, GstQuery * query);
+static gboolean gst_valve_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
#define _do_init \
GST_DEBUG_CATEGORY_INIT (valve_debug, "valve", 0, "Valve");
}
static gboolean
-gst_valve_query (GstPad * pad, GstQuery * query)
+gst_valve_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstValve *valve;
gboolean res;
GstPad *otherpad;
- valve = GST_VALVE (GST_PAD_PARENT (pad));
+ valve = GST_VALVE (parent);
otherpad = (pad == valve->sinkpad ? valve->srcpad : valve->sinkpad);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_CAPS:
if (!(res = gst_pad_peer_query (otherpad, query)))
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
default:
res = gst_pad_peer_query (otherpad, query);
GST_END_TEST;
static gboolean
-mq_dummypad_query (GstPad * sinkpad, GstQuery * query)
+mq_dummypad_query (GstPad * sinkpad, GstObject * parent, GstQuery * query)
{
gboolean res = TRUE;
break;
}
default:
- res = gst_pad_query_default (sinkpad, query);
+ res = gst_pad_query_default (sinkpad, parent, query);
break;
}
return res;