8
8
#include "plugins/gstplayer.h"
9
9
#include "texture_registry.h"
10
10
#include "util/logging.h"
11
+ #include "tracer.h"
11
12
12
13
#if !defined(HAVE_EGL_GLES2 )
13
14
#error "gstreamer video player requires EGL and OpenGL ES2 support."
19
20
struct texture_sink {
20
21
struct texture * fl_texture ;
21
22
struct frame_interface * interface ;
23
+ struct tracer * tracer ;
22
24
};
23
25
24
26
static void on_destroy_texture_frame (const struct texture_frame * texture_frame , void * userdata ) {
@@ -66,19 +68,27 @@ static GstFlowReturn on_appsink_new_preroll(GstAppSink *appsink, void *userdata)
66
68
67
69
struct texture_sink * meta = userdata ;
68
70
71
+ TRACER_BEGIN (meta -> tracer , "on_appsink_new_preroll()" );
72
+
73
+ TRACER_BEGIN (meta -> tracer , "gst_app_sink_try_pull_preroll()" );
69
74
sample = gst_app_sink_try_pull_preroll (appsink , 0 );
75
+ TRACER_END (meta -> tracer , "gst_app_sink_try_pull_preroll()" );
76
+
70
77
if (sample == NULL ) {
71
78
LOG_ERROR ("gstreamer returned a NULL sample.\n" );
72
- return GST_FLOW_ERROR ;
79
+ goto fail_stop_tracing ;
73
80
}
74
81
82
+ TRACER_BEGIN (meta -> tracer , "frame_new()" );
75
83
// supply video info here
76
84
frame = frame_new (meta -> interface , sample , NULL );
85
+ TRACER_END (meta -> tracer , "frame_new()" );
77
86
78
87
// the frame has a reference on the sample internally.
79
88
gst_sample_unref (sample );
80
89
81
90
if (frame != NULL ) {
91
+ TRACER_BEGIN (meta -> tracer , "texture_push_frame()" );
82
92
texture_push_frame (
83
93
meta -> fl_texture ,
84
94
& (struct texture_frame ){
@@ -87,9 +97,15 @@ static GstFlowReturn on_appsink_new_preroll(GstAppSink *appsink, void *userdata)
87
97
.userdata = frame ,
88
98
}
89
99
);
100
+ TRACER_END (meta -> tracer , "texture_push_frame()" );
90
101
}
91
102
103
+ TRACER_END (meta -> tracer , "on_appsink_new_preroll()" );
92
104
return GST_FLOW_OK ;
105
+
106
+ fail_stop_tracing :
107
+ TRACER_END (meta -> tracer , "on_appsink_new_preroll()" );
108
+ return GST_FLOW_ERROR ;
93
109
}
94
110
95
111
static GstFlowReturn on_appsink_new_sample (GstAppSink * appsink , void * userdata ) {
@@ -101,19 +117,27 @@ static GstFlowReturn on_appsink_new_sample(GstAppSink *appsink, void *userdata)
101
117
102
118
struct texture_sink * meta = userdata ;
103
119
120
+ TRACER_BEGIN (meta -> tracer , "on_appsink_new_sample()" );
121
+
122
+ TRACER_BEGIN (meta -> tracer , "gst_app_sink_try_pull_sample()" );
104
123
sample = gst_app_sink_try_pull_sample (appsink , 0 );
124
+ TRACER_END (meta -> tracer , "gst_app_sink_try_pull_sample()" );
125
+
105
126
if (sample == NULL ) {
106
127
LOG_ERROR ("gstreamer returned a NULL sample.\n" );
107
- return GST_FLOW_ERROR ;
128
+ goto fail_stop_tracing ;
108
129
}
109
130
131
+ TRACER_BEGIN (meta -> tracer , "frame_new()" );
110
132
// supply video info here
111
133
frame = frame_new (meta -> interface , sample , NULL );
134
+ TRACER_END (meta -> tracer , "frame_new()" );
112
135
113
136
// the frame has a reference on the sample internally.
114
137
gst_sample_unref (sample );
115
138
116
139
if (frame != NULL ) {
140
+ TRACER_BEGIN (meta -> tracer , "texture_push_frame()" );
117
141
texture_push_frame (
118
142
meta -> fl_texture ,
119
143
& (struct texture_frame ){
@@ -122,9 +146,15 @@ static GstFlowReturn on_appsink_new_sample(GstAppSink *appsink, void *userdata)
122
146
.userdata = frame ,
123
147
}
124
148
);
149
+ TRACER_END (meta -> tracer , "texture_push_frame()" );
125
150
}
126
151
152
+ TRACER_END (meta -> tracer , "on_appsink_new_preroll()" );
127
153
return GST_FLOW_OK ;
154
+
155
+ fail_stop_tracing :
156
+ TRACER_END (meta -> tracer , "on_appsink_new_preroll()" );
157
+ return GST_FLOW_ERROR ;
128
158
}
129
159
130
160
static void on_appsink_cbs_destroy (void * userdata ) {
@@ -136,6 +166,7 @@ static void on_appsink_cbs_destroy(void *userdata) {
136
166
meta = userdata ;
137
167
138
168
// meta->texture is not owned by us. freed by the player
169
+ tracer_unref (meta -> tracer );
139
170
frame_interface_unref (meta -> interface );
140
171
free (meta );
141
172
}
@@ -218,7 +249,7 @@ UNUSED static GstPadProbeReturn on_query_appsink_pad(GstPad *pad, GstPadProbeInf
218
249
return GST_PAD_PROBE_HANDLED ;
219
250
}
220
251
221
- bool flutter_gl_texture_sink_patch (GstElement * element , struct texture * texture , struct gl_renderer * renderer ) {
252
+ bool flutter_gl_texture_sink_patch (GstElement * element , struct texture * texture , struct gl_renderer * renderer , struct tracer * tracer ) {
222
253
ASSERT_NOT_NULL (element );
223
254
ASSERT_NOT_NULL (texture );
224
255
ASSERT_NOT_NULL (renderer );
@@ -283,6 +314,8 @@ bool flutter_gl_texture_sink_patch(GstElement *element, struct texture *texture,
283
314
gst_pad_add_probe (pad , GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM , on_query_appsink_pad , NULL , NULL );
284
315
}
285
316
317
+ meta -> tracer = tracer_ref (tracer );
318
+
286
319
gst_app_sink_set_callbacks (
287
320
GST_APP_SINK (appsink ),
288
321
& cbs ,
@@ -293,7 +326,7 @@ bool flutter_gl_texture_sink_patch(GstElement *element, struct texture *texture,
293
326
return element ;
294
327
}
295
328
296
- GstElement * flutter_gl_texture_sink_new (struct texture * texture , struct gl_renderer * renderer ) {
329
+ GstElement * flutter_gl_texture_sink_new (struct texture * texture , struct gl_renderer * renderer , struct tracer * tracer ) {
297
330
ASSERT_NOT_NULL (texture );
298
331
ASSERT_NOT_NULL (renderer );
299
332
@@ -302,7 +335,7 @@ GstElement *flutter_gl_texture_sink_new(struct texture *texture, struct gl_rende
302
335
return NULL ;
303
336
}
304
337
305
- if (!flutter_gl_texture_sink_patch (element , texture , renderer )) {
338
+ if (!flutter_gl_texture_sink_patch (element , texture , renderer , tracer )) {
306
339
gst_object_unref (element );
307
340
return NULL ;
308
341
}
0 commit comments