Commit graph

200 commits

Author SHA1 Message Date
Thibault Saunier
3e49850e6d timeline: Add API to find a layer with a specific priority in a timeline
Summary:
API:
  * ges_timeline_get_layer

Test Plan: Nan

Reviewers: mathieu.duponchelle
2015-03-18 20:36:38 +01:00
Thibault Saunier
f470222f3d Revert "ges: Move the notion of children properties to GESTimelineElement"
I got some trouble with

  arc land

and I wanted to push the 3 commit coming after this revert as 3
different commits but they ended up being all squash into one single
commit, which is clearly not cool for later bisecting and blaming.
Reverting that commit and re pushing those 3 commits as they were
supposed to be.

This reverts commit 9fe15ef435.
2015-03-18 20:33:48 +01:00
Thibault Saunier
9fe15ef435 ges: Move the notion of children properties to GESTimelineElement
Summary:
Deprecate the old GESTrackElement children property handling API.

New APIs:
  * ges_timeline_element_list_children_properties
  * ges_timeline_element_lookup_child
  * ges_timeline_element_get_child_property_by_pspec
  * ges_timeline_element_get_child_property_valist
  * ges_timeline_element_get_child_properties
  * ges_timeline_element_set_child_property_valist
  * ges_timeline_element_set_child_property_by_pspec
  * ges_timeline_element_set_child_properties
  * ges_timeline_element_set_child_property
  * ges_timeline_element_get_child_property
  * ges_timeline_element_add_child_property
  * ges_timeline_element_remove_child_property

Deprecated APIs:
  * ges_track_element_list_children_properties
  * ges_track_element_lookup_child
  * ges_track_element_get_child_property_by_pspec
  * ges_track_element_get_child_property_valist
  * ges_track_element_get_child_properties
  * ges_track_element_set_child_property_valist
  * ges_track_element_set_child_property_by_pspec
  * ges_track_element_set_child_properties
  * ges_track_element_set_child_property
  * ges_track_element_get_child_property
  * ges_track_element_add_child_property

Reviewers: Mathieu_Du

Reviewed By: Mathieu_Du

Differential Revision: http://phabricator.freedesktop.org/D40
2015-03-18 20:23:55 +01:00
Luis de Bethencourt
8f79ee9230 ges: merge MIN() and MAX() into CLAMP()
Merge the usage of MIN() and MAX() into one CLAMP() function.

CID #1265770
2015-01-26 17:47:55 +00:00
Thibault Saunier
97c56da95b timeline: Add a method to easily check if a timeline is empty
API:
    + ges_timeline_is_empty
2014-12-06 10:34:19 +01:00
Thibault Saunier
78913931b2 ges: Recompute Group priority when one of its clip.layer change priority
And add a unit test for that case where it was previously failing
2014-12-06 10:34:18 +01:00
Thibault Saunier
5665e3abb1 xml-formatter: Serialize groups
They were not serialized until now.

That implies several changes:

* Override GESTimelineElement [start, inpoint, duration] properties in
  GESGroup to ensure that those properties are not serialized as they
  should not be.

* Rename GESBaseXmlContainer->clips field to
  GESBaseXmlContainer->containers as the hashtable now contains Groups

https://bugzilla.gnome.org/show_bug.cgi?id=709148
2014-11-10 16:22:43 +01:00
Mathieu Duponchelle
ee2b3f7d24 pipeline: connect tracks when added, not only on state change.
+ ghost track src pad before calling track added so that
  pipeline has a pad to link.
+ Remove silly comment.
2014-11-10 16:22:42 +01:00
Mathieu Duponchelle
3035bcb405 timeline: connect_after to layer.object_added.
We want the user provided signal handlers to be called before
we add track elements.
2014-11-10 16:22:41 +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
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
b752eea818 timeline: Add a method to retrieve a pad from a track
It allows user to easily get the proxied pad from a track.

API:
  + ges_timeline_get_pad_for_track
2014-10-31 11:58:07 +01:00
Thibault Saunier
b9c6606e89 ges: Use the new GNL element message feature to notify async operations 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
565591e9ee timeline: handle async start 2014-10-31 11:58:07 +01:00
Tim-Philipp Müller
29bac48934 timeline: fix mutex and all_elements hash table leaks 2014-10-26 20:35:20 +00:00
Tim-Philipp Müller
44724f8d6d timeline: free tracks obtained via select-tracks-for-object signal 2014-10-26 20:33:50 +00:00
Tim-Philipp Müller
30d879f357 timeline: free track elements list 2014-10-26 20:32:41 +00:00
Thibault Saunier
2db5368b9d tests: Check ges_clip_set_position behaviour
+ Minor fix to handle properly the feature when clip is not in any layer

https://bugzilla.gnome.org/show_bug.cgi?id=731248
2014-06-09 16:10:41 +02:00
Thibault Saunier
19df708207 ges: Avoid GESTimelineElement naming conflicts
When users (can be formatters) set timeline element names in the
default 'namespace' we need to update our counter to avoid setting
twice the same name on TimelineElements so afterward there is no
problem adding them in the GESTimeline

+ add a testcase to check that new code and fix leaks on the
existing testcases.

+ Sensibly enhance debugs
2014-05-14 22:29:44 +02:00
Thibault Saunier
0cf5d3df13 ges: Remove useless pointer assignement
COVERITY CID: 1139442
2014-05-10 22:33:15 +02:00
Thibault Saunier
8015359f16 ges: remove comparison of unsigned inferior to 0
COVERITY CID 1139769
2014-05-10 22:14:34 +02:00
Thibault Saunier
1adb9a0030 Add a notion of 'name' in GESTimelineElement
https://bugzilla.gnome.org/show_bug.cgi?id=729382
2014-05-02 16:27:25 +02:00
Christoph Reiter
a66e674649 Include class related section documentation in the gir file.
g-ir-scanner includes section docs as class/interface docs if the section name is equal to the lowercase type name.
Since all the documentation is in section blocks, rename them to match the type names.

https://bugzilla.gnome.org/show_bug.cgi?id=727776
2014-04-07 22:13:25 +02:00
Thibault Saunier
e9ecfef808 timeline: Make sure not to add 2 times a TrackElement in the same track
Without that, if a UriClip contains several tracks of a same type (ie.
video or audio...), we would add all the TrackElements to each track
making everything failling as we end up with several GNL sources at
the same position with the same priority.
2014-02-18 11:02:49 +01:00
Thibault Saunier
b774783af8 ges: Remove versionning infos now that we start on the 1.X API serie
They are now meaningless, all the current symbols are the basic
ones for the 1.X serie.
2013-12-27 10:14:19 +01:00
Thibault Saunier
289b04f170 ges: Reimplement 'always create a project to back a timeline'
Keeping it simple, and making sure everything is synchronous
2013-11-28 15:47:50 -03:00
Thibault Saunier
6e9e9338ae Revert "ges: Always create a project to back a timeline"
This reverts commit 59d83f1a93.

Conflicts:
	tests/check/ges/backgroundsource.c
	tests/check/ges/effects.c
	tests/check/ges/overlays.c
	tests/check/ges/simplelayer.c
	tests/check/ges/text_properties.c
	tests/check/ges/titles.c
2013-11-28 15:12:15 -03:00
Thibault Saunier
99a36b2b69 timeline: Add all assets of the clip added to the timeline to the project 2013-11-25 15:18:24 -03:00
Lubosz Sarnecki
7b1df27c86 gir: fix warnings 2013-11-22 17:50:27 -03:00
Thibault Saunier
59d83f1a93 ges: Always create a project to back a timeline
And fix all the tests as we need to wait for the project to be loaded
to check the reference count of the timeline (as we keep a ref on the
timeline in project to later emit "loaded" on idle).
2013-11-09 10:35:12 -03:00
Mathieu Duponchelle
fb6aabfe4d timeline: pass the correct argument to disconnect_by_func.
fixes #709205
2013-10-02 21:17:56 +02:00
Thibault Saunier
002977cd85 timeline: Add a signal to know when it is commited 2013-09-28 15:42:20 +02:00
Thibault Saunier
9c77d52f30 timeline: Make sure we do not move object when only trimming
We were missing a few checks so that we do not move objects when their
duration is equal to the max duration, or 0
2013-09-08 19:19:24 -03:00
Thibault Saunier
c47c115dd1 timeline: Avoid setting duration > max_duration when rippling
We should use the trimming method to set duration to make sure to avoid
going over the max duration.

Also avoid computing when setting duration to the same old value.
2013-09-07 12:59:17 -04:00
Thibault Saunier
c4c26f8748 ges: Handle trimming in groups
This was broken, clips where moving all around, make it behave properly.
2013-09-07 12:55:58 -04:00
Thibault Saunier
c74aee5fdc timeline: Make ripple start be trimming
This is a more natural behaviour as a user instead of doing nothing at
all.
2013-09-07 02:10:12 -04:00
Thibault Saunier
f7ac18c138 timeline: No autotrans between elements in same toplevel container
This makes no sense, we ended up creating/removing tons of transition
while moving groups
2013-08-30 18:47:24 -04:00
Mathieu Duponchelle
09405c0080 timeline: when there are no objects anymore, set duration to 0. 2013-08-21 08:06:59 -04:00
Thibault Saunier
0671b69d34 timeline: Add support for group-id in the stream-start event 2013-08-02 14:47:24 +02:00
Thibault Saunier
5c8e2737b4 timeline: Add methods to get and set the snapping distance 2013-07-24 22:37:06 -04:00
Mathieu Duponchelle
4addde8d74 timeline: create_transitions_on_layer *before* actually commiting
Everything need to be in place before commiting, otherwize it makes no
sense at all.
2013-07-12 18:17:00 -04:00
Mathieu Duponchelle
96204ac1d2 container: Add a 'recursive' argument to the get_children method
API:
  - ges_container_get_children (GESContainer *container);
  + ges_container_get_children (GESContainer *container, gboolean recurse);
2013-07-10 23:25:12 -04:00
Thibault Saunier
b0202ed22b timeline: Append missing layers when moving groups between layers
This was a missing feature of the newly added groups
2013-07-09 21:30:59 -04:00
Thibault Saunier
a933d9540d ges: Implement a GESGroup class, subclass of GESContainer
The GESGroup class is used to group various GESContainer
together, it can contain either GESClips or GESGroup or both.
2013-07-09 16:47:00 -04:00
Thibault Saunier
55b7628382 ges: Make space in the GESTracks to be able to add mixing elements later
And update the tests
2013-06-23 18:28:52 -04:00
Thibault Saunier
b57f55121b timeline-element: Make it possible to reset the timeline property to NULL
+ Add some debug symbol
2013-06-23 17:39:05 -04:00
Thibault Saunier
f6038e3ad2 ges: Port to the new commit based API in GNL
The GNL API changed to go from a model where user could
enable/disable updates in the composition, which leaded to races
in many places, to a model where any positioning change in the
composition is not directly done but 'cached' and then the user
has to commit those changes so they become effective in the media
processing stack.

The new API in GES is pretty similare and is basically copy
pasting this new design.

We still need to see if in some context it would make sense to add
a mode where we would commit any changes ourself at the end of our
operation for basic use cases.

Removed APIs:
  ges_timeline_enable_update
  ges_timeline_is_updating
  ges_track_enable_update
  ges_track_is_updating

New APIs:
  ges_track_commit
  ges_timeline_commit
2013-06-23 16:33:33 -04:00
Thibault Saunier
284648e536 timeline: Sync track enable_update property with parent
When we add a track to a timeline, we want it "enable update" property
to be set to the timeline's
2013-06-12 11:16:37 -04:00
Thibault Saunier
7e121ff167 ges: Protect from Gst dynamic callbacks
The pad-added and no-more-pad signal can be emited from any thread
so we have to protect our code from that
2013-05-29 17:14:31 -04:00