summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--gst/rtpmanager/gstrtpjitterbuffer.c8
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.c1
-rw-r--r--gst/rtpmanager/rtpsession.c6
4 files changed, 31 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a93cebfb..d96c0dff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
2008-08-05 Wim Taymans <wim.taymans@collabora.co.uk>
+ Based on patch by: Olivier Crete <tester at tester dot ca>
+
+ * gst/rtpmanager/gstrtpjitterbuffer.c:
+ (gst_rtp_jitter_buffer_chain), (gst_rtp_jitter_buffer_loop):
+ Make the buffer metadata writable before inserting it in the
+ jitterbuffer because the jitterbuffer will modify the timestamps.
+
+ * gst/rtpmanager/rtpjitterbuffer.c:
+ Update method comment about requiring writable metadata on buffers.
+
+ * gst/rtpmanager/rtpsession.c: (rtp_session_process_sr),
+ (rtp_session_process_rtcp):
+ Make the RTCP buffer metadata writable because we want to modify the
+ metadata.
+ Fixes #546312.
+
+2008-08-05 Wim Taymans <wim.taymans@collabora.co.uk>
+
* gst/selector/gstinputselector.c: (gst_selector_pad_bufferalloc),
(gst_selector_pad_chain), (gst_input_selector_getcaps),
(gst_input_selector_activate_sinkpad):
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 52430ff2..b9b15691 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -927,6 +927,10 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstBuffer * buffer)
}
}
+ /* we need to make the metadata writable before pushing it in the jitterbuffer
+ * because the jitterbuffer will update the timestamp */
+ buffer = gst_buffer_make_metadata_writable (buffer);
+
/* now insert the packet into the queue in sorted order. This function returns
* FALSE if a packet with the same seqnum was already in the queue, meaning we
* have a duplicate. */
@@ -1236,8 +1240,8 @@ push_buffer:
outbuf = rtp_jitter_buffer_pop (priv->jbuf);
if (discont || priv->discont) {
- /* set DISCONT flag when we missed a packet. */
- outbuf = gst_buffer_make_metadata_writable (outbuf);
+ /* set DISCONT flag when we missed a packet. We pushed the buffer writable
+ * into the jitterbuffer so we can modify now. */
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
priv->discont = FALSE;
}
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index caca165d..70a49c1e 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -339,6 +339,7 @@ no_skew:
* Inserts @buf into the packet queue of @jbuf. The sequence number of the
* packet will be used to sort the packets. This function takes ownerhip of
* @buf when the function returns %TRUE.
+ * @buf should have writable metadata when calling this function.
*
* Returns: %FALSE if a packet with the same number already existed.
*/
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index 59b1d8d0..19982478 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -1437,6 +1437,9 @@ rtp_session_process_sr (RTPSession * sess, GstRTCPPacket * packet,
if (!source)
return;
+ /* we somehow need to transfer the clock_base and the base time to the next
+ * element, we use the offset and offset_end fields in the buffer for this
+ * hack */
GST_BUFFER_OFFSET (packet->buffer) = source->clock_base;
GST_BUFFER_OFFSET_END (packet->buffer) = source->clock_base_time;
@@ -1669,6 +1672,9 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer,
if (sess->sent_bye)
goto ignore;
+ /* make writable, we might want to change the buffer */
+ buffer = gst_buffer_make_metadata_writable (buffer);
+
/* start processing the compound packet */
more = gst_rtcp_buffer_get_first_packet (buffer, &packet);
while (more) {