GstObject *parent;
gboolean handled = FALSE;
+ if (type & GST_PAD_PROBE_TYPE_BUFFER_LIST) {
+ GST_TRACER_PAD_CHAIN_LIST_PRE (pad, data);
+ } else {
+ GST_TRACER_PAD_CHAIN_PRE (pad, data);
+ }
+
GST_PAD_STREAM_LOCK (pad);
GST_OBJECT_LOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
+out:
+ if (type & GST_PAD_PROBE_TYPE_BUFFER_LIST) {
+ GST_TRACER_PAD_CHAIN_LIST_POST (pad, ret);
+ } else {
+ GST_TRACER_PAD_CHAIN_POST (pad, ret);
+ }
+
return ret;
/* ERRORS */
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
- return GST_FLOW_FLUSHING;
+ ret = GST_FLOW_FLUSHING;
+ goto out;
}
eos:
{
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
- return GST_FLOW_EOS;
+ ret = GST_FLOW_EOS;
+ goto out;
}
wrong_mode:
{
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
- return GST_FLOW_ERROR;
+ ret = GST_FLOW_ERROR;
+ goto out;
}
probe_handled:
handled = TRUE;
pad->ABI.abi.last_flowret = ret;
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
- return ret;
+ goto out;
}
no_parent:
{
gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
- return GST_FLOW_FLUSHING;
+ ret = GST_FLOW_FLUSHING;
+ goto out;
}
no_function:
{
g_critical ("chain on pad %s:%s but it has no chainfunction",
GST_DEBUG_PAD_NAME (pad));
GST_PAD_STREAM_UNLOCK (pad);
- return GST_FLOW_NOT_SUPPORTED;
+ ret = GST_FLOW_NOT_SUPPORTED;
+ goto out;
}
}
GST_TRACER_QUARK_HOOK_OBJECT_REFFED,
GST_TRACER_QUARK_HOOK_OBJECT_UNREFFED,
GST_TRACER_QUARK_HOOK_PLUGIN_FEATURE_LOADED,
+ GST_TRACER_QUARK_HOOK_PAD_CHAIN_PRE,
+ GST_TRACER_QUARK_HOOK_PAD_CHAIN_POST,
+ GST_TRACER_QUARK_HOOK_PAD_CHAIN_LIST_PRE,
+ GST_TRACER_QUARK_HOOK_PAD_CHAIN_LIST_POST,
GST_TRACER_QUARK_MAX
} GstTracerQuarkId;
GstTracerHookPluginFeatureLoaded, (GST_TRACER_ARGS, feature)); \
}G_STMT_END
+/**
+ * GstTracerHookPadChainPre:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @pad: the pad
+ * @buffer: the buffer
+ *
+ * Pre-hook for gst_pad_chain() named "pad-chain-pre".
+ *
+ * Since: 1.22
+ */
+typedef void (*GstTracerHookPadChainPre) (GObject *self, GstClockTime ts,
+ GstPad *pad, GstBuffer *buffer);
+
+/**
+ * GST_TRACER_PAD_CHAIN_PRE:
+ * @pad: a %GstPad
+ * @buffer: a %GstBuffer
+ *
+ * Dispatches the "pad-chain-pre" hook.
+ *
+ * Since: 1.22
+ */
+#define GST_TRACER_PAD_CHAIN_PRE(pad, buffer) G_STMT_START{ \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_PRE), \
+ GstTracerHookPadChainPre, (GST_TRACER_ARGS, pad, buffer)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookPadChainPost:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @pad: the pad
+ * @res: the result of gst_pad_chain()
+ *
+ * Post-hook for gst_pad_chain() named "pad-chain-post".
+ *
+ * Since: 1.22
+ */
+typedef void (*GstTracerHookPadChainPost) (GObject * self, GstClockTime ts,
+ GstPad *pad, GstFlowReturn res);
+
+/**
+ * GST_TRACER_PAD_CHAIN_POST:
+ * @pad: a %GstPad
+ * @res: a %GstFlowReturn
+ *
+ * Dispatches the "pad-chain-post" hook.
+ *
+ * Since: 1.22
+ */
+#define GST_TRACER_PAD_CHAIN_POST(pad, res) G_STMT_START{ \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_POST), \
+ GstTracerHookPadChainPost, (GST_TRACER_ARGS, pad, res)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookPadChainListPre:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @pad: the pad
+ * @list: the buffer-list
+ *
+ * Pre-hook for gst_pad_chain_list() named "pad-chain-list-pre".
+ *
+ * Since: 1.22
+ */
+typedef void (*GstTracerHookPadChainListPre) (GObject *self, GstClockTime ts,
+ GstPad *pad, GstBufferList *list);
+
+/**
+ * GST_TRACER_PAD_CHAIN_LIST_PRE:
+ * @pad: a %GstPad
+ * @list: a %GstBufferList
+ *
+ * Dispatches the "pad-chain-list-pre" hook.
+ *
+ * Since: 1.22
+ */
+#define GST_TRACER_PAD_CHAIN_LIST_PRE(pad, list) G_STMT_START{ \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_LIST_PRE), \
+ GstTracerHookPadChainListPre, (GST_TRACER_ARGS, pad, list)); \
+}G_STMT_END
+
+/**
+ * GstTracerHookPadChainListPost:
+ * @self: the tracer instance
+ * @ts: the current timestamp
+ * @pad: the pad
+ * @res: the result of gst_pad_chain_list()
+ *
+ * Post-hook for gst_pad_chain_list() named "pad-chain-list-post".
+ *
+ * Since: 1.22
+ */
+typedef void (*GstTracerHookPadChainListPost) (GObject *self, GstClockTime ts,
+ GstPad *pad,
+ GstFlowReturn res);
+
+/**
+ * GST_TRACER_PAD_CHAIN_LIST_POST:
+ * @pad: a %GstPad
+ * @res: a %GstFlowReturn
+ *
+ * Dispatches the "pad-chain-list-post" hook.
+ *
+ * Since: 1.22
+ */
+#define GST_TRACER_PAD_CHAIN_LIST_POST(pad, res) G_STMT_START{ \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_LIST_POST), \
+ GstTracerHookPadChainListPost, (GST_TRACER_ARGS, pad, res)); \
+}G_STMT_END
#else /* !GST_DISABLE_GST_TRACER_HOOKS */
#define GST_TRACER_OBJECT_REFFED(object, new_refcount)
#define GST_TRACER_OBJECT_UNREFFED(object, new_refcount)
#define GST_TRACER_PLUGIN_FEATURE_LOADED(feature)
+#define GST_TRACER_PAD_CHAIN_PRE(pad, buffer)
+#define GST_TRACER_PAD_CHAIN_POST(pad, res)
+#define GST_TRACER_PAD_CHAIN_LIST_PRE(pad, list)
+#define GST_TRACER_PAD_CHAIN_LIST_POST(pad, res)
#endif /* GST_DISABLE_GST_TRACER_HOOKS */