mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
mp4adepay: fix timestamps on buffers
This commit is contained in:
parent
756869421c
commit
9c2393490f
1 changed files with 9 additions and 10 deletions
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue