Christian blogged some time ago about me working on decodebin2. And it’s finally landed in bugzilla for your reviewing pleasure.
You will need the following 3 patches:
- GstSafeQueue : an GObject that contains all the threadsafe queuing functionnalities of a GstQueue. This allows elements to use such an object to add some queuing features, without having to worry about thread issues. The patch also contains a patched version of GstQueue using GstSafeQueue (notice how small it becomes, and no more explicit use of locks !). Patch #344639.
- GstMultiQueue element : A GstElement that acts like GstQueue except that it controls several streams. If all you streams are linked, it won’t differ that much from several GstQueue. But where it gets nice, is that if one of the source pads isn’t linked (because there are two different language audio streams going through it and you only listen to one at a time), then the multiqueue element will continuously try to send data downstream in the same order it arrived in multiqueue in regards to the other streams. This means that if you switch to listening an different audio stream… you won’t loose any data. Patch #347785.
- decodebin2 element : Same goal as decodebin, written from scratch, using the notion of groups and multiqueue to cope with some functionnalities which have always been broken : chained-oggs, multi-audio-tracks, choosing non-raw streams… You can have a look at the decodebin design document for more details. Patch #370092.
The next step, apart from testing decodebin2 even more, is to scrape out all the cruft in playbin which is not needed anymore with this new design (queuing, audio switching, chained oggs, ….). Feedback is welcome as usual.