qtdemux: Provide a 30 frames lead-in for MP3
authorMart Raudsepp <mart.raudsepp@collabora.com>
Tue, 2 Jul 2019 18:21:05 +0000 (21:21 +0300)
committerOlivier CrĂȘte <olivier.crete@ocrete.ca>
Tue, 2 Jul 2019 20:50:21 +0000 (20:50 +0000)
mpegaudioparse suggests MP3 needs 10 or 30 frames of lead-in (depending on
mpegaudioversion, which we don't know here), thus provide at least 30 frames
lead-in for such cases as a followup to commit cbfa4531ee5ef.

gst/isomp4/qtdemux.c

index 79b5f06..8e03d6a 100644 (file)
@@ -5141,8 +5141,20 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
 
   /* go back two frames to provide lead-in for non-raw audio decoders */
   if (stream->subtype == FOURCC_soun && !stream->need_clip) {
+    guint32 lead_in = 2;
     guint32 old_index = kf_index;
-    kf_index = MAX (kf_index, 2) - 2;
+    GstStructure *s = gst_caps_get_structure (CUR_STREAM (stream)->caps, 0);
+
+    if (gst_structure_has_name (s, "audio/mpeg")) {
+      gint mpegversion;
+      if (gst_structure_get_int (s, "mpegversion", &mpegversion)
+          && mpegversion == 1) {
+        /* mp3 could need up to 30 frames of lead-in per mpegaudioparse */
+        lead_in = 30;
+      }
+    }
+
+    kf_index = MAX (kf_index, lead_in) - lead_in;
     if (qtdemux_parse_samples (qtdemux, stream, kf_index)) {
       GST_DEBUG_OBJECT (stream->pad,
           "Moving backwards %u frames to ensure sufficient sound lead-in",