mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
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:
parent
cf58ba0fa5
commit
a2cef3e5c2
1 changed files with 9 additions and 6 deletions
|
@ -245,14 +245,10 @@ gst_rtp_mp4g_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
|
||||||
if (strcmp (str, "audio") == 0) {
|
if (strcmp (str, "audio") == 0) {
|
||||||
srccaps = gst_caps_new_simple ("audio/mpeg",
|
srccaps = gst_caps_new_simple ("audio/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, 4, NULL);
|
"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) {
|
} else if (strcmp (str, "video") == 0) {
|
||||||
srccaps = gst_caps_new_simple ("video/mpeg",
|
srccaps = gst_caps_new_simple ("video/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, 4,
|
"mpegversion", G_TYPE_INT, 4,
|
||||||
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
||||||
rtpmp4gdepay->constantDuration = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (srccaps == NULL)
|
if (srccaps == NULL)
|
||||||
|
@ -279,8 +275,7 @@ gst_rtp_mp4g_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
|
||||||
rtpmp4gdepay->constantSize =
|
rtpmp4gdepay->constantSize =
|
||||||
gst_rtp_mp4g_depay_parse_int (structure, "constantsize", 0);
|
gst_rtp_mp4g_depay_parse_int (structure, "constantsize", 0);
|
||||||
rtpmp4gdepay->constantDuration =
|
rtpmp4gdepay->constantDuration =
|
||||||
gst_rtp_mp4g_depay_parse_int (structure, "constantduration",
|
gst_rtp_mp4g_depay_parse_int (structure, "constantduration", 0);
|
||||||
rtpmp4gdepay->constantDuration);
|
|
||||||
|
|
||||||
|
|
||||||
/* get config string */
|
/* get config string */
|
||||||
|
@ -511,6 +506,7 @@ gst_rtp_mp4g_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
|
||||||
* reconstruct the AU ordering when interleaving. */
|
* reconstruct the AU ordering when interleaving. */
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
AU_index = gst_bs_parse_read (&bs, rtpmp4gdepay->indexlength);
|
AU_index = gst_bs_parse_read (&bs, rtpmp4gdepay->indexlength);
|
||||||
|
|
||||||
if (AU_index == 0 && rtpmp4gdepay->prev_AU_index == 0) {
|
if (AU_index == 0 && rtpmp4gdepay->prev_AU_index == 0) {
|
||||||
gint diff;
|
gint diff;
|
||||||
|
|
||||||
|
@ -524,6 +520,13 @@ gst_rtp_mp4g_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf)
|
||||||
else
|
else
|
||||||
diff = -(rtpmp4gdepay->prev_rtptime - rtptime);
|
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 */
|
/* get the number of packets by dividing with the duration */
|
||||||
diff /= rtpmp4gdepay->constantDuration;
|
diff /= rtpmp4gdepay->constantDuration;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue