mp4adepay: fix timestamps on buffers

This commit is contained in:
Wim Taymans 2010-12-30 16:24:16 +01:00
parent 756869421c
commit 9c2393490f

View file

@ -263,8 +263,11 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
guint i; guint i;
guint8 *data; guint8 *data;
guint pos; guint pos;
GstClockTime timestamp;
guint offset;
avail = gst_adapter_available (rtpmp4adepay->adapter); avail = gst_adapter_available (rtpmp4adepay->adapter);
timestamp = gst_adapter_prev_timestamp (rtpmp4adepay->adapter, NULL);
GST_LOG_OBJECT (rtpmp4adepay, "have marker and %u available", avail); GST_LOG_OBJECT (rtpmp4adepay, "have marker and %u available", avail);
@ -272,18 +275,16 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
data = GST_BUFFER_DATA (outbuf); data = GST_BUFFER_DATA (outbuf);
/* position in data we are at */ /* position in data we are at */
pos = 0; pos = 0;
/* timestamp offset */
offset = 0;
/* looping through the number of sub-frames in the audio payload */ /* looping through the number of sub-frames in the audio payload */
for (i = 0; i <= rtpmp4adepay->numSubFrames; i++) { for (i = 0; i <= rtpmp4adepay->numSubFrames; i++) {
/* determine payload length and set buffer data pointer accordingly */ /* determine payload length and set buffer data pointer accordingly */
guint skip; guint skip;
guint data_len; guint data_len;
guint32 timestamp;
GstBuffer *tmp = NULL; GstBuffer *tmp = NULL;
timestamp = gst_rtp_buffer_get_timestamp (buf);
/* each subframe starts with a variable length encoding */ /* each subframe starts with a variable length encoding */
data_len = 0; data_len = 0;
for (skip = 0; skip < avail; skip++) { for (skip = 0; skip < avail; skip++) {
@ -314,13 +315,11 @@ gst_rtp_mp4a_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
data += skip; data += skip;
avail -= skip; avail -= skip;
gst_buffer_set_caps (tmp, GST_PAD_CAPS (depayload->srcpad)); GST_BUFFER_TIMESTAMP (tmp) = timestamp;
gst_base_rtp_depayload_push (depayload, tmp);
/* only apply the timestamp for the first buffer. Based on gstrtpmp4gdepay.c */ /* only apply the timestamp for the first buffer */
if (i == 0) timestamp = -1;
gst_base_rtp_depayload_push_ts (depayload, timestamp, tmp);
else
gst_base_rtp_depayload_push (depayload, tmp);
} }
/* just a check that lengths match */ /* just a check that lengths match */