Commit graph

941 commits

Author SHA1 Message Date
Stefan Kost
63be375c21 plaback: trim trailing whitespace 2011-03-14 10:43:42 +02:00
Stefan Kost
7f1382112e decodebin2: reflow configuring new multiqueue instance
Use a single g_object_set to configure the new multiqueue instance. Also don't
needlessly set "use-buffering" if it is the default.
2011-03-14 10:43:42 +02:00
Wim Taymans
6aa22111a1 Merge branch 'master' into 0.11 2011-03-04 16:21:13 +01:00
Stefan Kost
cf9aaffcb9 playbin2: set several properties in one go
g_object_set is a varargs function. Save 7 g_obvject_calls (and the overhead of
them) by using it accordingly.
2011-03-04 14:43:20 +02:00
Wim Taymans
03c710d6cd miniobject: fix for changed miniobject 2011-02-28 11:50:03 +01:00
Wim Taymans
c6dd11981d Merge branch 'master' into 0.11
Conflicts:
	configure.ac
	gst-libs/gst/pbutils/Makefile.am
2011-02-28 11:47:44 +01:00
Sebastian Dröge
4ac6f5ff83 decodebin2: Only prevent to autoplug the same parser multiple times for the same chain
Parsers are the only element class that are not changing the data and
could lead to an infinite loop. Other element classes like demuxers,
e.g. id3demux, can be used multiple times in a row and sometimes are.
2011-02-27 09:32:55 +01:00
Sebastian Dröge
c7f5290247 decodebin2: Break the double-factory checking loop immediately if the factory was used already 2011-02-26 23:43:39 +01:00
Sebastian Dröge
5058f79226 decodebin2: Don't use the same element multiple times in the same chain
This is going to lead to an infinite loop of this element and can easily
happen with parsers that accept their own src caps on the sinkpad.
2011-02-26 23:40:48 +01:00
Sebastian Dröge
32c30b88ff decodebin2: Improve detection of raw caps in expose-all-streams=false mode
Previously we only checked against the raw caps but we should also
check against the return value of autoplug-continue. Additionally fix
a thread-safety issue with accessing the raw caps.
2011-02-26 23:24:11 +01:00
Tim-Philipp Müller
c48c193b56 playbin2, uridecodebin: add "source-setup" signal
Add "source-setup" signal for convenience and discoverability. No need
to figure out "notify::source", look up the notify callback signature,
then do an g_object_get() to get the source element..

https://bugzilla.gnome.org/show_bug.cgi?id=626152
2011-02-24 16:53:01 +00:00
Mark Nauwelaerts
19052a847d playsink: release all chains when going to NULL
Also fixes #642466.
2011-02-23 14:33:40 +01:00
Mark Nauwelaerts
102b4feddf playsink: undo state change side effect on error way out
... to avoid subsequent cleanup disposing an element not in NULL state.
2011-02-23 14:33:35 +01:00
Mark Nauwelaerts
948e4d50a6 playsink: avoid crashing on the way out when needed chain missing 2011-02-23 10:33:44 +01:00
Sebastian Dröge
0e3c32ac72 playbin2: If a sink claims to support ANY caps assume that it only supports the usual raw formats
This should be changed again in 0.11, if a sink really claims to support ANY
caps it should support everything or provide correct caps.
2011-02-18 17:29:07 +01:00
Sebastian Dröge
2fc70442a7 playbin2: Use gst_pad_accept_caps() instead of intersecting with the getcaps caps
This might be faster and more accurate in some cases to detect if a
sink supports a format and autoplugging can be stopped.
2011-02-18 14:04:38 +01:00
Sebastian Dröge
09750a0132 uridecodebin: Add default handler for autoplug-select
uridecodebin proxies this signal and only the first signal handler
will ever be called from decodebin2, which is uridecodebin's proxy
signal handler.
2011-02-18 12:06:30 +01:00
Sebastian Dröge
91122e4efc uridecodebin: Return NULL from the default autoplug-sort handler
...instead of copying the array. Returning NULL will result
in the original factories array to be used and prevents a useless
array copy in most use cases.
2011-02-18 12:02:18 +01:00
Sebastian Dröge
2a6602d994 decodebin2: Return NULL from the default autoplug-sort handler
...instead of copying the array. Returning NULL will result
in the original factories array to be used and prevents a useless
array copy in most use cases.
2011-02-18 12:01:05 +01:00
Sebastian Dröge
da4b5bf9f9 uridecodebin: Update autoplug-* signal docs from decodebin2
uridecodebin proxies these signals.
2011-02-18 12:00:34 +01:00
Sebastian Dröge
ef5f73206d decodebin2: Update documentation of the autoplug-* signals
Add notes about the behaviour if multiple signal handlers are connected.
For most autoplug-* signals only the first signal handler will ever
be invoked.

Also add to the autoplug-sort docs that the signal handler can return NULL
to specify that the order should change and other handlers get the chance
to sort the array.
2011-02-18 11:58:44 +01:00
Sebastian Dröge
785f35a48e decodebin2: Keep the original factory list if the sort signal handlers returned NULL 2011-02-18 11:57:12 +01:00
tskd2@yahoo.co.jp
0641eabeb2 uridecodebin: expose "autoplug-sort" signal
It is a proxy of the decodebin2's one, and was missing
in the previous code.

See bug #642433.
2011-02-18 11:17:11 +01:00
Sebastian Dröge
1351597381 playbin2: Use a recursive mutex for the playbin lock
This lock is taken when activating a group, which could result in
calling the autoplug-continue callback, which also needs this lock
to access the sinks.

See bug #642174.
2011-02-18 10:57:40 +01:00
Sebastian Dröge
6ca5bb72a4 decodebin2: Disconnect signal handlers when removing a failed element
This prevents crashes later if one of the signals is emitted after the
element was removed from decodebin2 already, which can happen in discoverer.
2011-02-18 09:44:49 +01:00
Sebastian Dröge
140dca43f3 playbin2: Optimize autoplug-continue handler a bit
Don't build merge the caps of all sinks but check them one-by-one
until one supports the caps. Also get reffed caps from the sinkpads
instead of a writable copy and add debug output if a sink claims to
support ANY caps.
2011-02-15 17:46:22 +01:00
Akihiro Tsukada
555e338008 playbin2: Fix handling of non-raw custom sinks
When autoplugging elements in decodebin2, check if
the caps are supported by one of the sink before
continuing autoplugging.

Fixes bug #642174.
2011-02-15 17:24:28 +01:00
Sebastian Dröge
fbf9729795 decodebin2: Don't leak elements that fail to go to PAUSED after being autoplugged
Fixes bug #642381.
2011-02-15 17:05:42 +01:00
Stefan Kost
fe59f50468 decodebin2: caps can be NULL
Don't use and unref NULL caps.
2011-02-08 12:32:23 +02:00
Mark Nauwelaerts
2c017d2a70 uridecodebin: fix copy-and-paste typo in property docs 2011-02-02 15:39:19 +01:00
Wim Taymans
1fb7c7e5dc uridecodebin: also add https to buffer protocols
HTTPS also needs buffering.
2011-01-31 10:34:44 +01:00
Stefan Kost
69436bb8a6 decodebin2: add comment and whitespace trimming 2011-01-25 18:03:58 +02:00
Tim-Philipp Müller
dcd4222716 playbin2: use input-selector from core instead of internal copy 2010-12-31 12:14:22 +00:00
Vincent Penquerc'h
f221466099 playbin2: delay stream-changed messages
https://bugzilla.gnome.org/show_bug.cgi?id=637586
2010-12-21 17:42:58 +01:00
Sebastian Dröge
09ff04a00a decodebin2: Deprecate new-decoded-pad and removed-decoded-pad signals
They're really the same as pad-added and pad-removed from GstElement
and it doesn't make sense to have two signals for the same thing.
2010-12-11 17:18:49 +01:00
Sebastian Dröge
42dee942d4 decodebin2: Emit "remove-decoded-pad" signal when pads are removed from decodebin2
Fixes bug #636198.
2010-12-11 17:15:28 +01:00
Wim Taymans
f22687bacc use _object_ref_sink() when we can 2010-12-07 11:31:30 +01:00
Stefan Kost
95b259f9c9 playbin2: add some logging for failure case 2010-12-02 23:04:51 +02:00
Stefan Kost
baa2fbbb68 inputselector: log times in human readable form 2010-12-02 23:04:51 +02:00
Stefan Kost
7f787249bb inputselector: more G_PARAM_STATIC_STRINGS use 2010-12-02 23:04:51 +02:00
Stefan Kost
3b35063ceb inputselector: move reoccuring logs to LOG and remove a double info
Less debug spew in DEBUG category. No need to log pad again if we use
GST_LOG_OBJECT(pad,...).
2010-12-02 23:04:51 +02:00
Sebastian Dröge
66ce6200a8 playsink: gen_video_chain() always returns a bin, no need to check for that 2010-12-02 19:04:28 +01:00
Sebastian Dröge
92133f7ce4 streamsynchronizer: If we get EOS for an unknown stream just do nothing
instead of dereferencing NULL pointers. This can happen if the stream
was just removed from the streamsynchronizer in a bad time.
2010-12-02 19:04:28 +01:00
Sebastian Dröge
fe856a3f7c playsink: gen_video_deinterlace_chain() always returns a bin, no need to check that 2010-12-02 19:04:28 +01:00
Stefan Kost
7b312c5980 uridecodebin: disconnect signal handlers before disposing 2010-11-24 17:53:42 +02:00
Tim-Philipp Müller
1bfefc50af docs: improve decodebin2 docs a little
Mention that new pads may be created even after no-more-pads.

https://bugzilla.gnome.org/show_bug.cgi?id=634584
2010-11-22 00:54:35 +00:00
Tim-Philipp Müller
8a423f8f00 decodebin: fix one more pad template ref leak 2010-11-18 00:33:22 +00:00
Harri Mähönen
7c5e39664e *decodebin*: don't leak pad templates set on ghostpads
https://bugzilla.gnome.org/show_bug.cgi?id=635067
2010-11-18 00:11:41 +00:00
Tim-Philipp Müller
8f039997f0 playbin2: disable streamsynchronizer magic for this release
Some things aren't quite right yet and cause problems (0-sized buffers
with PREROLL flag set cause crashes in elements that don't expect those;
getting pipeline back to preroll/playing again when audio/video streams
have different lengths and a seek past the end of one of the stream
happens doesn't always work, etc.). Needs further investigation in the
next cycle.

https://bugzilla.gnome.org/show_bug.cgi?id=633700
https://bugzilla.gnome.org/show_bug.cgi?id=634699
2010-11-17 01:01:03 +00:00
Jan Schmidt
ee303c441d playsink: Fix subpicture overlay when deinterlacing disabled.
Fix a bug when reconfiguring the playsink where the subpicture
stream is broken by attempting to connect it through
streamsynchroniser and second time.
2010-10-28 23:15:43 +01:00
Edward Hervey
a5752d8ea7 decodebin2: Don't add non prerolled stream to topology
If a final stream didn't preroll, don't add it to the topology since
it doesn't give any information at all.

https://bugzilla.gnome.org/show_bug.cgi?id=632988
2010-10-24 16:18:17 +02:00
Mark Nauwelaerts
9d0fefc617 uridecodebin: workaround internal decodebin2 failing state change
Fixes #632656.
2010-10-21 19:07:24 +02:00
Stefan Kost
2a00fefd2a *decodebin*: set pad-templates on ghostpads
This makes calling gst_pad_get_pad_template() work.
2010-10-13 23:30:55 +03:00
Stefan Kost
83c14483ed various: add a missing G_PARAM_STATIC_STRINGS flag to object properties 2010-10-13 16:13:31 +03:00
Tim-Philipp Müller
8d29594491 decodebin2: declare decodebin2 stable, deprecate the old decodebin
https://bugzilla.gnome.org/show_bug.cgi?id=624949
2010-10-13 13:05:12 +01:00
Tim-Philipp Müller
8effe1e5ba playbin2: declare stable, deprecate the old playbin
https://bugzilla.gnome.org/show_bug.cgi?id=624949
2010-10-13 12:55:31 +01:00
Sebastian Dröge
491b7af1fa uridecodebin: Set GST_ELEMENT_IS_SOURCE flag
uridecodebin behaves like a source, let's mark it as a source
2010-10-11 14:31:05 +02:00
Thiago Santos
6d8cb1f42d streamsynchronizer: Do not advance segment starts beyond stop times
Advance stop times too when they are getting higher than the
stop time of segments, avoiding assertions.

The stop time has to be advanced too so that running time keep in sync
for gapless mode.

https://bugzilla.gnome.org/show_bug.cgi?id=631312
2010-10-07 11:20:48 -03:00
Edward Hervey
b8dea19bbd decodebin2: Don't post async-done when not needed
Where it was previously located, we would get async-done for the first
unknown-type, even if other valid streams would appear afterwards.
decode_bin_expose() will take care of posting async-done when the group
is exposed.

But we still want to post it in case the typefinding returned an unknown
type, in which case we will post it after posting an error.

These two changes ensure we do as much as possible before posting async-done.
2010-09-29 18:59:16 +02:00
Edward Hervey
75b522dacf decodebin2: Actually dispose the unused ghostpads 2010-09-15 14:17:58 +02:00
Edward Hervey
168aceb3da playback: Switch to using gst_video_convert_frame
https://bugzilla.gnome.org/show_bug.cgi?id=629157
2010-09-14 08:42:43 +02:00
Mark Nauwelaerts
60cad9f007 decodebin2: prevent another race with shutdown state change 2010-09-13 10:06:13 +02:00
Stefan Kost
c45b9d4aef playback: ref the selector pad class inside input-selector
Minimizes the delta to original element in -bad and allows us to keep the
type static.
2010-09-06 11:44:17 +03:00
Edward Hervey
9e0358930d playback: Switch to gstfactorylist from core
https://bugzilla.gnome.org/show_bug.cgi?id=626181
2010-09-03 19:31:52 +02:00
Edward Hervey
e75e7dfa80 playback: Set queues silent property to TRUE
We don't use the queue signals within playsink.
2010-08-31 10:12:54 +02:00
Sebastian Dröge
c591b98864 uridecodebin: Only enable progressive downloading if the upstream duration in bytes is known
Otherwise we might try to enable it for live streams, where this would
cause playback to fail completely.

Fixes bug #628028.
2010-08-27 20:45:19 +02:00
Edward Hervey
8b4bea5f6a playback: Delay usage of GstFactoryList
By delaying it to when it's actually needed, we speed things up a bit
since some elements might have been added/removed in between.

https://bugzilla.gnome.org/show_bug.cgi?id=626718
2010-08-13 17:00:05 +02:00
Robert Swain
268270d35e playbin2: uridecodebin: add property to configure ring buffer size 2010-08-13 16:48:22 +02:00
Mark Nauwelaerts
9975a2d7b4 streamsynchronizer: prevent deadlock with _chain when deactivating pad
Fixes #626581.
2010-08-12 12:07:34 +02:00
Stefan Kost
596d148390 playback: bad bad editor, readd missing line to fix the build 2010-08-12 12:51:35 +03:00
Mark Nauwelaerts
c1a705acbc streamsynchronizer: send preroll buffer when delaying preroll eos
That is, if eos is received which will not be forwarded, and the stream
has not yet seen any data, then send a buffer to preroll downstream
(which might otherwise be accomplished by the eos event).
2010-08-12 10:52:59 +02:00
Mark Nauwelaerts
2379e96bbc playsink: remove some heuristic in chain configuration code
.. since queues are now inserted unconditionally.
2010-08-12 10:52:59 +02:00
Mark Nauwelaerts
6c5b437118 playbin2/playsink: update subtitle handling for streamsynchronizer
Streamsynchronizer excepts to see stream-changed msg for all streams, but to
arrange for this, video and subtitle streams need to be decoupled by means
of queues (due to pad blocks that may occur).

Fixes #626463.
2010-08-12 10:52:59 +02:00
Mark Nauwelaerts
ff8bdcfe94 playsink: always have a queue in chain head to aid streamsynchronizer
Specifically, as the latter may have one thread pushing EOS to several streams,
that needs to be decoupled into various thread to prevent preroll hanging
problems.
2010-08-12 10:52:58 +02:00
Mark Nauwelaerts
385446bc90 streamsynchronizer: drop lock when pushing eos downstream
... to prevent deadlock (e.g. upon seek) when downstream waits in preroll.
2010-08-12 10:52:58 +02:00
Mark Nauwelaerts
837d524ef0 streamsynchronizer: clear stream eos state on FLUSH and new stream 2010-08-12 10:52:58 +02:00
Mark Nauwelaerts
1a40681f53 playsink: set READY sinks to NULL before freeing chain upon failure 2010-08-12 10:52:58 +02:00
Stefan Kost
23cadbae94 playback: move tests from plugin-dir to tests/examples/playback 2010-08-12 10:52:34 +03:00
Wim Taymans
908afd4b15 decodebin2: use more efficient way of getting caps
When inspecting the caps of a pad, try to get the pad _CAPS first before calling
the getcaps function.
2010-08-04 10:33:31 +02:00
Tim-Philipp Müller
818f395402 streamsynchronizer: fix printf format compiler warnings
Make OSX build bot happy.
2010-07-26 20:25:55 +02:00
Sebastian Dröge
175aae9e85 streamsynchronizer: Delay EOS events until all streams are EOS
This fixes a race condition in playbin2's gapless mode, where the
EOS of other streams might arrive in the sinks before the last stream
ends and the switch to the new track happens. The EOS sinks won't
accept any new data then and playback stops.

To prevent this, delay all EOS events until all streams are EOS
and advance the sinks of the EOS streams by filler newsegment
events if necessary.

Fixes bug #625118.
2010-07-24 18:17:43 +02:00
Sebastian Dröge
ec3c19189d streamsynchronizer: Fix another deadlock when going PAUSED->READY while streams are waiting for the GCond 2010-07-22 09:13:48 +02:00
Edward Hervey
b93edac480 playsink: Switch to faster pad linking methods
Logic for choice of GST_PAD_LINK_CHECK_* is as follows:
* Where return of pad_link wasn't checked before : NOTHING
* Where linking is between known compatible elements : NOTHING
* All other cases : TEMPLATE_CAPS

Slashes down playsink reconfigure by up to 50% cpu time.
2010-07-20 21:05:45 +02:00
Sebastian Dröge
c199a560a9 playsink: Set add-borders=true on the videoscale instances
This makes sure that we always keep the display aspect ratio and
add black borders if necessary, which is usually something you want
for viewing a video.
2010-07-19 15:59:17 +02:00
Sebastian Dröge
a16024d9fb playsink/streamsynchronizer: Remove and deactivate pads after calling the change_state function of the parent class
Fixes some deadlocks.
2010-07-16 18:51:35 +02:00
Sebastian Dröge
1605bef4b9 streamsynchronizer: Drop DISCONT flag on first buffer for new streams
Also reset stream state when going back to READY and on flush-stop.
2010-07-16 18:25:38 +02:00
Sebastian Dröge
405b47a79a playsink: Fix gapless playback in many non-simple scenarios
Before gapless playback failed when switching between audio-only,
video-only and audio-video files, when choosing different clocks
and when the different streams had different durations.

This is now handled by a helper element, which keeps track of the
running times of all streams and synchronizes them.

Fixes bug #602437.
2010-07-16 17:40:46 +02:00
Sebastian Dröge
f835533cb4 playbin2: Remove QOS event adjustments for gapless playback mode 2010-07-16 17:40:46 +02:00
Mark Nauwelaerts
5e7ff51d19 playsink: use proper error message code for failing state change 2010-07-16 13:26:26 +02:00
Sebastian Dröge
8bd37ab995 playbin2: Disconnect and destroy uridecodebins when going from READY to NULL
Fixes spurious errors that happen after an error and playing a working
stream afterwards or signals that are emitted for non-active groups.

Fixes bug #624266.
2010-07-14 15:11:17 +02:00
Sebastian Dröge
115e503bdf Revert "playbin2: Don't put "raw" subtitle types in the raw caps for decodebin2"
This reverts commit 9d7538247f.

If the DVD subpicture caps are not part of the raw caps, uridecodebin
doesn't qualify resindvdbin as raw source and plugs decodebins, which
causes broken DVD playback because of bugs elsewhere.

This change was originally added to only expose supported, raw subtitles,
e.g. if the subtitle sink did not support DVD subpictures but a converter
to some supported format exists. It's not very important right now because
we have nothing (that is autoplugged) to convert from plaintext/pango-markup
or DVD subpictures to something else.

Fixes bug #623583.
2010-07-06 09:47:45 +02:00
Sebastian Dröge
bc0eefaead playbin2: If setup of the source element fails in READY->PAUSED deactive the current group
Otherwise the uridecodebin will be still a child of playbin2 and
its signals will still be connected. In future state changes this
will then emit unrelated signals that will confuse playbin2 or,
even worse, cause crashes and assertions.

Fixes bug #623318.
2010-07-01 21:29:14 +02:00
Edward Hervey
ec637580a8 decodebin2: Properly clean DecodeChain after errors.
If an error happens, the PAUSED state will never be reached. If an
application re-uses decodebin2 (like totem) where one would normally
set to READY between each file, the cleanup that normally happens in
the PAUSED=>READY codepath will never be called, resulting in the
following file to re-use the previous demuxer/decoder/...

https://bugzilla.gnome.org/show_bug.cgi?id=622807
2010-06-26 17:57:24 +02:00
Wim Taymans
7379202cca playsink: clear ts-offset pointer
We need to clear the pointer to our ts-offset element when we destroy the video
chain elements to make sure nobody derefs it to invalid memory afterwards.
2010-06-23 12:10:32 +02:00
Edward Hervey
97e14fda28 playsink: Reset ts_offset field when freeing chain
Otherwise we would end up with a bogus ->audiochain->ts_offset field
which would cause segfaults/assertions when trying to modify the
'ts-offset' property in update_av_offset().

Was easy to trigger when using a list of audio+video files mixed with
video-only files in totem.
2010-06-23 10:16:07 +02:00
Wim Taymans
6d2621d02c decodebin2: improve autoplugging
Use the pad caps when they are available to continue the autoplugging. If the
pad caps are set, they are fixed and then we can directly continue autoplugging.
2010-06-16 19:17:05 +02:00
Prahal
2cb7cfab19 decodebin2: use accumulator for autoplug-sort
Use an accumulator for the autoplug-sort signal so that we can stop the emission
when a signal handler produced a valid result. This avoids the object handler
to overwrite the results from user signals.

Fixes #621161
2010-06-14 11:19:10 +02:00
Sebastian Dröge
dc110b3b37 uridecodebin: Allow video/webm for progressive downloading 2010-06-12 16:16:37 +02:00
Sebastian Dröge
2b9670958d playbin2: If the text-sink claims to support ANY caps assume it only support raw plaintext subtitles
Fixes bug #621071.
2010-06-10 13:06:54 +02:00
Wim Taymans
ecc9a28152 playbin2: add av-offset property
Add av-offset property to control the audio and video sync offset. This can be
used to to manually correct badly synced streams.

See #620529
2010-06-07 14:38:42 +02:00