Commit graph

1580 commits

Author SHA1 Message Date
Sebastian Dröge
a0a9fd004b playbin: Keep a reference to the playsink sinkpads
Otherwise playsink might get shut down without us noticing
that our pad references are gone now.

Probably fixes https://bugzilla.gnome.org/show_bug.cgi?id=733165
2014-08-01 15:00:46 +02:00
Mohammed Sameer
b34e0ba91c streamsynchronizer: don't unset DISCONT flag
Unsetting DISCONT flag means we need to copy the buffer. This copy operation
mandates that all GstMemory should be copy-able which is not always the case

https://bugzilla.gnome.org/show_bug.cgi?id=727409
2014-08-01 14:23:07 +02:00
Thiago Santos
cf50b45ff6 decodebin: add missing 'time' word to debug message
It prints the buffers, bytes and time limits, but 'time' was missing
from the string.
2014-07-29 15:55:27 -03:00
Sebastian Dröge
362e9a547b playbin: Pass through NO_PREROLL state change returns
Fixes playback of live pipelines.
2014-07-28 16:57:00 +02:00
Sebastian Dröge
f3f55e1758 uridecodebin: Pass through NO_PREROLL state change returns
Fixes playback of live pipelines.
2014-07-28 16:57:00 +02:00
Tim-Philipp Müller
1ed192abb0 playbin: fix 'attempt to unlock mutex that was not locked' in error code path
Fixes playbin unit test with latest GLib.
2014-07-26 14:52:01 +01:00
Sebastian Dröge
f173fa15b1 decodebin: Don't unref caps for which we don't own a reference... get one first
https://bugzilla.gnome.org/show_bug.cgi?id=733615
2014-07-23 19:51:36 +02:00
Sebastian Dröge
73646bd04f playbin: Go asynchronously from READY to PAUSED
We now add all our elements to uridecodebin *after*
GstBin::change_state(READY->PAUSED), so we need to post async-start
and async-done messages ourselves if we want to work async.

https://bugzilla.gnome.org/show_bug.cgi?id=733495
2014-07-23 12:46:48 +02:00
Sebastian Dröge
5c038192e2 uridecodebin: Go asynchronously from READY to PAUSED
We now add all our elements to uridecodebin *after*
GstBin::change_state(READY->PAUSED), so we need to post async-start
and async-done messages ourselves if we want to work async.

https://bugzilla.gnome.org/show_bug.cgi?id=733495
2014-07-23 12:46:48 +02:00
Sebastian Dröge
c051b378d7 uridecodebin: Create new sources after chaining up to the parent class
Otherwise we start the new sources already before the parent class
got ready to start.
2014-07-21 09:35:36 +02:00
Sebastian Dröge
5bf3c92462 playbin: Create new sources after chaining up to the parent class
Otherwise we start the new sources already before the parent class
got ready to start.
2014-07-21 09:35:36 +02:00
Sebastian Dröge
b15a47aa19 decodebin: Link Parser/Converter directly and already connect to pad-added and other signals before setting elements to PAUSED
otherwise we're going to
a) start Parser/Converter before they are linked to their capsfilter,
   breaking their negotiation of a proper stream format
b) start demuxers without having connected to their pad-added signals. We
   miss pads and in the worst case don't link any pads at all
2014-07-21 09:35:36 +02:00
Sebastian Dröge
57999c28fd decodebin: Send sticky events to the new element after setting it to PAUSED
... and if this fails for whatever reason we skip the element and instead
try with the next element. This allows us to handle elements that fail
when setting caps on them by just skipping to the next alternative element.
2014-07-21 09:35:36 +02:00
Sebastian Dröge
994680b04e decodebin: Only link elements further after setting them to PAUSED
They might fail to go to PAUSED, and when connecting them further
we might already expose their srcpads on decodebin if we're unlucky.
This prevents us to handle failures going to PAUSED gracefully.
2014-07-21 09:35:36 +02:00
Sebastian Dröge
83d508a552 decodebin: Remove ERROR message filter after we set the element to PAUSED
This allows us to catch more errors gracefully and switch to an alternative
element instead.
2014-07-21 09:35:05 +02:00
Sebastian Dröge
f66555668a decodebin: Only continue autoplugging once the pad has final caps
If the caps query returned us fixed caps this doesn't mean yet
that these caps are actually complete (fields might be missing).

It allows to do us some decisions, but the selection of the next
element should be delayed as only complete caps allow proper selection
of the next element.
2014-07-21 09:35:05 +02:00
Sebastian Dröge
424ff91394 decodebin: Consider the caps after the capsfilter after parsers for autoplugging
Otherwise we might try to continue autoplugging e.g. for a specific
stream-format although the parser could convert to something else, thus giving
us potentially less options for decoders.
2014-07-21 09:35:05 +02:00
Arun Raghavan
40699e020a playsink: Fix filter property getter
The switch-case set was incomplete.

https://bugzilla.gnome.org/show_bug.cgi?id=733012
2014-07-12 13:01:45 +05:30
Thiago Santos
693f3f9ce2 playsinkconvertbin: fix caps leak
Let go the reference to the converter caps after using it
2014-06-27 14:25:05 -03:00
Sebastian Dröge
9d33b38969 playsinkconvertbin: Filter out ANY capsfeatures from the converter caps
We can't convert to ANY capsfeatures, they are only there so that we
can passthrough whatever downstream can support... but we definitely
don't want to return them to upstream.
2014-06-22 20:42:43 +02:00
Sebastian Dröge
1f41a1606a uridecodebin: Also catch CODEC_NOT_FOUND errors and delay them until all decodebins are done 2014-06-05 15:35:31 +02:00
Sebastian Dröge
0f43e801f2 uridecodebin: Ignore missing-plugin messages unless all decodebins post one
When playing RTSP streams there will be one decodebin per stream. If some of
them fail because of a missing plugin we should not fail completely but play
the supported streams at least.

https://bugzilla.gnome.org/show_bug.cgi?id=730868
2014-06-04 17:00:43 +02:00
Sebastian Dröge
393f090197 decodebin: Do async-done on expose errors too 2014-06-04 17:00:43 +02:00
Thiago Santos
783195ccef decodebin: aggregate buffering messages
Aggregate buffering messages to only post the lower value
to avoid setting pipeline to playing while any multiqueue
is still buffering.

There are 3 scenarios where the entries should be removed from
the list:

1) When decodebin is set to READY
2) When an element posts a 100% buffering (already implemented)
3) When a multiqueue is removed from decodebin.

For item 3 we don't need to handle it because this should only
happen when either 1 is hapenning or when it is playing a
chained file, for which number 2 should have happened for the
previous stream to finish

https://bugzilla.gnome.org/show_bug.cgi?id=726423
2014-05-29 18:59:30 -03:00
Sebastian Dröge
0760fe8625 playsink: Always take the playsink lock when adding or removing pad probes
Otherwise we might end up inside the callback without having stored
the probe id... then try to remove that probe (not!) from the callback
and wait forever for the pad to unblock.
2014-05-20 09:51:07 +02:00
Wim Taymans
0e8b47443e uridecodebin: use downloadbuffer for download buffering
Use the new downloadbuffer element to implement the download buffering
feature

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680183
2014-05-08 17:12:54 +02:00
Sebastian Dröge
0d87f8fdb2 playbin: Don't block on non-serialized events
https://bugzilla.gnome.org/show_bug.cgi?id=729321
2014-05-01 13:18:11 +02:00
Sebastian Dröge
4d062b230a playsink: Don't block on non-serialized events
https://bugzilla.gnome.org/show_bug.cgi?id=729321
2014-05-01 13:18:10 +02:00
Sebastian Dröge
67289fd184 playsinkconvertbin: Don't block on non-serialized events
https://bugzilla.gnome.org/show_bug.cgi?id=729321
2014-05-01 13:18:10 +02:00
Sebastian Dröge
ab0e37c320 subtitleoverlay: Don't block on non-serialized events
https://bugzilla.gnome.org/show_bug.cgi?id=729321
2014-05-01 13:18:10 +02:00
Tim-Philipp Müller
184fe464da playbin: add nick for soft colorbalance play flag to fix gst-inspect
Fix gst-inspect-1.0 playbin criticals when printing the
flags, which was caused by a missing nick name for one
of the flags.
2014-04-27 00:26:14 +01:00
Tim-Philipp Müller
bcb8068e27 docs: remove outdated and pointless 'Last reviewed' lines from docs
They are very confusing for people, and more often than not
also just not very accurate. Seeing 'last reviewed: 2005' in
your docs is not very confidence-inspiring. Let's just remove
those comments.
2014-04-26 23:28:57 +01:00
Vincent Penquerc'h
9e99a1ca41 decodebin: consider "no demuxer" case to not have dynamic pads
This fixes a possible NULL dereference.

Coverity 1195146
2014-04-10 13:51:18 +01:00
Sebastian Dröge
2c2e286c38 decodebin: In adaptive streaming mode, only have a fixed buffer limit for the non-buffering multiqueue 2014-04-09 16:06:06 +02:00
Jan Schmidt
968e28a818 subtitleoverlay: Consider all caps for overlays, not just the first.
Check all supported caps on the overlay video pad, not just the
first of (possibly) many.
2014-04-06 22:28:27 +10:00
Jan Schmidt
98482c3a0e playbin: Drop reference to any source element in NULL state
Drop the reference instead of waiting for either finalize(), or
for a new source when reused. Everyone else already forgot about
the old source.
2014-04-04 02:15:53 +11:00
Arun Raghavan
f4cab18ec1 playback: Add video-/audio-filter properties
This provides an audio-filter and video-filter property to allow
applications to set filter elements/bins. The idea is that these will
e
applied if possible -- for non-raw sinks, the filters will be skipped.

If the application wishes to force the application of the filters, this
can be done by setting the new flag introduced on playsink -
GST_PLAY_FLAG_FORCE_FILTERS.

https://bugzilla.gnome.org/show_bug.cgi?id=679031
2014-03-16 18:38:29 +01:00
Sebastian Dröge
1bda077374 Revert "playback: Add video-/audio-filter properties"
This reverts commit fb8fdedb4f.
2014-03-16 18:38:25 +01:00
Arun Raghavan
fb8fdedb4f playback: Add video-/audio-filter properties
This provides an audio-filter and video-filter property to allow
applications to set filter elements/bins. The idea is that these will be
applied if possible -- for non-raw sinks, the filters will be skipped.

If the application wishes to force the application of the filters, this
can be done by setting the new flag introduced on playsink -
GST_PLAY_FLAG_FORCE_FILTERS.

https://bugzilla.gnome.org/show_bug.cgi?id=679031
2014-03-16 18:35:57 +01:00
Arun Raghavan
bfb78cee42 playsink: Fix documentation for what the audio chain looks like
https://bugzilla.gnome.org/show_bug.cgi?id=679031
2014-03-16 11:02:43 +01:00
Sebastian Dröge
5e364c1d7b decodebin: Buffer up to 5 seconds in multiqueue buffering mode
2 seconds might be too small for some container formats, e.g.
MPEGTS with some video codec and AAC/ADTS audio with 700ms
long buffers. The video branch of multiqueue can run full while
the audio branch is completely empty, especially because there
are usually more queues downstream on the audio branch.
2014-03-07 17:09:24 +01:00
Sebastian Dröge
539eaf73e5 decodebin: Keep the number of buffers after an adaptive streaming demuxer lower
Usually these buffers are multiple seconds large, and having a maximum
of 5 buffers in the multiqueue there can use a lot of memory. Lower
this to 2 for adaptive streaming demuxers.
2014-03-06 22:45:30 +01:00
Sebastian Dröge
274b4eb870 decodebin: Simplify adaptive streaming demuxer code a bit 2014-03-06 22:45:30 +01:00
Matthieu Bouron
45dfceacdb playbin: improve autoplug_query_caps return
Makes autoplug_query_caps return
downstream_caps + intersect_first(filter_caps, element_caps)

https://bugzilla.gnome.org/show_bug.cgi?id=724828
2014-02-27 21:23:12 +01:00
Matthieu Bouron
5c1167a2c7 playsinkconvertbin: improve gst_play_sink_convert_bin_getcaps return
If we have the peer caps and a caps filter, return peer_caps +
intersect_first (filter, converter_caps) instead of
intersect_first (filter, peer_caps + converter_caps) and preservers
downstream caps preference order.

https://bugzilla.gnome.org/show_bug.cgi?id=724893
2014-02-26 09:35:04 +01:00
Sebastian Dröge
2df1e56bb7 decodebin: If we have a demuxer without dynamic srcpads, just assume no-more-pads
Otherwise we will wait until the multiqueue after the demuxer will
overrun, which is clearly not needed then.
2014-02-23 00:10:01 +01:00
Sebastian Dröge
f149c27a61 decodebin: Also make sure to not duplicate an element factory after a group
If we are using an adaptive stream demuxer, which outputs a non-container
stream, we are putting another multiqueue after the *parser* following
the adaptive stream demuxer. We do not want to add another instance of
the same parser right after this multiqueue.
2014-02-23 00:10:01 +01:00
Sebastian Dröge
41117606dd decodebin: During pre-rolling always use the auto-preroll limits on multiqueues
Even if we're buffering in the multiqueues.
2014-02-23 00:10:01 +01:00
Sebastian Dröge
2d2aa02b77 decodebin: Pass through the seekability information when setting multiqueue limits 2014-02-23 00:10:01 +01:00
Sebastian Dröge
db771185ed decodebin: During exposing of pads don't set the multiqueue limits multiple times to different values
Instead just set them once in the very end to the correct values.
2014-02-23 00:10:01 +01:00
Sebastian Dröge
c4caeb73ce decodebin: Only enable multiqueue buffering once we're pre-rolled
Otherwise we will emit buffering messages not just from the last
multiqueue but also from previous multiqueues... confusing the
application with different percentages during pre-rolling.
2014-02-23 00:10:01 +01:00
Sebastian Dröge
4f32010916 decodebin: Make sure that we always have a second multiqueue for adaptive streaming demuxers
For adaptive streaming demuxer we insert a multiqueue after
this demuxer. This multiqueue will get one fragment per buffer.
Now for the case where we have a container stream inside these
buffers, another demuxer will be plugged and after this second
demuxer there will be a second multiqueue. This second multiqueue
will get smaller buffers and will be the one emitting buffering
messages.
If we don't have a container stream inside the fragment buffers,
we'll insert a multiqueue below right after the next element after
the adaptive streaming demuxer. This is going to be a parser or
decoder, and will output smaller buffers.
2014-02-23 00:10:00 +01:00
Sebastian Dröge
ad51b38b7c uridecodebin: Always use buffering in multiqueue for adaptive streams 2014-02-23 00:10:00 +01:00
Sebastian Dröge
a2837a22a5 uridecodebin: Only add a queue2 for buffering for non-adaptive streaming streams 2014-02-23 00:10:00 +01:00
Thiago Santos
89c9e23bfe uridecodebin: pass on the buffering property for adaptive streams
Adaptive streams should download its data inside the demuxer, so
we want to use multiqueue's buffering messages to control the
pipeline flow and avoid losing sync if download rates are low;

https://bugzilla.gnome.org/show_bug.cgi?id=707636
2014-02-23 00:10:00 +01:00
Sebastian Dröge
a5918b0ab5 playbin: Keep inputselector around until we release its pads
Otherwise there's an interesting race condition when we destroy
the inputselector (actually it will be destroyed later when its state
change message gets destroyed) and afterwards release its sinkpad.

This is the code path when the last channel is removed from the
input selector.

Gave this warning sometimes, for chained oggs or whenever else
we change decode groups:
GStreamer-CRITICAL **: Padname '':sink_0 does not belong to element inputselector0 when removing
2014-02-18 15:06:25 +01:00
Sebastian Dröge
4dd30bbd16 playsink: Only remove the complete text chain if the text pad goes away
If the text pads does not go away we just set the overlay to silent, which
allows us to immediately re-enable subs later again. However before this
change we also released the streamsynchronizer text pads, which deadlocked
because there was still dataflow going on. Just do this only if we remove
the complete chain.

https://bugzilla.gnome.org/show_bug.cgi?id=683504
2014-02-16 15:35:31 +01:00
Sebastian Dröge
2ddc07e93e uridecodebin: Don't leak pad references 2014-02-12 17:34:32 +01:00
Sebastian Dröge
a02678057e playbin: First try to get the pad's current caps, then query caps
The caps query might give us ANY caps while the pad has fixed caps
configured currently.
2014-02-11 16:36:20 +01:00
Sebastian Dröge
57295753d5 playbin: Fix memory leak in autoplugging code
We should not leak element factories ideally.
2014-02-10 16:33:50 +01:00
Sebastian Dröge
c91a4af9ab subtitleoverlay: Remove unused function 2014-02-09 23:17:03 +01:00
Alessandro Decina
6a699b6c40 decodebin: make it possible to register multiple handlers for autoplug-select
Change the way autoplug-select is accumulated so that it's possible to have
multiple handlers. The handlers keep getting called as long as they keep
returning GST_AUTOPLUG_SELECT_TRY.

One practical example of when this is needed is when hooking into playbin's
uridecodebin, which is perhaps not very elegant but the only way to influence
which streams playbin autoplugs/exposes.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723096
2014-01-28 13:45:07 +11:00
Sjoerd Simons
43237ad0e2 uridecodebin: Drop hardcoded list of media suitable for download buffering
Discussion on IRC indicated that the main reason for this list was to
prevent demuxers that can trigger a lot of seeking from using
progressive buffering using queue2 (which due to being seekable triggers
that behaviour).

However given that upstream can indicate seeks are possible but should
be avoided via a scheduling query, this extra whitelisting shouldn't be
necessary for well-behaved demuxers.

https://bugzilla.gnome.org/show_bug.cgi?id=704933
2014-01-24 22:34:51 +01:00
Wonchul Lee
c2746d753e playbin: Remove unnecessary assignment
Remove duplicated assignment

https://bugzilla.gnome.org/show_bug.cgi?id=722491
2014-01-18 13:33:57 +01:00
Sebastian Dröge
4f8f5918be playbin: Insert decoders without GstAVElement information between the other decoders
Otherwise they would be preferred over all decoders independent
of their ranks.

https://bugzilla.gnome.org/show_bug.cgi?id=722316
2014-01-18 13:33:57 +01:00
Sebastian Dröge
6b46019abf playbin: Only put parsers and sinks first, not all non-decoders
https://bugzilla.gnome.org/show_bug.cgi?id=722316
2014-01-18 13:33:57 +01:00
Matthieu Bouron
98e0dec715 playback: add ANY caps features to default audio/video raw caps
Allows elements using audio/video caps features to be used by playbin.
2013-12-30 11:25:49 +01:00
Wim Taymans
6db3b535eb uridecodebin: copy sticky events 2013-11-29 17:30:09 +01:00
Wim Taymans
a7151d0b3e decodebin2: copy sticky events 2013-11-29 17:26:13 +01:00
Wim Taymans
65e492a403 decodebin2: activate ghost pad before targetting
Activate the decodebin2 pad before setting the target. This makes sure
that the events are copied.
2013-11-28 11:27:23 +01:00
Sebastian Dröge
0e9806a03e playsink: Fix visualizations if no visualization plugin was set
https://bugzilla.gnome.org/show_bug.cgi?id=712280
2013-11-26 12:03:24 +01:00
Tim-Philipp Müller
b1ff48c1a1 docs: remove old 0.10 Since markers
They're just confusing.
2013-11-16 16:10:07 +00:00
Thibault Saunier
ddf4ca2203 playback: Add subpicture/x-dvb as raw caps
https://bugzilla.gnome.org/show_bug.cgi?id=710325
2013-10-30 22:28:43 +01:00
Sebastian Dröge
dd4fe544bc playsink: If the visualisation is changing and reconfiguration is pending, do it all during reconfiguration
Otherwise we will have two pad blocks that want to use the same mutex
and block each other via the streamlock.

https://bugzilla.gnome.org/show_bug.cgi?id=709210
2013-10-02 15:03:46 +02:00
Thiago Santos
f8d8a56d7b playbin: make sure elements are in null before disposing
If a pipeline fails to preroll, it might happen that the sinks are
put into READY state from playbin's sink activation, but they are never
set to playsink, so they aren't being managed by a GstBin and will keep
their READY state until they are unreffed, leading to a warning.

Prevent this by always forcing them to NULL when deactivating a group

https://bugzilla.gnome.org/show_bug.cgi?id=708789
2013-10-01 17:53:05 -03:00
Sebastian Dröge
cac572ec5d playbin: Make sure to cache context types we did not store yet
https://bugzilla.gnome.org/show_bug.cgi?id=708668
2013-09-24 12:47:26 +02:00
Sebastian Dröge
78b0e16773 playbin: Implement context caching for sinks that are not in playsink yet 2013-09-18 22:39:25 +02:00
Sebastian Dröge
e21d3d214a playbin: No need to set the GstContext on the sink before activating it
This is all handled by the GstBin code now.
2013-09-18 22:39:25 +02:00
Loïc Minier
8492b956cd playback: fix docs of convert-sample action signal
convert-sample returns a GstSample, not a GstBuffer.

https://bugzilla.gnome.org/show_bug.cgi?id=707660
2013-09-07 14:58:46 +01:00
Sebastian Dröge
61c1d15ce7 playsink: Don't set sink to NULL if a new one is set while the old one is still in use 2013-08-14 15:43:53 +02:00
Sebastian Dröge
b22f046cbc streamsynchronizer: Set proxy flags on the pads and use default event handler for simplicity
https://bugzilla.gnome.org//show_bug.cgi?id=705555
2013-08-12 13:02:15 +02:00
Arnaud Vrac
a8df760c96 playbin: check for tags on the right combiner instance
The get-tags actions are not working in all cases, because the track
number is used to resolve the stream combiner instead of the stream
type.

https://bugzilla.gnome.org/show_bug.cgi?id=705369
2013-08-03 17:17:10 +01:00
Edward Hervey
9dd0e6cccc ext/gst: Ensure default query/event handlers are used
And in some cases, just remove our implementation that does nothing
2013-07-26 16:08:35 +02:00
Sebastian Dröge
0bd0c925e3 playsink: Remove two unused variables 2013-07-23 13:42:40 +02:00
Sebastian Dröge
e4b1a58675 subtitleoverlay: Remove some more unneeded segment tracking 2013-07-23 13:41:55 +02:00
Sebastian Dröge
436ea03362 playsinkconvertbin: Remove obsolete segment tracking
This is now all handled automatically with sticky events.
2013-07-23 13:36:09 +02:00
Sebastian Dröge
f92da706fd playbin: Ensure that everything in a GstSourceGroup gets the same group-id
Including streams from external subtitle files. If not everything implements
the group-ids playbin invents its own.
2013-07-23 12:42:50 +02:00
Sebastian Dröge
94fc577dd5 playsink: Fix handling of colorbalance element if the sink does not implement it 2013-07-23 12:35:46 +02:00
Sebastian Dröge
0947c7ab30 playsink: Improve segment handling in the custom flushing for subtitle stream switches
This code needs a lot more work to be improved for 1.0.
2013-07-23 11:13:19 +02:00
Sebastian Dröge
33cba1054d subtitleoverlay: Segment events are sticky now and propagated automatically when needed 2013-07-23 11:11:33 +02:00
Sebastian Dröge
2465895266 streamsynchronizer: Implement grouping of streams via the group-id
https://bugzilla.gnome.org/show_bug.cgi?id=704427
https://bugzilla.gnome.org/show_bug.cgi?id=704408
2013-07-22 15:24:13 +02:00
Sebastian Dröge
432b092247 playbin: Don't prefer decoders for which we found a matching sink
It doesn't make much sense.
2013-07-16 12:21:44 +02:00
Sebastian Dröge
4cfda00120 playbin: Also consider possible converters for raw streams when selecting compatible sink/source combinations
https://bugzilla.gnome.org/show_bug.cgi?id=704285
2013-07-16 11:22:35 +02:00
Sebastian Dröge
5ee98c146e playbin: Fix sorting for decoder factories for which we didn't find a compatible sink
They might just need some converters for raw audio/video.

https://bugzilla.gnome.org/show_bug.cgi?id=704285
2013-07-16 09:32:31 +02:00
Sebastian Dröge
10c91ea5b5 playbin: Don't print a warning when setting a sink to NULL
https://bugzilla.gnome.org/show_bug.cgi?id=704194
2013-07-15 09:10:30 +02:00
Sebastian Dröge
edecd7eec3 playbin: Properly destroy and set to NULL sinks that don't work 2013-07-12 12:05:37 +02:00
Alban Browaeys
f174c450c9 playbin: Fix logic to detect if a stream-change is currently pending
Fixes duration reporting in gapless playback between files.

https://bugzilla.gnome.org/show_bug.cgi?id=585969
2013-07-12 09:54:06 +02:00
Sebastian Dröge
9ab6ab4257 playbin: Only give sinks a new bus if they have no parent yet
Otherwise we will remove the bus that would proxy messages to playsink
and never set it again. If the sink is already in playsink, all failures
are fatal anyway as it's either a sink that worked before or one that
was set by the user.

https://bugzilla.gnome.org/show_bug.cgi?id=701997
2013-07-10 17:17:05 +02:00
Sebastian Dröge
d7f1d9954f playbin: Store a/v/t sinks locally too, not just in playsink 2013-07-10 13:22:04 +02:00
Sebastian Dröge
4c1fc76407 playsink: ref_sink() any sinks that are set on playsink
Otherwise the behaviour of the properties is inconsistent.
2013-07-10 13:21:29 +02:00
Sebastian Dröge
043c1888f3 streamsynchronizer: Non-TIME segment streams are not waiting automatically
This was leftover code from porting to 1.0 and fixes the playbin
unit test.

https://bugzilla.gnome.org/show_bug.cgi?id=701943
2013-07-10 13:00:21 +02:00
Sebastian Dröge
f68b6c2626 playbin: Change sink ownership handling to be a bit more sane
playbin will now only activate the sinks in a single place and
will never change the states of any sinks that are owned by
playsink.

Also handle text-sinks the same way as audio/video sinks inside
playbin.
2013-07-09 14:57:05 +02:00
Sebastian Dröge
7c28c180ec playbin: If we had a previous autoplugged sink, try to reuse it
https://bugzilla.gnome.org/show_bug.cgi?id=701997
2013-07-02 14:25:28 +02:00
Sebastian Dröge
b3a15872b7 playsink: If we switch sinks, make sure that the old sink is set to NULL 2013-07-02 14:18:20 +02:00
Sebastian Dröge
841d738f7c playbin: Don't change the state of sinks that we passed to playsink already 2013-07-02 14:02:57 +02:00
Sebastian Dröge
c725591010 playsink: Consider new audio/video sinks when reconfiguring 2013-07-02 14:01:52 +02:00
Sebastian Dröge
a0e61534ef playbin: Improve debug output regarding sink selection 2013-07-02 12:27:03 +02:00
Brendan Long
d3acb2b01a playbin: Post an error message if a stream combiner doesn't return a request pad. 2013-07-02 09:34:19 +02:00
Sebastian Dröge
f39d1dc3b4 playbin: Only intersect to check if a sink can handle raw caps
Doing a subset check requires fixed caps, which we might not have here.

https://bugs.webkit.org/show_bug.cgi?id=116042
2013-07-01 13:46:51 +02:00
Sreerenj Balachandran
8a2dbeb1ef playsink: Fix the block diagram of deinterlace bin.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702465
2013-06-17 16:28:44 +02:00
Brendan Long
b5f7a621bb playbin: Emit {audio,text,video}-changed signals when pads are removed
https://bugzilla.gnome.org/show_bug.cgi?id=702195
2013-06-14 14:23:11 +02:00
Sebastian Dröge
4465741222 playbin: When activating a fixed sink, proxy error messages too
If activating a fixed sink fails, everything will fail later anyway
and we can just error out early.
2013-06-08 23:51:13 +02:00
Sebastian Dröge
44352deadb playbin: Improve autoplugging of decoder/sink combinations by trying to activate the sink
And if that fails don't bother autoplugging that sink. Also gives
us more accurate sink caps.
2013-06-08 23:34:53 +02:00
Sebastian Dröge
ff8839d97b playbin: Proxy the playbin context to the sinks 2013-06-08 23:22:54 +02:00
Sebastian Dröge
77af24c493 playbin: Proxy sink messages if we activate a sink in playbin already
This makes sure the application gets any context related messages and
can do whatever is required to a) get the sink a context or b) share
the context with other elements in the pipeline.

The proxying is necessary because the sink is not a child element of
playbin, but instead will at a later point be a child of some bin
inside playsink.

https://bugzilla.gnome.org/show_bug.cgi?id=700967
2013-06-08 23:22:54 +02:00
Sebastian Dröge
c49531f1b7 decodebin: Let serialize queries before caps events through
Otherwise we're going to deadlock forever because no autoplugging
happens without having caps, but caps can never be send because
we're blocking.

Serialized queries before caps should never be sent unless really
necessary.
2013-06-06 15:57:49 +02:00
Daniel Drake
d32d2f0b14 playsink: pass translated color balance value to channel
We found a case where untranslated values were being passed from the
proxy to the underlying channel, causing bad color balance values
in some setups.

Thanks to Sebastian Dröge for clarifying how the code works, and
suggesting the fix.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701202
2013-05-29 20:20:10 +02:00
Brendan Long
96aab6d8a5 playbin: Don't take an extra reference to the custom stream combiners
They are automatically reffed when added to the bin because they're
already not floating anymore.
2013-05-29 20:12:48 +02:00
Sebastian Dröge
0dee7777ff playbin: Set custom stream-combiners to NULL and unref before finalizing 2013-05-29 10:35:11 +02:00
Brendan Long
53caa99a59 playbin: Rename select to combine and selector to combiner in playbin 2013-05-29 09:53:34 +02:00
Brendan Long
ba5f6cfe72 playbin: Add support for custom stream-combiners
This allows to chose something else than input-selector
for multiple audio/video/text streams, e.g. an adder could
be used for audio.

It is needed for example to implement some of the more
advanced HTML5 video features.

https://bugzilla.gnome.org/show_bug.cgi?id=698851
2013-05-29 09:52:32 +02:00
Sebastian Dröge
14192c031a decodebin: Don't call autoplug-query on shutdown
And remove leftover debug code
2013-05-28 13:32:23 +02:00
Sebastian Dröge
e482b5b8e6 playbin: In autoplug-queries, add the actual decoder/parser/etc template caps
Add the actual decoder/parser/etc caps at the very end to
make sure we don't cause empty caps to be returned, e.g.
if a parser asks us but a decoder is required after it
because no sink can handle the format directly.
2013-05-28 13:23:40 +02:00
Sebastian Dröge
a4ec6fe0b7 playbin: Forward CONTEXT queries to the corresponding sink if we have one
https://bugzilla.gnome.org/show_bug.cgi?id=700967
2013-05-28 13:14:15 +02:00
Sebastian Dröge
e5064ee723 playbin: Refactor autoplug-query handling
We now only check sinks and factories of the corresponding media
type. It doesn't make sense to pass audio/subtitle caps to a video
decoder.
2013-05-28 13:08:00 +02:00
Sebastian Dröge
d366613401 decodebin: Block on serialized queries too
Otherwise we will only block after the serialized, non-sticky event
after the CAPS event or the first buffer. If we're waiting for another
pad to finish autoplugging after we got final caps on this pad, it
will mean that we will let the ALLOCATION query pass although the
pad is not exposed yet.
2013-05-28 13:06:15 +02:00
Sebastian Dröge
9513b770f4 decodebin: Pass the element in the autoplug-query signal too 2013-05-28 12:10:33 +02:00
Sebastian Dröge
730e633d58 decodebin: Need to lock the chain mutex in autoplug_query 2013-05-28 11:40:51 +02:00
Sebastian Dröge
b86267b5be playsinkconvertbin: Fix leak of the downstream caps filter 2013-05-28 11:36:58 +02:00
Sebastian Dröge
db8d53bc17 playbin: Refactor autoplug-query handling a bit 2013-05-28 11:05:21 +02:00
Sebastian Dröge
fa7ad8743c decodebin: Lock the state of child elements as long as we manage their states
https://bugzilla.gnome.org/show_bug.cgi?id=690420
2013-05-24 13:41:46 +02:00
Sebastian Dröge
be4dba23ea Revert "decodebin2: use NO_RESYNC flag"
This reverts commit 0feecef275.
2013-05-24 11:47:13 +02:00
Sebastian Dröge
ca1279e4a3 decodebin: Use signal handler IDs instead of disconnecting by function
This is cleaner and faster.
2013-05-22 17:29:17 +02:00
Sebastian Dröge
504e57ccc5 decodebin: Connect and disconnect the have-type signal of typefind before starting/shutting down 2013-05-22 13:49:18 +02:00
Sebastian Dröge
1756f86042 playsink: Use signal handler IDs instead of disconnecting/blocking by function
This is cleaner and faster.
2013-05-21 16:35:18 +02:00
Sebastian Dröge
d802c7395a playback: Only do a subset filtering for the factories if we have fixed caps
Otherwise we're plugging a parser/converter currently and have unfixed caps.
2013-05-15 17:15:18 +02:00
Sebastian Dröge
062246fc6e decodebin: Return immediately from checking if a chain is complete if we're shutting down 2013-05-15 14:51:16 +02:00
Sebastian Dröge
83f2476976 decodebin: Hold the expose lock when freeing a chain
https://bugzilla.gnome.org/show_bug.cgi?id=700342
2013-05-15 14:47:53 +02:00
Sebastian Dröge
74a31a02fc playbin: Fix deadlock caused by lock order inversion
First the source group lock, then the elements list lock.
2013-05-15 13:38:32 +02:00
Sebastian Dröge
450a47c0a5 playback: Use subset checks instead of intersection
https://bugzilla.gnome.org/show_bug.cgi?id=700272
2013-05-14 10:07:44 +02:00
Sebastian Dröge
b0ec886cb9 playbin2: Chose more balanced metric to compare ranks of decoder/sink combinations 2013-05-09 15:05:21 +02:00
Sebastian Dröge
b23f4e4ab9 playbin: Fix infinite loop in GSequence iteration code 2013-05-08 21:27:17 +02:00
Sebastian Dröge
4c52518ef5 uridecodebin: Always store queue2 elements for later removal
Otherwise we accumulate more and more queue2 elements, and let each
of them start a thread doing nothing but waiting each time uridecodebin
goes to PAUSED.

https://bugzilla.gnome.org/show_bug.cgi?id=699794
2013-05-08 14:52:18 +02:00
Sebastian Dröge
7ff4f8f4d4 playbin: Use the GSequence more efficiently
This makes it possible to take advantage of the O(log n) lookups
of GSequence on the ~1000 element lists and only do iterations
on <10 element lists. Previously the code iterated over ~1000 element
lists multiple times.
2013-05-07 15:23:05 +02:00
Sreerenj Balachandran
52c5115ff0 playbin: Use GSequence instead of GList to store the GstAVElement list.
The GstAVElement list might be big. Use GSequence to optimize it.
2013-05-07 15:23:05 +02:00
Sreerenj Balachandran
a8d1b45491 playbin: autoplug the audio/video decoders and sinks based on capsfeatures.
Autoplug the decoder elements and sink elements based on
the number of common capsfeatures if the ranks are the same.
This will also helps to autoplug the h/w_decoder and h/w_renderer.

https://bugzilla.gnome.org/show_bug.cgi?id=698712
2013-05-07 15:23:05 +02:00
Sebastian Dröge
b719dd9f89 decodebin: Expose pads when they receive EOS before any buffers
Stops decodebin from waiting forever to expose a pad if there
is never data on it.

https://bugzilla.gnome.org/show_bug.cgi?id=691072
2013-05-06 15:49:00 +02:00
Sebastian Dröge
9c5c0ca878 streamsynchronizer: Fix check for belonging to another stream
https://bugzilla.gnome.org/show_bug.cgi?id=697820
2013-04-24 11:11:41 +02:00
Wim Taymans
c5840ebbd9 decodebin2: also remove the bytes limit
Remove the byte limit for adaptive http streaming. Because some fragments might
be very big, we might need a lot of buffering. I also suspect another problem
where data is actually missing and things go out of sync somehow.
2013-04-23 11:20:28 -03:00
Wim Taymans
26c5bc1ce4 decodebin2: update buffer size in multiqueue
When we disable buffering in the more upstream multiqueue elements,
we need to also update the queue limits. In particular, the max_size_time should
be set to 0 or else we might simply deadlock.
2013-04-23 11:20:28 -03:00