playbin3: Use uridecodebin3 and link/reconfigure immediately
authorEdward Hervey <edward@centricular.com>
Thu, 9 Nov 2017 10:17:13 +0000 (11:17 +0100)
committerEdward Hervey <bilboed@bilboed.com>
Sat, 10 Feb 2018 11:24:09 +0000 (12:24 +0100)
commitb9e73d057572d4ba2584aa65b488e8b31b2e1017
tree85125acac501ed944cbc92774313cb16ffd4c632
parentebf138e29ec848507b654f53070c076f61014385
playbin3: Use uridecodebin3 and link/reconfigure immediately

Apologies for the big commit, but it wasn't really possible to split it
in anything smaller.

* Switch to uridecodebin3 instead of managing urisourcebin and decodebin3
ourselves. No major architectural change with this.

* Reconfigure sinks/outputs when needed. This is possible thanks to the
various streams-related API. Instead of blocking new pads and waiting
for a (fake) no-more-pads to decide what to connect, we instead reconfigure
playsink and the combiners to whatever types are currently selected. All of
this is done in reconfigure_output().
  New pads are immediately connected to (combiners and) sinks, allowing
immediate negotiation and usage.

* Since elements are always connected, the "cached-duration" feature is gone
and queries can reach the target elements.

* The auto-plugging related code is currently disabled entirely until
we get the new proper API.

* Store collections at the GstSourceGroup level and not globally

* And more comments a bit everywhere

NOTE: gapless is still not functional, but this opens the way to be able
to handle it in a streams-aware fashion (where several uridecodebin3 can
be active at the same time).
gst/playback/gstplaybin3.c