diff options
Diffstat (limited to 'Tools/qt/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch')
-rw-r--r-- | Tools/qt/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/Tools/qt/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch b/Tools/qt/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch new file mode 100644 index 000000000..3a60db477 --- /dev/null +++ b/Tools/qt/patches/gst-plugins-good-Revert-qtdemux-expose-streams-with-first-moof-for-fr.patch @@ -0,0 +1,133 @@ +From 1a81bd90d4a3e59d6669a0bbfa456f1ed4e5db48 Mon Sep 17 00:00:00 2001 +From: Xabier Rodriguez Calvar <calvaris@igalia.com> +Date: Thu, 7 Apr 2016 13:57:16 +0200 +Subject: [PATCH] Revert "qtdemux: expose streams with first moof for + fragmented format" + +This reverts commit d8bb6687ea251570c331038279a43d448167d6ad. +--- + gst/isomp4/qtdemux.c | 54 ++++++++++++++++------------------------------------ + gst/isomp4/qtdemux.h | 1 - + 2 files changed, 16 insertions(+), 39 deletions(-) + +diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c +index 39be163..9636b4b 100644 +--- a/gst/isomp4/qtdemux.c ++++ b/gst/isomp4/qtdemux.c +@@ -609,7 +609,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 (); +@@ -2049,7 +2048,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; + } else if (qtdemux->mss_mode) { + gst_flow_combiner_reset (qtdemux->flowcombiner); + for (n = 0; n < qtdemux->n_streams; n++) +@@ -6104,7 +6102,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 */ +@@ -6136,27 +6133,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) { +@@ -6175,7 +6164,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]"); + +@@ -6209,25 +6197,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]"); +diff --git a/gst/isomp4/qtdemux.h b/gst/isomp4/qtdemux.h +index 6061215..ecf0c63 100644 +--- a/gst/isomp4/qtdemux.h ++++ b/gst/isomp4/qtdemux.h +@@ -89,7 +89,6 @@ struct _GstQTDemux { + gboolean posted_redirect; + + /* push based variables */ +- gboolean pending_configure; + guint neededbytes; + guint todrop; + GstAdapter *adapter; +-- +2.8.0.rc3 + |