Commit graph

1159 commits

Author SHA1 Message Date
Thibault Saunier
9fa99df5a7 timeline-element: Add a set_parent vmethod
API:
        GESTimelineElment->set_parent vmethod
2013-09-03 20:57:31 -04:00
Simon Corsin
93de0baf96 videotransition: No need to hard set width and height anymore. 2013-09-03 20:57:31 -04:00
Simon Corsin
a93f7baed3 gstframepositionner: Install width and height properties.
+ And manage them properly.
2013-09-03 20:57:31 -04:00
Simon Corsin
7269c2b316 ges-track: Add the notion of resriction caps to GESTrack
This way we can let the user determine what he want to come out of the
track.

API:
  - ges_track_set_caps (The track caps are now construct only)
  + ges_track_set_restriction_caps
  + ges_track_get_restriction_caps
  + GESTrack.props.restriction_caps
2013-09-03 20:57:30 -04:00
Simon Corsin
a635e48d77 GES: Add GESVideoSource and GESAudioSource base classes
+ Update documentation.
  + Implements subclasses audio-uri-source and video-uri-source
2013-09-03 20:22:32 -04:00
Simon Corsin
7fcc6e4b08 testsource: Handle child properties as child properties
Makes $make check pass.
Standardizes property handling.
2013-09-03 20:12:33 -04:00
Simon Corsin
e50a86d0d9 source: Make a ges_source_create_topbin internal helper method 2013-09-03 20:10:37 -04:00
Simon Corsin
c0b6c968d8 ges-source: Move common elements handling to the base class
+ And port all the subclasses
2013-09-03 19:44:31 -04:00
Thibault Saunier
28770ce53b container: Do not forget to initialize the timeline before using it 2013-09-02 13:57:15 -04:00
Tim-Philipp Müller
73075e4637 ges-xml-formatter: use g_ascii_dtostr() instead of messing with setlocale()
Libraries shouldn't use setlocale().
2013-09-02 00:19:30 +01:00
Mathieu Duponchelle
6d70b553ad xml-formatter: set LC_NUMERIC locale before saving values.
Avoiding to save ',' instead of '.' for floats in certain locals
2013-08-31 21:29:59 -04:00
Mathieu Duponchelle
832616fb2c video-transition: Keep switch transition type simple
Also make sure there is a proper default value for transition type.
2013-08-31 13:53:16 -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
Thibault Saunier
e54ceff720 ges: Disable the Pitivi formatter
It lacks to many feature and the code is too bad, desactivation until
someone comes and fix it... The code should be removed if it never
happens
2013-08-29 18:43:21 -04:00
Mathieu Duponchelle
c527067953 ges-clip: when a child, is removed, disconnect from its notifies. 2013-08-28 14:03:14 -04:00
Thibault Saunier
54b10dcbbf trackelement: Simplify the way we handle children properties
So subclass do not have to implement a new logic all the time, but
instead can use a simple method to add properties as needed.
2013-08-27 15:33:45 -04:00
Thibault Saunier
ef8c4b4b6b clip: Remove the ges_clip_fill_track method
Its was only use by the old custom source which is dead now.

API:
    Remove ges_clip_fill_track

https://bugzilla.gnome.org/show_bug.cgi?id=706855
2013-08-27 15:33:45 -04:00
Thibault Saunier
13aeda606a ges: Remove custom clip
If you want a custom clip then you have to subclass GESClip,
This class was pre historicall and only used for testing purposes, we
have GESTestClip for that.

https://bugzilla.gnome.org/show_bug.cgi?id=706855
2013-08-27 15:33:45 -04:00
Mathieu Duponchelle
cd8955c56f trackelement: split bindings correctly. 2013-08-22 18:36:40 -04:00
Mathieu Duponchelle
01f9dbcadc trackelement: update control bindings correctly.
When duration or inpoint change, we need to remove edge control points,
and set new control points with interpolated values.
Also when duration == 0, we need to remove all control points, as otherwise
the controller will raise !is_end assertions.
It's the duty of the application to set keyframes back when duration gets
!= 0 again.
2013-08-21 08:06:59 -04:00
Mathieu Duponchelle
e9e7f0a82c container: resort children after prepending an element. 2013-08-21 08:06:59 -04:00
Mathieu Duponchelle
09405c0080 timeline: when there are no objects anymore, set duration to 0. 2013-08-21 08:06:59 -04:00
Mathieu Duponchelle
dec80f3e4d ges-audio-track: Change contructor prototype.
We return an AudioTrack.
2013-08-21 08:06:59 -04:00
Mathieu Duponchelle
2e1e88fb22 pipeline: add a get_mode method. 2013-08-21 08:06:59 -04:00
Mathieu Duponchelle
2226882a5c basexmlformatter: Only set timeline auto transitions when done loading. 2013-08-21 08:05:24 -04:00
Thibault Saunier
fbe18c9ed1 formatter: Plug leaks in the can_save_to_uri method
https://bugzilla.gnome.org/show_bug.cgi?id=679941
2013-08-20 08:24:33 -04:00
Thibault Saunier
0c87104955 pipeline: Remove the dynamic lock
We actually do not need it has everywhere where we would need it we are
already locked against the timeline.dyn_lock, we need to make sure it is
always the case in the future.

The hierarchy of the mutex was wrong and could possibly lead to
deadlocks
2013-08-19 15:18:06 -04:00
Thibault Saunier
41d86292c9 formatter: Remove the unsed can_save_uri vmethod
This virtual method does not make much sense right now, we might need it
again later, but most probably with a sensibly different API so removing
it for now.
2013-08-19 15:18:06 -04:00
Paul Lange
9d30f05798 ges-formatter: Check if directory of URI is writeable
https://bugzilla.gnome.org/show_bug.cgi?id=679941
2013-08-19 15:18:06 -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
a939c553cf project: Make sure error-loading-asset is emited when needed
In case ges_project_try_updating_id would be called from outside ges-project the signal
was not emitted, change that.

+ Add some debugging
2013-07-27 19:29:07 +02:00
Thibault Saunier
5c8e2737b4 timeline: Add methods to get and set the snapping distance 2013-07-24 22:37:06 -04:00
Thibault Saunier
c1451cf48c clip: Fix the spliting method
We should make sure that the newly created trackelement are inside
a container when adding them to as this is needed for GESUriClip-s.

Also do not try to set a child property on the TrackElement itself.

https://bugzilla.gnome.org/show_bug.cgi?id=703152
2013-07-24 21:30:23 -04:00
Thibault Saunier
3e88edfebc pipeline: Check that the profile could actually be set on the encodebin
Setting the profile on an encodebin can fail, and if that happens, there
will be no profile set at all, we should return FALSE in GESPipeline
when that happens
2013-07-21 21:42:42 -04:00
Lubosz Sarnecki
9f0b0c26e3 Rename GESTimelinePipeline to GESPipeline
rename ges_timeline_pipeline methods to ges_pipeline
2013-07-21 21:42:42 -04:00
Thibault Saunier
e981c171b1 tests: integration: Give some more information to user on errors 2013-07-21 21:27:16 -04:00
Mathieu Duponchelle
9e14ca1487 ges-uri-clip: Add the possibility to specify an assets directory
through the GES_TESTING_ASSETS_DIRECTORY environment variable.
2013-07-13 17:22:24 +02:00
Mathieu Duponchelle
78e19edad9 track-element: No need to log when prio == MIN_GNL_PRIO. 2013-07-12 18:17:00 -04:00
Mathieu Duponchelle
e0b89ce691 framepositionner: fix messup with propname enum. 2013-07-12 18:17:00 -04:00
Mathieu Duponchelle
cc09d03253 track: Make it possible to disable the mixing feature
API:
  ges_track_set_mixing
  ges_track_get_mixing
2013-07-12 18:17:00 -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
Thibault Saunier
cc9391319e group: Add an empty group constructor
As it is more intuitive for users.

API:
  ges_group_new
2013-07-12 11:56:59 -04:00
Mathieu Duponchelle
2723ef561e container/group/clip: Allow creating an empty group.
This is a legitimate use case.
2013-07-11 23:47:36 +02: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
Mathieu Duponchelle
ff21ea7f92 group: set priv->setting_value to TRUE when moving ourselves in _child_removed 2013-07-10 23:18:41 -04:00
Thibault Saunier
1e5bb2edf6 timelineelement: Make sure that we will never set a negative start
Currently we can end up overflowing the start of others child of our
parent, avoid that making sure we can set our start to what was
requested by the user before actually doing it

+ Add a test
2013-07-10 23:17:54 -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
d3e3871440 xml-formatter: Indent formatted files 2013-07-09 22:14:43 +02:00
Thibault Saunier
bce084f4fd timeline-element: Add a method to get the topelevel parent of an element
API:
	ges_timeline_element_get_toplevel_parent
2013-07-09 22:13:42 +02:00
Thibault Saunier
2b9606437c clip: Emit the notify::layer signal only when actually needed
That means:
  - only when we do change layer
  - At the end of moving between two layers
2013-07-09 22:13:42 +02:00
Thibault Saunier
89e2a69d37 clip: Avoid list corruption when grouping objects
We are currently iterating over a list that is modified in the same
method, we have to get a copy of the list, and iterate over the copy.
2013-07-09 22:13:42 +02:00
Thibault Saunier
12eebdabda clip: Add an internal method to easily get the priority of the layer the clip is in 2013-07-09 22:13:42 +02:00
Thibault Saunier
30eb9e4474 container: Remove the get_priority_range vmethod
We now let full control to subclasses so we do not need it anymore.
2013-07-09 22:13:42 +02:00
Thibault Saunier
9e15e13983 container: Let full control of children priorities to subclasses
For that we make the children_control_mode a protected filed, directly usable by
subclasses, removing the method to set it.

And we let the subclass set and get the priority offsets to the container class.
2013-07-09 22:13:42 +02:00
Thibault Saunier
ed9dcddef4 track: Make sure that new gaps are filled before removing the old ones
Currently we can end up having gaps in track as the first step of the
gap filling method removes currently set gaps.
2013-07-09 22:13:41 +02:00
Thibault Saunier
534bf481ed clip: Handle child priority offsets when setting priority 2013-07-09 22:13:41 +02:00
Thibault Saunier
9d13c5cbd3 container: Do not allow adding an element to a container if it already has a parent
This should never happen, an element can have 1 and only 1 parent.
2013-07-09 22:13:41 +02:00
Thibault Saunier
bcfeada696 container: "Implement" the set_priority vmethod
This way we will just accept any value setted
2013-07-09 22:13:41 +02:00
Thibault Saunier
7412de6f6c ges: Avoid leaking the timeline when grouping containers 2013-07-09 22:13:41 +02:00
Thibault Saunier
8bc88a2ba8 container: Let subclasses decide when height change should be computed
API:
   - GESContainer.compute_height vmethod
   + _ges_container_set_height
2013-07-09 22:13:41 +02:00
Thibault Saunier
b5858c5b04 base-xml-formatter: s/ducation/duration/ 2013-07-09 22:13:41 +02:00
Thibault Saunier
91ebdc7efb container: ges_container_ungroup return a transfer full list 2013-07-09 22:13:41 +02:00
Thibault Saunier
663f9884ef ges: Move ges_clip_edit to GESContainer
This exact same method will be needed in GESGroup, so we should have the method
in the common parent class.

API:
    - ges_clip_edit
    + ges_container_edit
    + GESContainer->edit vmethod
2013-07-09 22:13:41 +02:00
Thibault Saunier
87cfcca5e7 container: Update offsets in GESTimelineElement vmethod implementations
So subclasses just have to link up to resync offsets
2013-07-09 22:13:41 +02:00
Thibault Saunier
cd111fa10a docs: Misc documentation fixes 2013-07-09 22:13:41 +02:00
Thibault Saunier
fe043e0231 clip: Never try to set the start after the end of an element when trimming 2013-07-09 22:13:40 +02:00
Thibault Saunier
71f877c611 internal: Add a macro to make it easier to get the end of a TimelineElement 2013-07-09 22:13:40 +02:00
Thibault Saunier
dd7085d2ed track: Update gaps only when commiting
We were still updating them at useless moments, do it only when absolutely needed.
2013-07-09 22:13:40 +02:00
Thibault Saunier
4020ca54ff container: Fix the way we check priority of subclasses when grouping objects
The resulting list was from lower to higher, we need the contrary
2013-07-09 22:13:40 +02:00
Thibault Saunier
ab98f370c8 ges: Move GESTimelineElemt vmethod implementation from container to clip
This is where they belong to has they are specific to that
implementation of the baseclass
2013-07-09 22:13:40 +02:00
Thibault Saunier
f5aee5df57 container: Make initiated_move a read only protected member
It is a interesting information for subclasses.
Conflicts:
	ges/ges-container.c
2013-07-09 22:13:40 +02:00
Thibault Saunier
5a29cd0c88 internal: Fix typo in the header
ges_base_xml_formatter_add_control_bindingi was meant to be
ges_base_xml_formatter_add_control_binding
2013-07-09 10:57:51 -04:00
Mathieu Duponchelle
2cb71e730a track-element: Remove duration_changed virtual method.
We use notifies for the properties.
	+ Use notifies in audio-transition and video-transition
2013-07-08 19:32:15 -04:00
Mathieu Duponchelle
f1a3d65ef6 formatters: Save and load bindings applied to sources. 2013-07-08 19:32:09 -04:00
Tim-Philipp Müller
3b8bfc1f16 timelinepipeline: fix caps leak 2013-06-28 00:24:33 +01:00
Руслан Ижбулатов
e4b1153846 timelinepipeline: make the caps from encoding profile writable
https://bugzilla.gnome.org/show_bug.cgi?id=703121
2013-06-28 00:20:14 +01:00
Thibault Saunier
d49efabb93 urisource: Do not let user reset the URI property
This is not supported right now and would lead to unexpected behaviours
2013-06-23 18:43:00 -04:00
Mathieu Duponchelle
9e0632e353 ges: Add a framepositionner element used in ges-smart-mixer and ges-uri-source
It adds metadata on the buffers and the mixer parses them.
This is done because we want to keep positionning properties
and set them on the dynamic mixer pad.

Conflicts:
	ges/Makefile.am
2013-06-23 18:42:59 -04:00
Mathieu Duponchelle
2b4609bfe7 video-track: "implement" get_mixing_element. 2013-06-23 18:37:41 -04:00
Mathieu Duponchelle
859f4c3c05 ges-smart-mixer: first code dump, mainly copy paste from ges-smart-adder. 2013-06-23 18:37:41 -04:00
Simon Corsin
bc4186d9c8 ges-layer.c: notify priority changes. 2013-06-23 18:37:41 -04:00
Mathieu Duponchelle
fc182b8026 ges-uri-source: Refactoring work.
+ Categorize functions (Callbacks, vmethods)
	+ make more generic functions for the creation of the bin.
2013-06-23 18:37:40 -04:00
Mathieu Duponchelle
6be4f79ca0 uri-source: Expose the volume property.
+ Make the pspec_hash function an internal util.
	+ Add a create_props_hashtable implementation
	+ If TRACK_TYPE_AUDIO, put the volume properties in the hashtable.
2013-06-23 18:37:40 -04:00
Mathieu Duponchelle
800325db02 uri-source: when creating the audio element, set the volume to the layr volume when necessary. 2013-06-23 18:37:40 -04:00
Mathieu Duponchelle
86b893e54c ges-uri-source: don't use gnlurisource but a custom bin.
+ This bin is a uridecodebin when GES_TRACK_TYPE_VIDEO
	+ This bin contains a uridecodebin and a volume when GES_TRACK_TYPE_AUDIO
2013-06-23 18:37:40 -04:00
Mathieu Duponchelle
65670509f9 smart-adder: remove volume from the bin, which quite simplifies the code.
+ Don't be too smart, adder.
2013-06-23 18:37:40 -04:00
Thibault Saunier
724a6c1bb5 smart-adder: Implement a GESSmartAdder bin element to be used as mixing element
..in audio tracks
2013-06-23 18:37:40 -04:00
Thibault Saunier
b87c800743 meta-container: Add a VOLUME default meta to layers 2013-06-23 18:28:53 -04:00
Thibault Saunier
29bfe9c0fe ges: Misc documentation fixes 2013-06-23 18:28:53 -04:00
Thibault Saunier
7e25aaeccc track: Implement infrastructure for mixing 2013-06-23 18:28:52 -04:00
Thibault Saunier
58aba118a6 track-element: Set a reference to the GESTrackElement on the GnlObjects using qdata 2013-06-23 18:28:52 -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
700a56f88c layer: Fix some mix up in variable names 2013-06-23 17:39:05 -04:00
Thibault Saunier
439f9b4cc0 layer: Simplify a bit how we handle priorities 2013-06-23 17:39:05 -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
9b14c001b0 ges: Implement GESAudioTrack and GESVideoTrack, subclasses of GESTrack 2013-06-23 17:38:57 -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
Lubosz Sarnecki
30f0924055 timeline: fix segfaults
don't call the timeline update, when the reference is invalid

https://bugzilla.gnome.org/show_bug.cgi?id=702605
2013-06-20 09:54:02 -04:00
Mathieu Duponchelle
1d00f45f4f ges-uri-asset.c: Fix ges_uri_asset_request_sync annotations. 2013-06-16 22:02:49 -04:00