summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Grobelny <tomasz@grobelny.oswiecenia.net>2008-07-07 10:16:07 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-07-07 10:16:07 +0000
commit5e2a462789be55a717238ca6f30902b1fc0432c6 (patch)
tree240a8b38cac96a38d7fb53add77f99e6f036ca04
parentcf3286dac701e58e9994f1a5e9f728cdb8ffe342 (diff)
gst/rtp/gstrtpspeexdepay.*: Take timestamp from the RTP packet as a first step to fix problems with transmission over...
Original commit message from CVS: Patch by: Tomasz Grobelny <tomasz at grobelny dot oswiecenia dot net> * gst/rtp/gstrtpspeexdepay.c: (gst_rtp_speex_depay_init), (gst_rtp_speex_depay_process): * gst/rtp/gstrtpspeexdepay.h: Take timestamp from the RTP packet as a first step to fix problems with transmission over RTP when the network is not reliable. Fixes bug #541787.
-rw-r--r--ChangeLog11
-rw-r--r--gst/rtp/gstrtpspeexdepay.c10
-rw-r--r--gst/rtp/gstrtpspeexdepay.h1
3 files changed, 21 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 055422d4..c5e44f0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-07-07 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ Patch by: Tomasz Grobelny <tomasz at grobelny dot oswiecenia dot net>
+
+ * gst/rtp/gstrtpspeexdepay.c: (gst_rtp_speex_depay_init),
+ (gst_rtp_speex_depay_process):
+ * gst/rtp/gstrtpspeexdepay.h:
+ Take timestamp from the RTP packet as a first step to fix problems
+ with transmission over RTP when the network is not reliable.
+ Fixes bug #541787.
+
2008-07-05 Sebastian Dröge <sebastian.droege@collabora.co.uk>
Patch by: Tero Saarni <tero dot saarni at gmail dot com>
diff --git a/gst/rtp/gstrtpspeexdepay.c b/gst/rtp/gstrtpspeexdepay.c
index c18c5e22..db6cbd53 100644
--- a/gst/rtp/gstrtpspeexdepay.c
+++ b/gst/rtp/gstrtpspeexdepay.c
@@ -105,6 +105,7 @@ gst_rtp_speex_depay_init (GstRtpSPEEXDepay * rtpspeexdepay,
GstRtpSPEEXDepayClass * klass)
{
GST_BASE_RTP_DEPAYLOAD (rtpspeexdepay)->clock_rate = 8000;
+ rtpspeexdepay->start_ts = 0;
}
static gint
@@ -202,8 +203,15 @@ gst_rtp_speex_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
gst_rtp_buffer_get_marker (buf),
gst_rtp_buffer_get_timestamp (buf), gst_rtp_buffer_get_seq (buf));
- /* nothing special to be done */
+ GstRtpSPEEXDepay *speexdepayload = GST_RTP_SPEEX_DEPAY (depayload);
+ /* apply correct timestamp from rtp packet */
outbuf = gst_rtp_buffer_get_payload_buffer (buf);
+ if (speexdepayload->start_ts == 0)
+ speexdepayload->start_ts = gst_rtp_buffer_get_timestamp (buf);
+ GST_BUFFER_TIMESTAMP (outbuf) =
+ gst_util_uint64_scale (GST_SECOND,
+ gst_rtp_buffer_get_timestamp (buf) - speexdepayload->start_ts,
+ depayload->clock_rate);
return outbuf;
}
diff --git a/gst/rtp/gstrtpspeexdepay.h b/gst/rtp/gstrtpspeexdepay.h
index 4a76a633..705886c8 100644
--- a/gst/rtp/gstrtpspeexdepay.h
+++ b/gst/rtp/gstrtpspeexdepay.h
@@ -37,6 +37,7 @@ typedef struct _GstRtpSPEEXDepayClass GstRtpSPEEXDepayClass;
struct _GstRtpSPEEXDepay
{
GstBaseRTPDepayload depayload;
+ guint64 start_ts;
};
struct _GstRtpSPEEXDepayClass