Avoid the structure mashalling (and weird field naming).
GstFlowReturn res;
if (trace)
- gst_tracer_push_buffer_pre (pad, buffer);
+ gst_tracer_push_buffer_pre (gst_util_get_timestamp (), pad, buffer);
res = __gst_pad_push (pad, buffer);
if (trace)
- gst_tracer_push_buffer_post (pad, res);
+ gst_tracer_push_buffer_post (gst_util_get_timestamp (), pad, res);
return res;
}
GstFlowReturn res;
if (trace)
- gst_tracer_push_buffer_list_pre (pad, list);
+ gst_tracer_push_buffer_list_pre (gst_util_get_timestamp (), pad, list);
res = __gst_pad_push_list (pad, list);
if (trace)
- gst_tracer_push_buffer_list_post (pad, res);
+ gst_tracer_push_buffer_list_post (gst_util_get_timestamp (), pad, res);
return res;
}
"GstMessageDeviceAdded", "GstMessageDeviceRemoved", "device",
"uri-redirection-permanent",
"push_buffer::pre", "push_buffer::post", "push_buffer_list::pre",
- "push_buffer_list::post", ".ts", "return", "pad", "buffer", "list"
+ "push_buffer_list::post", "return", "pad", "buffer", "list"
};
GQuark _priv_gst_quark_table[GST_QUARK_MAX];
}
static void
-gst_tracer_invoke (GstTracer * self, GstTracerHookId id, GstStructure * s)
+gst_tracer_invoke (GstTracer * self, GstTracerHookId id, guint64 ts,
+ GstStructure * s)
{
GstTracerClass *klass = GST_TRACER_GET_CLASS (self);
g_return_if_fail (klass->invoke);
- klass->invoke (self, id, s);
+ klass->invoke (self, id, ts, s);
}
/* tracing modules */
}
static void
-dispatch (GstTracerHookId id, GstStructure * s)
+dispatch (GstTracerHookId id, guint64 ts, GstStructure * s)
{
GList *node;
for (node = tracers[id]; node; node = g_list_next (node)) {
- gst_tracer_invoke (node->data, id, s);
+ gst_tracer_invoke (node->data, id, ts, s);
}
}
/* tracing hooks */
void
-gst_tracer_push_buffer_pre (GstPad * pad, GstBuffer * buffer)
+gst_tracer_push_buffer_pre (guint64 ts, GstPad * pad, GstBuffer * buffer)
{
- dispatch (GST_TRACER_HOOK_ID_BUFFERS,
+ dispatch (GST_TRACER_HOOK_ID_BUFFERS, ts,
gst_structure_new_id (GST_QUARK (PUSH_BUFFER_PRE),
- GST_QUARK (DOT_TS), G_TYPE_UINT64, gst_util_get_timestamp (),
GST_QUARK (PAD), GST_TYPE_PAD, pad,
GST_QUARK (BUFFER), GST_TYPE_BUFFER, buffer, NULL));
}
void
-gst_tracer_push_buffer_post (GstPad * pad, GstFlowReturn res)
+gst_tracer_push_buffer_post (guint64 ts, GstPad * pad, GstFlowReturn res)
{
- dispatch (GST_TRACER_HOOK_ID_BUFFERS,
+ dispatch (GST_TRACER_HOOK_ID_BUFFERS, ts,
gst_structure_new_id (GST_QUARK (PUSH_BUFFER_POST),
- GST_QUARK (DOT_TS), G_TYPE_UINT64, gst_util_get_timestamp (),
GST_QUARK (PAD), GST_TYPE_PAD, pad,
GST_QUARK (RETURN), G_TYPE_INT, res, NULL));
}
void
-gst_tracer_push_buffer_list_pre (GstPad * pad, GstBufferList * list)
+gst_tracer_push_buffer_list_pre (guint64 ts, GstPad * pad, GstBufferList * list)
{
- dispatch (GST_TRACER_HOOK_ID_BUFFERS,
+ dispatch (GST_TRACER_HOOK_ID_BUFFERS, ts,
gst_structure_new_id (GST_QUARK (PUSH_BUFFER_LIST_PRE),
- GST_QUARK (DOT_TS), G_TYPE_UINT64, gst_util_get_timestamp (),
GST_QUARK (PAD), GST_TYPE_PAD, pad,
GST_QUARK (LIST), GST_TYPE_BUFFER_LIST, list, NULL));
}
void
-gst_tracer_push_buffer_list_post (GstPad * pad, GstFlowReturn res)
+gst_tracer_push_buffer_list_post (guint64 ts, GstPad * pad, GstFlowReturn res)
{
- dispatch (GST_TRACER_HOOK_ID_BUFFERS,
+ dispatch (GST_TRACER_HOOK_ID_BUFFERS, ts,
gst_structure_new_id (GST_QUARK (PUSH_BUFFER_LIST_POST),
- GST_QUARK (DOT_TS), G_TYPE_UINT64, gst_util_get_timestamp (),
GST_QUARK (PAD), GST_TYPE_PAD, pad,
GST_QUARK (RETURN), G_TYPE_INT, res, NULL));
}
gpointer _gst_reserved[GST_PADDING];
};
-typedef void (*GstTracerInvokeFunction) (GstTracer * self, GstTracerHookId id, GstStructure *s);
+typedef void (*GstTracerInvokeFunction) (GstTracer * self, GstTracerHookId id,
+ guint64 ts, GstStructure *s);
struct _GstTracerClass {
GstObjectClass parent_class;
gboolean gst_tracer_register (GstPlugin * plugin, const gchar * name, GType type);
gboolean gst_tracer_is_enabled (GstTracerHookId id);
-void gst_tracer_push_buffer_pre (GstPad *pad, GstBuffer *buffer);
-void gst_tracer_push_buffer_post (GstPad *pad, GstFlowReturn res);
-void gst_tracer_push_buffer_list_pre (GstPad * pad, GstBufferList * list);
-void gst_tracer_push_buffer_list_post (GstPad * pad, GstFlowReturn res);
+void gst_tracer_push_buffer_pre (guint64 ts, GstPad *pad, GstBuffer *buffer);
+void gst_tracer_push_buffer_post (guint64 ts, GstPad *pad, GstFlowReturn res);
+void gst_tracer_push_buffer_list_pre (guint64 ts, GstPad * pad, GstBufferList * list);
+void gst_tracer_push_buffer_list_post (guint64 ts, GstPad * pad, GstFlowReturn res);
#endif /* GST_DISABLE_GST_DEBUG */
_do_init);
static void gst_log_tracer_invoke (GstTracer * self, GstTracerHookId id,
- GstStructure * s);
+ guint64 ts, GstStructure * s);
static void
gst_log_tracer_class_init (GstLogTracerClass * klass)
}
static void
-gst_log_tracer_invoke (GstTracer * self, GstTracerHookId id, GstStructure * s)
+gst_log_tracer_invoke (GstTracer * self, GstTracerHookId id, guint64 ts,
+ GstStructure * s)
{
gchar *str = gst_structure_to_string (s);
/* TODO(ensonic): log to different categories depending on 'id'
static void gst_stats_tracer_finalize (GObject * obj);
static void gst_stats_tracer_invoke (GstTracer * obj, GstTracerHookId id,
- GstStructure * s);
+ guint64 ts, GstStructure * s);
static void
gst_stats_tracer_class_init (GstStatsTracerClass * klass)
}
static void
-do_push_buffer_pre (GstStatsTracer * self, GstStructure * s)
+do_push_buffer_pre (GstStatsTracer * self, guint64 ts, GstStructure * s)
{
GstPad *pad;
GstBuffer *buffer;
GstPadStats *stats;
- guint64 ts;
gst_structure_get (s,
- "pad", GST_TYPE_PAD, &pad,
- ".ts", G_TYPE_UINT64, &ts, "buffer", GST_TYPE_BUFFER, &buffer, NULL);
+ "pad", GST_TYPE_PAD, &pad, "buffer", GST_TYPE_BUFFER, &buffer, NULL);
stats = get_pad_stats (self, pad);
do_pad_stats (self, pad, stats, buffer, ts);
}
static void
-do_push_buffer_post (GstStatsTracer * self, GstStructure * s)
+do_push_buffer_post (GstStatsTracer * self, guint64 ts, GstStructure * s)
{
GstPad *pad;
GstPadStats *stats;
- guint64 ts;
- gst_structure_get (s,
- "pad", GST_TYPE_PAD, &pad, ".ts", G_TYPE_UINT64, &ts, NULL);
+ gst_structure_get (s, "pad", GST_TYPE_PAD, &pad, NULL);
stats = get_pad_stats (self, pad);
do_element_stats (self, pad, stats->last_ts, ts);
}
static void
-gst_stats_tracer_invoke (GstTracer * obj, GstTracerHookId id, GstStructure * s)
+gst_stats_tracer_invoke (GstTracer * obj, GstTracerHookId id, guint64 ts,
+ GstStructure * s)
{
GstStatsTracer *self = GST_STATS_TRACER_CAST (obj);
GQuark func = gst_structure_get_name_id (s);
if (func == funcs[PUSH_BUFFER_PRE])
- do_push_buffer_pre (self, s);
+ do_push_buffer_pre (self, ts, s);
else if (func == funcs[PUSH_BUFFER_POST])
- do_push_buffer_post (self, s);
+ do_push_buffer_post (self, ts, s);
}
static void