From a2cef3e5c214e09b8cdcb2ae24e61c781690464f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 15 Jun 2009 22:40:35 +0200 Subject: mp4gdepay: guess constantDuration better Do a better job at guessing the constantDuration parameter when it is not present in the caps. Fixes #585205 --- gst/rtp/gstrtpmp4gdepay.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gst/rtp/gstrtpmp4gdepay.c b/gst/rtp/gstrtpmp4gdepay.c index 2d4a79f08..e12357aa4 100644 --- a/gst/rtp/gstrtpmp4gdepay.c +++ b/gst/rtp/gstrtpmp4gdepay.c @@ -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; -- cgit v1.2.3