gpointer _gst_reserved[GST_PADDING];
};
-typedef void (*GstTracerHookFunction) (GstTracer * self, va_list var_args);
-
struct _GstTracerClass {
GstObjectClass parent_class;
GType gst_tracer_get_type (void);
void gst_tracer_register_hook (GstTracer *tracer, const gchar *detail,
- GstTracerHookFunction func);
+ GCallback func);
void gst_tracer_register_hook_id (GstTracer *tracer, GQuark detail,
- GstTracerHookFunction func);
+ GCallback func);
void gst_tracer_log_trace (GstStructure * s);
gboolean _priv_tracer_enabled = FALSE;
GHashTable *_priv_tracers = NULL;
-typedef struct
-{
- GstTracer *tracer;
- GstTracerHookFunction func;
-} GstTracerHook;
-
/* Initialize the tracing system */
void
_priv_gst_tracer_init (void)
}
void
-gst_tracer_register_hook_id (GstTracer * tracer, GQuark detail,
- GstTracerHookFunction func)
+gst_tracer_register_hook_id (GstTracer * tracer, GQuark detail, GCallback func)
{
gpointer key = GINT_TO_POINTER (detail);
GList *list = g_hash_table_lookup (_priv_tracers, key);
void
gst_tracer_register_hook (GstTracer * tracer, const gchar * detail,
- GstTracerHookFunction func)
+ GCallback func)
{
gst_tracer_register_hook_id (tracer, g_quark_try_string (detail), func);
}
-void
-gst_tracer_dispatch (GQuark detail, ...)
-{
- va_list var_args;
- gpointer key = GINT_TO_POINTER (detail);
- GList *list, *node;
- GstTracerHook *hook;
-
- list = g_hash_table_lookup (_priv_tracers, key);
- GST_DEBUG ("calling %d tracers for '%s'", g_list_length (list),
- g_quark_to_string (detail));
- for (node = list; node; node = g_list_next (node)) {
- hook = (GstTracerHook *) node->data;
- va_start (var_args, detail);
- hook->func (hook->tracer, var_args);
- va_end (var_args);
- }
- list = g_hash_table_lookup (_priv_tracers, NULL);
- GST_DEBUG ("calling %d tracers for '*'", g_list_length (list));
- for (node = list; node; node = g_list_next (node)) {
- hook = (GstTracerHook *) node->data;
- va_start (var_args, detail);
- hook->func (hook->tracer, var_args);
- va_end (var_args);
- }
-}
-
#endif /* GST_DISABLE_GST_DEBUG */
gboolean gst_tracer_register (GstPlugin * plugin, const gchar * name, GType type);
-/* tracing helpers */
-
-void gst_tracer_dispatch (GQuark detail, ...);
-
/* tracer quarks */
/* These enums need to match the number and order
/* tracing module helpers */
+typedef struct {
+ GObject *tracer;
+ GCallback func;
+} GstTracerHook;
+
extern gboolean _priv_tracer_enabled;
-extern GHashTable *_priv_tracers;
+/* key are hook-id quarks, values are GstTracerHook */
+extern GHashTable *_priv_tracers;
-#define GST_TRACER_IS_ENABLED(id) \
- (_priv_tracer_enabled && \
- (g_hash_table_contains (_priv_tracers, GINT_TO_POINTER(id))))
+#define GST_TRACER_IS_ENABLED (_priv_tracer_enabled)
#define GST_TRACER_TS \
GST_CLOCK_DIFF (_priv_gst_info_start_time, gst_util_get_timestamp ())
/* tracing hooks */
+#define GST_TRACER_ARGS h->tracer, ts
+#define GST_TRACER_DISPATCH(key,type,args) G_STMT_START{ \
+ if (GST_TRACER_IS_ENABLED) { \
+ GstClockTime ts = GST_TRACER_TS; \
+ GList *__l, *__n; \
+ GstTracerHook *h; \
+ __l = g_hash_table_lookup (_priv_tracers, GINT_TO_POINTER (key)); \
+ for (__n = __l; __n; __n = g_list_next (__n)) { \
+ h = (GstTracerHook *) __n->data; \
+ ((type)(h->func)) args; \
+ } \
+ __l = g_hash_table_lookup (_priv_tracers, NULL); \
+ for (__n = __l; __n; __n = g_list_next (__n)) { \
+ h = (GstTracerHook *) __n->data; \
+ ((type)(h->func)) args; \
+ } \
+ } \
+}G_STMT_END
+
+typedef void (*GstTracerHookPadPushPre) (GObject *, GstClockTime, GstPad *,
+ GstBuffer *);
#define GST_TRACER_PAD_PUSH_PRE(pad, buffer) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_PRE), \
- GST_TRACER_TS, \
- pad, buffer); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_PRE), \
+ GstTracerHookPadPushPre, (GST_TRACER_ARGS, pad, buffer)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPushPost) (GObject *, GstClockTime, GstPad *,
+ GstFlowReturn);
#define GST_TRACER_PAD_PUSH_POST(pad, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_POST), \
- GST_TRACER_TS, \
- pad, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_POST), \
+ GstTracerHookPadPushPost, (GST_TRACER_ARGS, pad, res)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPushListPre) (GObject *, GstClockTime, GstPad *,
+ GstBufferList *);
#define GST_TRACER_PAD_PUSH_LIST_PRE(pad, list) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_PRE), \
- GST_TRACER_TS, \
- pad, list); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_PRE), \
+ GstTracerHookPadPushListPre, (GST_TRACER_ARGS, pad, list)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPushListPost) (GObject *, GstClockTime, GstPad *,
+ GstFlowReturn);
#define GST_TRACER_PAD_PUSH_LIST_POST(pad, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_POST), \
- GST_TRACER_TS, \
- pad, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_POST), \
+ GstTracerHookPadPushListPost, (GST_TRACER_ARGS, pad, res)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPullRangePre) (GObject *, GstClockTime, GstPad *,
+ guint64, guint);
#define GST_TRACER_PAD_PULL_RANGE_PRE(pad, offset, size) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_PRE), \
- GST_TRACER_TS, \
- pad, offset, size); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_PRE), \
+ GstTracerHookPadPullRangePre, (GST_TRACER_ARGS, pad, offset, size)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPullRangePost) (GObject *, GstClockTime,
+ GstPad *, GstBuffer *, GstFlowReturn);
#define GST_TRACER_PAD_PULL_RANGE_POST(pad, buffer, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_POST), \
- GST_TRACER_TS, \
- pad, buffer, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_POST), \
+ GstTracerHookPadPullRangePost, (GST_TRACER_ARGS, pad, buffer, res)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPushEventPre) (GObject *, GstClockTime, GstPad *,
+ GstEvent *);
#define GST_TRACER_PAD_PUSH_EVENT_PRE(pad, event) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_PRE), \
- GST_TRACER_TS, \
- pad, event); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_PRE), \
+ GstTracerHookPadPushEventPre, (GST_TRACER_ARGS, pad, event)); \
}G_STMT_END
+typedef void (*GstTracerHookPadPushEventPost) (GObject *, GstClockTime,
+ GstPad *, gboolean);
#define GST_TRACER_PAD_PUSH_EVENT_POST(pad, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_POST), \
- GST_TRACER_TS, \
- pad, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_POST), \
+ GstTracerHookPadPushEventPost, (GST_TRACER_ARGS, pad, res)); \
}G_STMT_END
+typedef void (*GstTracerHookElementPostMessagePre) (GObject *, GstClockTime,
+ GstElement *, GstMessage *);
#define GST_TRACER_ELEMENT_POST_MESSAGE_PRE(element, message) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_PRE), \
- GST_TRACER_TS, \
- element, message); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_PRE), \
+ GstTracerHookElementPostMessagePre, (GST_TRACER_ARGS, element, message)); \
}G_STMT_END
+typedef void (*GstTracerHookElementPostMessagePost) (GObject *, GstClockTime,
+ GstElement *, gboolean);
#define GST_TRACER_ELEMENT_POST_MESSAGE_POST(element, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_POST), \
- GST_TRACER_TS, \
- element, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_POST), \
+ GstTracerHookElementPostMessagePost, (GST_TRACER_ARGS, element, res)); \
}G_STMT_END
+typedef void (*GstTracerHookElementQueryPre) (GObject *, GstClockTime,
+ GstElement *, GstQuery *);
#define GST_TRACER_ELEMENT_QUERY_PRE(element, query) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_PRE))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_PRE), \
- GST_TRACER_TS, \
- element, query); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_PRE), \
+ GstTracerHookElementQueryPre, (GST_TRACER_ARGS, element, query)); \
}G_STMT_END
+typedef void (*GstTracerHookElementQueryPost) (GObject *, GstClockTime,
+ GstElement *, gboolean);
#define GST_TRACER_ELEMENT_QUERY_POST(element, res) G_STMT_START{ \
- if (GST_TRACER_IS_ENABLED(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_POST))) { \
- gst_tracer_dispatch (GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_POST), \
- GST_TRACER_TS, \
- element, res); \
- } \
+ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_POST), \
+ GstTracerHookElementQueryPost, (GST_TRACER_ARGS, element, res)); \
}G_STMT_END
#else /* !GST_DISABLE_GST_DEBUG */
}
static void
-do_push_buffer_pre (GstTracer * self, va_list var_args)
+do_push_buffer_pre (GstTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstElement *parent = get_real_pad_parent (pad);
send_latency_probe (parent, pad, ts);
}
static void
-do_pull_range_pre (GstTracer * self, va_list var_args)
+do_pull_range_pre (GstTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstPad *peer_pad = GST_PAD_PEER (pad);
GstElement *parent = get_real_pad_parent (peer_pad);
}
static void
-do_push_buffer_post (GstTracer * self, va_list var_args)
+do_push_buffer_post (GstTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstPad *peer_pad = GST_PAD_PEER (pad);
GstElement *parent = get_real_pad_parent (peer_pad);
}
static void
-do_pull_range_post (GstTracer * self, va_list var_args)
+do_pull_range_post (GstTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstElement *parent = get_real_pad_parent (pad);
calculate_latency (parent, pad, ts);
}
static void
-do_push_event_pre (GstTracer * self, va_list var_args)
+do_push_event_pre (GstTracer * self, guint64 ts, GstPad * pad, GstEvent * ev)
{
- G_GNUC_UNUSED guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
- GstEvent *ev = va_arg (var_args, GstEvent *);
GstPad *peer_pad = GST_PAD_PEER (pad);
GstElement *parent = get_real_pad_parent (peer_pad);
gst_latency_tracer_init (GstLatencyTracer * self)
{
GstTracer *tracer = GST_TRACER (self);
- gst_tracer_register_hook (tracer, "pad-push-pre", do_push_buffer_pre);
- gst_tracer_register_hook (tracer, "pad-push-list-pre", do_push_buffer_pre);
- gst_tracer_register_hook (tracer, "pad-push-post", do_push_buffer_post);
- gst_tracer_register_hook (tracer, "pad-push-list-post", do_push_buffer_post);
- gst_tracer_register_hook (tracer, "pad-pull-range-pre", do_pull_range_pre);
- gst_tracer_register_hook (tracer, "pad-pull-range-post", do_pull_range_post);
- gst_tracer_register_hook (tracer, "pad-push-event-pre", do_push_event_pre);
+ gst_tracer_register_hook (tracer, "pad-push-pre",
+ G_CALLBACK (do_push_buffer_pre));
+ gst_tracer_register_hook (tracer, "pad-push-list-pre",
+ G_CALLBACK (do_push_buffer_pre));
+ gst_tracer_register_hook (tracer, "pad-push-post",
+ G_CALLBACK (do_push_buffer_post));
+ gst_tracer_register_hook (tracer, "pad-push-list-post",
+ G_CALLBACK (do_push_buffer_post));
+ gst_tracer_register_hook (tracer, "pad-pull-range-pre",
+ G_CALLBACK (do_pull_range_pre));
+ gst_tracer_register_hook (tracer, "pad-pull-range-post",
+ G_CALLBACK (do_pull_range_post));
+ gst_tracer_register_hook (tracer, "pad-push-event-pre",
+ G_CALLBACK (do_push_event_pre));
}
_do_init);
static void
-do_log (GstDebugCategory * cat, const char *format, va_list var_args)
+do_log (GstDebugCategory * cat, const char *fmt, ...)
{
- gst_debug_log_valist (cat, GST_LEVEL_TRACE, "", "", 0, NULL,
- format, var_args);
+ va_list var_args;
+
+ va_start (var_args, fmt);
+ gst_debug_log_valist (cat, GST_LEVEL_TRACE, "", "", 0, NULL, fmt, var_args);
+ va_end (var_args);
}
static void
-do_push_buffer_pre (GstTracer * self, va_list var_args)
+do_push_buffer_pre (GstTracer * self, guint64 ts, GstPad * pad,
+ GstBuffer * buffer)
{
do_log (GST_CAT_BUFFER,
"%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT,
- var_args);
+ ts, pad, buffer);
}
static void
-do_push_buffer_post (GstTracer * self, va_list var_args)
+do_push_buffer_post (GstTracer * self, guint64 ts, GstPad * pad,
+ GstFlowReturn res)
{
do_log (GST_CAT_BUFFER,
- "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
+ "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", ts, pad, res);
}
static void
-do_push_buffer_list_pre (GstTracer * self, va_list var_args)
+do_push_buffer_list_pre (GstTracer * self, guint64 ts, GstPad * pad,
+ GstBufferList * list)
{
do_log (GST_CAT_BUFFER_LIST,
- "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", list=%p", var_args);
+ "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", list=%p", ts, pad, list);
}
static void
-do_push_buffer_list_post (GstTracer * self, va_list var_args)
+do_push_buffer_list_post (GstTracer * self, guint64 ts, GstPad * pad,
+ GstFlowReturn res)
{
do_log (GST_CAT_BUFFER_LIST,
- "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
+ "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", ts, pad, res);
}
static void
-do_pull_range_pre (GstTracer * self, va_list var_args)
+do_pull_range_pre (GstTracer * self, guint64 ts, GstPad * pad, guint64 offset,
+ guint size)
{
do_log (GST_CAT_BUFFER,
"%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", offset=%" G_GUINT64_FORMAT
- ", size=%u", var_args);
+ ", size=%u", ts, pad, offset, size);
}
static void
-do_pull_range_post (GstTracer * self, va_list var_args)
+do_pull_range_post (GstTracer * self, guint64 ts, GstPad * pad,
+ GstBuffer * buffer, GstFlowReturn res)
{
do_log (GST_CAT_BUFFER,
"%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT
- ", res=%d", var_args);
+ ", res=%d", ts, pad, buffer, res);
}
static void
-do_push_event_pre (GstTracer * self, va_list var_args)
+do_push_event_pre (GstTracer * self, guint64 ts, GstPad * pad, GstEvent * event)
{
do_log (GST_CAT_EVENT,
"%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", event=%" GST_PTR_FORMAT,
- var_args);
+ ts, pad, event);
}
static void
-do_push_event_post (GstTracer * self, va_list var_args)
+do_push_event_post (GstTracer * self, guint64 ts, GstPad * pad, gboolean res)
{
do_log (GST_CAT_EVENT,
- "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
+ "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", ts, pad, res);
}
static void
-do_post_message_pre (GstTracer * self, va_list var_args)
+do_post_message_pre (GstTracer * self, guint64 ts, GstElement * elem,
+ GstMessage * msg)
{
do_log (GST_CAT_EVENT,
"%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", message=%"
- GST_PTR_FORMAT, var_args);
+ GST_PTR_FORMAT, ts, elem, msg);
}
static void
-do_post_message_post (GstTracer * self, va_list var_args)
+do_post_message_post (GstTracer * self, guint64 ts, GstElement * elem,
+ gboolean res)
{
do_log (GST_CAT_EVENT,
- "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", var_args);
+ "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", ts, elem,
+ res);
}
static void
-do_query_pre (GstTracer * self, va_list var_args)
+do_query_pre (GstTracer * self, guint64 ts, GstElement * elem, GstQuery * query)
{
do_log (GST_CAT_QUERY,
"%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", query=%"
- GST_PTR_FORMAT, var_args);
+ GST_PTR_FORMAT, ts, elem, query);
}
static void
-do_query_post (GstTracer * self, va_list var_args)
+do_query_post (GstTracer * self, guint64 ts, GstElement * elem, gboolean res)
{
do_log (GST_CAT_QUERY,
- "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", var_args);
+ "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", ts, elem,
+ res);
}
{
GstTracer *tracer = GST_TRACER (self);
- gst_tracer_register_hook (tracer, "pad-push-pre", do_push_buffer_pre);
- gst_tracer_register_hook (tracer, "pad-push-post", do_push_buffer_post);
+ gst_tracer_register_hook (tracer, "pad-push-pre",
+ G_CALLBACK (do_push_buffer_pre));
+ gst_tracer_register_hook (tracer, "pad-push-post",
+ G_CALLBACK (do_push_buffer_post));
gst_tracer_register_hook (tracer, "pad-push-list-pre",
- do_push_buffer_list_pre);
+ G_CALLBACK (do_push_buffer_list_pre));
gst_tracer_register_hook (tracer, "pad-push-list-post",
- do_push_buffer_list_post);
- gst_tracer_register_hook (tracer, "pad-pull-range-pre", do_pull_range_pre);
- gst_tracer_register_hook (tracer, "pad-pull-range-post", do_pull_range_post);
- gst_tracer_register_hook (tracer, "pad-push-event-pre", do_push_event_pre);
- gst_tracer_register_hook (tracer, "pad-push-event-post", do_push_event_post);
+ G_CALLBACK (do_push_buffer_list_post));
+ gst_tracer_register_hook (tracer, "pad-pull-range-pre",
+ G_CALLBACK (do_pull_range_pre));
+ gst_tracer_register_hook (tracer, "pad-pull-range-post",
+ G_CALLBACK (do_pull_range_post));
+ gst_tracer_register_hook (tracer, "pad-push-event-pre",
+ G_CALLBACK (do_push_event_pre));
+ gst_tracer_register_hook (tracer, "pad-push-event-post",
+ G_CALLBACK (do_push_event_post));
gst_tracer_register_hook (tracer, "element-post-message-pre",
- do_post_message_pre);
+ G_CALLBACK (do_post_message_pre));
gst_tracer_register_hook (tracer, "element-post-message-post",
- do_post_message_post);
- gst_tracer_register_hook (tracer, "element-query-pre", do_query_pre);
- gst_tracer_register_hook (tracer, "element-query-post", do_query_post);
+ G_CALLBACK (do_post_message_post));
+ gst_tracer_register_hook (tracer, "element-query-pre",
+ G_CALLBACK (do_query_pre));
+ gst_tracer_register_hook (tracer, "element-query-post",
+ G_CALLBACK (do_query_post));
}
}
static void
-do_stats (GstTracer * obj, va_list var_args)
+do_stats (GstTracer * obj, guint64 ts)
{
GstRUsageTracer *self = GST_RUSAGE_TRACER_CAST (obj);
- guint64 ts = va_arg (var_args, guint64);
GstThreadStats *stats;
gpointer thread_id = g_thread_self ();
guint avg_cpuload, cur_cpuload;
{
GstTracer *tracer = GST_TRACER (self);
- gst_tracer_register_hook_id (tracer, 0, do_stats);
+ gst_tracer_register_hook_id (tracer, 0, G_CALLBACK (do_stats));
self->threads = g_hash_table_new_full (NULL, NULL, NULL, free_thread_stats);
self->tvs_proc = make_trace_values (GST_SECOND);
/* hooks */
static void
-do_push_buffer_pre (GstStatsTracer * self, va_list var_args)
+do_push_buffer_pre (GstStatsTracer * self, guint64 ts, GstPad * this_pad,
+ GstBuffer * buffer)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *this_pad = va_arg (var_args, GstPad *);
- GstBuffer *buffer = va_arg (var_args, GstBuffer *);
GstPadStats *this_pad_stats = get_pad_stats (self, this_pad);
GstPad *that_pad = GST_PAD_PEER (this_pad);
GstPadStats *that_pad_stats = get_pad_stats (self, that_pad);
}
static void
-do_push_buffer_post (GstStatsTracer * self, va_list var_args)
+do_push_buffer_post (GstStatsTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstPadStats *stats = get_pad_stats (self, pad);
do_element_stats (self, pad, stats->last_ts, ts);
}
static void
-do_push_buffer_list_pre (GstStatsTracer * self, va_list var_args)
+do_push_buffer_list_pre (GstStatsTracer * self, guint64 ts, GstPad * this_pad,
+ GstBufferList * list)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *this_pad = va_arg (var_args, GstPad *);
- GstBufferList *list = va_arg (var_args, GstBufferList *);
GstPadStats *this_pad_stats = get_pad_stats (self, this_pad);
GstPad *that_pad = GST_PAD_PEER (this_pad);
GstPadStats *that_pad_stats = get_pad_stats (self, that_pad);
}
static void
-do_push_buffer_list_post (GstStatsTracer * self, va_list var_args)
+do_push_buffer_list_post (GstStatsTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstPadStats *stats = get_pad_stats (self, pad);
do_element_stats (self, pad, stats->last_ts, ts);
}
static void
-do_pull_range_pre (GstStatsTracer * self, va_list var_args)
+do_pull_range_pre (GstStatsTracer * self, guint64 ts, GstPad * pad)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
GstPadStats *stats = get_pad_stats (self, pad);
stats->last_ts = ts;
}
static void
-do_pull_range_post (GstStatsTracer * self, va_list var_args)
+do_pull_range_post (GstStatsTracer * self, guint64 ts, GstPad * this_pad,
+ GstBuffer * buffer)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *this_pad = va_arg (var_args, GstPad *);
- GstBuffer *buffer = va_arg (var_args, GstBuffer *);
GstPadStats *this_pad_stats = get_pad_stats (self, this_pad);
guint64 last_ts = this_pad_stats->last_ts;
GstPad *that_pad = GST_PAD_PEER (this_pad);
}
static void
-do_push_event_pre (GstStatsTracer * self, va_list var_args)
+do_push_event_pre (GstStatsTracer * self, guint64 ts, GstPad * pad,
+ GstEvent * ev)
{
- guint64 ts = va_arg (var_args, guint64);
- GstPad *pad = va_arg (var_args, GstPad *);
- GstEvent *ev = va_arg (var_args, GstEvent *);
GstElement *elem = get_real_pad_parent (pad);
GstElementStats *elem_stats = get_element_stats (self, elem);
GstPadStats *pad_stats = get_pad_stats (self, pad);
}
static void
-do_post_message_pre (GstStatsTracer * self, va_list var_args)
+do_post_message_pre (GstStatsTracer * self, guint64 ts, GstElement * elem,
+ GstMessage * msg)
{
- guint64 ts = va_arg (var_args, guint64);
- GstElement *elem = va_arg (var_args, GstElement *);
- GstMessage *msg = va_arg (var_args, GstMessage *);
GstElementStats *stats = get_element_stats (self, elem);
stats->last_ts = ts;
}
static void
-do_query_pre (GstStatsTracer * self, va_list var_args)
+do_query_pre (GstStatsTracer * self, guint64 ts, GstElement * elem,
+ GstQuery * qry)
{
- guint64 ts = va_arg (var_args, guint64);
- GstElement *elem = va_arg (var_args, GstElement *);
- GstQuery *qry = va_arg (var_args, GstQuery *);
GstElementStats *stats = get_element_stats (self, elem);
stats->last_ts = ts;
GstTracer *tracer = GST_TRACER (self);
gst_tracer_register_hook (tracer, "pad-push-pre",
- (GstTracerHookFunction) do_push_buffer_pre);
+ G_CALLBACK (do_push_buffer_pre));
gst_tracer_register_hook (tracer, "pad-push-post",
- (GstTracerHookFunction) do_push_buffer_post);
+ G_CALLBACK (do_push_buffer_post));
gst_tracer_register_hook (tracer, "pad-push-list-pre",
- (GstTracerHookFunction) do_push_buffer_list_pre);
+ G_CALLBACK (do_push_buffer_list_pre));
gst_tracer_register_hook (tracer, "pad-push-list-post",
- (GstTracerHookFunction) do_push_buffer_list_post);
+ G_CALLBACK (do_push_buffer_list_post));
gst_tracer_register_hook (tracer, "pad-pull-range-pre",
- (GstTracerHookFunction) do_pull_range_pre);
+ G_CALLBACK (do_pull_range_pre));
gst_tracer_register_hook (tracer, "pad-pull-range-post",
- (GstTracerHookFunction) do_pull_range_post);
+ G_CALLBACK (do_pull_range_post));
gst_tracer_register_hook (tracer, "pad-push-event-pre",
- (GstTracerHookFunction) do_push_event_pre);
+ G_CALLBACK (do_push_event_pre));
gst_tracer_register_hook (tracer, "element-post-message-pre",
- (GstTracerHookFunction) do_post_message_pre);
+ G_CALLBACK (do_post_message_pre));
gst_tracer_register_hook (tracer, "element-query-pre",
- (GstTracerHookFunction) do_query_pre);
+ G_CALLBACK (do_query_pre));
}