From 5e2770566f5824b5e059e6d414e9735fb592089b Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Thu, 18 Sep 2014 08:26:19 +0200 Subject: [PATCH] tracers: eliminate var_args Register tracer hooks as GCallback. Use macros for hook dispatch and cast the hook functions back to the appropriate type. --- gst/gsttracer.h | 6 +- gst/gsttracerutils.c | 38 +----------- gst/gsttracerutils.h | 143 +++++++++++++++++++++++-------------------- plugins/tracers/gstlatency.c | 42 ++++++------- plugins/tracers/gstlog.c | 99 ++++++++++++++++++------------ plugins/tracers/gstrusage.c | 5 +- plugins/tracers/gststats.c | 66 ++++++++------------ 7 files changed, 184 insertions(+), 215 deletions(-) diff --git a/gst/gsttracer.h b/gst/gsttracer.h index 489dd01..015df27 100644 --- a/gst/gsttracer.h +++ b/gst/gsttracer.h @@ -53,8 +53,6 @@ struct _GstTracer { gpointer _gst_reserved[GST_PADDING]; }; -typedef void (*GstTracerHookFunction) (GstTracer * self, va_list var_args); - struct _GstTracerClass { GstObjectClass parent_class; @@ -65,9 +63,9 @@ struct _GstTracerClass { 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); diff --git a/gst/gsttracerutils.c b/gst/gsttracerutils.c index 5b61730..af5c393 100644 --- a/gst/gsttracerutils.c +++ b/gst/gsttracerutils.c @@ -57,12 +57,6 @@ GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX]; 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) @@ -153,8 +147,7 @@ _priv_gst_tracer_deinit (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); @@ -171,36 +164,9 @@ gst_tracer_register_hook_id (GstTracer * tracer, GQuark detail, 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 */ diff --git a/gst/gsttracerutils.h b/gst/gsttracerutils.h index b3edc66..02f9ef7 100644 --- a/gst/gsttracerutils.h +++ b/gst/gsttracerutils.h @@ -41,10 +41,6 @@ void _priv_gst_tracer_deinit (void); 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 @@ -72,112 +68,123 @@ extern GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX]; /* 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 */ diff --git a/plugins/tracers/gstlatency.c b/plugins/tracers/gstlatency.c index 9ecf954..7f3101c 100644 --- a/plugins/tracers/gstlatency.c +++ b/plugins/tracers/gstlatency.c @@ -127,20 +127,16 @@ send_latency_probe (GstElement * parent, GstPad * pad, guint64 ts) } 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); @@ -160,10 +156,8 @@ calculate_latency (GstElement * parent, GstPad * pad, guint64 ts) } 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); @@ -171,21 +165,16 @@ do_push_buffer_post (GstTracer * self, va_list var_args) } 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); @@ -238,11 +227,18 @@ static void 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)); } diff --git a/plugins/tracers/gstlog.c b/plugins/tracers/gstlog.c index 2e429dc..39eabcb 100644 --- a/plugins/tracers/gstlog.c +++ b/plugins/tracers/gstlog.c @@ -53,100 +53,113 @@ G_DEFINE_TYPE_WITH_CODE (GstLogTracer, gst_log_tracer, GST_TYPE_TRACER, _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); } @@ -162,20 +175,28 @@ gst_log_tracer_init (GstLogTracer * 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-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)); } diff --git a/plugins/tracers/gstrusage.c b/plugins/tracers/gstrusage.c index 9a81ee1..be10ccc 100644 --- a/plugins/tracers/gstrusage.c +++ b/plugins/tracers/gstrusage.c @@ -146,10 +146,9 @@ free_thread_stats (gpointer data) } 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; @@ -348,7 +347,7 @@ gst_rusage_tracer_init (GstRUsageTracer * self) { 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); diff --git a/plugins/tracers/gststats.c b/plugins/tracers/gststats.c index b0e90cf..90e6fa3 100644 --- a/plugins/tracers/gststats.c +++ b/plugins/tracers/gststats.c @@ -336,11 +336,9 @@ do_element_stats (GstStatsTracer * self, GstPad * pad, GstClockTime elapsed1, /* 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); @@ -350,10 +348,8 @@ do_push_buffer_pre (GstStatsTracer * self, va_list var_args) } 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); @@ -380,11 +376,9 @@ do_push_buffer_list_item (GstBuffer ** buffer, guint idx, gpointer user_data) } 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); @@ -396,30 +390,24 @@ do_push_buffer_list_pre (GstStatsTracer * self, va_list var_args) } 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); @@ -433,11 +421,9 @@ do_pull_range_post (GstStatsTracer * self, va_list var_args) } 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); @@ -451,11 +437,9 @@ do_push_event_pre (GstStatsTracer * self, va_list var_args) } 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; @@ -466,11 +450,9 @@ do_post_message_pre (GstStatsTracer * self, va_list var_args) } 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; @@ -565,21 +547,21 @@ gst_stats_tracer_init (GstStatsTracer * self) 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)); } -- 2.7.4