mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
rtpmp4gdepay: fix timestamps for RTP packets with multiple AUs
Use constantDuration to calculate the timestamp of non-first AU in the RTP packet. If constantDuration is not present in the MIME parameters, its value must be calculated based on the timing information from two consecutive RTP packets with AU-Index equal to 0. https://bugzilla.gnome.org/show_bug.cgi?id=747881
This commit is contained in:
parent
cb852cd128
commit
23b5a34675
1 changed files with 19 additions and 3 deletions
|
@ -560,6 +560,15 @@ gst_rtp_mp4g_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
|
|||
/* use number of packets and of previous frame */
|
||||
cd = diff / rtpmp4gdepay->prev_AU_num;
|
||||
GST_DEBUG_OBJECT (depayload, "guessing constantDuration %d", cd);
|
||||
if (!GST_BUFFER_IS_DISCONT (rtp->buffer)) {
|
||||
/* rfc3640 - 3.2.3.2
|
||||
* if we see two consecutive packets with AU_index of 0 and
|
||||
* there has been no discontinuity, we must conclude that this
|
||||
* value of constantDuration is correct from now on. */
|
||||
GST_DEBUG_OBJECT (depayload,
|
||||
"constantDuration of %d detected", cd);
|
||||
rtpmp4gdepay->constantDuration = cd;
|
||||
}
|
||||
} else {
|
||||
/* assume this frame has the same number of packets as the
|
||||
* previous one */
|
||||
|
@ -668,9 +677,16 @@ gst_rtp_mp4g_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp)
|
|||
GST_BUFFER_PTS (outbuf) = timestamp;
|
||||
GST_BUFFER_OFFSET (outbuf) = AU_index;
|
||||
|
||||
/* make sure we don't use the timestamp again for other AUs in this
|
||||
* RTP packet. */
|
||||
timestamp = -1;
|
||||
if (rtpmp4gdepay->constantDuration != 0) {
|
||||
/* if we have constantDuration, calculate timestamp for next AU
|
||||
* in this RTP packet. */
|
||||
timestamp += (rtpmp4gdepay->constantDuration * GST_SECOND) /
|
||||
depayload->clock_rate;
|
||||
} else {
|
||||
/* otherwise, make sure we don't use the timestamp again for other
|
||||
* AUs. */
|
||||
timestamp = GST_CLOCK_TIME_NONE;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (depayload,
|
||||
"pushing buffer of size %" G_GSIZE_FORMAT,
|
||||
|
|
Loading…
Reference in a new issue