diff options
Diffstat (limited to 'gst')
-rw-r--r-- | gst/rtpmanager/gstrtpbin.c | 3 | ||||
-rw-r--r-- | gst/rtpmanager/rtpsession.c | 2 | ||||
-rw-r--r-- | gst/rtpmanager/rtpsource.c | 2 | ||||
-rw-r--r-- | gst/rtpmanager/rtpsource.h | 1 | ||||
-rw-r--r-- | gst/rtpmanager/rtpstats.h | 4 |
5 files changed, 11 insertions, 1 deletions
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c index 76b806bc..8cfd63c4 100644 --- a/gst/rtpmanager/gstrtpbin.c +++ b/gst/rtpmanager/gstrtpbin.c @@ -306,6 +306,7 @@ struct _GstRtpBinStream /* for lip-sync */ guint64 clock_base; + guint64 clock_base_time; gint clock_rate; gint64 ts_offset; gint64 prev_ts_offset; @@ -785,6 +786,7 @@ gst_rtp_bin_associate (GstRtpBin * bin, GstRtpBinStream * stream, guint8 len, stream->local_unix = gst_util_uint64_scale_int (stream->local_rtp, GST_SECOND, stream->clock_rate); + stream->local_unix += stream->clock_base_time; /* calculate delta between server and receiver */ stream->unix_delta = stream->last_unix - stream->local_unix; @@ -942,6 +944,7 @@ gst_rtp_bin_sync_chain (GstPad * pad, GstBuffer * buffer) if (type == GST_RTCP_SDES_CNAME) { stream->clock_base = GST_BUFFER_OFFSET (buffer); + stream->clock_base_time = GST_BUFFER_OFFSET_END (buffer); /* associate the stream to CNAME */ gst_rtp_bin_associate (bin, stream, len, data); } diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 0eaf3e6f..7ddcfe4d 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -1233,6 +1233,7 @@ update_arrival_stats (RTPSession * sess, RTPArrivalStats * arrival, /* get time of arrival */ g_get_current_time (¤t); arrival->time = GST_TIMEVAL_TO_TIME (current); + arrival->timestamp = GST_BUFFER_TIMESTAMP (buffer); arrival->ntpnstime = ntpnstime; /* get packet size including header overhead */ @@ -1434,6 +1435,7 @@ rtp_session_process_sr (RTPSession * sess, GstRTCPPacket * packet, return; GST_BUFFER_OFFSET (packet->buffer) = source->clock_base; + GST_BUFFER_OFFSET_END (packet->buffer) = source->clock_base_time; prevsender = RTP_SOURCE_IS_SENDER (source); diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c index 938a1d56..36def461 100644 --- a/gst/rtpmanager/rtpsource.c +++ b/gst/rtpmanager/rtpsource.c @@ -171,6 +171,7 @@ rtp_source_init (RTPSource * src) src->payload = 0; src->clock_rate = -1; src->clock_base = -1; + src->clock_base_time = -1; src->packets = g_queue_new (); src->seqnum_base = -1; src->last_rtptime = -1; @@ -772,6 +773,7 @@ calculate_jitter (RTPSource * src, GstBuffer * buffer, if (src->clock_base == -1) { GST_DEBUG ("using clock-base of %" G_GUINT32_FORMAT, rtptime); src->clock_base = rtptime; + src->clock_base_time = arrival->timestamp; } /* convert arrival time to RTP timestamp units, truncate to 32 bits, we don't diff --git a/gst/rtpmanager/rtpsource.h b/gst/rtpmanager/rtpsource.h index 1eae0c18..a2ba2d61 100644 --- a/gst/rtpmanager/rtpsource.h +++ b/gst/rtpmanager/rtpsource.h @@ -134,6 +134,7 @@ struct _RTPSource { gint clock_rate; gint32 seqnum_base; gint64 clock_base; + guint64 clock_base_time; GstClockTime bye_time; GstClockTime last_activity; diff --git a/gst/rtpmanager/rtpstats.h b/gst/rtpmanager/rtpstats.h index c0d3a512..f82c9585 100644 --- a/gst/rtpmanager/rtpstats.h +++ b/gst/rtpmanager/rtpstats.h @@ -56,7 +56,8 @@ typedef struct { /** * RTPArrivalStats: - * @time: arrival time of a packet + * @time: arrival time of a packet according to the system clock + * @timestamp: arrival time of a packet as buffer timestamp * @address: address of the sender of the packet * @bytes: bytes of the packet including lowlevel overhead * @payload_len: bytes of the RTP payload @@ -65,6 +66,7 @@ typedef struct { */ typedef struct { GstClockTime time; + GstClockTime timestamp; guint64 ntpnstime; gboolean have_address; GstNetAddress address; |