From: Sebastian Rasmussen Date: Mon, 27 Jan 2014 23:40:38 +0000 (+0100) Subject: rtpbasepayload: Expose running-time of payloaded stream X-Git-Tag: 1.19.3~511^2~4742 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0142cd5e35b7fcb5232e35342052f540ca51f47e;p=platform%2Fupstream%2Fgstreamer.git rtpbasepayload: Expose running-time of payloaded stream https://bugzilla.gnome.org/show_bug.cgi?id=719415 --- diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.c b/gst-libs/gst/rtp/gstrtpbasepayload.c index 152f58a..9bf7666 100644 --- a/gst-libs/gst/rtp/gstrtpbasepayload.c +++ b/gst-libs/gst/rtp/gstrtpbasepayload.c @@ -46,6 +46,7 @@ struct _GstRTPBasePayloadPrivate guint64 base_offset; gint64 base_rtime; + guint64 running_time; gint64 prop_max_ptime; gint64 caps_max_ptime; @@ -78,6 +79,7 @@ enum #define DEFAULT_MIN_PTIME 0 #define DEFAULT_PERFECT_RTPTIME TRUE #define DEFAULT_PTIME_MULTIPLE 0 +#define DEFAULT_RUNNING_TIME GST_CLOCK_TIME_NONE enum { @@ -271,6 +273,11 @@ gst_rtp_base_payload_class_init (GstRTPBasePayloadClass * klass) * stream * * + * running-time + * #G_TYPE_UINT64, running time + * + * + * * seqnum * #G_TYPE_UINT, sequence number, same as * #GstRTPBasePayload:seqnum @@ -333,6 +340,7 @@ gst_rtp_base_payload_init (GstRTPBasePayload * rtpbasepayload, gpointer g_class) rtpbasepayload->seqnum_offset = DEFAULT_SEQNUM_OFFSET; rtpbasepayload->ssrc = DEFAULT_SSRC; rtpbasepayload->ts_offset = DEFAULT_TIMESTAMP_OFFSET; + priv->running_time = DEFAULT_RUNNING_TIME; priv->seqnum_offset_random = (rtpbasepayload->seqnum_offset == -1); priv->ts_offset_random = (rtpbasepayload->ts_offset == -1); priv->ssrc_random = (rtpbasepayload->ssrc == -1); @@ -966,6 +974,12 @@ gst_rtp_base_payload_prepare_push (GstRTPBasePayload * payload, data.offset - priv->base_offset; GST_LOG_OBJECT (payload, "Using offset %" G_GUINT64_FORMAT " for RTP timestamp", data.offset); + + /* store buffer's running time */ + GST_LOG_OBJECT (payload, + "setting running-time to %" G_GUINT64_FORMAT, + data.offset - priv->base_offset); + priv->running_time = priv->base_rtime + data.offset - priv->base_offset; } else if (GST_CLOCK_TIME_IS_VALID (data.pts)) { gint64 rtime; @@ -987,6 +1001,11 @@ gst_rtp_base_payload_prepare_push (GstRTPBasePayload * payload, } /* add running_time in clock-rate units to the base timestamp */ data.rtptime = payload->ts_base + rtime; + + /* store buffer's running time */ + GST_LOG_OBJECT (payload, + "setting running-time to %" G_GUINT64_FORMAT, rtime); + priv->running_time = rtime; } else { GST_LOG_OBJECT (payload, "Using previous RTP timestamp %" G_GUINT32_FORMAT, payload->timestamp); @@ -1097,10 +1116,14 @@ gst_rtp_base_payload_push (GstRTPBasePayload * payload, GstBuffer * buffer) static GstStructure * gst_rtp_base_payload_create_stats (GstRTPBasePayload *rtpbasepayload) { + GstRTPBasePayloadPrivate *priv; GstStructure *s; + priv = rtpbasepayload->priv; + s = gst_structure_new ("application/x-rtp-payload-stats", "clock-rate", G_TYPE_UINT, rtpbasepayload->clock_rate, + "running-time", G_TYPE_UINT64, priv->running_time, "seqnum", G_TYPE_UINT, rtpbasepayload->seqnum, "timestamp", G_TYPE_UINT, rtpbasepayload->timestamp, NULL); @@ -1261,6 +1284,7 @@ gst_rtp_base_payload_change_state (GstElement * element, else rtpbasepayload->ts_base = rtpbasepayload->ts_offset; rtpbasepayload->timestamp = rtpbasepayload->ts_base; + priv->running_time = DEFAULT_RUNNING_TIME; g_atomic_int_set (&rtpbasepayload->priv->notified_first_timestamp, 1); priv->base_offset = GST_BUFFER_OFFSET_NONE; priv->negotiated = FALSE;