Commit graph

21 commits

Author SHA1 Message Date
Thibault Saunier
4f70e5eb88 nlecomposition: Do not fail when removing/adding child without commiting
Summary:
We use to end up removing the nleobject when the following case happened:

 * add an object
 * remove that object
 * re add the object
 * commit the composition

Reviewers: Mathieu_Du

Differential Revision: http://phabricator.freedesktop.org/D193
2015-05-20 09:53:19 +02:00
Mathieu Duponchelle
506662e2dc nleobject: It is wrong to update object->stop in set_property.
Summary: It must only be done when the object is commited.
We can do that in constructed though, as the changes will
anyway be commited when the object is added to a composition.

Also update the tests, as we set properties spearately then
check the stop, we can commit the source at its creation without
removing meaning from the tests.

Reviewers: thiblahute

Differential Revision: http://phabricator.freedesktop.org/D84
2015-04-09 15:40:32 +02:00
Thibault Saunier
f192ba3192 nlecomposition: Properly protect the children task 2015-02-06 10:06:05 +01:00
Mathieu Duponchelle
1bfe0b7ef3 Cleanly handle removing the last object in a composition
The strategy here is to seek at the new end of the composition. And in
GES we always add a 1ns long gap at the end of the tracks so that all
track have the exact same duration, and we have black frames when the
timeline is empty
2015-02-03 12:03:33 +01:00
Luis de Bethencourt
1efe0639de ges: remove useless gpointer variable
gpointer useless is indeed useless since we can use GST_DEBUG_REGISTER_FUNCPTR
to avoid having to store the return of the GST_DEBUG_FUNCPTR registration.

CID #1265771
2015-01-26 18:25:02 +00:00
Thibault Saunier
523e279e91 nlecomposition: Minor debug enhancements 2014-12-06 10:34:17 +01:00
Thibault Saunier
6367c96d7d nlecomposition: Add a 'query-position' signal
In order to get the precise position of the pipeline, the only
way is to ask the 'application' to query the pipeline position and
use it.
2014-12-06 10:34:16 +01:00
Mathieu Duponchelle
3f97397b4f nle: Downgrade some INFO to DEBUG.
+ makes it more pleasant to read logs in info.
2014-11-10 16:22:40 +01:00
Thibault Saunier
79230eef1f nle: Handle sending SEEK event recursively to our children
Instead of relying on it being implemented in core (as it is currently
not!)
2014-11-10 16:22:40 +01:00
Mathieu Duponchelle
19ee23cdcc nlecomposition: update base time before seeking current stack.
There could be a race where the new segments were pushed after
a seek on some / all pads before the operation had had its basetime
updated, and thus incoming segments were tweaked wrongly.

Reproducible with 3 clips composited and multiple seeks,
FIXME hard to validate.
2014-11-10 16:22:39 +01:00
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
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
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
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
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
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