RET_VAL_IF((type < GST_WEBRTC_STATS_CODEC || type > GST_WEBRTC_STATS_CERTIFICATE),
TRUE, "invalid type(%u)", type);
- if (!(stats_userdata->type_mask & parse_stats[type].type_mask))
+ if (!(stats_userdata->type_mask & parse_stats[type].type_mask)) {
+ LOG_DEBUG("skip this type[%u], type_mask[0x%x]", type, stats_userdata->type_mask);
return TRUE;
+ }
parse_stats[type].func(s, &stats_userdata->webrtc->stats_cb);
const GstStructure *stats;
RET_IF(gst_promise_wait(promise) != GST_PROMISE_RESULT_REPLIED, "failed to gst_promise_wait()");
+ RET_IF(user_data == NULL, "user_data is NULL");
stats = gst_promise_get_reply(promise);
RET_IF(stats == NULL, "failed to gst_promise_get_reply()");
gst_structure_foreach(stats, __webrtcbin_stats_cb, user_data);
+
+ g_free(user_data);
}
void _webrtcbin_get_stats(webrtc_s *webrtc, int type_mask)
{
GstPromise *promise;
- stats_userdata_s stats_userdata = { webrtc, type_mask };
+ stats_userdata_s *stats_userdata;
RET_IF(webrtc == NULL, "webrtc is NULL");
RET_IF(webrtc->gst.webrtcbin == NULL, "webrtcbin is NULL");
- promise = gst_promise_new_with_change_func((GstPromiseChangeFunc)__webrtcbin_get_stats_cb, &stats_userdata, NULL);
+ stats_userdata = g_new0(stats_userdata_s, 1);
+ stats_userdata->webrtc = webrtc;
+ stats_userdata->type_mask = type_mask;
+
+ promise = gst_promise_new_with_change_func((GstPromiseChangeFunc)__webrtcbin_get_stats_cb, stats_userdata, NULL);
g_signal_emit_by_name(webrtc->gst.webrtcbin, "get-stats", NULL, promise);
LOG_DEBUG("emitting 'get-stats' on %p", webrtc->gst.webrtcbin);