Revert "qtdemux: expose streams with first moof for fragmented format"
authorSebastian Dröge <sebastian@centricular.com>
Thu, 21 Apr 2016 09:53:33 +0000 (12:53 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 21 Apr 2016 09:53:33 +0000 (12:53 +0300)
This reverts commit d8bb6687ea251570c331038279a43d448167d6ad.

https://bugzilla.gnome.org/show_bug.cgi?id=764733

gst/isomp4/qtdemux.c
gst/isomp4/qtdemux.h

index e3e2d9ddf774300d8556018cc390899c7e21628d..c5a90b2a145f1ea54a01ac308a05296c94511dfc 100644 (file)
@@ -591,7 +591,6 @@ gst_qtdemux_init (GstQTDemux * qtdemux)
   qtdemux->state = QTDEMUX_STATE_INITIAL;
   qtdemux->pullbased = FALSE;
   qtdemux->posted_redirect = FALSE;
-  qtdemux->pending_configure = FALSE;
   qtdemux->neededbytes = 16;
   qtdemux->todrop = 0;
   qtdemux->adapter = gst_adapter_new ();
@@ -1996,7 +1995,6 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard)
     gst_caps_replace (&qtdemux->media_caps, NULL);
     qtdemux->timescale = 0;
     qtdemux->got_moov = FALSE;
-    qtdemux->pending_configure = FALSE;
     if (qtdemux->protection_system_ids) {
       g_ptr_array_free (qtdemux->protection_system_ids, TRUE);
       qtdemux->protection_system_ids = NULL;
@@ -6035,7 +6033,6 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force)
             &fourcc);
         if (fourcc == FOURCC_moov) {
           gint n;
-          gboolean got_samples = FALSE;
 
           /* in usual fragmented setup we could try to scan for more
            * and end up at the the moov (after mdat) again */
@@ -6067,27 +6064,19 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force)
             qtdemux_node_dump (demux, demux->moov_node);
             qtdemux_parse_tree (demux);
             qtdemux_prepare_streams (demux);
+            if (!demux->got_moov)
+              qtdemux_expose_streams (demux);
+            else {
 
-            for (n = 0; n < demux->n_streams; n++) {
-              QtDemuxStream *stream = demux->streams[n];
-              got_samples |= stream->stbl_index >= 0;
-            }
-            if (!demux->fragmented || got_samples) {
-              if (!demux->got_moov) {
-                qtdemux_expose_streams (demux);
-              } else {
-                for (n = 0; n < demux->n_streams; n++) {
-                  QtDemuxStream *stream = demux->streams[n];
-                  gst_qtdemux_configure_stream (demux, stream);
-                }
+              for (n = 0; n < demux->n_streams; n++) {
+                QtDemuxStream *stream = demux->streams[n];
+
+                gst_qtdemux_configure_stream (demux, stream);
               }
-              gst_qtdemux_check_send_pending_segment (demux);
-              demux->pending_configure = FALSE;
-            } else {
-              demux->pending_configure = TRUE;
             }
 
             demux->got_moov = TRUE;
+            gst_qtdemux_check_send_pending_segment (demux);
 
             /* fragmented streams headers shouldn't contain edts atoms */
             if (!demux->fragmented) {
@@ -6106,7 +6095,6 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force)
             guint64 dist = 0;
             GstClockTime prev_pts;
             guint64 prev_offset;
-            gint n;
 
             GST_DEBUG_OBJECT (demux, "Parsing [moof]");
 
@@ -6140,25 +6128,15 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force)
               ret = GST_FLOW_ERROR;
               goto done;
             }
-            /* in MSS we need to expose the pads after the first moof as we won't get a moov 
-             * Also, fragmented format need to be exposed if a moov have no valid sample data */
-            if (demux->mss_mode || demux->pending_configure) {
-              if (!demux->exposed) {
-                if (!demux->pending_newsegment) {
-                  GstSegment segment;
-                  gst_segment_init (&segment, GST_FORMAT_TIME);
-                  GST_DEBUG_OBJECT (demux, "new pending_newsegment");
-                  demux->pending_newsegment = gst_event_new_segment (&segment);
-                }
-                qtdemux_expose_streams (demux);
-              } else {
-                for (n = 0; n < demux->n_streams; n++) {
-                  QtDemuxStream *stream = demux->streams[n];
-                  gst_qtdemux_configure_stream (demux, stream);
-                }
+            /* in MSS we need to expose the pads after the first moof as we won't get a moov */
+            if (demux->mss_mode && !demux->exposed) {
+              if (!demux->pending_newsegment) {
+                GstSegment segment;
+                gst_segment_init (&segment, GST_FORMAT_TIME);
+                GST_DEBUG_OBJECT (demux, "new pending_newsegment");
+                demux->pending_newsegment = gst_event_new_segment (&segment);
               }
-              gst_qtdemux_check_send_pending_segment (demux);
-              demux->pending_configure = FALSE;
+              qtdemux_expose_streams (demux);
             }
           } else {
             GST_DEBUG_OBJECT (demux, "Discarding [moof]");
index 165435ceaa15d5c06f85408d309692e043a29a65..53bd071c3b6f5f8da855e166bdc1ea7447e50177 100644 (file)
@@ -89,7 +89,6 @@ struct _GstQTDemux {
   gboolean posted_redirect;
 
   /* push based variables */
-  gboolean pending_configure;
   guint neededbytes;
   guint todrop;
   GstAdapter *adapter;