Commit graph

1114 commits

Author SHA1 Message Date
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
Thibault Saunier
d702b16e25 project: Disable update in the project rather than the formatter
We need to make sure the update are disabled until the project is fully
loaded, let the responsability to the project instead of the formatter
2013-06-12 12:00:59 -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
Thibault Saunier
302e0ed5d7 track: Update all gaps when timeline duration changed
And add a unit test to check that a gap is created in empty tracks
2013-05-28 18:27:31 -04:00
Thibault Saunier
40bfdd508a Finish renaming filesource to urisource 2013-05-28 18:27:31 -04:00
Thibault Saunier
9ea53465d2 track: Update gaps when we set the timeline 2013-05-28 18:27:31 -04:00
Sebastian Dröge
e7c748a7f2 ges-pitivi-formatter: Remove some unneeded includes and clean up includes
Fixes the build on Windows, where there's no unistd.h... which wasn't
needed at all.

https://bugzilla.gnome.org/show_bug.cgi?id=701115
2013-05-28 08:51:08 +02:00
Nicolas Dufresne
13fb847255 GESAssetLoadingReturn cannot be internal
The enumeration is referenced in a public API.
2013-05-10 18:13:11 -04:00
Thibault Saunier
ef4efa505f clip: Avoid corruption of our list of children while ungrouping 2013-05-09 19:12:43 -04:00
Anton Belka
7d999c5ab8 timeline: add auto-transition
API:
 ges_timeline_get_auto_transition
 ges_timeline_set_auto_transition
 GESTimeline::auto-transition
2013-05-09 18:54:56 -04:00
Thibault Saunier
51403f65be basexmlformatter: Do not allow empty file loading 2013-04-30 18:26:57 +01:00
Thibault Saunier
602f49f3e1 video-test-src: Force video/x-raw
Avoiding to hit errors with video/x-bayer
2013-04-28 01:45:02 +02:00
Mathieu Duponchelle
a2f8dbd3d1 audiotransition: Add a resampler in the audio transition bin 2013-04-28 01:45:01 +02:00
Mathieu Duponchelle
e02681ca2a audiotransition: Fix porting error of the interpollator
+ update debug statements s/LOG/INFO

(acontrolsource != bcontrolsource)
2013-04-28 01:44:55 +02:00
Thibault Saunier
54bf3c05c5 test-clip: Do not set black/silent by default 2013-04-28 01:44:55 +02:00
Mathieu Duponchelle
c57e463b2d replace query_caps with get_current_caps. don't check for unused gnlobject. 2013-04-23 23:05:17 -03:00
Thibault Saunier
b2b96c743d Rename GESTimelineLayer to GESLayer 2013-04-23 20:22:31 -03:00
Thibault Saunier
b5c52a17ec layer: Remove the "rate" property of ges_timeline_layer_add_asset
API:
 - ges_timeline_layer_add_asset (layer, asset,  start,  inpoint, duration, rate, track_types);
 + ges_timeline_layer_add_asset (layer, asset,  start,  inpoint, duration, track_types);
2013-04-23 20:22:27 -03:00
Mathieu Duponchelle
5ef1a8afa9 trackelement: asynchronously add bindings if the track-element is not in a track yet.
Also fix annotations.
2013-04-23 19:31:32 -03:00
Thibault Saunier
f3372dfb0f formatter: Pass a dummy instance of formatter to virtual method
Instead of passing the class itself
2013-04-23 19:31:32 -03:00
Thibault Saunier
bf4a05d2e7 Fix compilation 2013-04-22 09:42:10 -03:00
Thibault Saunier
dcb1114806 xml-formatter: Use G_GUINT64_FORMAT where needed 2013-04-21 21:29:29 -03:00
Thibault Saunier
f5eb42c664 uri-clip-asset: Add "_class_" to a class method
API CHANGE:
	- ges_uri_clip_asset_set_timeout
	+ ges_uri_clip_asset_class_set_timeout
2013-04-21 21:13:00 -03:00
Thibault Saunier
5ab40ce5cb ges: Fix compilation with clang 2013-04-21 21:11:52 -03:00
Thibault Saunier
723fee10b6 project: Accept NULL as a valid value for @id in _create_asset 2013-04-19 19:59:26 -03:00
Thibault Saunier
10c25fef13 clip: Rework the splitting method
+ Avoid setting clip duration of our parent ourself

Now each and every TrackElement inside a clip have the same
start/inpoint/duration
2013-04-19 19:05:43 -03:00
Thibault Saunier
858a630e65 ges: Fix compilation 2013-04-18 18:59:52 -03:00
Thibault Saunier
64e188772e pipeline: Add API guards where needed 2013-04-18 18:48:19 -03:00
Thibault Saunier
70d5680748 pipeline: Add a GError argument 2013-04-18 18:48:19 -03:00
Thibault Saunier
fee4167292 pipeline: Return FALSE in save_thumbnail when the operation fails 2013-04-17 16:48:05 -03:00
Thibault Saunier
e1cac75df4 container: The TimelineElement.inpoint property is call "in-point" not inpoint 2013-04-15 00:18:05 -03:00
Thibault Saunier
cdd00ed207 ges-clip: Remove the unlocked TrackElement APIs
Remove APIs:
  ges_track_element_set_locked
  ges_track_element_is_locked

Those APIs where really not nice to use and were causing more issues
than solving them. If 2 time related properties of TimelineElement must
be different, then those element can *not* have the same parent.

Plus, with the new ges_container_group () API, we will recreate 1
GESClip containing the proper GESTimelineElements if it is the thing
to do.
2013-04-15 00:18:05 -03:00
Thibault Saunier
6775097e66 pitivi-formatter: Remove broken code to handle unlocked track object
WARNING: The plan is to remove unlocked track object APIs so this is
the first part of that process... that code was already broken, and
*needs* to be fixed anyway, better do it using new APIs
2013-04-15 00:18:05 -03:00
Thibault Saunier
fff2511597 pitivi-formatter: Remove saving code 2013-04-15 00:18:04 -03:00
Thibault Saunier
4039468b57 timeline: call sync_state_with_parent when adding a child 2013-04-09 00:11:18 -03:00
Thibault Saunier
78d80c8ca4 track-element: Rename set_property_controlling_parameters set_control_source
+ Generate the documentation
2013-03-31 16:37:41 +02:00
Mathieu Duponchelle
e655a75605 [Keyframes] Adds API to set a control binding on a track element, and the serialization code. 2013-03-31 16:31:26 +02:00
Thibault Saunier
811e68811c Changing remaining clip::track-element-added to container::child-added 2013-03-30 15:40:38 +01:00
Thibault Saunier
d3595d4706 pipeline: Implement the video overlay interface 2013-03-30 14:35:45 +01:00
Thibault Saunier
8b1039a87a timeline-pipeline: Enhance API guards 2013-03-30 13:34:56 +01:00
Thibault Saunier
40376f9219 timeline: Do no unref the timeline before returning it 2013-03-30 13:34:36 +01:00
Thibault Saunier
8d4ce97fc3 container: s/get_priorty_range/get_priority_range/ 2013-03-30 12:31:50 +01:00
Thibault Saunier
f114b6eb3b timeline: Comment some variables goals 2013-03-29 15:50:12 +01:00
Thibault Saunier
cd188c851d container: Let subclasses handle the height
+ Fix tests (starting using GESTestClip instead of GESCustomClip)

Now the height is not only growing, but can also go down, as the value
is just simply computed

API:
	GESContainer::compute_height virtual method
2013-03-28 11:16:41 +01:00
Thibault Saunier
b5f2c819fc container: Properly implement ges_container_group 2013-03-28 11:16:41 +01:00