void kms_stats_probe_add_latency (KmsStatsProbe * probe, BufferLatencyCallback callback, gboolean locked, gpointer user_data, GDestroyNotify destroy_data) { kms_stats_probe_remove (probe); probe->probe_id = kms_stats_add_buffer_latency_notification_probe (probe->pad, callback, locked, user_data, destroy_data); }
static void connect_sink_func (const gchar * key, KmsSinkPadData * data, KmsRecorderEndpoint * self) { MarkBufferProbeData *markdata; StreamE2EAvgStat *stat; KmsMediaType type; GstPad *sinkpad; gchar *id; if (gst_pad_is_linked (data->sink_target)) { /* Pad was not previously removed */ return; } sinkpad = kms_element_connect_sink_target_full (KMS_ELEMENT (self), data->sink_target, data->type, data->description, connect_pad_signals_cb, self); switch (data->type) { case KMS_ELEMENT_PAD_TYPE_AUDIO: type = KMS_MEDIA_TYPE_AUDIO; break; case KMS_ELEMENT_PAD_TYPE_VIDEO: type = KMS_MEDIA_TYPE_VIDEO; break; default: GST_DEBUG_OBJECT (self, "No e2e stats will be collected for pad type %u", data->type); return; } id = kms_stats_create_id_for_pad (GST_ELEMENT (self), sinkpad); stat = g_hash_table_lookup (self->priv->stats.avg_e2e, id); if (stat == NULL) { stat = kms_stats_stream_e2e_avg_stat_new (type); g_hash_table_insert (self->priv->stats.avg_e2e, g_strdup (id), stat); } markdata = mark_buffer_probe_data_new (); markdata->id = id; markdata->stat = kms_stats_stream_e2e_avg_stat_ref (stat); kms_stats_add_buffer_latency_notification_probe (sinkpad, add_mark_data_cb, TRUE /* lock the data */ , markdata, (GDestroyNotify) mark_buffer_probe_data_destroy); }
void kms_webrtc_transport_enable_latency_notification (KmsWebRtcTransport * tr, BufferLatencyCallback cb, gpointer user_data, GDestroyNotify destroy_data) { GstPad *pad; element_remove_probe (tr->src->src, "src", tr->src_probe); pad = gst_element_get_static_pad (tr->src->src, "src"); tr->src_probe = kms_stats_add_buffer_latency_meta_probe (pad, FALSE, 0 /* No matter type at this point */ ); g_object_unref (pad); element_remove_probe (tr->sink->sink, "sink", tr->sink_probe); pad = gst_element_get_static_pad (tr->sink->sink, "sink"); tr->sink_probe = kms_stats_add_buffer_latency_notification_probe (pad, cb, user_data, destroy_data); g_object_unref (pad); }