gstreamer/plugins/elements
Thibault Saunier 78e2264544 multiqueue: Not post BUFFERING message if one of the singlequeue doesn't need it
Imagine the following 'pipeline'

                --------------
            p1/| 'fullqueue'  |--- 'laggy' downstream
  ---------  / |              |
-| demuxer |   | multiqueue   |
  ---------  \ |              |
            p2\| 'emptyqueue' |--- 'fast' downstream
                --------------

In the case downstream of one single queue (fullqueue) has (a lot of) latency
(for example for reverse playback with video), we can end up having the other
SingleQueue (emptyqueue) emptied, before that fullqueue gets
unblocked. In the meantime, the demuxer tries to push on fullqueue, and
is blocking there.

In that case the current code will post a BUFFERING message on the bus when
emptyqueue gets emptied, that leads to the application setting the pipeline state to
PAUSED. So now we end up in a situation where 'laggy downstream' is
prerolled and will not unblock anymore because the pipeline is set to
PAUSED, the fullequeue does not have a chance to be emptied and
the emptyqueue can not get filled anymore so no more BUFERRING message
will be posted and the pipeline is stucked in PAUSED for the eternity.

Making sure that we do not try to "buffer" if one of the single queue
does not need buffering, prevents this situtation from happening though it lets the
oportunity for buffering in all other cases.

That implements a new logic where we need all singlequeue to need
buffering for the multiqueue to actually state buffering is needed,
taking the maximum buffering of the single queue as the reference point.

https://bugzilla.gnome.org/show_bug.cgi?id=734412
2014-08-13 18:25:12 +03:00
..
.gitignore ignore more 2005-06-17 09:12:33 +00:00
gstcapsfilter.c capsfilter: do not forget to push pending events 2014-01-29 14:59:43 -03:00
gstcapsfilter.h capsfilter: Send all events that should happen after CAPS after the CAPS event 2013-05-09 09:32:49 +02:00
gstconcat.c concat: Add documentation and integrate into documentation build 2014-08-12 15:39:09 +03:00
gstconcat.h concat: Add new element that concatenates multiple streams 2014-08-12 15:38:56 +03:00
gstdownloadbuffer.c downloadbuffer: fix uninitialized variable 2014-06-03 22:19:33 +02:00
gstdownloadbuffer.h sparsefile: keep it private as helper API for downloadbuffer 2014-05-13 20:05:55 +01:00
gstelements.c concat: Add new element that concatenates multiple streams 2014-08-12 15:38:56 +03:00
gstelements_private.c elements: improve buffer flags to string utility function 2014-07-19 18:56:53 +01:00
gstelements_private.h gstbuffer: factor three flags-to-string loops 2014-06-04 12:30:36 +01:00
gstfakesink.c gstbuffer: factor three flags-to-string loops 2014-06-04 12:30:36 +01:00
gstfakesink.h Revert "Potential GstContext regression" 2013-09-24 12:47:52 +02:00
gstfakesrc.c gstbuffer: factor three flags-to-string loops 2014-06-04 12:30:36 +01:00
gstfakesrc.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstfdsink.c docs: remove outdated and pointless 'Last reviewed' lines from docs 2014-04-26 21:21:51 +01:00
gstfdsink.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstfdsrc.c fdsrc: fix error setting when uri is invalid 2014-07-07 16:14:55 -03:00
gstfdsrc.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstfilesink.c filesink: please gcc (avoid a warn_unused_result warning) 2013-08-27 09:31:22 +02:00
gstfilesink.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstfilesrc.c docs: There is no decodebin2 anymore, don't pretend otherwise 2014-07-08 11:18:05 +02:00
gstfilesrc.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstfunnel.c funnel: Fix for racy EOS event handling 2014-07-21 09:33:54 +02:00
gstfunnel.h funnel: Re-push all sticky events when buffers come from a different pad 2013-07-01 20:45:42 -04:00
gstidentity.c identity: Proxy the accept-caps query 2014-07-01 19:19:43 +02:00
gstidentity.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstinputselector.c input-selector: Hold pad object lock when changing tags 2014-04-11 22:39:36 +10:00
gstinputselector.h inputselector: Don't push new stream-start events on stream change unless they all have group ids 2013-07-22 15:30:10 +02:00
gstmultiqueue.c multiqueue: Not post BUFFERING message if one of the singlequeue doesn't need it 2014-08-13 18:25:12 +03:00
gstmultiqueue.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstoutputselector.c outputselector: respect the 'negotiation-mode' property 2014-01-30 17:06:00 -03:00
gstoutputselector.h docs: add missing docs, fixing doc errors 2013-12-03 00:11:59 +00:00
gstqueue.c queue: Post errors when receiving EOS after downstream returned an error 2014-08-13 12:18:37 +03:00
gstqueue.h queue: Fix handling of serialized queries 2013-05-27 15:59:07 +02:00
gstqueue2.c queue2: Post errors if we receive EOS after downstream reported an error 2014-08-13 12:20:51 +03:00
gstqueue2.h queue2: fix event/preroll deadlock differently 2014-04-16 15:17:04 +01:00
gstsparsefile.c elements: don't depend on libgio just for g_io_error_from_errno() 2014-05-13 20:06:48 +01:00
gstsparsefile.h elements: don't depend on libgio just for g_io_error_from_errno() 2014-05-13 20:06:48 +01:00
gsttee.c docs: There is no decodebin2 anymore, don't pretend otherwise 2014-07-08 11:18:05 +02:00
gsttee.h tee: Make sure to give pads the name that was requested 2014-01-14 16:45:53 +01:00
gsttypefindelement.c typefindelement: remove prototype for function that no longer exists 2014-07-25 11:45:56 +01:00
gsttypefindelement.h Fix FSF address 2012-11-03 20:44:48 +00:00
gstvalve.c docs: remove outdated and pointless 'Last reviewed' lines from docs 2014-04-26 21:21:51 +01:00
gstvalve.h Fix FSF address 2012-11-03 20:44:48 +00:00
Makefile.am concat: Add new element that concatenates multiple streams 2014-08-12 15:38:56 +03:00