Commit 990eeb22 authored by Sebastian Dröge's avatar Sebastian Dröge 🍵

Release 1.10.0

parent e65f88cb
=== release 1.10.0 ===
2016-11-01 Sebastian Dröge <>
releasing 1.10.0
2016-11-01 17:41:51 +0200 Sebastian Dröge <>
* po/el.po:
po: Update translations
2016-10-27 12:01:55 +0200 Tobias Schneider <>
* sys/v4l2/gstv4l2object.c:
v4l2object: fix extra-controls leak
Gst struct v4l2object->extra_controls is created if user sets appropriate
option but it is not freed on destruction of v4l2object.
2016-10-31 18:00:07 +0200 Sebastian Dröge <>
* ext/soup/gstsouphttpsrc.c:
* ext/soup/gstsouphttpsrc.h:
Revert "souphttpsrc: reduce reading latency by using non-blocking read"
This reverts commit 8816764112408766889c8b680a3af51115df4bf5.
It causes issues with the timeouts, and causes connections to be closed
without actual reason. Needs further investigation.
2016-10-31 09:00:49 +0200 Sebastian Dröge <>
* gst/wavparse/gstwavparse.c:
wavparse: Don't try to add srcpad if we don't know valid caps yet
Otherwise we'll run into an assertion on specially crafted files.
2016-10-27 11:23:51 +0530 Nirbheek Chauhan <>
meson: Remove uselessly duplicated dep checks
These checks are done inside the files for each plugin.
2016-10-27 11:22:59 +0530 Nirbheek Chauhan <>
* ext/
meson: dv plugin now works on MSVC
Needs a Meson patch to filter out the useless -lpthread
2016-10-27 14:03:48 +0200 Branko Subasic <>
* gst/matroska/matroska-mux.c:
matroskamux: allow resolutions above 4096
Modify the caps string to allow width and height greater than 4096.
There is no need to restrict it since the matroska format allows the
width and height values to be up to eight bytes long.
2016-10-23 17:23:10 -0700 Scott D Phillips <>
* gst/udp/gstudpsrc.c:
udpsrc: Check for G_PLATFORM_WIN32 for presence of ipi_spec_dest
G_OS_WIN32 is only set when not building with cygwin, but
ipi_spec_dest is missing both with and without cygwin.
2016-10-26 08:51:40 +0200 Michael Olbrich <>
* ext/soup/gstsouphttpsrc.c:
souphttpsrc: reset read_position when reading fails
souphttpsrc maintains two variables for the position:
* 'request_position' is where we want to be
* 'read_position' is where we are
During Normal operations both are updated in sync when data arrives. A seek
changes 'request_position' but not 'read_position'.
When the two positions get out of sync, then a new request is send and the
'Range' header is adjusted to the current 'request_position'.
Without this patch, if reading fails, then the source is destroyed. This
triggers a new request, but the range remains unchanged. As a result, the
old range is used and old data will be read.
Changing the 'read_position' to -1 makes it explicitly different from
'request_position' and as a result the 'Range' header is updated correctly.
2016-10-25 08:54:34 -0700 Scott D Phillips <>
meson: Don't depend on gstreamer-check-1.0 on windows
2016-10-25 15:24:20 +0200 Mark Nauwelaerts <>
* gst/rtsp/gstrtspsrc.c:
rtspsrc: reset connection info to non-flushing when closing
This solves a hanging mainloop in following scenario:
* connect to source
* network/server drops
* pipeline set to NULL (and connection to flushing as part)
* pipeline set to PAUSED/PLAYING (connection to non-flushing, but not recorded)
* [connecting still not possible]
* pipeline set to NULL => mainloop hangs (since no actual flushing is done)
2016-10-26 14:32:48 +1100 Jan Schmidt <>
* gst/multifile/gstsplitmuxsink.c:
* gst/multifile/gstsplitmuxsink.h:
splitmuxsink: Only allow one video request pad
The pacing of the overall muxing is controlled
by the video GOPs arriving, so we can only handle
1 video stream, and the request pad is named accordingly.
Ignore a request for a 2nd video pad if there's already
an active one.
2016-10-26 11:59:32 +1100 Jan Schmidt <>
* gst/multifile/gstsplitmuxsink.c:
splitmuxsink: Take ownership of floating refs
sink the floating ref when handed a muxer or sink to use so
we clearly take ownership.
2016-10-25 14:51:52 +1100 Jan Schmidt <>
* gst/multifile/gstsplitmuxsink.c:
splitmuxsink: Set child elements to NULL when removing.
Make sure that elements are in the NULL state when removing.
Fixes critical warnings when errors occur early on in starting up.
2016-10-25 14:50:53 +1100 Jan Schmidt <>
* gst/multifile/gstsplitmuxsink.c:
splitmuxsink: Set pad template on request sink pads
Ensure that the ghost pad returned as a request pad
has the template that was requested
2016-10-25 10:50:47 +0530 Nirbheek Chauhan <>
* tests/check/
Revert "meson: move gstreamer-check-1.0 dependency to tests/check"
This reverts commit 46632694662b96fddb848a1f2091a215b28a2d35.
Does not actually work. See:
2016-06-08 11:24:37 -0400 Nicolas Dufresne <>
* gst/flv/gstflvmux.c:
flvmux: Assume PTS is DTS when PTS is missing
This fixes issue for encoders that only sets the DTS. We assume that
there was no re-ordering when that happens.
2016-10-24 00:34:15 +0100 Tim-Philipp Müller <>
* tests/check/
meson: fix build outside of gst-all
2016-10-21 00:42:54 -0700 Scott D Phillips <>
* sys/directsound/
meson: directsound: Add ole32 library dependency
2016-10-21 00:42:18 -0700 Scott D Phillips <>
* tests/check/
meson: move gstreamer-check-1.0 dependency to tests/check
2016-10-20 22:08:14 +0100 Tim-Philipp Müller <>
* tests/check/elements/videomixer.c:
tests: videomixer: disable racy flush_start_flush_stop test
It's been broken for years, and it's unlikely it will ever
be fixed for collectpads/videomixer now that there's compositor
which works fine. So let's disable it, since all it does
is that it creates noise that distracts from other failures.
Also see the corresponding adder bug as it failed in the same way:
2016-10-09 16:56:10 +0200 Jan Alexander Steffens (heftig) <>
* tests/check/elements/souphttpsrc.c:
tests: Fix souphttpsrc tests without CK_FORK=no
It seems that the forked processes all attempt to handle the listening
socket from the server, and only one has to shutdown the socket to break
the server completely.
Create a new server inside each test to avoid this.
2016-10-09 15:23:51 +0200 Jan Alexander Steffens (heftig) <>
* tests/check/elements/level.c:
tests: Fix level test in CK_FORK=no mode
The tests accumulate buffers in GstCheck's buffers list, and the list is
not (consistently) reset between tests. Do that and remove the now
conflicting unrefs for outbuffers.
2016-10-07 13:04:27 +0530 Gaurav Gupta <>
* sys/waveform/gstwaveformsink.c:
waveformsink: Fix Memory leak using GST_PTR_FORMAT
2016-10-18 12:23:42 +0530 Nirbheek Chauhan <>
* gst/monoscope/
meson: Add missing gstaudio dep to monoscope
In file included from ../subprojects/gst-plugins-good/gst/monoscope/gstmonoscope.c:42:0:
../subprojects/gst-plugins-base/gst-libs/gst/audio/audio.h:26:39: fatal error: gst/audio/audio-enumtypes.h: No such file or directory
#include <gst/audio/audio-enumtypes.h>
compilation terminated.
2016-10-16 02:18:22 +0530 Nirbheek Chauhan <>
* gst/multifile/
meson: Add missing pbutils dependency to multifile
Found via the Jenkins CI:
FAILED: subprojects/gst-plugins-good/gst/multifile/gstmultifile@sha/gstsplitmuxsink.c.o
In file included from ../subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.h:24:0,
from ../subprojects/gst-plugins-good/gst/multifile/gstsplitmuxsink.c:59:
../subprojects/gst-plugins-base/gst-libs/gst/pbutils/pbutils.h:30:43: fatal error: gst/pbutils/pbutils-enumtypes.h: No such file or directory
#include <gst/pbutils/pbutils-enumtypes.h>
compilation terminated.
2016-10-15 22:11:08 +0530 Nirbheek Chauhan <>
meson: Don't set c_std to gnu99
Use the default for each compiler on every platform instead. This
improves our compatibility with compilers that don't have gnu99 as
a c_std.
2016-10-04 18:04:11 -0300 Thibault Saunier <>
* tests/check/getpluginsdir:
* tests/check/
meson: Make use of new environment object and set plugin path to builddir
Workaround source_root being the root directory of all projects in the subproject
case and remove now unneeded getpluginsdir
Bump meson requirement to 0.35
2016-10-06 11:15:54 +0530 Gaurav Gupta <>
* tests/examples/rtp/client-rtpaux.c:
tests: Fix memory leak in test rtpaux test
2016-10-03 11:27:54 +0530 Nirbheek Chauhan <>
* gst/imagefreeze/gstimagefreeze.c:
imagefreeze: Forward latency queries to upstream
Without this, latency queries to imagefreeze will fail.
2016-09-30 11:35:39 -0300 Thibault Saunier <>
* hooks/pre-commit.hook:
* tests/check/getpluginsdir:
meson: Setup pre commit hook and fix getpluginsdir for standalone case
2016-09-29 04:55:14 +1000 Jan Schmidt <>
* gst/multifile/gstsplitmuxsrc.c:
splitmuxsrc: Handle stop point from segment
If the seek stop point (or start, during reverse play)
was within the segment we just finished, go EOS immediately
instead of proceeding through all other parts and sending
0 length seeks to them.
2016-09-29 03:21:26 +1000 Jan Schmidt <>
* gst/multifile/gstsplitmuxsrc.c:
splitmuxsrc: Drop lock shutting down pads
Avoid a sporadic deadlock on shutdown by dropping
the splitmux lock around pad shutdown
2016-09-29 02:47:36 +1000 Jan Schmidt <>
* gst/multifile/gstsplitmuxpartreader.c:
splitmuxsrc: Fix extra unref handling queries
2016-09-29 04:50:25 +1000 Jan Schmidt <>
* gst/multifile/gstsplitmuxpartreader.c:
* gst/multifile/gstsplitmuxpartreader.h:
* gst/multifile/gstsplitmuxsrc.c:
splitmuxsrc: Avoid stall when parts get out of sync
When one part moves ahead of the others - due to excessive
downstream queueing, or really small input files - then
we can end up activating parts more than once. That can lead to
effects like shutting down pad tasks prematurely.
2016-09-30 11:41:19 +0100 Tim-Philipp Müller <>
meson: update version
=== release 1.9.90 ===
2016-09-30 Sebastian Dröge <>
2016-09-30 13:02:19 +0300 Sebastian Dröge <>
* ChangeLog:
releasing 1.9.90
* docs/plugins/gst-plugins-good-plugins.args:
* docs/plugins/gst-plugins-good-plugins.interfaces:
* docs/plugins/inspect/plugin-1394.xml:
* docs/plugins/inspect/plugin-aasink.xml:
* docs/plugins/inspect/plugin-alaw.xml:
* docs/plugins/inspect/plugin-alpha.xml:
* docs/plugins/inspect/plugin-alphacolor.xml:
* docs/plugins/inspect/plugin-apetag.xml:
* docs/plugins/inspect/plugin-audiofx.xml:
* docs/plugins/inspect/plugin-audioparsers.xml:
* docs/plugins/inspect/plugin-auparse.xml:
* docs/plugins/inspect/plugin-autodetect.xml:
* docs/plugins/inspect/plugin-avi.xml:
* docs/plugins/inspect/plugin-cacasink.xml:
* docs/plugins/inspect/plugin-cairo.xml:
* docs/plugins/inspect/plugin-cutter.xml:
* docs/plugins/inspect/plugin-debug.xml:
* docs/plugins/inspect/plugin-deinterlace.xml:
* docs/plugins/inspect/plugin-dtmf.xml:
* docs/plugins/inspect/plugin-dv.xml:
* docs/plugins/inspect/plugin-effectv.xml:
* docs/plugins/inspect/plugin-equalizer.xml:
* docs/plugins/inspect/plugin-flac.xml:
* docs/plugins/inspect/plugin-flv.xml:
* docs/plugins/inspect/plugin-flxdec.xml:
* docs/plugins/inspect/plugin-gdkpixbuf.xml:
* docs/plugins/inspect/plugin-goom.xml:
* docs/plugins/inspect/plugin-goom2k1.xml:
* docs/plugins/inspect/plugin-icydemux.xml:
* docs/plugins/inspect/plugin-id3demux.xml:
* docs/plugins/inspect/plugin-imagefreeze.xml:
* docs/plugins/inspect/plugin-interleave.xml:
* docs/plugins/inspect/plugin-isomp4.xml:
* docs/plugins/inspect/plugin-jack.xml:
* docs/plugins/inspect/plugin-jpeg.xml:
* docs/plugins/inspect/plugin-level.xml:
* docs/plugins/inspect/plugin-matroska.xml:
* docs/plugins/inspect/plugin-mulaw.xml:
* docs/plugins/inspect/plugin-multifile.xml:
* docs/plugins/inspect/plugin-multipart.xml:
* docs/plugins/inspect/plugin-navigationtest.xml:
* docs/plugins/inspect/plugin-oss4.xml:
* docs/plugins/inspect/plugin-ossaudio.xml:
* docs/plugins/inspect/plugin-png.xml:
* docs/plugins/inspect/plugin-pulseaudio.xml:
* docs/plugins/inspect/plugin-replaygain.xml:
* docs/plugins/inspect/plugin-rtp.xml:
* docs/plugins/inspect/plugin-rtpmanager.xml:
* docs/plugins/inspect/plugin-rtsp.xml:
* docs/plugins/inspect/plugin-shapewipe.xml:
* docs/plugins/inspect/plugin-shout2send.xml:
* docs/plugins/inspect/plugin-smpte.xml:
* docs/plugins/inspect/plugin-soup.xml:
* docs/plugins/inspect/plugin-spectrum.xml:
* docs/plugins/inspect/plugin-speex.xml:
* docs/plugins/inspect/plugin-taglib.xml:
* docs/plugins/inspect/plugin-udp.xml:
* docs/plugins/inspect/plugin-video4linux2.xml:
* docs/plugins/inspect/plugin-videobox.xml:
* docs/plugins/inspect/plugin-videocrop.xml:
* docs/plugins/inspect/plugin-videofilter.xml:
* docs/plugins/inspect/plugin-videomixer.xml:
* docs/plugins/inspect/plugin-vpx.xml:
* docs/plugins/inspect/plugin-wavenc.xml:
* docs/plugins/inspect/plugin-wavpack.xml:
* docs/plugins/inspect/plugin-wavparse.xml:
* docs/plugins/inspect/plugin-ximagesrc.xml:
* docs/plugins/inspect/plugin-y4menc.xml:
* gst-plugins-good.doap:
* win32/common/config.h:
Release 1.9.90
2016-09-30 12:17:26 +0300 Sebastian Dröge <>
* po/af.po:
* po/az.po:
* po/bg.po:
* po/ca.po:
* po/cs.po:
* po/da.po:
* po/de.po:
* po/el.po:
* po/en_GB.po:
* po/eo.po:
* po/es.po:
* po/eu.po:
* po/fi.po:
* po/fr.po:
* po/gl.po:
* po/hr.po:
* po/hu.po:
* po/id.po:
* po/it.po:
* po/ja.po:
* po/lt.po:
* po/lv.po:
* po/mt.po:
* po/nb.po:
* po/nl.po:
* po/or.po:
* po/pl.po:
* po/pt_BR.po:
* po/ro.po:
* po/ru.po:
* po/sk.po:
* po/sl.po:
* po/sq.po:
* po/sr.po:
* po/sv.po:
* po/tr.po:
* po/uk.po:
* po/vi.po:
* po/zh_CN.po:
* po/zh_HK.po:
* po/zh_TW.po:
Update .po files
2016-09-30 11:43:54 +0300 Sebastian Dröge <>
This is GStreamer 1.9.90
# GStreamer 1.10 Release Notes
**GStreamer 1.10.0 was released on 1st November 2016.**
The GStreamer team is proud to announce a new major feature release in the
stable 1.x API series of your favourite cross-platform multimedia framework!
As always, this release is again packed with new features, bug fixes and other
See [][latest] for the latest
version of this document.
*Last updated: Tuesday 1 Nov 2016, 15:00 UTC [(log)][gitlog]*
## Introduction
The GStreamer team is proud to announce a new major feature release in the
stable 1.x API series of your favourite cross-platform multimedia framework!
As always, this release is again packed with new features, bug fixes and other
## Highlights
- Several convenience APIs have been added to make developers' lives easier
- A new `GstStream` API provides applications a more meaningful view of the
structure of streams, simplifying the process of dealing with media in
complex container formats
- Experimental `decodebin3` and `playbin3` elements which bring a number of
improvements which were hard to implement within `decodebin` and `playbin`
- A new `parsebin` element to automatically unpack and parse a stream, stopping
just short of decoding
- Experimental new `meson`-based build system, bringing faster build and much
better Windows support (including for building with Visual Studio)
- A new `gst-docs` module has been created, and we are in the process of moving
our documentation to a markdown-based format for easier maintenance and
- A new `gst-examples` module has been create, which contains example
GStreamer applications and is expected to grow with many more examples in
the future
- Various OpenGL and OpenGL|ES-related fixes and improvements for greater
efficiency on desktop and mobile platforms, and Vulkan support on Wayland was
also added
- Extensive improvements to the VAAPI plugins for improved robustness and
- Lots of fixes and improvements across the board, spanning RTP/RTSP, V4L2,
Bluetooth, audio conversion, echo cancellation, and more!
## Major new features and changes
### Noteworthy new API, features and other changes
#### Core API additions
##### Receive property change notifications via bus messages
New API was added to receive element property change notifications via
bus messages. So far, applications had to connect a callback to an element's
`notify::property-name` signal via the GObject API, which was inconvenient for
at least two reasons: one had to implement a signal callback function, and that
callback function would usually be called from one of the streaming threads, so
one had to marshal (send) any information gathered or pending requests to the
main application thread which was tedious and error-prone.
Enter [`gst_element_add_property_notify_watch()`][notify-watch] and
[`gst_element_add_property_deep_notify_watch()`][deep-notify-watch] which will
watch for changes of a property on the specified element, either only for this
element or recursively for a whole bin or pipeline. Whenever such a
property change happens, a `GST_MESSAGE_PROPERTY_NOTIFY` message will be posted
on the pipeline bus with details of the element, the property and the new
property value, all of which can be retrieved later from the message in the
application via [`gst_message_parse_property_notify()`][parse-notify]. Unlike
the GstBus watch functions, this API does not rely on a running GLib main loop.
The above can be used to be notified asynchronously of caps changes in the
pipeline, or volume changes on an audio sink element, for example.
##### GstBin "deep" element-added and element-removed signals
GstBin has gained `"deep-element-added"` and `"deep-element-removed"` signals
which makes it easier for applications and higher-level plugins to track when
elements are added or removed from a complex pipeline with multiple sub-bins.
`playbin` makes use of this to implement the new `"element-setup"` signal which
can be used to configure elements as they are added to `playbin`, just like the
existing `"source-setup"` signal which can be used to configure the source
element created.
##### Error messages can contain additional structured details
It is often useful to provide additional, structured information in error,
warning or info messages for applications (or higher-level elements) to make
intelligent decisions based on them. To allow this, error, warning and info
messages now have API for adding arbitrary additional information to them
using a `GstStructure`:
[`GST_ELEMENT_ERROR_WITH_DETAILS`][element-error-with-details] and
corresponding API for the other message types.
This is now used e.g. by the new [`GST_ELEMENT_FLOW_ERROR`][element-flow-error]
API to include the actual flow error in the error message, and the
[souphttpsrc element][souphttpsrc-detailed-errors] to provide the HTTP
status code, and the URL (if any) to which a redirection has happened.
##### Redirect messages have official API now
Sometimes, elements need to redirect the current stream URL and tell the
application to proceed with this new URL, possibly using a different
protocol too (thus changing the pipeline configuration). Until now, this was
informally implemented using `ELEMENT` messages on the bus.
Now this has been formalized in the form of a new `GST_MESSAGE_REDIRECT` message.
A new redirect message can be created using [`gst_message_new_redirect()`][new-redirect].
If needed, multiple redirect locations can be specified by calling
[`gst_message_add_redirect_entry()`][add-redirect] to add further redirect
entries, all with metadata, so the application can decide which is
most suitable (e.g. depending on the bitrate tags).
##### New pad linking convenience functions that automatically create ghost pads
New pad linking convenience functions were added:
[`gst_pad_link_maybe_ghosting()`][pad-maybe-ghost] and
[`gst_pad_link_maybe_ghosting_full()`][pad-maybe-ghost-full] which were
previously internal to GStreamer have now been exposed for general use.
The existing pad link functions will refuse to link pads or elements at
different levels in the pipeline hierarchy, requiring the developer to
create ghost pads where necessary. These new utility functions will
automatically create ghostpads as needed when linking pads at different
levels of the hierarchy (e.g. from an element inside a bin to one that's at
the same level in the hierarchy as the bin, or in another bin).
##### Miscellaneous
Pad probes: IDLE and BLOCK probes now work slightly differently in pull mode,
so that push and pull mode have opposite scenarios for idle and blocking probes.
In push mode, it will block with some data type and IDLE won't have any data.
In pull mode, it will block _before_ getting a buffer and will be IDLE once some
data has been obtained. ([commit][commit-pad-probes], [bug][bug-pad-probes])
[`gst_parse_launch_full()`][parse-launch-full] can now be made to return a
`GstBin` instead of a top-level pipeline by passing the new
The default GStreamer debug log handler can now be removed before
calling `gst_init()`, so that it will never get installed and won't be active
during initialization.
A new [`STREAM_GROUP_DONE` event][stream-group-done-event] was added. In some
ways it works similar to the `EOS` event in that it can be used to unblock
downstream elements which may be waiting for further data, such as for example
`input-selector`. Unlike `EOS`, further data flow may happen after the
`STREAM_GROUP_DONE` event though (and without the need to flush the pipeline).
This is used to unblock input-selector when switching between streams in
adaptive streaming scenarios (e.g. HLS).
The `gst-launch-1.0` command line tool will now print unescaped caps in verbose
mode (enabled by the -v switch).
[`gst_element_call_async()`][call-async] has been added as convenience API for
plugin developers. It is useful for one-shot operations that need to be done
from a thread other than the current streaming thread. It is backed by a
thread-pool that is shared by all elements.
Various race conditions have been fixed around the `GstPoll` API used by e.g.
`GstBus` and `GstBufferPool`. Some of these manifested themselves primarily
on Windows.
`GstAdapter` can now keep track of discontinuities signalled via the `DISCONT`
buffer flag, and has gained [new API][new-adapter-api] to track PTS, DTS and
offset at the last discont. This is useful for plugins implementing advanced
trick mode scenarios.
`GstTestClock` gained a new [`"clock-type"` property][clock-type-prop].
#### GstStream API for stream announcement and stream selection
New stream listing and stream selection API: new API has been added to
provide high-level abstractions for streams ([`GstStream`][stream-api])
and collections of streams ([`GstStreamCollections`][stream-collection-api]).
##### Stream listing
A [`GstStream`][stream-api] contains all the information pertinent to a stream,
such as stream id, caps, tags, flags and stream type(s); it can represent a
single elementary stream (e.g. audio, video, subtitles, etc.) or a container
stream. This will depend on the context. In a decodebin3/playbin3 one
it will typically be elementary streams that can be selected and unselected.
A [`GstStreamCollection`][stream-collection-api] represents a group of streams
and is used to announce or publish all available streams. A GstStreamCollection
is immutable - once created it won't change. If the available streams change,
e.g. because a new stream appeared or some streams disappeared, a new stream
collection will be published. This new stream collection may contain streams
from the previous collection if those streams persist, or completely new ones.
Stream collections do not yet list all theoretically available streams,
e.g. other available DVD angles or alternative resolutions/bitrate of the same
stream in case of adaptive streaming.
New events and messages have been added to notify or update other elements and
the application about which streams are currently available and/or selected.
This way, we can easily and seamlessly let the application know whenever the
available streams change, as happens frequently with digital television streams
for example. The new system is also more flexible. For example, it is now also
possible for the application to select multiple streams of the same type
(e.g. in a transcoding/transmuxing scenario).
A [`STREAM_COLLECTION` message][stream-collection-msg] is posted on the bus
to inform the parent bin (e.g. `playbin3`, `decodebin3`) and/or the application
about what streams are available, so you no longer have to hunt for this
information at different places. The available information includes number of
streams of each type, caps, tags etc. Bins and/or the application can intercept
the message synchronously to select and deselect streams before any data is
produced - for the case where elements such as the demuxers support the new
stream API, not necessarily in the parsebin compatibility fallback case.
Similarly, there is also a [`STREAM_COLLECTION` event][stream-collection-event]
to inform downstream elements of the available streams. This event can be used
by elements to aggregate streams from multiple inputs into one single collection.
The `STREAM_START` event was extended so that it can also contain a GstStream
object with all information about the current stream, see
[`gst_event_set_stream()`][event-set-stream] and
[`gst_pad_get_stream()`][pad-get-stream] is a new utility function that can be
used to look up the GstStream from the `STREAM_START` sticky event on a pad.
##### Stream selection
Once the available streams have been published, streams can be selected via
their stream ID using the new `SELECT_STREAMS` event, which can be created
with [`gst_event_new_select_streams()`][event-select-streams]. The new API
supports selecting multiple streams per stream type. In the future, we may also
implement explicit deselection of streams that will never be used, so
elements can skip these and never expose them or output data for them in the
first place.
The application is then notified of the currently selected streams via the
new `STREAMS_SELECTED` message on the pipeline bus, containing both the current
stream collection as well as the selected streams. This might be posted in
response to the application sending a `SELECT_STREAMS` event or when
`decodebin3` or `playbin3` decide on the streams to be initially selected without
application input.