Coverage Report

Created: 2026-10-12 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gstreamer/subprojects/gstreamer/gst/gsttracerutils.h
Line
Count
Source
1
/* GStreamer
2
 * Copyright (C) 2013 Stefan Sauer <ensonic@users.sf.net>
3
 *
4
 * gsttracerutils.h: tracing subsystem
5
 *
6
 * This library is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Library General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Library General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Library General Public
17
 * License along with this library; if not, write to the
18
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19
 * Boston, MA 02110-1301, USA.
20
 */
21
22
23
#ifndef __GST_TRACER_UTILS_H__
24
#define __GST_TRACER_UTILS_H__
25
26
#include <glib.h>
27
#include <glib-object.h>
28
#include <gst/gstconfig.h>
29
#include <gst/gstbin.h>
30
#include <gst/gsttracer.h>
31
#include <gst/gstutils.h>
32
33
G_BEGIN_DECLS
34
35
#ifndef GST_DISABLE_GST_TRACER_HOOKS
36
37
/* tracing hooks */
38
39
void _priv_gst_tracing_init (void);
40
void _priv_gst_tracing_deinit (void);
41
42
/* tracer quarks */
43
44
/* These enums need to match the number and order
45
 * of strings declared in _quark_table, in gsttracerutils.c */
46
typedef enum /*< skip >*/
47
{
48
  GST_TRACER_QUARK_HOOK_PAD_PUSH_PRE = 0,
49
  GST_TRACER_QUARK_HOOK_PAD_PUSH_POST,
50
  GST_TRACER_QUARK_HOOK_PAD_PUSH_LIST_PRE,
51
  GST_TRACER_QUARK_HOOK_PAD_PUSH_LIST_POST,
52
  GST_TRACER_QUARK_HOOK_PAD_PULL_RANGE_PRE,
53
  GST_TRACER_QUARK_HOOK_PAD_PULL_RANGE_POST,
54
  GST_TRACER_QUARK_HOOK_PAD_PUSH_EVENT_PRE ,
55
  GST_TRACER_QUARK_HOOK_PAD_PUSH_EVENT_POST,
56
  GST_TRACER_QUARK_HOOK_PAD_QUERY_PRE ,
57
  GST_TRACER_QUARK_HOOK_PAD_QUERY_POST,
58
  GST_TRACER_QUARK_HOOK_ELEMENT_POST_MESSAGE_PRE,
59
  GST_TRACER_QUARK_HOOK_ELEMENT_POST_MESSAGE_POST,
60
  GST_TRACER_QUARK_HOOK_ELEMENT_QUERY_PRE,
61
  GST_TRACER_QUARK_HOOK_ELEMENT_QUERY_POST,
62
  GST_TRACER_QUARK_HOOK_ELEMENT_NEW,
63
  GST_TRACER_QUARK_HOOK_ELEMENT_ADD_PAD,
64
  GST_TRACER_QUARK_HOOK_ELEMENT_REMOVE_PAD,
65
  GST_TRACER_QUARK_HOOK_BIN_ADD_PRE,
66
  GST_TRACER_QUARK_HOOK_BIN_ADD_POST,
67
  GST_TRACER_QUARK_HOOK_BIN_REMOVE_PRE,
68
  GST_TRACER_QUARK_HOOK_BIN_REMOVE_POST,
69
  GST_TRACER_QUARK_HOOK_PAD_LINK_PRE,
70
  GST_TRACER_QUARK_HOOK_PAD_LINK_POST,
71
  GST_TRACER_QUARK_HOOK_PAD_UNLINK_PRE,
72
  GST_TRACER_QUARK_HOOK_PAD_UNLINK_POST,
73
  GST_TRACER_QUARK_HOOK_ELEMENT_CHANGE_STATE_PRE,
74
  GST_TRACER_QUARK_HOOK_ELEMENT_CHANGE_STATE_POST,
75
  GST_TRACER_QUARK_HOOK_MINI_OBJECT_CREATED,
76
  GST_TRACER_QUARK_HOOK_MINI_OBJECT_DESTROYED,
77
  GST_TRACER_QUARK_HOOK_OBJECT_CREATED,
78
  GST_TRACER_QUARK_HOOK_OBJECT_DESTROYED,
79
  GST_TRACER_QUARK_HOOK_MINI_OBJECT_REFFED,
80
  GST_TRACER_QUARK_HOOK_MINI_OBJECT_UNREFFED,
81
  GST_TRACER_QUARK_HOOK_OBJECT_REFFED,
82
  GST_TRACER_QUARK_HOOK_OBJECT_UNREFFED,
83
  GST_TRACER_QUARK_HOOK_PLUGIN_FEATURE_LOADED,
84
  GST_TRACER_QUARK_HOOK_PAD_CHAIN_PRE,
85
  GST_TRACER_QUARK_HOOK_PAD_CHAIN_POST,
86
  GST_TRACER_QUARK_HOOK_PAD_CHAIN_LIST_PRE,
87
  GST_TRACER_QUARK_HOOK_PAD_CHAIN_LIST_POST,
88
  GST_TRACER_QUARK_HOOK_PAD_SEND_EVENT_PRE,
89
  GST_TRACER_QUARK_HOOK_PAD_SEND_EVENT_POST,
90
  /**
91
   * GST_TRACER_QUARK_HOOK_MEMORY_INIT:
92
   *
93
   * Post-hook for memory initialization named "memory-init".
94
   *
95
   * Since: 1.26
96
   */
97
  GST_TRACER_QUARK_HOOK_MEMORY_INIT,
98
  /**
99
   * GST_TRACER_QUARK_HOOK_MEMORY_FREE_PRE:
100
   *
101
   * Pre-hook for memory freeing named "memory-free-pre".
102
   *
103
   * Since: 1.26
104
   */
105
  GST_TRACER_QUARK_HOOK_MEMORY_FREE_PRE,
106
  /**
107
   * GST_TRACER_QUARK_HOOK_MEMORY_FREE_POST:
108
   *
109
   * Post-hook for memory freeing named "memory-free-post".
110
   *
111
   * Since: 1.26
112
   */
113
  GST_TRACER_QUARK_HOOK_MEMORY_FREE_POST,
114
115
  /**
116
   * GST_TRACER_QUARK_HOOK_POOL_BUFFER_QUEUED:
117
   *
118
   * Hook for buffers queued into a buffer pool.
119
   *
120
   * Since: 1.28
121
   */
122
  GST_TRACER_QUARK_HOOK_POOL_BUFFER_QUEUED,
123
124
  /**
125
   * GST_TRACER_QUARK_HOOK_POOL_BUFFER_DEQUEUED:
126
   *
127
   * Hook for buffers dequeued from a buffer pool.
128
   *
129
   * Since: 1.28
130
   */
131
  GST_TRACER_QUARK_HOOK_POOL_BUFFER_DEQUEUED,
132
133
  /**
134
   * GST_TRACER_QUARK_HOOK_OBJECT_PARENT_SET:
135
   *
136
   * Hook for object parent changes.
137
   *
138
   * Since: 1.30
139
   */
140
  GST_TRACER_QUARK_HOOK_OBJECT_PARENT_SET,
141
  /**
142
   * GST_TRACER_QUARK_HOOK_SPAN_BEGIN:
143
   *
144
   * Hook for application defined span begin events.
145
   *
146
   * Since: 1.30
147
   */
148
  GST_TRACER_QUARK_HOOK_SPAN_BEGIN,
149
  /**
150
   * GST_TRACER_QUARK_HOOK_SPAN_END:
151
   *
152
   * Hook for application defined span end events.
153
   *
154
   * Since: 1.30
155
   */
156
  GST_TRACER_QUARK_HOOK_SPAN_END,
157
  /**
158
   * GST_TRACER_QUARK_HOOK_EVENT:
159
   *
160
   * Hook for application defined point events, named "event".
161
   *
162
   * Since: 1.30
163
   */
164
  GST_TRACER_QUARK_HOOK_EVENT,
165
166
  GST_TRACER_QUARK_MAX
167
} GstTracerQuarkId;
168
169
extern GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX + 1];
170
171
#define GST_TRACER_QUARK(q) _priv_gst_tracer_quark_table[GST_TRACER_QUARK_##q]
172
173
/* tracing module helpers */
174
175
typedef struct {
176
  GObject *tracer;
177
  GCallback func;
178
} GstTracerHook;
179
180
extern gboolean _priv_tracer_enabled;
181
/* key are hook-id quarks, values are GstTracerHook */
182
extern GHashTable *_priv_tracers;
183
184
#define GST_TRACER_IS_ENABLED (_priv_tracer_enabled)
185
186
#define GST_TRACER_TS \
187
  GST_CLOCK_DIFF (_priv_gst_start_time, gst_util_get_timestamp ())
188
189
/* tracing hooks */
190
191
#define GST_TRACER_ARGS h->tracer, ts
192
#define GST_TRACER_DISPATCH(key,type,args) G_STMT_START{ \
193
  if (GST_TRACER_IS_ENABLED) {                                         \
194
    GstClockTime ts = GST_TRACER_TS;                                   \
195
    GList *__l, *__n;                                                  \
196
    GstTracerHook *h;                                                  \
197
    __l = g_hash_table_lookup (_priv_tracers, GINT_TO_POINTER (key));  \
198
    for (__n = __l; __n; __n = g_list_next (__n)) {                    \
199
      h = (GstTracerHook *) __n->data;                                 \
200
      ((type)(h->func)) args;                                          \
201
    }                                                                  \
202
    __l = g_hash_table_lookup (_priv_tracers, NULL);                   \
203
    for (__n = __l; __n; __n = g_list_next (__n)) {                    \
204
      h = (GstTracerHook *) __n->data;                                 \
205
      ((type)(h->func)) args;                                          \
206
    }                                                                  \
207
  }                                                                    \
208
}G_STMT_END
209
210
/**
211
 * GstTracerHookPadPushPre:
212
 * @self: the tracer instance
213
 * @ts: the current timestamp
214
 * @pad: the pad
215
 * @buffer: the buffer
216
 *
217
 * Pre-hook for gst_pad_push() named "pad-push-pre".
218
 */
219
typedef void (*GstTracerHookPadPushPre) (GObject *self, GstClockTime ts,
220
    GstPad *pad, GstBuffer *buffer);
221
#define GST_TRACER_PAD_PUSH_PRE(pad, buffer) G_STMT_START{ \
222
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_PRE), \
223
    GstTracerHookPadPushPre, (GST_TRACER_ARGS, pad, buffer)); \
224
}G_STMT_END
225
226
/**
227
 * GstTracerHookPadPushPost:
228
 * @self: the tracer instance
229
 * @ts: the current timestamp
230
 * @pad: the pad
231
 * @res: the result of gst_pad_push()
232
 *
233
 * Post-hook for gst_pad_push() named "pad-push-post".
234
 */
235
typedef void (*GstTracerHookPadPushPost) (GObject * self, GstClockTime ts,
236
    GstPad *pad, GstFlowReturn res);
237
#define GST_TRACER_PAD_PUSH_POST(pad, res) G_STMT_START{ \
238
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_POST), \
239
    GstTracerHookPadPushPost, (GST_TRACER_ARGS, pad, res)); \
240
}G_STMT_END
241
242
/**
243
 * GstTracerHookPadPushListPre:
244
 * @self: the tracer instance
245
 * @ts: the current timestamp
246
 * @pad: the pad
247
 * @list: the buffer-list
248
 *
249
 * Pre-hook for gst_pad_push_list() named "pad-push-list-pre".
250
 */
251
typedef void (*GstTracerHookPadPushListPre) (GObject *self, GstClockTime ts,
252
    GstPad *pad, GstBufferList *list);
253
#define GST_TRACER_PAD_PUSH_LIST_PRE(pad, list) G_STMT_START{ \
254
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_PRE), \
255
    GstTracerHookPadPushListPre, (GST_TRACER_ARGS, pad, list)); \
256
}G_STMT_END
257
258
/**
259
 * GstTracerHookPadPushListPost:
260
 * @self: the tracer instance
261
 * @ts: the current timestamp
262
 * @pad: the pad
263
 * @res: the result of gst_pad_push_list()
264
 *
265
 * Post-hook for gst_pad_push_list() named "pad-push-list-post".
266
 */
267
typedef void (*GstTracerHookPadPushListPost) (GObject *self, GstClockTime ts,
268
    GstPad *pad,
269
    GstFlowReturn res);
270
#define GST_TRACER_PAD_PUSH_LIST_POST(pad, res) G_STMT_START{ \
271
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_LIST_POST), \
272
    GstTracerHookPadPushListPost, (GST_TRACER_ARGS, pad, res)); \
273
}G_STMT_END
274
275
/**
276
 * GstTracerHookPadPullRangePre:
277
 * @self: the tracer instance
278
 * @ts: the current timestamp
279
 * @pad: the pad
280
 * @offset: the stream offset
281
 * @size: the requested size
282
 *
283
 * Pre-hook for gst_pad_pull_range() named "pad-pull-range-pre".
284
 */
285
typedef void (*GstTracerHookPadPullRangePre) (GObject *self, GstClockTime ts,
286
    GstPad *pad, guint64 offset, guint size);
287
#define GST_TRACER_PAD_PULL_RANGE_PRE(pad, offset, size) G_STMT_START{ \
288
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_PRE), \
289
    GstTracerHookPadPullRangePre, (GST_TRACER_ARGS, pad, offset, size)); \
290
}G_STMT_END
291
292
/**
293
 * GstTracerHookPadPullRangePost:
294
 * @self: the tracer instance
295
 * @ts: the current timestamp
296
 * @pad: the pad
297
 * @buffer: the buffer
298
 * @res: the result of gst_pad_pull_range()
299
 *
300
 * Post-hook for gst_pad_pull_range() named "pad-pull-range-post".
301
 */
302
typedef void (*GstTracerHookPadPullRangePost) (GObject *self, GstClockTime ts,
303
    GstPad *pad, GstBuffer *buffer, GstFlowReturn res);
304
#define GST_TRACER_PAD_PULL_RANGE_POST(pad, buffer, res) G_STMT_START{ \
305
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PULL_RANGE_POST), \
306
    GstTracerHookPadPullRangePost, (GST_TRACER_ARGS, pad, buffer, res)); \
307
}G_STMT_END
308
309
/**
310
 * GstTracerHookPadPushEventPre:
311
 * @self: the tracer instance
312
 * @ts: the current timestamp
313
 * @pad: the pad
314
 * @event: the event
315
 *
316
 * Pre-hook for when an event is pushed through a pad, named
317
 * "pad-push-event-pre".
318
 *
319
 * Called by gst_pad_push_event(). Also called by functions other than
320
 * gst_pad_push_event() that call gst_pad_push_event_unchecked() directly,
321
 * namely push_sticky() and check_sticky().
322
 */
323
typedef void (*GstTracerHookPadPushEventPre) (GObject *self, GstClockTime ts,
324
    GstPad *pad, GstEvent *event);
325
#define GST_TRACER_PAD_PUSH_EVENT_PRE(pad, event) G_STMT_START{ \
326
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_PRE), \
327
    GstTracerHookPadPushEventPre, (GST_TRACER_ARGS, pad, event)); \
328
}G_STMT_END
329
330
/**
331
 * GstTracerHookPadPushEventPost:
332
 * @self: the tracer instance
333
 * @ts: the current timestamp
334
 * @pad: the pad
335
 * @res: the result of gst_pad_push_event()
336
 *
337
 * Post-hook for when an event has been pushed through a pad, named
338
 * "pad-push-event-post".
339
 *
340
 * Called by gst_pad_push_event(). Also called by functions other than
341
 * gst_pad_push_event() that call gst_pad_push_event_unchecked() directly,
342
 * namely push_sticky() and check_sticky().
343
 */
344
typedef void (*GstTracerHookPadPushEventPost) (GObject *self, GstClockTime ts,
345
    GstPad *pad, gboolean res);
346
#define GST_TRACER_PAD_PUSH_EVENT_POST(pad, res) G_STMT_START{ \
347
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_PUSH_EVENT_POST), \
348
    GstTracerHookPadPushEventPost, (GST_TRACER_ARGS, pad, res)); \
349
}G_STMT_END
350
351
/**
352
 * GstTracerHookPadSendEventPre:
353
 * @self: the tracer instance
354
 * @ts: the current timestamp
355
 * @pad: the pad
356
 * @event: the event
357
    *
358
 * Pre-hook for gst_pad_send_event_unchecked() named "pad-send-event-pre".
359
 */
360
typedef void (*GstTracerHookPadSendEventPre) (GObject *self, GstClockTime ts,
361
    GstPad *pad, GstEvent *event);
362
#define GST_TRACER_PAD_SEND_EVENT_PRE(pad, event) G_STMT_START{ \
363
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_SEND_EVENT_PRE), \
364
    GstTracerHookPadSendEventPre, (GST_TRACER_ARGS, pad, event)); \
365
}G_STMT_END
366
367
/**
368
 * GstTracerHookPadSendEventPost:
369
 * @self: the tracer instance
370
 * @ts: the current timestamp
371
 * @pad: the pad
372
 * @res: the result of gst_pad_send_event_unchecked()
373
 *
374
 * Post-hook for gst_pad_send_event_unchecked() named "pad-send-event-post".
375
 */
376
typedef void (*GstTracerHookPadSendEventPost) (GObject *self, GstClockTime ts,
377
    GstPad *pad, GstFlowReturn res);
378
#define GST_TRACER_PAD_SEND_EVENT_POST(pad, res) G_STMT_START{ \
379
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_SEND_EVENT_POST), \
380
    GstTracerHookPadSendEventPost, (GST_TRACER_ARGS, pad, res)); \
381
}G_STMT_END
382
383
/**
384
 * GstTracerHookPadQueryPre:
385
 * @self: the tracer instance
386
 * @ts: the current timestamp
387
 * @pad: the pad
388
 * @query: the query
389
 *
390
 * Pre-hook for gst_pad_query() named "pad-query-pre".
391
 */
392
typedef void (*GstTracerHookPadQueryPre) (GObject *self, GstClockTime ts,
393
    GstPad *pad, GstQuery *query);
394
#define GST_TRACER_PAD_QUERY_PRE(pad, query) G_STMT_START{ \
395
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_QUERY_PRE), \
396
    GstTracerHookPadQueryPre, (GST_TRACER_ARGS, pad, query)); \
397
}G_STMT_END
398
399
/**
400
 * GstTracerHookPadQueryPost:
401
 * @self: the tracer instance
402
 * @ts: the current timestamp
403
 * @pad: the pad
404
 * @query: the query
405
 * @res: the result of gst_pad_query()
406
 *
407
 * Post-hook for gst_pad_query() named "pad-query-post".
408
 */
409
typedef void (*GstTracerHookPadQueryPost) (GObject *self, GstClockTime ts,
410
    GstPad *pad, GstQuery *query, gboolean res);
411
#define GST_TRACER_PAD_QUERY_POST(pad, query, res) G_STMT_START{ \
412
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_QUERY_POST), \
413
    GstTracerHookPadQueryPost, (GST_TRACER_ARGS, pad, query, res)); \
414
}G_STMT_END
415
416
/**
417
 * GstTracerHookElementPostMessagePre:
418
 * @self: the tracer instance
419
 * @ts: the current timestamp
420
 * @element: the element
421
 * @message: the message
422
 *
423
 * Pre-hook for gst_element_post_message() named "element-post-message-pre".
424
 */
425
typedef void (*GstTracerHookElementPostMessagePre) (GObject *self,
426
    GstClockTime ts, GstElement *element, GstMessage *message);
427
#define GST_TRACER_ELEMENT_POST_MESSAGE_PRE(element, message) G_STMT_START{ \
428
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_PRE), \
429
    GstTracerHookElementPostMessagePre, (GST_TRACER_ARGS, element, message)); \
430
}G_STMT_END
431
432
/**
433
 * GstTracerHookElementPostMessagePost:
434
 * @self: the tracer instance
435
 * @ts: the current timestamp
436
 * @element: the element
437
 * @res: the result of gst_element_post_message()
438
 *
439
 * Pre-hook for gst_element_post_message() named "element-post-message-post".
440
 */
441
typedef void (*GstTracerHookElementPostMessagePost) (GObject *self,
442
    GstClockTime ts, GstElement *element, gboolean res);
443
#define GST_TRACER_ELEMENT_POST_MESSAGE_POST(element, res) G_STMT_START{ \
444
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_POST_MESSAGE_POST), \
445
    GstTracerHookElementPostMessagePost, (GST_TRACER_ARGS, element, res)); \
446
}G_STMT_END
447
448
/**
449
 * GstTracerHookElementQueryPre:
450
 * @self: the tracer instance
451
 * @ts: the current timestamp
452
 * @element: the element
453
 * @query: the query
454
 *
455
 * Pre-hook for gst_element_query() named "element-query-pre".
456
 */
457
typedef void (*GstTracerHookElementQueryPre) (GObject *self, GstClockTime ts,
458
    GstElement *element, GstQuery *query);
459
#define GST_TRACER_ELEMENT_QUERY_PRE(element, query) G_STMT_START{ \
460
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_PRE), \
461
    GstTracerHookElementQueryPre, (GST_TRACER_ARGS, element, query)); \
462
}G_STMT_END
463
464
/**
465
 * GstTracerHookElementQueryPost:
466
 * @self: the tracer instance
467
 * @ts: the current timestamp
468
 * @element: the element
469
 * @query: the query
470
 * @res: the result of gst_element_query()
471
 *
472
 * Post-hook for gst_element_query() named "element-query-post".
473
 */
474
typedef void (*GstTracerHookElementQueryPost) (GObject *self, GstClockTime ts,
475
    GstElement *element, GstQuery *query, gboolean res);
476
#define GST_TRACER_ELEMENT_QUERY_POST(element, query, res) G_STMT_START{ \
477
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_QUERY_POST), \
478
    GstTracerHookElementQueryPost, (GST_TRACER_ARGS, element, query, res)); \
479
}G_STMT_END
480
481
/**
482
 * GstTracerHookElementNew:
483
 * @self: the tracer instance
484
 * @ts: the current timestamp
485
 * @element: the element
486
 *
487
 * Hook for whenever a new element is created, named "element-new".
488
 */
489
typedef void (*GstTracerHookElementNew) (GObject *self, GstClockTime ts,
490
    GstElement *element);
491
#define GST_TRACER_ELEMENT_NEW(element) G_STMT_START{ \
492
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_NEW), \
493
    GstTracerHookElementNew, (GST_TRACER_ARGS, element)); \
494
}G_STMT_END
495
496
/**
497
 * GstTracerHookElementAddPad:
498
 * @self: the tracer instance
499
 * @ts: the current timestamp
500
 * @element: the element
501
 * @pad: the pad
502
 *
503
 * Hook for gst_element_add_pad() named "element-add-pad".
504
 */
505
typedef void (*GstTracerHookElementAddPad) (GObject *self, GstClockTime ts,
506
    GstElement *element, GstPad *pad);
507
#define GST_TRACER_ELEMENT_ADD_PAD(element, pad) G_STMT_START{ \
508
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_ADD_PAD), \
509
    GstTracerHookElementAddPad, (GST_TRACER_ARGS, element, pad)); \
510
}G_STMT_END
511
512
/**
513
 * GstTracerHookElementRemovePad:
514
 * @self: the tracer instance
515
 * @ts: the current timestamp
516
 * @element: the element
517
 * @pad: the pad
518
 *
519
 * Hook for gst_element_remove_pad() named "element-remove-pad".
520
 */
521
typedef void (*GstTracerHookElementRemovePad) (GObject *self, GstClockTime ts,
522
    GstElement *element, GstPad *pad);
523
#define GST_TRACER_ELEMENT_REMOVE_PAD(element, pad) G_STMT_START{ \
524
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_REMOVE_PAD), \
525
    GstTracerHookElementRemovePad, (GST_TRACER_ARGS, element, pad)); \
526
}G_STMT_END
527
528
/**
529
 * GstTracerHookElementChangeStatePre:
530
 * @self: the tracer instance
531
 * @ts: the current timestamp
532
 * @element: the element
533
 * @transition: the transition
534
 *
535
 * Pre-hook for gst_element_change_state() named "element-change-state-pre".
536
 */
537
typedef void (*GstTracerHookElementChangeStatePre) (GObject *self,
538
    GstClockTime ts, GstElement *element, GstStateChange transition);
539
#define GST_TRACER_ELEMENT_CHANGE_STATE_PRE(element, transition) G_STMT_START{ \
540
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_CHANGE_STATE_PRE), \
541
    GstTracerHookElementChangeStatePre, (GST_TRACER_ARGS, element, transition)); \
542
}G_STMT_END
543
544
/**
545
 * GstTracerHookElementChangeStatePost:
546
 * @self: the tracer instance
547
 * @ts: the current timestamp
548
 * @element: the element
549
 * @transition: the transition
550
 * @result: the result of gst_pad_push()
551
 *
552
 * Post-hook for gst_element_change_state() named "element-change-state-post".
553
 */
554
typedef void (*GstTracerHookElementChangeStatePost) (GObject *self,
555
    GstClockTime ts, GstElement *element, GstStateChange transition,
556
    GstStateChangeReturn result);
557
#define GST_TRACER_ELEMENT_CHANGE_STATE_POST(element, transition, result) G_STMT_START{ \
558
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_CHANGE_STATE_POST), \
559
    GstTracerHookElementChangeStatePost, (GST_TRACER_ARGS, element, transition, result)); \
560
}G_STMT_END
561
562
/**
563
 * GstTracerHookBinAddPre:
564
 * @self: the tracer instance
565
 * @ts: the current timestamp
566
 * @bin: the bin
567
 * @element: the element
568
 *
569
 * Pre-hook for gst_bin_add() named "bin-add-pre".
570
 */
571
typedef void (*GstTracerHookBinAddPre) (GObject *self, GstClockTime ts,
572
    GstBin *bin, GstElement *element);
573
#define GST_TRACER_BIN_ADD_PRE(bin, element) G_STMT_START{ \
574
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_ADD_PRE), \
575
    GstTracerHookBinAddPre, (GST_TRACER_ARGS, bin, element)); \
576
}G_STMT_END
577
578
/**
579
 * GstTracerHookBinAddPost:
580
 * @self: the tracer instance
581
 * @ts: the current timestamp
582
 * @bin: the bin
583
 * @element: the element
584
 * @result: the result of gst_bin_add()
585
 *
586
 * Post-hook for gst_bin_add() named "bin-add-post".
587
 */
588
typedef void (*GstTracerHookBinAddPost) (GObject *self, GstClockTime ts,
589
    GstBin *bin, GstElement *element, gboolean result);
590
#define GST_TRACER_BIN_ADD_POST(bin, element, result) G_STMT_START{ \
591
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_ADD_POST), \
592
    GstTracerHookBinAddPost, (GST_TRACER_ARGS, bin, element, result)); \
593
}G_STMT_END
594
595
/**
596
 * GstTracerHookBinRemovePre:
597
 * @self: the tracer instance
598
 * @ts: the current timestamp
599
 * @bin: the bin
600
 * @element: the element
601
 *
602
 * Pre-hook for gst_bin_remove() named "bin-remove-pre".
603
 */
604
typedef void (*GstTracerHookBinRemovePre) (GObject *self, GstClockTime ts,
605
    GstBin *bin, GstElement *element);
606
#define GST_TRACER_BIN_REMOVE_PRE(bin, element) G_STMT_START{ \
607
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_REMOVE_PRE), \
608
    GstTracerHookBinRemovePre, (GST_TRACER_ARGS, bin, element)); \
609
}G_STMT_END
610
611
/**
612
 * GstTracerHookBinRemovePost:
613
 * @self: the tracer instance
614
 * @ts: the current timestamp
615
 * @bin: the bin
616
 * @result: the result of gst_bin_remove()
617
 *
618
 * Post-hook for gst_bin_remove() named "bin-remove-post".
619
 */
620
typedef void (*GstTracerHookBinRemovePost) (GObject *self, GstClockTime ts,
621
    GstBin *bin, gboolean result);
622
#define GST_TRACER_BIN_REMOVE_POST(bin, result) G_STMT_START{ \
623
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_REMOVE_POST), \
624
    GstTracerHookBinRemovePost, (GST_TRACER_ARGS, bin, result)); \
625
}G_STMT_END
626
627
/**
628
 * GstTracerHookPadLinkPre:
629
 * @self: the tracer instance
630
 * @ts: the current timestamp
631
 * @srcpad: the srcpad
632
 * @sinkpad: the sinkpad
633
 *
634
 * Pre-hook for gst_pad_link() named "pad-link-pre".
635
 */
636
typedef void (*GstTracerHookPadLinkPre) (GObject *self, GstClockTime ts,
637
    GstPad *srcpad, GstPad *sinkpad);
638
#define GST_TRACER_PAD_LINK_PRE(srcpad, sinkpad) G_STMT_START{ \
639
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_LINK_PRE), \
640
    GstTracerHookPadLinkPre, (GST_TRACER_ARGS, srcpad, sinkpad)); \
641
}G_STMT_END
642
643
/**
644
 * GstTracerHookPadLinkPost:
645
 * @self: the tracer instance
646
 * @ts: the current timestamp
647
 * @srcpad: the srcpad
648
 * @sinkpad: the sinkpad
649
 * @result: the result of gst_pad_link()
650
 *
651
 * Post-hook for gst_pad_link() named "pad-link-post".
652
 */
653
typedef void (*GstTracerHookPadLinkPost) (GObject *self, GstClockTime ts,
654
    GstPad *srcpad, GstPad *sinkpad, GstPadLinkReturn result);
655
#define GST_TRACER_PAD_LINK_POST(srcpad, sinkpad, result) G_STMT_START{ \
656
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_LINK_POST), \
657
    GstTracerHookPadLinkPost, (GST_TRACER_ARGS, srcpad, sinkpad, result)); \
658
}G_STMT_END
659
660
/**
661
 * GstTracerHookPadUnlinkPre:
662
 * @self: the tracer instance
663
 * @ts: the current timestamp
664
 * @srcpad: the srcpad
665
 * @sinkpad: the sinkpad
666
 *
667
 * Pre-hook for gst_pad_unlink() named "pad-unlink-pre".
668
 */
669
typedef void (*GstTracerHookPadUnlinkPre) (GObject *self, GstClockTime ts,
670
    GstPad *srcpad, GstPad *sinkpad);
671
#define GST_TRACER_PAD_UNLINK_PRE(srcpad, sinkpad) G_STMT_START{ \
672
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_UNLINK_PRE), \
673
    GstTracerHookPadUnlinkPre, (GST_TRACER_ARGS, srcpad, sinkpad)); \
674
}G_STMT_END
675
676
/**
677
 * GstTracerHookPadUnlinkPost:
678
 * @self: the tracer instance
679
 * @ts: the current timestamp
680
 * @srcpad: the srcpad
681
 * @sinkpad: the sinkpad
682
 * @result: the result of gst_pad_push()
683
 *
684
 * Post-hook for gst_pad_unlink() named "pad-unlink-post".
685
 */
686
typedef void (*GstTracerHookPadUnlinkPost) (GObject *self, GstClockTime ts,
687
    GstPad *srcpad, GstPad *sinkpad, gboolean result);
688
#define GST_TRACER_PAD_UNLINK_POST(srcpad, sinkpad, result) G_STMT_START{ \
689
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_UNLINK_POST), \
690
    GstTracerHookPadUnlinkPost, (GST_TRACER_ARGS, srcpad, sinkpad, result)); \
691
}G_STMT_END
692
693
/**
694
 * GstTracerHookMiniObjectCreated:
695
 * @self: the tracer instance
696
 * @ts: the current timestamp
697
 * @object: the mini object being created
698
 *
699
 * Hook called when a #GstMiniObject is created named "mini-object-created".
700
 */
701
typedef void (*GstTracerHookMiniObjectCreated) (GObject *self, GstClockTime ts,
702
    GstMiniObject *object);
703
#define GST_TRACER_MINI_OBJECT_CREATED(object) G_STMT_START{ \
704
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_CREATED), \
705
    GstTracerHookMiniObjectCreated, (GST_TRACER_ARGS, object)); \
706
}G_STMT_END
707
708
/**
709
 * GstTracerHookMiniObjectDestroyed:
710
 * @self: the tracer instance
711
 * @ts: the current timestamp
712
 * @object: the mini object being destroyed
713
 *
714
 * Hook called when a #GstMiniObject is being destroyed named
715
 * "mini-object-destroyed".
716
 */
717
typedef void (*GstTracerHookMiniObjectDestroyed) (GObject *self, GstClockTime ts,
718
    GstMiniObject *object);
719
#define GST_TRACER_MINI_OBJECT_DESTROYED(object) G_STMT_START{ \
720
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_DESTROYED), \
721
    GstTracerHookMiniObjectDestroyed, (GST_TRACER_ARGS, object)); \
722
}G_STMT_END
723
724
/**
725
 * GstTracerHookObjectUnreffed:
726
 * @self: the tracer instance
727
 * @ts: the current timestamp
728
 * @object: the object being unreffed
729
 * @new_refcount: the new refcount after unrefing @object
730
 *
731
 * Hook called when a #GstObject is being unreffed named
732
 * "object-unreffed"
733
 */
734
typedef void (*GstTracerHookObjectUnreffed) (GObject *self, GstClockTime ts,
735
    GstObject *object, gint new_refcount);
736
#define GST_TRACER_OBJECT_UNREFFED(object, new_refcount) G_STMT_START{ \
737
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_UNREFFED), \
738
    GstTracerHookObjectUnreffed, (GST_TRACER_ARGS, object, new_refcount)); \
739
}G_STMT_END
740
741
/**
742
 * GstTracerHookObjectReffed:
743
 * @self: the tracer instance
744
 * @ts: the current timestamp
745
 * @object: the object being reffed
746
 * @new_refcount: the new refcount after refing @object
747
 *
748
 * Hook called when a #GstObject is being reffed named
749
 * "object-reffed".
750
 */
751
typedef void (*GstTracerHookObjectReffed) (GObject *self, GstClockTime ts,
752
    GstObject *object, gint new_refcount);
753
#define GST_TRACER_OBJECT_REFFED(object, new_refcount) G_STMT_START{ \
754
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_REFFED), \
755
    GstTracerHookObjectReffed, (GST_TRACER_ARGS, object, new_refcount)); \
756
}G_STMT_END
757
758
/**
759
 * GST_TRACER_OBJECT_PARENT_SET:
760
 * @object: a #GstObject
761
 * @parent: (nullable): the new parent of @object
762
 *
763
 * Dispatches the "object-parent-set" hook when @object parent changes.
764
 *
765
 * NOTE: @parent object lock will likely be held when this hook is called.
766
 *
767
 * Since: 1.30
768
 */
769
typedef void (*GstTracerHookObjectParentSet) (GObject *self, GstClockTime ts,
770
    GstObject *object, GstObject *parent);
771
#define GST_TRACER_OBJECT_PARENT_SET(object, parent) G_STMT_START{ \
772
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_PARENT_SET), \
773
    GstTracerHookObjectParentSet, (GST_TRACER_ARGS, object, parent)); \
774
}G_STMT_END
775
776
/**
777
 * GstTracerHookSpanBegin:
778
 * @self: the tracer instance
779
 * @ts: the current timestamp
780
 * @span_id: identifier for matching the begin and end hooks
781
 * @format: the registered span format
782
 * @values: (array) (nullable): positional values matching @format
783
 *
784
 * Hook called when a custom span begins, named
785
 * "span-begin".
786
 *
787
 * Since: 1.30
788
 */
789
typedef void (*GstTracerHookSpanBegin) (GObject *self, GstClockTime ts,
790
    GstTraceSpanId span_id, GstTraceFormat *format,
791
    const GstTraceValue *values);
792
793
/**
794
 * GstTracerHookSpanEnd:
795
 * @self: the tracer instance
796
 * @ts: the current timestamp
797
 * @span_id: identifier returned by gst_trace_span_begin()
798
 *
799
 * Hook called when a custom span ends, named
800
 * "span-end".
801
 *
802
 * Since: 1.30
803
 */
804
typedef void (*GstTracerHookSpanEnd) (GObject *self, GstClockTime ts,
805
    GstTraceSpanId span_id);
806
807
/**
808
 * GstTracerHookEvent:
809
 * @self: the tracer instance
810
 * @ts: the current timestamp
811
 * @format: the registered event format
812
 * @values: (array) (nullable): positional values matching @format
813
 *
814
 * Hook called when a custom point event is emitted, named
815
 * "event".
816
 *
817
 * Since: 1.30
818
 */
819
typedef void (*GstTracerHookEvent) (GObject *self, GstClockTime ts,
820
    GstTraceFormat *format, const GstTraceValue *values);
821
822
/**
823
 * GstTracerHookMiniObjectUnreffed:
824
 * @self: the tracer instance
825
 * @ts: the current timestamp
826
 * @object: the mini object being unreffed
827
 * @new_refcount: the new refcount after unrefing @object
828
 *
829
 * Hook called when a #GstMiniObject is being unreffed named
830
 * "mini-object-unreffed".
831
 */
832
typedef void (*GstTracerHookMiniObjectUnreffed) (GObject *self, GstClockTime ts,
833
    GstMiniObject *object, gint new_refcount);
834
#define GST_TRACER_MINI_OBJECT_UNREFFED(object, new_refcount) G_STMT_START{ \
835
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_UNREFFED), \
836
    GstTracerHookMiniObjectUnreffed, (GST_TRACER_ARGS, object, new_refcount)); \
837
}G_STMT_END
838
839
/**
840
 * GstTracerHookMiniObjectReffed:
841
 * @self: the tracer instance
842
 * @ts: the current timestamp
843
 * @object: the mini object being reffed
844
 * @new_refcount: the new refcount after refing @object
845
 *
846
 * Hook called when a #GstMiniObject is being reffed named
847
 * "mini-object-reffed".
848
 */
849
typedef void (*GstTracerHookMiniObjectReffed) (GObject *self, GstClockTime ts,
850
    GstMiniObject *object, gint new_refcount);
851
#define GST_TRACER_MINI_OBJECT_REFFED(object, new_refcount) G_STMT_START{ \
852
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MINI_OBJECT_REFFED), \
853
    GstTracerHookMiniObjectReffed, (GST_TRACER_ARGS, object, new_refcount)); \
854
}G_STMT_END
855
856
/**
857
 * GstTracerHookObjectCreated:
858
 * @self: the tracer instance
859
 * @ts: the current timestamp
860
 * @object: the object being created
861
 *
862
 * Hook called when a #GstObject is created named "object-created".
863
 */
864
typedef void (*GstTracerHookObjectCreated) (GObject *self, GstClockTime ts,
865
    GstObject *object);
866
#define GST_TRACER_OBJECT_CREATED(object) G_STMT_START{ \
867
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_CREATED), \
868
    GstTracerHookObjectCreated, (GST_TRACER_ARGS, object)); \
869
}G_STMT_END
870
871
/**
872
 * GstTracerHookObjectDestroyed:
873
 * @self: the tracer instance
874
 * @ts: the current timestamp
875
 * @object: the object being destroyed
876
 *
877
 * Hook called when a #GstObject is being destroyed named
878
 * "object-destroyed".
879
 */
880
typedef void (*GstTracerHookObjectDestroyed) (GObject *self, GstClockTime ts,
881
    GstObject *object);
882
883
#define GST_TRACER_OBJECT_DESTROYED(object) G_STMT_START{ \
884
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_DESTROYED), \
885
    GstTracerHookObjectDestroyed, (GST_TRACER_ARGS, object)); \
886
}G_STMT_END
887
888
/**
889
 * GstTracerHookPluginFeatureLoaded:
890
 * @self: the tracer instance
891
 * @ts: the current timestamp
892
 * @feature: the plugin feature that was loaded
893
 *
894
 * Hook called when a GstPluginFeature is loaded named
895
 * "plugin-feature-loaded".
896
 *
897
 * Since: 1.20
898
 */
899
typedef void (*GstTracerHookPluginFeatureLoaded) (GObject *self, GstClockTime ts,
900
    GstPluginFeature *feature);
901
/**
902
 * GST_TRACER_PLUGIN_FEATURE_LOADED:
903
 * @feature: The feature that this tracer is called for
904
 *
905
 * Add a tracepoint when a plugin feature is loaded.
906
 *
907
 * Since: 1.20
908
 */
909
#define GST_TRACER_PLUGIN_FEATURE_LOADED(feature) G_STMT_START{ \
910
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PLUGIN_FEATURE_LOADED), \
911
    GstTracerHookPluginFeatureLoaded, (GST_TRACER_ARGS, feature)); \
912
}G_STMT_END
913
914
/**
915
 * GstTracerHookPadChainPre:
916
 * @self: the tracer instance
917
 * @ts: the current timestamp
918
 * @pad: the pad
919
 * @buffer: the buffer
920
 *
921
 * Pre-hook for gst_pad_chain() named "pad-chain-pre".
922
 *
923
 * Since: 1.22
924
 */
925
typedef void (*GstTracerHookPadChainPre) (GObject *self, GstClockTime ts,
926
    GstPad *pad, GstBuffer *buffer);
927
928
/**
929
 * GST_TRACER_PAD_CHAIN_PRE:
930
 * @pad: a %GstPad
931
 * @buffer: a %GstBuffer
932
 *
933
 * Dispatches the "pad-chain-pre" hook.
934
 *
935
 * Since: 1.22
936
 */
937
#define GST_TRACER_PAD_CHAIN_PRE(pad, buffer) G_STMT_START{ \
938
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_PRE), \
939
    GstTracerHookPadChainPre, (GST_TRACER_ARGS, pad, buffer)); \
940
}G_STMT_END
941
942
/**
943
 * GstTracerHookPadChainPost:
944
 * @self: the tracer instance
945
 * @ts: the current timestamp
946
 * @pad: the pad
947
 * @res: the result of gst_pad_chain()
948
 *
949
 * Post-hook for gst_pad_chain() named "pad-chain-post".
950
 *
951
 * Since: 1.22
952
 */
953
typedef void (*GstTracerHookPadChainPost) (GObject * self, GstClockTime ts,
954
    GstPad *pad, GstFlowReturn res);
955
956
/**
957
 * GST_TRACER_PAD_CHAIN_POST:
958
 * @pad: a %GstPad
959
 * @res: a %GstFlowReturn
960
 *
961
 * Dispatches the "pad-chain-post" hook.
962
 *
963
 * Since: 1.22
964
 */
965
#define GST_TRACER_PAD_CHAIN_POST(pad, res) G_STMT_START{ \
966
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_POST), \
967
    GstTracerHookPadChainPost, (GST_TRACER_ARGS, pad, res)); \
968
}G_STMT_END
969
970
/**
971
 * GstTracerHookPadChainListPre:
972
 * @self: the tracer instance
973
 * @ts: the current timestamp
974
 * @pad: the pad
975
 * @list: the buffer-list
976
 *
977
 * Pre-hook for gst_pad_chain_list() named "pad-chain-list-pre".
978
 *
979
 * Since: 1.22
980
 */
981
typedef void (*GstTracerHookPadChainListPre) (GObject *self, GstClockTime ts,
982
    GstPad *pad, GstBufferList *list);
983
984
/**
985
 * GST_TRACER_PAD_CHAIN_LIST_PRE:
986
 * @pad: a %GstPad
987
 * @list: a %GstBufferList
988
 *
989
 * Dispatches the "pad-chain-list-pre" hook.
990
 *
991
 * Since: 1.22
992
 */
993
#define GST_TRACER_PAD_CHAIN_LIST_PRE(pad, list) G_STMT_START{ \
994
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_LIST_PRE), \
995
    GstTracerHookPadChainListPre, (GST_TRACER_ARGS, pad, list)); \
996
}G_STMT_END
997
998
/**
999
 * GstTracerHookPadChainListPost:
1000
 * @self: the tracer instance
1001
 * @ts: the current timestamp
1002
 * @pad: the pad
1003
 * @res: the result of gst_pad_chain_list()
1004
 *
1005
 * Post-hook for gst_pad_chain_list() named "pad-chain-list-post".
1006
 *
1007
 * Since: 1.22
1008
 */
1009
typedef void (*GstTracerHookPadChainListPost) (GObject *self, GstClockTime ts,
1010
    GstPad *pad,
1011
    GstFlowReturn res);
1012
1013
/**
1014
 * GST_TRACER_PAD_CHAIN_LIST_POST:
1015
 * @pad: a %GstPad
1016
 * @res: a %GstFlowReturn
1017
 *
1018
 * Dispatches the "pad-chain-list-post" hook.
1019
 *
1020
 * Since: 1.22
1021
 */
1022
#define GST_TRACER_PAD_CHAIN_LIST_POST(pad, res) G_STMT_START{ \
1023
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_CHAIN_LIST_POST), \
1024
    GstTracerHookPadChainListPost, (GST_TRACER_ARGS, pad, res)); \
1025
}G_STMT_END
1026
1027
/**
1028
 * GstTracerHookMemoryInit:
1029
 * @self: the tracer instance
1030
 * @ts: the current timestamp
1031
 * @mem:  The GstMemory that was initialized
1032
 *
1033
 * Hook for memory initialization named "memory-init".
1034
 *
1035
 * Since: 1.26
1036
 */
1037
typedef void (*GstTracerHookMemoryInit) (GObject *self, GstClockTime ts,
1038
    GstMemory *mem);
1039
/**
1040
 * GST_TRACER_MEMORY_INIT:
1041
 * @mem: a #GstMemory
1042
 *
1043
 * Dispatches the "memory-init" hook.
1044
 *
1045
 * Since: 1.26
1046
 */
1047
#define GST_TRACER_MEMORY_INIT(mem) G_STMT_START{ \
1048
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MEMORY_INIT), \
1049
    GstTracerHookMemoryInit, (GST_TRACER_ARGS, mem)); \
1050
}G_STMT_END
1051
1052
/**
1053
 * GstTracerHookMemoryFreePre:
1054
 * @self: the tracer instance
1055
 * @ts: the current timestamp
1056
 * @mem: the memory object for which the memory will be freed.
1057
 *
1058
 * Pre-hook for memory freeing named "memory-free-pre".
1059
 *
1060
 * Since: 1.26
1061
 */
1062
typedef void (*GstTracerHookMemoryFreePre) (GObject *self, GstClockTime ts, GstMemory *mem);
1063
/**
1064
 * GST_TRACER_MEMORY_FREE_PRE:
1065
 * @mem: the memory object
1066
 *
1067
 * Dispatches the "memory-free-pre" hook.
1068
 *
1069
 * Since: 1.26
1070
 */
1071
#define GST_TRACER_MEMORY_FREE_PRE(mem) G_STMT_START{ \
1072
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MEMORY_FREE_PRE), \
1073
    GstTracerHookMemoryFreePre, (GST_TRACER_ARGS, mem)); \
1074
}G_STMT_END
1075
1076
/**
1077
 * GstTracerHookMemoryFreePost:
1078
 * @self: the tracer instance
1079
 * @ts: the current timestamp
1080
 * @mem: pointer to the memory object that has been freed
1081
 *
1082
 * Post-hook for memory freeing named "memory-free-post".
1083
 *
1084
 * Since: 1.26
1085
 */
1086
typedef void (*GstTracerHookMemoryFreePost) (GObject *self, GstClockTime ts, GstMemory *mem);
1087
/**
1088
 * GST_TRACER_MEMORY_FREE_POST:
1089
 * @mem: pointer to the memory object that has been freed
1090
 *
1091
 * Dispatches the "memory-free-post" hook.
1092
 *
1093
 * Since: 1.26
1094
 */
1095
#define GST_TRACER_MEMORY_FREE_POST(mem) G_STMT_START{ \
1096
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_MEMORY_FREE_POST), \
1097
    GstTracerHookMemoryFreePost, (GST_TRACER_ARGS, mem)); \
1098
}G_STMT_END
1099
1100
1101
/**
1102
 * GstTracerHookPoolBufferQueued:
1103
 * @self: the tracer instance
1104
 * @ts: the current timestamp
1105
 * @pool: a #GstBufferPool
1106
 * @buffer: pointer to the #GstBuffer that has been queued into @pool
1107
 *
1108
 * Hook for pool buffer queued named "pool-buffer-queued".
1109
 *
1110
 * Since: 1.28
1111
 */
1112
typedef void (*GstTracerHookPoolBufferQueued) (GObject *self, GstClockTime ts, GstBufferPool *pool, GstBuffer *buffer);
1113
/**
1114
 * GST_TRACER_POOL_BUFFER_QUEUED:
1115
 * @pool: a #GstBufferPool
1116
 * @buffer: pointer to the #GstBuffer that has been queued into @pool
1117
 *
1118
 * Dispatches the "pool-buffer-queued" hook.
1119
 *
1120
 * Since: 1.28
1121
 */
1122
#define GST_TRACER_POOL_BUFFER_QUEUED(pool, buf) G_STMT_START{ \
1123
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_POOL_BUFFER_QUEUED), \
1124
    GstTracerHookPoolBufferQueued, (GST_TRACER_ARGS, pool, buf)); \
1125
}G_STMT_END
1126
1127
/**
1128
 * GstTracerHookPoolBufferDequeued:
1129
 * @self: the tracer instance
1130
 * @ts: the current timestamp
1131
 * @pool: a #GstBufferPool
1132
 * @buffer: pointer to the #GstBuffer that has been dequeued from @pool
1133
 *
1134
 * Hook for pool buffer dequeued named "pool-buffer-dequeued".
1135
 *
1136
 * Since: 1.28
1137
 */
1138
typedef void (*GstTracerHookPoolBufferDequeued) (GObject *self, GstClockTime ts, GstBufferPool *pool, GstBuffer *buffer);
1139
/**
1140
 * GST_TRACER_POOL_BUFFER_DEQUEUED:
1141
 * @pool: a #GstBufferPool
1142
 * @buffer: pointer to the #GstBuffer that has been dequeued from @pool
1143
 *
1144
 * Dispatches the "pool-buffer-dequeued" hook.
1145
 *
1146
 * Since: 1.28
1147
 */
1148
#define GST_TRACER_POOL_BUFFER_DEQUEUED(pool, buffer) G_STMT_START{ \
1149
  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_POOL_BUFFER_DEQUEUED), \
1150
    GstTracerHookPoolBufferDequeued, (GST_TRACER_ARGS, pool, buffer)); \
1151
}G_STMT_END
1152
1153
#else /* !GST_DISABLE_GST_TRACER_HOOKS */
1154
1155
static inline void
1156
_priv_gst_tracing_init (void)
1157
0
{
1158
0
  GST_DEBUG ("Tracing hooks are disabled");
1159
0
}
Unexecuted instantiation: gstenumtypes.c:_priv_gst_tracing_init
Unexecuted instantiation: lex.priv_gst_parse_yy.c:_priv_gst_tracing_init
Unexecuted instantiation: grammar.tab.c:_priv_gst_tracing_init
Unexecuted instantiation: gst.c:_priv_gst_tracing_init
Unexecuted instantiation: gstobject.c:_priv_gst_tracing_init
Unexecuted instantiation: gstallocator.c:_priv_gst_tracing_init
Unexecuted instantiation: gstbin.c:_priv_gst_tracing_init
Unexecuted instantiation: gstbuffer.c:_priv_gst_tracing_init
Unexecuted instantiation: gstbufferlist.c:_priv_gst_tracing_init
Unexecuted instantiation: gstbufferpool.c:_priv_gst_tracing_init
Unexecuted instantiation: gstbus.c:_priv_gst_tracing_init
Unexecuted instantiation: gstcaps.c:_priv_gst_tracing_init
Unexecuted instantiation: gstcapsfeatures.c:_priv_gst_tracing_init
Unexecuted instantiation: gstchildproxy.c:_priv_gst_tracing_init
Unexecuted instantiation: gstclock.c:_priv_gst_tracing_init
Unexecuted instantiation: gstcontext.c:_priv_gst_tracing_init
Unexecuted instantiation: gstcontrolbinding.c:_priv_gst_tracing_init
Unexecuted instantiation: gstcontrolsource.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdatetime.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdebugutils.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdevice.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdeviceprovider.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdeviceproviderfactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdynamictypefactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gstelement.c:_priv_gst_tracing_init
Unexecuted instantiation: gstelementfactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gsterror.c:_priv_gst_tracing_init
Unexecuted instantiation: gstevent.c:_priv_gst_tracing_init
Unexecuted instantiation: gstformat.c:_priv_gst_tracing_init
Unexecuted instantiation: gstghostpad.c:_priv_gst_tracing_init
Unexecuted instantiation: gstdevicemonitor.c:_priv_gst_tracing_init
Unexecuted instantiation: gstinfo.c:_priv_gst_tracing_init
Unexecuted instantiation: gstiterator.c:_priv_gst_tracing_init
Unexecuted instantiation: gstatomicqueue.c:_priv_gst_tracing_init
Unexecuted instantiation: gstmessage.c:_priv_gst_tracing_init
Unexecuted instantiation: gstmeta.c:_priv_gst_tracing_init
Unexecuted instantiation: gstmetafactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gstmemory.c:_priv_gst_tracing_init
Unexecuted instantiation: gstminiobject.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpad.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpadtemplate.c:_priv_gst_tracing_init
Unexecuted instantiation: gstparamspecs.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpipeline.c:_priv_gst_tracing_init
Unexecuted instantiation: gstplugin.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpluginfeature.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpoll.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpreset.c:_priv_gst_tracing_init
Unexecuted instantiation: gstprotection.c:_priv_gst_tracing_init
Unexecuted instantiation: gstquery.c:_priv_gst_tracing_init
Unexecuted instantiation: gstregistry.c:_priv_gst_tracing_init
Unexecuted instantiation: gstregistrychunks.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpromise.c:_priv_gst_tracing_init
Unexecuted instantiation: gstsample.c:_priv_gst_tracing_init
Unexecuted instantiation: gstsegment.c:_priv_gst_tracing_init
Unexecuted instantiation: gststreamcollection.c:_priv_gst_tracing_init
Unexecuted instantiation: gststreams.c:_priv_gst_tracing_init
Unexecuted instantiation: gststructure.c:_priv_gst_tracing_init
Unexecuted instantiation: gstsystemclock.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttaglist.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttagsetter.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttask.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttaskpool.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttoc.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttocsetter.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttracer.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttracerfactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttracerrecord.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttracerutils.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttypefind.c:_priv_gst_tracing_init
Unexecuted instantiation: gsttypefindfactory.c:_priv_gst_tracing_init
Unexecuted instantiation: gsturi.c:_priv_gst_tracing_init
Unexecuted instantiation: gstutils.c:_priv_gst_tracing_init
Unexecuted instantiation: gstvalue.c:_priv_gst_tracing_init
Unexecuted instantiation: gstparse.c:_priv_gst_tracing_init
Unexecuted instantiation: gstpluginloader.c:_priv_gst_tracing_init
Unexecuted instantiation: gstregistrybinary.c:_priv_gst_tracing_init
1160
1161
static inline void
1162
_priv_gst_tracing_deinit (void)
1163
0
{
1164
0
}
Unexecuted instantiation: gstenumtypes.c:_priv_gst_tracing_deinit
Unexecuted instantiation: lex.priv_gst_parse_yy.c:_priv_gst_tracing_deinit
Unexecuted instantiation: grammar.tab.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gst.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstobject.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstallocator.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstbin.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstbuffer.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstbufferlist.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstbufferpool.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstbus.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstcaps.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstcapsfeatures.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstchildproxy.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstclock.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstcontext.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstcontrolbinding.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstcontrolsource.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdatetime.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdebugutils.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdevice.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdeviceprovider.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdeviceproviderfactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdynamictypefactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstelement.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstelementfactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsterror.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstevent.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstformat.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstghostpad.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstdevicemonitor.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstinfo.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstiterator.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstatomicqueue.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstmessage.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstmeta.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstmetafactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstmemory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstminiobject.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpad.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpadtemplate.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstparamspecs.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpipeline.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstplugin.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpluginfeature.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpoll.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpreset.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstprotection.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstquery.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstregistry.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstregistrychunks.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpromise.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstsample.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstsegment.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gststreamcollection.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gststreams.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gststructure.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstsystemclock.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttaglist.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttagsetter.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttask.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttaskpool.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttoc.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttocsetter.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttracer.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttracerfactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttracerrecord.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttracerutils.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttypefind.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsttypefindfactory.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gsturi.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstutils.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstvalue.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstparse.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstpluginloader.c:_priv_gst_tracing_deinit
Unexecuted instantiation: gstregistrybinary.c:_priv_gst_tracing_deinit
1165
1166
#define GST_TRACER_PAD_PUSH_PRE(pad, buffer)
1167
#define GST_TRACER_PAD_PUSH_POST(pad, res)
1168
#define GST_TRACER_PAD_PUSH_LIST_PRE(pad, list)
1169
#define GST_TRACER_PAD_PUSH_LIST_POST(pad, res)
1170
#define GST_TRACER_PAD_PULL_RANGE_PRE(pad, offset, size)
1171
#define GST_TRACER_PAD_PULL_RANGE_POST(pad, buffer, res)
1172
#define GST_TRACER_PAD_PUSH_EVENT_PRE(pad, event)
1173
#define GST_TRACER_PAD_PUSH_EVENT_POST(pad, res)
1174
#define GST_TRACER_PAD_QUERY_PRE(pad, query)
1175
#define GST_TRACER_PAD_QUERY_POST(pad, query, res)
1176
#define GST_TRACER_ELEMENT_POST_MESSAGE_PRE(element, message)
1177
#define GST_TRACER_ELEMENT_POST_MESSAGE_POST(element, res)
1178
#define GST_TRACER_ELEMENT_QUERY_PRE(element, query)
1179
#define GST_TRACER_ELEMENT_QUERY_POST(element, query, res)
1180
#define GST_TRACER_ELEMENT_NEW(element)
1181
#define GST_TRACER_ELEMENT_ADD_PAD(element, pad)
1182
#define GST_TRACER_ELEMENT_REMOVE_PAD(element, pad)
1183
#define GST_TRACER_ELEMENT_CHANGE_STATE_PRE(element, transition)
1184
#define GST_TRACER_ELEMENT_CHANGE_STATE_POST(element, transition, res)
1185
#define GST_TRACER_BIN_ADD_PRE(bin, element)
1186
#define GST_TRACER_BIN_ADD_POST(bin, element, res)
1187
#define GST_TRACER_BIN_REMOVE_PRE(bin, element)
1188
#define GST_TRACER_BIN_REMOVE_POST(bin, res)
1189
#define GST_TRACER_PAD_LINK_PRE(srcpad, sinkpad)
1190
#define GST_TRACER_PAD_LINK_POST(srcpad, sinkpad, res)
1191
#define GST_TRACER_PAD_UNLINK_PRE(srcpad, sinkpad)
1192
#define GST_TRACER_PAD_UNLINK_POST(srcpad, sinkpad, res)
1193
#define GST_TRACER_MINI_OBJECT_CREATED(object)
1194
#define GST_TRACER_MINI_OBJECT_DESTROYED(object)
1195
#define GST_TRACER_MINI_OBJECT_REFFED(object, new_refcount)
1196
#define GST_TRACER_MINI_OBJECT_UNREFFED(object, new_refcount)
1197
#define GST_TRACER_OBJECT_CREATED(object)
1198
#define GST_TRACER_OBJECT_DESTROYED(object)
1199
#define GST_TRACER_OBJECT_REFFED(object, new_refcount)
1200
#define GST_TRACER_OBJECT_UNREFFED(object, new_refcount)
1201
#define GST_TRACER_OBJECT_PARENT_SET(object, parent)
1202
#define GST_TRACER_PLUGIN_FEATURE_LOADED(feature)
1203
#define GST_TRACER_PAD_CHAIN_PRE(pad, buffer)
1204
#define GST_TRACER_PAD_CHAIN_POST(pad, res)
1205
#define GST_TRACER_PAD_CHAIN_LIST_PRE(pad, list)
1206
#define GST_TRACER_PAD_CHAIN_LIST_POST(pad, res)
1207
#define GST_TRACER_PAD_SEND_EVENT_PRE(pad, event)
1208
#define GST_TRACER_PAD_SEND_EVENT_POST(pad, res)
1209
#define GST_TRACER_MEMORY_INIT(mem)
1210
#define GST_TRACER_MEMORY_FREE_PRE(mem)
1211
#define GST_TRACER_MEMORY_FREE_POST(mem)
1212
#define GST_TRACER_POOL_BUFFER_QUEUED(pool, buffer)
1213
#define GST_TRACER_POOL_BUFFER_DEQUEUED(pool, buffer)
1214
1215
1216
#endif /* GST_DISABLE_GST_TRACER_HOOKS */
1217
1218
G_END_DECLS
1219
1220
#endif /* __GST_TRACER_UTILS_H__ */