static VALUE latency_parse(VALUE self) { GstClockTime latency; gst_event_parse_latency(RGST_EVENT(self), &latency); return LL2NUM(latency); }
static gboolean gst_timestampoverlay_src_event (GstBaseTransform * basetransform, GstEvent * event) { GstTimeStampOverlay *timeoverlay = GST_TIMESTAMPOVERLAY (basetransform); if (GST_EVENT_TYPE (event) == GST_EVENT_LATENCY) { GstClockTime latency = GST_CLOCK_TIME_NONE; gst_event_parse_latency (event, &latency); GST_OBJECT_LOCK (timeoverlay); timeoverlay->latency = latency; GST_OBJECT_UNLOCK (timeoverlay); } /* Chain up */ return GST_BASE_TRANSFORM_CLASS (gst_timestampoverlay_parent_class)->src_event (basetransform, event); }
static gboolean gst_webrtc_echo_probe_src_event (GstBaseTransform * btrans, GstEvent * event) { GstBaseTransformClass *klass; GstWebrtcEchoProbe *self = GST_WEBRTC_ECHO_PROBE (btrans); GstClockTime latency; GstClockTime upstream_latency = 0; GstQuery *query; klass = GST_BASE_TRANSFORM_CLASS (gst_webrtc_echo_probe_parent_class); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_LATENCY: gst_event_parse_latency (event, &latency); query = gst_query_new_latency (); if (gst_pad_query (btrans->srcpad, query)) { gst_query_parse_latency (query, NULL, &upstream_latency, NULL); if (!GST_CLOCK_TIME_IS_VALID (upstream_latency)) upstream_latency = 0; } GST_WEBRTC_ECHO_PROBE_LOCK (self); self->latency = latency; self->delay = upstream_latency / GST_MSECOND; GST_WEBRTC_ECHO_PROBE_UNLOCK (self); GST_DEBUG_OBJECT (self, "We have a latency of %" GST_TIME_FORMAT " and delay of %ims", GST_TIME_ARGS (latency), (gint) (upstream_latency / GST_MSECOND)); break; default: break; } return klass->src_event (btrans, event); }