API : expose-all-streams
If disabled:
* only the streams that CAN be decoded and match the final caps will have a
decoder plugged in and be exposed.
* the streams that COULD HAVE BEEN decoded but do not match the finals caps
will not have a decoder plugged in and will not be exposed.
If no decoder is available to decode a certain stream, then the missing element
message will still be emitted regardless of the value of the property.
https://bugzilla.gnome.org/show_bug.cgi?id=617868
Unreffing it whenever the sinks are removed will make the volume
element unavailable after a playbin reuse because it is only
recreated if the audio sink has changed.
Fixes bug #614288.
Change playbin2 to not error out if there are subtitles and audio
but no video. If visualizations are enabled the subtitles are rendered on top
of the visualization stream, otherwise the subtitles are not linked at all and
only the audio is played (and a warning message is posted).
If there are only subtitles but neither audio nor video an error message is
still posted.
Fixes bug #610866.
For this add subtitle encoding properties to playsink and subtitleoverlay
and update the values in the containing elements.
Also update the font description in textoverlay or the used renderer
element if it is changed during playback.
Fixes bug #610310.
Use the same translated message string for missing core elements as
playbin uses, which is a bit nicer and also indicates that there is
something wrong with the user's GStreamer installation (which arguably
is the case if elements like typefind or queue2 are missing).
Otherwise the ghostpad will still be linked to the peer and there
will still be a reference kept, leading to nothing being unlinked
and destroyed until decodebin2 is finalized.
This fixes reuse of decodebin2 if a raw stream is connected to
its sinkpad.
This makes sure that we don't destroy the last reference before the
element gets back to NULL state. Fixes assertion failures if a playbin2
instance is reused but different sinks are automatically chosen because
of different caps.
This reverts commit 7335ce5d3e.
Support abusing the uri property to configure the next uri to play
outside of the about-to-finish handler for the time being after all.
We also shouldn't use thread private structures for this, since it
should be possible to block the thread that emitted about-to-finish
while the main thread sets the uri property. See #607226.
When reusing a decodebin2 element, clear the properties we might have changed,
to their default values or else we might end up with old configuration.
Fixes#608484
When we are dealing with a source that produces raw audio/video, we don't use a
decodebin2 to decode the data and we thus don't have the drained/about-to-finish
signal emited. To fix this, we add a padprobe on the source pads and emit the
drained signal ourselves. This then makes playbin2 emit the about-to-finish
signal for raw sources such as cdda://
Fixes#607116
We don't want to end up setting values on elements where the property is of
a different type than we expect. Can't transform the value either, since we
can't really make assumptions about the scale and transform function.
Fixes crashes when using playbin2 with apexsink (#606949).
Changing the URIs in a state > READY results in unexpected behaviour,
i.e. the new URIs are only used after the current track has finished.
Fixes bug #607226.
In this case the video still goes through the text chain and
subtitles are still going in there, in case subtitles are
enabled again. This makes sure that re-enabling subtitles
happens instantly.
Fixes hanging video when disabling subtitles, caused by an
unliked video pad.
This is necessary because the sinks don't notice the group switches
and the decoders/demuxers have a different running time than the
sinks.
Fixes bug #537050.
In some cases (all buffers dropped by a parser) a decodebin2
chain might receive an EOS before it gets enough data to
expose a decoded pad. In the case that no streams can expose
a pad we should error out instead of hang.
Fixes#542758
Just counting how many messages were sent and how many were received
is not good enough because they might've been duplicated (e.g. by the
visualization audio tee). Comparing the sequence numbers should give
better results in that case.
Otherwise the async state change from READY->PAUSED of the
uridecodebins will take playbin2 from PLAYING->PAUSED again
during gapless group switches.
Fixes bug #602000.
When a decodebin2 receives no-more-pads of a group it
can set that group's multiqueue buffering thresholds to
'playing' buffering method, avoiding that it buffers
too long and cause problems when using with queue2.
See the associated bug for details.
Fixes#600787
During a group switch return the cached duration of the old group
because the old group still didn't finish playback. If we have no
cached duration return FALSE.
Fixes bug #585969.
Make sure, to only "simulate" subtitle no-more-pads if it was still
pending and also handle errors in the subtitle pipeline as warnings
after the subtitles prerolled.
Don't set the suburidecodebin to READY after errors, handle_message
will usually be called from the streaming thread and doing that
from there is obviously not a good idea.
Now the caps property isn't set anymore for the subtitle caps
but instead in the autoplug-continue signal it is detected
if the caps belong to a supported subtitle stream.
This makes automatic use of newly installed plugins.
First of all, make sure that suburidecodebin never
errors out because of not-linked in case external subtitles
are used but then subtitles are disabled.
And then make sure that external subtitles always start from
the correct position and are not racing until EOS if they
get unselected and selected again.
This will make sure that no subparse is ever plugged and subtitleoverlay,
that subpicture streams are handled the same was as subtitles and that
subtitle renderers are used if available.
Fixes bugs #595123, #570753, #591662, #591706.