wtay gst-plugins-bad: gst-plugins-bad/ gst-plugins-bad/gst/rtpmanager/
[email protected] Tue, 23 Dec 2008 03:40:14 -0800 (PST)
| Newsgroups | gmane.comp.video.gstreamer.cvs |
|---|---|
| Message-ID | <[email protected]> |
CVS Root: /cvs/gstreamer
Module: gst-plugins-bad
Changes by: wtay
Date: Tue Dec 23 2008 11:40:14 UTC
Log message:
Patch by: Arnout Vandecappelle <arnout at mind dot be>
* gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_reset_skew),
(calculate_skew):
* gst/rtpmanager/rtpjitterbuffer.h:
Keep track of the last outgoing timestamp and of the last sender-side
time. Timestamps can only go forward if they do at the sender
side, can only go back if they do at the sender side, and remain the
same if they remain the same at the sender side. Fixes #565319.
Modified files:
. : ChangeLog
gst/rtpmanager : rtpjitterbuffer.c rtpjitterbuffer.h
Links:
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.3829&r2=1.3830
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/rtpmanager/rtpjitterbuffer.c.diff?r1=1.22&r2=1.23
http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/rtpmanager/rtpjitterbuffer.h.diff?r1=1.12&r2=1.13
====Begin Diffs====
Index: ChangeLog
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v
retrieving revision 1.3829
retrieving revision 1.3830
diff -u -d -r1.3829 -r1.3830
--- ChangeLog 22 Dec 2008 20:56:09 -0000 1.3829
+++ ChangeLog 23 Dec 2008 11:39:58 -0000 1.3830
@@ -1,3 +1,15 @@
+2008-12-23 Wim Taymans <[email protected]>
+
+ Patch by: Arnout Vandecappelle <arnout at mind dot be>
+ * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_reset_skew),
+ (calculate_skew):
+ * gst/rtpmanager/rtpjitterbuffer.h:
+ Keep track of the last outgoing timestamp and of the last sender-side
+ time. Timestamps can only go forward if they do at the sender
+ side, can only go back if they do at the sender side, and remain the
+ same if they remain the same at the sender side. Fixes #565319.
2008-12-22 Sebastian Dröge <[email protected]>
* gst/mxf/mxfmpeg.c: (mxf_mpeg_es_create_caps),
Index: rtpjitterbuffer.c
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/rtpmanager/rtpjitterbuffer.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- rtpjitterbuffer.c 19 Nov 2008 09:06:29 -0000 1.22
+++ rtpjitterbuffer.c 23 Dec 2008 11:39:59 -0000 1.23
@@ -113,6 +113,7 @@
jbuf->window_min = 0;
jbuf->skew = 0;
jbuf->prev_send_diff = -1;
+ jbuf->prev_out_time = -1;
GST_DEBUG ("reset skew correction");
}
@@ -198,16 +199,20 @@
jbuf->base_time = -1;
jbuf->base_rtptime = -1;
jbuf->clock_rate = clock_rate;
+ jbuf->prev_out_time = -1;
+ jbuf->prev_send_diff = -1;
}
/* first time, lock on to time and gstrtptime */
if (G_UNLIKELY (jbuf->base_time == -1)) {
jbuf->base_time = time;
GST_DEBUG ("Taking new base time %" GST_TIME_FORMAT, GST_TIME_ARGS (time));
if (G_UNLIKELY (jbuf->base_rtptime == -1)) {
jbuf->base_rtptime = gstrtptime;
jbuf->base_extrtp = ext_rtptime;
GST_DEBUG ("Taking new base rtptime %" GST_TIME_FORMAT,
GST_TIME_ARGS (gstrtptime));
@@ -221,6 +226,8 @@
send_diff = 0;
@@ -253,6 +260,8 @@
delta = 0;
@@ -333,11 +342,31 @@
no_skew:
/* the output time is defined as the base timestamp plus the RTP time
* adjusted for the clock skew .*/
- if (jbuf->base_time != -1)
+ if (jbuf->base_time != -1) {
out_time = jbuf->base_time + send_diff + jbuf->skew;
- else
+ /* check if timestamps are not going backwards, we can only check this if we
+ * have a previous out time and a previous send_diff */
+ if (G_LIKELY (jbuf->prev_out_time != -1 && jbuf->prev_send_diff != -1)) {
+ /* now check for backwards timestamps */
+ if (G_UNLIKELY (
+ /* if the server timestamps went up and the out_time backwards */
+ (send_diff > jbuf->prev_send_diff
+ && out_time < jbuf->prev_out_time) ||
+ /* if the server timestamps went backwards and the out_time forwards */
+ (send_diff < jbuf->prev_send_diff
+ && out_time > jbuf->prev_out_time) ||
+ /* if the server timestamps did not change */
+ send_diff == jbuf->prev_send_diff)) {
+ GST_DEBUG ("backwards timestamps, using previous time");
+ out_time = jbuf->prev_out_time;
+ }
+ }
+ } else
out_time = -1;
+ jbuf->prev_out_time = out_time;
+ jbuf->prev_send_diff = send_diff;
GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
jbuf->skew, GST_TIME_ARGS (out_time));
Index: rtpjitterbuffer.h
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/rtpmanager/rtpjitterbuffer.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- rtpjitterbuffer.h 19 Nov 2008 09:06:29 -0000 1.12
+++ rtpjitterbuffer.h 23 Dec 2008 11:39:59 -0000 1.13
@@ -58,6 +58,7 @@
GstClockTime base_rtptime;
guint32 clock_rate;
GstClockTime base_extrtp;
+ GstClockTime prev_out_time;
guint64 ext_rtptime;
guint64 last_rtptime;
gint64 window[RTP_JITTER_BUFFER_MAX_WINDOW];
------------------------------------------------------------------------------
_______________________________________________
gstreamer-cvs-verbose mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gstreamer-cvs-verbose