Commit graph

1389 commits

Author SHA1 Message Date
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
Thiago Santos
5cd07bd2af decodebin2: only allow 'lower' multiqueues to emit buffering messages
When we have a scenario of demuxers linked to demuxers, decodebin2
will create multiqueue at different levels of the pipeline. The problem
is that only the lowest multiqueue's should do the buffering messaging,
as they will handle with the raw streams data.

When all multiqueues are doing buffering, the upper ones can handle
large buffers that easily fill them, moving from 0% to 100% from
buffer to buffer, causing too much buffering messages to be posted.
This hangs the pipeline unnecessarily and might lead to deadlocks.
2013-04-23 11:20:28 -03:00
Thiago Santos
6382d4c0ad decodebin2: do not handle the next-groups list as if it was a single item
Decodebin2's chains store a next_groups list that was being handled as
it could only have a single element. This is true for most of the
chaining streams scenarios where streams change not very often.

In more stressfull changing scenarios, like adaptive streams, those
changes can happen very often, and in short time intervals. This could
confuse decodebin2 as this list was always being used as a single
element list.

This patches makes it handle as a real list, using iteration instead
of picking the first element as the correct one always.
2013-04-23 10:32:19 -03:00
Thiago Santos
054ffc6e2b decodebin2: preserve next groups order 2013-04-23 10:32:19 -03:00
Thiago Santos
42db7c7b08 decodebin2: still report chain as drained when not 'handled'
Even if the chain hasn't been 'handled' in this switching round,
report it as drained so upper chains/groups know abou it.

This makes switching happen on upper levels of the groups/chain
trees
2013-04-23 10:32:19 -03:00
Sebastian Dröge
d77f76049e streamsynchronizer: Don't consider a stream added for an already running one as "new"
Fixes enabling visualizations after disabling them after they were enabled already.
2013-04-23 13:54:49 +02:00
Sebastian Dröge
2e017bd595 streamsynchronizer: If a stream belongs to an already running stream, don't wait
This fixes enabling visualizations after the audio stream already started.

https://bugzilla.gnome.org/show_bug.cgi?id=697820
2013-04-23 13:19:38 +02:00
Tim-Philipp Müller
830926e47d uridecodebin: don't report 'no uri handler found' if the URI was rejected by a source
If a source element could be created for a URI, but all elements rejected
the URI for some reason, propagate the error from the URI handler instead
of reporting a 'no uri handler found for protocol xyz' error, which is
confusing. Fixes error reporting with dvb:// URIs when the channel config
file could not be found or not be parsed or the channel isn't listed.

https://bugzilla.gnome.org/show_bug.cgi?id=678892
2013-04-21 17:30:58 +01:00
Sreerenj Balachandran
9c94a1812f playbin: use _plugin_feature_rank_compare API instead of duplicating the code. 2013-04-18 13:59:52 +02:00
Sreerenj Balachandran
8cf6049643 decodebin: use _plugin_feature_rank_compare API instead of duplicating the code. 2013-04-18 13:59:36 +02:00
Philippe Normand
26fb72cf65 uridecodebin: query bandwidth capability to source element
Use a scheduling query to check if the source element has some
bandwidth limitations. If this is the case on-disk buffering might be
used. If the source element doesn't handle the scheduling query then
fallback to checking the URI protocol against the hardcoded list of
protocols known to handle buffering already.

Fixes bug 693484.
2013-04-16 16:47:28 +02:00
Sebastian Dröge
948a4a3632 gst: Add better support for static plugins 2013-04-15 15:52:58 +02:00
Sreerenj Balachandran
9b33c75cd4 playbin: use ascending order for name based sorting of pluginfeatures.
The compare_factories_func() should return negative value
if the rank of both PluginFeatures are equal and the name of
first PluginFeature comes before the second one (== ascending order).
2013-04-15 12:05:22 +02:00
Sreerenj Balachandran
f07eb23728 decodebin: use ascending order for name based sorting of pluginfeatures.
The _decode_bin_compare_factories_func() should return negative
value if the rank of both PluginFeatures are equal and the name of
first PluginFeature comes before the second one (== ascending order).
2013-04-15 12:05:16 +02:00
Tim-Philipp Müller
1c0288db38 playbin: fix jpeg passthrough to decoder sinks by marking image/* as video stream 2013-04-12 11:51:30 +01:00
Wim Taymans
92b77c5aa4 decodebin2: forward all sticky events to decodepad
Forward all sticky events to the decodepad before exposing the pads. This makes
sure all sticky events are on the exposed pad.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=696915
2013-04-04 15:00:52 +02:00
Wim Taymans
c082c06b6c decodebin: debug sticky events on exposed pads 2013-04-04 14:53:32 +02:00
Wim Taymans
08dd2454cd decodebin2: small cleanup
Take the event from the probe just once.
2013-04-04 14:37:15 +02:00
Wim Taymans
34eea4d5f2 streamsynchronizer: update position for reverse
When doing reverse playback the positino advances from timestamp_end to
timestamp.
2013-03-31 12:57:35 +02:00
Sebastian Dröge
3475d4f457 decodebin: Remove GstdecodePads that are not going to be exposed
This makes sure that they're unlnked and don't cause any errors or
block the pipeline.
2013-03-30 17:17:04 +01:00
Sebastian Dröge
7f78f7f9e3 playbin: Ignore caps from audio/video sink factories if there are fixed sinks already 2013-03-30 12:15:38 +01:00
Sebastian Dröge
57a0806b3a playbin: Handle caps queries from unlinked elements
Pass them to all possible sinks and the current sinks to
allow elements to chose a more optimal initial caps.
2013-03-30 11:49:42 +01:00
Sebastian Dröge
0932391d3f decodebin: Add autoplug-query signal to handle queries for yet unconnected elements
This allows playbin to answer the CAPS query with the possible sink
caps for example, and allows decoders to chose more optimal caps.
2013-03-30 11:49:42 +01:00
Sebastian Dröge
9ce0818c7d decodebin: Don't add a children to a decode group twice
This can happen if a demuxer does not provide fixed caps from the
beginning but only sets them later.
2013-03-30 11:49:42 +01:00
Stefan Sauer
f19acfc60b uridecodebin: remove commented code
This is dead since ~6 years.
2013-03-28 12:36:51 +01:00
Sebastian Dröge
383f58b0ed subtitleoverlay: Return ANY caps for the GET_CAPS query
subtitleoverlay handles any caps, not just the ones
for which a subtitle parser/renderer exist. It will
just ignore any unsupported streams instead of causing
an error.

https://bugzilla.gnome.org/show_bug.cgi?id=688476
2013-03-21 15:37:31 +01:00
Sebastian Dröge
9084bc151b playsinkconvertbin: Make sure to return all allowed caps in the GET_CAPS query
Add all the caps that we can convert to to the filter caps,
otherwise downstream might just return EMPTY caps because
it doesn't handle the filter caps but we could still convert
to these caps, causing us to return EMPTY caps although
conversion would be possible.

https://bugzilla.gnome.org/show_bug.cgi?id=688803
2013-03-21 13:42:41 +01:00
Sebastian Dröge
d06c332655 playsinkconvertbin: Use gst_caps_is_subset() for handling the ACCEPT_CAPS query 2013-03-21 11:42:43 +01:00
Tim-Philipp Müller
7dd2fad888 uridecodebin: minor GValue handling optimisation 2013-03-03 17:44:11 +00:00
Matej Knopp
1e5b50e94c decodebin: don't block on caps 2013-02-14 11:37:54 +01:00
Sebastian Dröge
cfd73a8cf7 decodebin: Remove left-over line from last commit 2013-02-14 11:25:37 +01:00
Matej Knopp
872cc295a6 decodebin: Check if value is set before unsetting it
https://bugzilla.gnome.org/show_bug.cgi?id=693401
2013-02-14 11:22:34 +01:00
Alexander Schrab
e7caef6b29 decodebin: Push caps event immediately to ghost pad to avoid exposing pads without caps 2013-02-12 10:12:14 +01:00
Marc Leeman
f704b3f975 decodebin: g_mutex_new -> g_mutex_init
Don't use deprecated GLib API.

https://bugzilla.gnome.org/show_bug.cgi?id=693302
2013-02-07 13:51:17 +00:00
Tim-Philipp Müller
500b864899 decodebin: try harder to always expose pads in the same order
Use stream-id as sort criterion in addition to the media type.

https://bugzilla.gnome.org/show_bug.cgi?id=634407
2013-01-19 13:03:03 +00:00
Wim Taymans
0feecef275 decodebin2: use NO_RESYNC flag
to avoid the state change function from messing with the state of the elements
that we add.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=690420
2012-12-21 16:38:36 +01:00
Wim Taymans
66cafcc34d playsink: fix vis switch with format change
Block the pad before the resample and convertor elements to give the a chance to
negotiate new caps with the newly switched vis plugin.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679976
2012-12-13 11:34:54 +01:00
Tim-Philipp Müller
7c89a7298a streamsynchronizer: don't send gap events with huge bogus durations when advancing EOS streams
When the input buffers for a stream don't have a duration set,
timestamp_end might still be GST_CLOCK_TIME_NONE. When advancing
EOSed streams via GAP events (with other streams not yet EOS), we
would then use the invalid timestamp_end to calculate the duration
of the gap. This in turn would make baseaudiosink abort, because it
would try to allocate memory for a trizillion samples.

So if buffers don't have a duration set, assume a duration of
one second for stream catch-up purposes, just so we can still
continue to catch up in those cases. And make sure that
timestamp_end is valid before doing calculations with it.

http://bugzilla.gnome.org/show_bug.cgi?id=678530
2012-11-26 19:03:38 +00:00
Tim-Philipp Müller
601aabdf9c streamsynchronizer: reduce debug log spam a bit
Log locking/unlocking with TRACE debug level.
2012-11-25 18:07:04 +00:00
Sebastian Dröge
830b500d40 decodebin: Set element to NULL state before removing it from the bin 2012-11-22 13:09:46 +01:00
Sebastian Dröge
2faef82b9a decodebin: Check if the element really accepts the caps after setting it to READY
It might know the caps constraints for sure only after opening a decoder.
2012-11-22 13:07:11 +01:00
Sebastian Dröge
4f480612e9 streamsynchronizer: Make the element public
https://bugzilla.gnome.org/show_bug.cgi?id=688240
2012-11-21 10:29:44 +01:00
Tim-Philipp Müller
5f59b4f7ee Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-03 23:05:09 +00:00
Sebastian Dröge
b9d4d0cd29 streamsynchronizer: Also send a GAP event to let audio sinks start their clock in case they did not have enough data yet 2012-10-24 13:34:15 +02:00
Sebastian Dröge
6a31051feb streamsynchronizer: Use correct timestamp/duration for the GAP events 2012-10-24 13:29:45 +02:00
Sebastian Dröge
3c1041d5eb Revert "gst: Add better support for static plugins"
This reverts commit d2d79e3bc2,
which was accidentially pushed.
2012-10-24 13:26:26 +02:00
Sebastian Dröge
52d48109bc streamsynchronizer: Send GAP events to advance streams 2012-10-24 13:25:19 +02:00
Sebastian Dröge
d2d79e3bc2 gst: Add better support for static plugins 2012-10-24 12:10:44 +02:00
Sebastian Dröge
7b12afa4cb streamsynchronizer: Create a GAP event with a sensible timestamp 2012-10-24 11:19:06 +02:00
Sebastian Dröge
356579157e streamsynchronizer: Also propagate return value of pushing GAP event upstream 2012-10-23 18:21:32 +02:00
Sebastian Dröge
120c7be970 streamsynchronizer: Return TRUE from the EOS handler 2012-10-23 17:38:43 +02:00
David Corvoysier
87fd43aaaa decodebin2: Fix group switching algorithm
There were two issues with the previous decodebin2 group switching algorithm:

Issue 1: It operated with no memory of what has been drained or not, leading to
multiple checks for chains/groups that were already drained.

Issue 2: When receiving an EOS, it only detected that a higher-level chain
was drained if it contained the pad receiving the EOS.

The following modifications have been applied:
- a new drained property has been added to GstDecodeChain
- both drained properties of chain/group are set as soon as they are detected
- the algorithm now tests agains these values

See https://bugzilla.gnome.org/show_bug.cgi?id=685938
2012-10-14 10:58:18 +02:00
Sebastian Dröge
80e4f3e912 playsinkconvertbin: Change GST_WARNING to GST_INFO
It's not a problem if we have no converters, this only means
that none were requested at this point.
2012-10-10 11:50:12 +02:00
Wim Taymans
3591df23b1 docs: playbin2 -> playbin 2012-10-09 12:20:10 +02:00
Tim-Philipp Müller
81097f485a playback: class_ref() some types so we can create multiple playback elements at the same time
Should fix "cannot register existing type `GstPlaybinSelectorPad'" warnings
and subsequent errors when creating multiple players at the same time.

Conflicts:
	gst/playback/gststreamselector.c
2012-10-03 11:48:25 +01:00
Tim-Philipp Müller
6842698f0d Purge all references to liboil
And remove unused ffmpegcolorspace tests in the process.

https://bugzilla.gnome.org/show_bug.cgi?id=673285
2012-09-29 11:47:52 +01:00
Sebastian Dröge
b19944d1e4 gst: Update for link/unlink function API change 2012-09-17 13:24:52 +02:00
Mark Nauwelaerts
e491d24341 use gst_element_factory_get_metadata to replace obsolete API 2012-09-15 18:57:09 +02:00
Andreas Frisch
6e469b2ac5 playbin: subtitleoverlay: don't segfault in incorrectly init'ed plugins
https://bugzilla.gnome.org/show_bug.cgi?id=683865
2012-09-14 08:49:47 +01:00
Tim-Philipp Müller
082cedef79 streamsynchronizer: don't shadow function parameter 2012-09-14 00:39:09 +01:00
Edward Hervey
b5090d2aca streamsynchronizer: Don't wait on non-time streams
streams with non-TIME segments will not have timestamps ...
... and therefore will never unblock the other streams.

Fixes blocking issue when using playbin suburi feature
2012-09-11 16:29:21 +02:00
Tim-Philipp Müller
952f347146 playback: port to new GLib thread API 2012-09-10 01:10:24 +01:00
Tim-Philipp Müller
2079a8c12b Remove glib-compat-private.h stuff we don't need any more
It's all been ported to the latest GLib API now.
2012-09-09 18:36:49 +01:00
Mark Nauwelaerts
782adaf3ab streamsynchronizer: do not leak EOS events 2012-09-06 15:03:49 +02:00
Wim Taymans
b26f35c3a4 streamsync: only remove DISCONT when needed
Check if the buffer is DISCONT before making a potentially expensive copy to
unset the DISCONT flag.
2012-09-06 13:37:11 +02:00
Mark Nauwelaerts
d3a0269695 streamsynchronizer: use GAP event to trigger preroll
... rather than an empty buffer
2012-09-05 16:59:12 +02:00
Wim Taymans
f3158569c6 streamsync: unblock gcond on flush-stop
See https://bugzilla.gnome.org/show_bug.cgi?id=680441
2012-09-04 11:09:50 +02:00
Wim Taymans
ac61fb5221 playsink: unblock pads before releasing
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679823
2012-09-04 10:06:01 +02:00
Tim-Philipp Müller
7c2e7b1a4f text/plain + text/x-pango-markup -> text/x-raw 2012-09-02 02:45:41 +01:00
Tim-Philipp Müller
0301aaa30d playbin: automatically deinterlace interlaced content by default 2012-08-26 22:26:08 +01:00
Tim-Philipp Müller
5b715cdb90 video/x-dvd-subpicture -> subpicture/x-dvd 2012-08-20 21:36:15 +01:00
Edward Hervey
d86f6132ed streamsynchronizer: Handle stream switching
* Update outgoing segment.base with accumulated time, ensuring all
  streams are synchronized.
* Only consider streams as "new" is they have a STREAM_START event
  with a different seqnum.
* Use GstStream segment.base instead of separate variable to store
  the past running time.
* Disable passthrough
* Switch to glib 2.32 GMutex/GCond
* Avoid getting pad parent the expensive way
* Minor other fixes
2012-08-14 18:56:30 +02:00
Sebastian Dröge
628bc44ca5 streamsynchronizer: Unblock streams on FLUSH_START events 2012-07-27 12:59:20 +02:00
Edward Hervey
2f37ba60a2 decodebin2: Mark streams as complete on CAPS event but don't block
This allows the following use-cases to expose the group and pads
before an ALLOCATION query comes through:
* Single stream use-cases
* Multi stream use-cases where all streams sent the CAPS event before
  the first ALLOCATION query

Some cases will still make the initial ALLOCATION query fail though,
which isn't optimal, but not fatal (it will recover when pads are
exposed, a RECONFIGURE event is sent upstream and elements can
re-send an ALLOCATION query which will reach downstream elements).

https://bugzilla.gnome.org/show_bug.cgi?id=680262
2012-07-24 10:53:19 +02:00
Edward Hervey
f72f4c09c9 streamsynchronizer: Re-enable stream update
Not 100% perfect yet, but allows people to test
2012-07-19 16:12:22 +02:00
Edward Hervey
c5901cebca decodebin: Block on caps event
A caps event is also used to establish that a stream has prerolled.

Without this, we end up allowing negotiation queries to fail, ending
in decoders (and other elements) to not be configured right from the
start with the most optimal settings.
2012-07-18 18:17:57 +02:00
Wim Taymans
0423329f91 playback: update for ghostpad changes 2012-07-18 17:50:28 +02:00
Tim-Philipp Müller
0615794300 playbin: use avdeinterlace for deinterlacing until deinterlace is ported 2012-07-17 13:45:13 +01:00
Wim Taymans
04c4ca23b1 playsink: remove old marshal remains 2012-07-13 12:35:44 +02:00
Edward Hervey
dad72182a0 decodebin2: Demote WARNING to DEBUG
Delaying auto-plugging is quite common
2012-07-12 09:51:36 +02:00
Edward Hervey
a0fbf92d43 playback: Remove custom stream-change event
Applications can now use the STREAM_START message to know if a new
stream has started
2012-07-12 09:51:35 +02:00
Wim Taymans
a476b6cbfb decodebin2: improve debug 2012-07-11 15:39:37 +02:00
Tim-Philipp Müller
1dea99ded3 decodebin: make GValueArray arguments in autoplug-* signals static scope to avoid copies 2012-07-09 08:35:22 +01:00
Tim-Philipp Müller
81213ca040 playbin: don't use deprecated textoverlay properties 2012-07-06 12:37:56 +01:00
Sebastian Dröge
2f3637ca07 uridecodebin: Fix double-unref when iterating over element pads 2012-07-05 15:34:44 +02:00
Tim-Philipp Müller
99103be50c playsink: make extra sure to pass 64-bit integer to g_object_set when setting ts-offset
Might just be paranoia, but better safe than sorry. Make sure
the compiler really always passes a 64-bit integer to the
g_object_set() vararg function.
2012-07-03 20:32:57 +01:00
Sebastian Dröge
6e4d7e466d playsink: The default signal handler should be the one that triggers pad blocks and reconfiguration
Conflicts:

	gst/playback/gstplaysink.c
2012-06-26 11:05:42 +02:00
Sebastian Dröge
78b2fc762b playsink: Make sure to always block all pads before reconfiguring the pipeline
Fixes bug #678762.

Conflicts:

	gst/playback/gstplaysink.c
2012-06-26 10:59:59 +02:00
Sebastian Dröge
7ab77c6b32 playsink: Prevent NULL pointer dereference in last change 2012-06-25 16:08:47 +02:00
Sebastian Dröge
a038e5e583 playsink: Unlink pads when switching between enabling/disabling the deinterlace chain
See bug #678762.
2012-06-25 16:02:23 +02:00
Sebastian Dröge
67bbfdde4e playsink: Connect to the value-changed signal of the child colorbalance element and proxy it 2012-06-25 15:23:19 +02:00
Sebastian Dröge
c290fabf36 playsink: Only remove the xoverlay/colorbalance elements when necessary
They are not added again by every code path, e.g. when switching
only the deinterlace flag and are missing then.

Fixes bug #678763.

Conflicts:

	gst/playback/gstplaysink.c
2012-06-25 15:22:55 +02:00