diff options
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | gst/rtpmanager/gstrtpjitterbuffer.c | 8 | ||||
-rw-r--r-- | gst/rtpmanager/rtpjitterbuffer.c | 1 | ||||
-rw-r--r-- | gst/rtpmanager/rtpsession.c | 6 |
4 files changed, 31 insertions, 2 deletions
@@ -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) { |