mp4gdepay: guess constantDuration better

Do a better job at guessing the constantDuration parameter when it is not
present in the caps.

Fixes #585205
This commit is contained in:
Wim Taymans 2009-06-15 22:40:35 +02:00 committed by Wim Taymans
parent cf58ba0fa5
commit a2cef3e5c2

View file

@ -245,14 +245,10 @@ gst_rtp_mp4g_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
if (strcmp (str, "audio") == 0) {
srccaps = gst_caps_new_simple ("audio/mpeg",
"mpegversion", G_TYPE_INT, 4, NULL);
/* AAC always has a default constant duration of 1024 but it can be
* overriden below. */
rtpmp4gdepay->constantDuration = 1024;
} else if (strcmp (str, "video") == 0) {
srccaps = gst_caps_new_simple ("video/mpeg",
"mpegversion", G_TYPE_INT, 4,
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
rtpmp4gdepay->constantDuration = 0;
}
}
if (srccaps == NULL)
@ -279,8 +275,7 @@ gst_rtp_mp4g_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
rtpmp4gdepay->constantSize =
gst_rtp_mp4g_depay_parse_int (structure, "constantsize", 0);
rtpmp4gdepay->constantDuration =
gst_rtp_mp4g_depay_parse_int (structure, "constantduration",
rtpmp4gdepay->constantDuration);
gst_rtp_mp4g_depay_parse_int (structure, "constantduration", 0);
/* get config string */
@ -511,6 +506,7 @@ gst_rtp_mp4g_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
* reconstruct the AU ordering when interleaving. */
if (i == 0) {
AU_index = gst_bs_parse_read (&bs, rtpmp4gdepay->indexlength);
if (AU_index == 0 && rtpmp4gdepay->prev_AU_index == 0) {
gint diff;
@ -524,6 +520,13 @@ gst_rtp_mp4g_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
else
diff = -(rtpmp4gdepay->prev_rtptime - rtptime);
/* if no constantDuration was given, make one */
if (rtpmp4gdepay->constantDuration == 0) {
rtpmp4gdepay->constantDuration = diff / num_AU_headers;
GST_DEBUG_OBJECT (depayload, "guessing constantDuration %d",
rtpmp4gdepay->constantDuration);
}
/* get the number of packets by dividing with the duration */
diff /= rtpmp4gdepay->constantDuration;