Commit graph

2258 commits

Author SHA1 Message Date
Thibault Saunier
6a371b308b nlecomposition: Fix the get_current_position method 2014-11-10 16:22:38 +01:00
Thibault Saunier
d419bccf4f nlecomposition: Wait for a buffer from the new segment to restart task
Avoiding races where we would launch a seek right after a FLUSH_STOP and
before we get a Buffer which would possibly lead to ERROR message when upstream
elements try to push a buffer and check_sticky fails because downstream
is flushing.
2014-11-10 16:22:37 +01:00
Thibault Saunier
578364ce41 nlecomposition: Do useless thing so that the compiler doesn't warn us!
Otherwize we get a gcc warning about useless statements.
2014-11-10 16:22:37 +01:00
Thibault Saunier
2d3769f079 tools:ges-launch: Do not set pipeline state before the timeline is ready
When we are loading a project
2014-11-10 16:22:37 +01:00
Thibault Saunier
2fb33d69f8 nlecomposition: Update start stop and duration on initialization
So that the composition is usable right after the initialization
2014-10-31 11:58:12 +01:00
Thibault Saunier
0d54d796de ges: Avoid to always commit when a project is loaded
In case we are not in a PLAYING state and the project is loaded, the
only thing that should be done is to fill the gaps and this way when the
composition get to PLAYING, their initialization will be enough to get
everything on track.
2014-10-31 11:58:12 +01:00
Thibault Saunier
57eef236b5 tests: Use the new gst_check_objects_destroyed_on_unref function 2014-10-31 11:58:12 +01:00
Thibault Saunier
95223fd46b Start taking advantage of the fact that NLE is in the same three as GES! 2014-10-31 11:58:12 +01:00
Thibault Saunier
50cf1fb5fe nlecomposition: Fix several leaks
* In the action closure invokation we were alway leaking the composition.
* gst_bin_add will actually take an extra ref since we already  gst_object_ref_sink so we
own the object, other call to that method will increase the refcount which means we do
not need to pass an extra ref to the bin.
* We want to ref_sink right when the object is added to the composition, making things
cleaner and simpler to follow in the tests.
2014-10-31 11:58:12 +01:00
Thibault Saunier
3e79e28213 nlecomposition: Activate the composition ghostpad to flush downstream
Since commit 060b16ac75
"pad: don't accept flush-stop on inactive pads" in -core, the flush_stop event will not be
fowarded downstream in case the pad is not activated. In our case the element is in
READY state, so pads are deactivated. In that commit we simply make sure that the
event can be fowarded downstream
2014-10-31 11:58:12 +01:00
Thibault Saunier
02665dae91 nlecomposition: Restart the main task on FLUSH_STOP
It means stop using a dedicated probe to restart task so that the main probe does not
drop the FLUSH_STOP event before we have a chance to restart the task. (and this is
for sure cleaner/and simpler to read).
2014-10-31 11:58:12 +01:00
Thibault Saunier
37f50193fd nle:source: Protect the probeid field with the GST_OBJECT_LOCK
Avoiding races where we try to remove a probe on an already destroyed pad.
2014-10-31 11:58:12 +01:00
Thibault Saunier
03c284abb6 framepositionner: Add a weak pointer to the track_source
Avoiding assertions when the object is destroyed.
2014-10-31 11:58:12 +01:00
Mathieu Duponchelle
e31d0554c8 nle: Seek gnlsource when prerolled only
Instead of implementing seek on ready all around GStreamer, just
seek in PAUSED, when the source gets 'prerolled'.
2014-10-31 11:58:12 +01:00
Thibault Saunier
6bd27667eb ges-track: Do not set removed object state
It is the composition to handle
2014-10-31 11:58:12 +01:00
Thibault Saunier
8913c14c58 nle: Stop using a MainContext avoiding needing one iter per source dispach
Using GClosure to handle the source handling and handle our action
ordering ourselves

https://bugzilla.gnome.org/show_bug.cgi?id=733342
2014-10-31 11:58:12 +01:00
Thibault Saunier
aa69de7514 ges: Use audiomixer instead of adder by default 2014-10-31 11:58:12 +01:00
Thibault Saunier
b3336fe26e Port to the new NLE API
Port the timeline, track and pipeline to the new NLE API where
all objects have static src pads.
2014-10-31 11:58:12 +01:00
Thibault Saunier
11f9c6e108 Cleanup import of GNL and rename gnl to nle for Non Linear Engine
Conflicts:
	ges/ges-track-element.c
	gnl/Makefile.am
	gnl/common

Conflicts:
	ges/ges-internal.h
	ges/ges-track.c
	ges/ges-utils.c
	ges/nle/.gitignore
	ges/nle/gnlmarshal.list
	ges/nle/nle.h
	ges/nle/nlecomposition.c
	ges/nle/nlecomposition.h
	ges/nle/nleghostpad.c
	ges/nle/nleghostpad.h
	ges/nle/nleobject.c
	ges/nle/nleoperation.c
	ges/nle/nleoperation.h
	ges/nle/nlesource.c
	ges/nle/nlesource.h
	ges/nle/nletypes.h
	ges/nle/nleurisource.c
	ges/nle/nleurisource.h
	gnl/Makefile.am
	gnl/gnl.c
	gnl/gnl.h
	gnl/gnl/gnl.h
	gnl/gnl/gnlcomposition.c
	gnl/gnl/gnlcomposition.h
	gnl/gnl/gnlghostpad.c
	gnl/gnl/gnlghostpad.h
	gnl/gnl/gnlmarshal.list
	gnl/gnl/gnlobject.c
	gnl/gnl/gnloperation.c
	gnl/gnl/gnloperation.h
	gnl/gnl/gnlsource.c
	gnl/gnl/gnlsource.h
	gnl/gnl/gnltypes.h
	gnl/gnl/gnlurisource.c
	gnl/gnl/gnlurisource.h
	gnl/gnlcomposition.c
	gnl/gnlcomposition.h
	gnl/gnlghostpad.c
	gnl/gnlghostpad.h
	gnl/gnlmarshal.list
	gnl/gnlobject.c
	gnl/gnlobject.h
	gnl/gnloperation.c
	gnl/gnloperation.h
	gnl/gnlsource.c
	gnl/gnlsource.h
	gnl/gnltypes.h
	gnl/gnlurisource.c
	gnl/gnlurisource.h
	gnl/tests/check/gnl/common.c
	gnl/tests/check/gnl/common.h
	gnl/tests/check/gnl/complex.c
	gnl/tests/check/gnl/gnlcomposition.c
	gnl/tests/check/gnl/gnloperation.c
	gnl/tests/check/gnl/gnlsource.c
	gnl/tests/check/gnl/seek.c
	gnl/tests/check/gnl/simple.c
	tests/check/gnl/common.c
	tests/check/gnl/common.h
	tests/check/gnl/complex.c
	tests/check/gnl/gnlcomposition.c
	tests/check/gnl/gnloperation.c
	tests/check/gnl/gnlsource.c
	tests/check/gnl/seek.c
	tests/check/gnl/simple.c
	tests/check/nle/common.c
	tests/check/nle/common.h
	tests/check/nle/complex.c
	tests/check/nle/nlecomposition.c
	tests/check/nle/nleoperation.c
	tests/check/nle/nlesource.c
	tests/check/nle/seek.c
	tests/check/nle/simple.c
2014-10-31 11:58:12 +01:00
Thibault Saunier
aa1ba05895 composition: Commit all values before initializing the pipeline 2014-10-31 11:58:12 +01:00
Mathieu Duponchelle
f5073e4e58 composition: Prevent update sources from being added after seek. 2014-10-31 11:58:12 +01:00
Mathieu Duponchelle
4dd0b6fe14 composition: only flush stop after seek was set to READY. 2014-10-31 11:58:12 +01:00
Thibault Saunier
ee54d98fe2 composition: Also ignore all messages from children tearing them to READY
At that stage elements should not be taken into account anymore. In some
spacial cases they can post ERROR messages (when trying to push sticky
events on flushing pads) on the bus. We actually do not care about those
issues at that exact point.
2014-10-31 11:58:12 +01:00
Thibault Saunier
8154a2c96f composition: Do not try to paused the task that could have been stopped
There was a race where we ended up trying to update the pipeline and
stop our children task at the exact moment where we were actually
setting its state to PAUSED. Take the composition lock and make sure
that can't happen
2014-10-31 11:58:11 +01:00
Thibault Saunier
463626ceae composition: Post messages on the bus when it updates itself
And properly set the seqnums of those messages so that the application,
parents have the exact information about what is going on and why.
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
9bd96f9770 composition: push flush events on the target. 2014-10-31 11:58:11 +01:00
Thibault Saunier
1d089e8c80 composition: No need for action signal to add and remove objects! 2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
1c083281f9 composition: we're initialized even if update_pipeline returned FALSE 2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
847360368a composition: reset base time to 0 when needed. 2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
5c1b2133a5 composition: Forward flushes on initialization 2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
494303c263 object: make the check for self commit work in a crappy way. 2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
baa7863da6 composition: use g_main_context_set_dispatches_per_iteration ()
Let's hope this gets merged ...
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
c391310539 composition: set next_eos_seqnum when we get seeked too.
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
48ed8c6d0e gnl: Rely on the GstElement to properly handle their seqnums
Actually it is not exactly thread safe to tweak them ourself at the GNL
level.

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
114d63003e composition: Always return a value in GSourceFuncs
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
ecf353e837 composition: Rename _flush_downstream to _have_to_seek_downstrean
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
bdb74c5161 source: Remove cruft code to seek sources
We now seek on ready and thus do not need to do magic trying to seek
the source as soon as possible as we now do it even sooner than soon.

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
4e84240630 composition: Do not remove all sources when stopping task
We only want to remove updates and seek, commits should be kept

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
01ee03bc1f composition: Don't send flushes downstream on pipeline update.
The code is still a bit redundant in set_current_bin_to_ready, need
to discuss.

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
ab2d2c6e4e composition: Remove locking making sure that we manipulate children in right places
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
435e807f17 composition: Avoid a race in PAUSED_TO_READY
as we were using our children list in there without locking them.

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
4c7731ede3 composition: No need to reset the composition when going to PAUSED or NULL
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
08da7d6d2e composition: Make sure we have a peer when we send flushes downstream
And avoid leaks

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
c81ee05c41 composition: Minor cleanups 2014-10-31 11:58:11 +01:00
Thibault Saunier
2660f20cab composition: Take the objects lock when reseting the composition
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
3f0f41f79f composition: Remove the reset children method
as it is all already done in _empty_bin ()

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
76bf900e82 composition: Set children caps only when they are added to the composition
No need to do it again on READY_TO_PAUSED

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
73274d8391 composition: No need to children state locked anymore
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00
Thibault Saunier
c3ba1f7351 composition: cleanup dispose / finalize
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:11 +01:00
Mathieu Duponchelle
c669477819 composition: remove children warning drop HACK.
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:11 +01:00