Commit graph

2416 commits

Author SHA1 Message Date
Sjors Gielen
84f7f04a64 Handle changing playback rate
Before this patch, NLE and GES did not support NleOperations (respectively
GESEffects) that changed the speed/tempo/rate at which the source plays. For
example, the 'pitch' element can make audio play faster or slower. In GES 1.5.90
and before, an NleOperation containing the pitch element to change the rate (or
tempo) would cause a pipeline state change to PAUSED after that stack; that has
been fixed in 1.5.91 (see #755012 [0]). But even then, in 1.5.91 and later,
NleComposition would send segment events to its NleSources assuming that one
source second is equal to one pipeline second. The resulting early EOS event
(in the case of a source rate higher than 1.0) would cause it to switch stacks
too early, causing confusion in the timeline and spectacularly messed up
output.

This patch fixes that by searching for rate-changing elements in
GESTrackElements such as GESEffects. If such rate-changing elements are found,
their final effect on the playing rate is stored in the corresponding NleObject
as the 'media duration factor', named like this because the 'media duration',
or source duration, of an NleObject can be computed by multiplying the duration
with the media duration factor of that object and its parents (this is called
the 'recursive media duration factor'). For example, a 4-second NleSource with
an NleOperation with a media duration factor of 2.0 will have an 8-second media
duration, which means that for playing 4 seconds in the pipeline, the seek
event sent to it must span 8 seconds of media. (So, the 'duration' of an
NleObject or GES object always refers to its duration in the timeline, not the
media duration.)

To summarize:

* Rate-changing elements are registered in the GESEffectClass (pitch::tempo and
  pitch::rate are registered by default);
* GESTimelineElement is responsible for detecting rate-changing elements and
  computing the media_duration_factor;
* GESTrackElement is responsible for storing the media_duration_factor in
  NleObject;
* NleComposition is responsible for the recursive_media_duration_factor;
* The latter property finally fixes media time computations in NleObject.

NLE and GES tests are included.

[0] https://bugzilla.gnome.org/show_bug.cgi?id=755012

Differential Revision: https://phabricator.freedesktop.org/D276
2016-02-26 19:54:40 +01:00
Sebastian Dröge
25d2c7306f Automatic update of common submodule
From b64f03f to 6f2d209
2016-02-26 12:42:55 +02:00
Fabian Orccon
6a97b50b4b group-added and group-removed signals added
Differential Revision: https://phabricator.freedesktop.org/D619
2016-02-23 20:40:21 +01:00
Sebastian Dröge
0ea76cf905 Back to development 2016-02-19 12:38:45 +02:00
Sebastian Dröge
f70e0ab0bf Release 1.7.2 2016-02-19 12:26:27 +02:00
Julien Isorce
f6b0ae1e75 uninstalled.pc: add support for non libtool build systems
Currently the .la path is provided which requires to use libtool as
mentioned in the GStreamer manual section-helloworld-compilerun.html.
It is fine as long as the application is built using libtool.

So currently it is not possible to compile a GStreamer application
within gst-uninstalled with CMake or other build system different
than autotools.

This patch allows to do the following in gst-uninstalled env:
gcc test.c -o test $(pkg-config --cflags --libs gstreamer-1.0 \
  gst-editing-services-1.0)
Previously it required to prepend libtool --mode=link

https://bugzilla.gnome.org/show_bug.cgi?id=720778
2016-02-18 15:26:11 +00:00
Thibault Saunier
c4fd9cd2b1 Fix and test priority of TrackElement after splitting
And make sure we properly handle transitions in that case
2016-02-09 12:38:29 +01:00
Thibault Saunier
ef69d5f97d ges: Give better names to nleobjects 2016-02-09 12:38:29 +01:00
Thiago Santos
c0dbfeb433 tests: extend the AM_TESTS_ENVIRONMENT from check.mak
To get the CK_DEFAULT_TIMEOUT defined for all tests

https://bugzilla.gnome.org/show_bug.cgi?id=761472
2016-02-05 20:02:40 -03:00
Thiago Santos
de0b5bfb28 Automatic update of common submodule
From 86e4663 to b64f03f
2016-02-05 18:11:59 -03:00
Lubosz Sarnecki
0c7191847d titlesource: Add properties for text dimensions. 2016-02-04 15:23:30 +01:00
Lubosz Sarnecki
6381e16c51 trackelement: Make use of read-only children properties.
Read only properties will throw a GLib warning like this
when accessed with "set_child_property":

Warning: g_object_set_property: property 'text-x' of object class 'GstTextOverlay' is not writable
2016-02-04 15:23:30 +01:00
Thibault Saunier
38c4e415fd nle: Turn composition structural issue into ERROR on the bus
Those error are really critical and we are then enable to keep
working. Just post an ERROR message on the bus and let the
application deal with it.

Reviewed-by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
Differential Revision: https://phabricator.freedesktop.org/D740
2016-02-04 15:23:30 +01:00
Thibault Saunier
a81f4b2d8f track-element: Rely on nleobject to be created at construct time
Avoiding all the pending_xx dance and making the code simpler.

This is now possible thanks to the various recent refactoring.

Thanks to that the user is able to set_child_property on objects
that are not in GESTrack yet, as expected.

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D739
2016-02-04 15:23:28 +01:00
Thibault Saunier
8c672f8366 effect: Determine the effect type as soon as possible
Making it possible to create the nleobject right at the creation
of the element.

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D738
2016-02-04 15:23:26 +01:00
Thibault Saunier
3ffdad6db8 title-clip: Return default GESTitleSource value if no child set yet
In get_property we should return the default values if
we have not created any GESTitleSource yet
(instead of segfaulting).

And fix GESTitleSource default values!

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D737
2016-02-04 15:23:24 +01:00
Thibault Saunier
7211e6982f ges: track-element: Try to create NleObject as soon as possible
This way we have informations about the content of the
children as soon as possible.

Most code paths where already ready to handle that as we use it for
copying clips.

Fix framepositionner to properly handle that (it would have broke
with copied clips before).

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D736
2016-02-04 15:23:21 +01:00
Thibault Saunier
799c11b58c timeline: Avoid possible crash disposing the timeline 2016-01-19 11:22:57 +01:00
Thibault Saunier
106d4e98f5 g-i: fix init section to avoid compiler warnings 2016-01-19 11:22:11 +01:00
Thibault Saunier
a526e5634e container: Update start if adding a child that as a start < current start
Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D629
2016-01-17 09:23:39 +01:00
Thibault Saunier
0c46363f74 timeline: Fix infinite loop on dispose
Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D628
2016-01-17 09:23:37 +01:00
Thibault Saunier
2fae9ee50d group: Make deep copying actually copy deep
Allowing pasting groups paste exactly what had been copied

And not the new version of the contained objects

This technically breaks the C API but this is a new API and I believe
and hope nobody is using it right now.

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D616
2016-01-17 09:23:35 +01:00
Thibault Saunier
1c875961fc tests_: Add a simple python copy/paste test for groups
Integrating python tests in the build system

And cleanup configure.ac

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D601
2016-01-17 09:23:32 +01:00
Thibault Saunier
7c825aac8b Do not install ges-smart-video-mixer.h
it should always have been private

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D617
2016-01-17 09:23:19 +01:00
Thibault Saunier
b75d9b11c6 Revert "timeline-element: Do not consider not serializable elements when getting top element"
This commit was causing issue where we were reporting the toplevel
element as an element but that element was actually in another
not serialized group. That is very tricky to handle for end users
as they are not guaranteed the toplevel clips were actually not
contained in another element.

This reverts commit ceb82ba302.

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D627
2016-01-17 09:23:16 +01:00
Mathieu Duponchelle
199b86684f nlecomposition: use correct type for flush_seqnum. 2016-01-09 05:17:23 +01:00
Mathieu Duponchelle
1c1c9124b1 nleghostpad: use GST_SEGMENT_FORMAT
This isn't 2005 anymore.
2016-01-09 05:17:23 +01:00
Sebastian Dröge
7500fab036 ges-asset: Don't dereference NULL proxy assets when resolving fails
CID 1346531
2015-12-29 18:08:03 +02:00
Sebastian Dröge
4997c455f4 ges: Fix various g-i warnings 2015-12-26 09:43:23 +01:00
Sebastian Dröge
f1c823ef60 ges-track-element: Rename control-binding-reomved signal to control-binding-removed
Strictly speaking an API change but nobody on the Internet seemed to have used
the signal with the typo in the name.
2015-12-26 09:43:19 +01:00
Sebastian Dröge
0546088c4d Back to development 2015-12-24 15:30:23 +01:00
Sebastian Dröge
914fca4aed Release 1.7.1 2015-12-24 15:07:57 +01:00
Sebastian Dröge
9deaacbe34 ges-validate: Fix compiler warning caused by usage of wrong enum type
ges-validate.c:237:22: error: implicit conversion from enumeration type
      'GESEdge' to different enumeration type 'GESEditMode'
      [-Werror,-Wenum-conversion]
  GESEditMode edge = GES_EDGE_NONE;
              ~~~~   ^~~~~~~~~~~~~
ges-validate.c:277:41: error: implicit conversion from enumeration type
      'GESEditMode' to different enumeration type 'GESEdge'
      [-Werror,-Wenum-conversion]
              new_layer_priority, mode, edge, position))) {
                                        ^~~~

https://bugzilla.gnome.org/show_bug.cgi?id=759758
2015-12-22 09:58:30 +01:00
Thibault Saunier
ceb82ba302 timeline-element: Do not consider not serializable elements when getting top element
Those are temporary elements that should not be considered when dealing
with the hierarchy of objects.

Fixes T3455
2015-12-21 18:12:40 +01:00
Thibault Saunier
6b03654f7a uri-clip: Copy sources child properties when resetting asset 2015-12-21 18:12:40 +01:00
Thibault Saunier
e1fcd42a19 examples: Move all examples to the root dir and create foldersdir per language
+ Add some markdown files to link between languages
+ Add a simple 'play timeline with one clip" example in C and python
2015-12-21 15:35:17 +01:00
Sebastian Dröge
a71cd000fd configure: Use -Bsymbolic-functions if available
While this is more useful for libraries, some of our plugins with multiple
files and some internal API can also benefit from this.
2015-12-21 12:34:56 +01:00
Thibault Saunier
d38536ab18 Revert "project: Call asset_added in the first signal emition stage"
This reverts commit 08f927ca68.

That commit was breaking the API and could break other people's code.
2015-12-11 15:21:43 +01:00
Thibault Saunier
f473386b88 asset: Add a way to set asset as "needing reload"
Allowing application to force the asset system to recheck if an
asset has been "fixed" and can be used again

API:
    + ges_asset_needs_reload

Differential Revision: https://phabricator.freedesktop.org/D584
2015-12-10 14:48:08 +01:00
Thibault Saunier
08f927ca68 project: Call asset_added in the first signal emition stage
Differential Revision: https://phabricator.freedesktop.org/D520
2015-12-10 14:48:05 +01:00
Thibault Saunier
fa512ecdba Implement asset proxying support
API:
  ges_asset_set_proxy
  ges_asset_get_proxy
  ges_asset_list_proxies
  ges_asset_get_proxy_target

Differential Revision: https://phabricator.freedesktop.org/D504
2015-12-10 14:48:02 +01:00
Nicolas Dufresne
081c285e22 Automatic update of common submodule
From b319909 to 86e4663
2015-12-07 09:11:38 -05:00
Sebastian Dröge
934c4af950 bash-completion: Disable during "make distcheck" as this requires installing files outside the prefix
automake requires all files to be installed inside the prefix. bash-completion
requires the files to be in a specific directory given by a pkg-config file.
As such those two are having incompatible requirements and we just disable
bash-completion installation for the time being when running "make distcheck".

Nonetheless things like "make install" with e.g. a DESTDIR or a private
installation into a user's directory will fail as in both cases the
bash-completion data would be tried to be installed system-wide.
2015-11-26 23:11:36 +05:30
Sebastian Dröge
c37da5d89c Revert "build: fix make distcheck."
This reverts commit 462727d6d8.

This "fix" broke the build on Windows, where both prefix and datadir are
absolute paths and as such we would concatenate two absolute paths and fail.
2015-11-26 22:42:45 +05:30
Thibault Saunier
5bcb7be179 tests: Properly setup GST_PLUGIN_PATH in test environement 2015-11-21 00:24:33 +01:00
Thibault Saunier
faf880e898 Dist gst-editing-services.doap 2015-11-15 00:31:21 +01:00
Thibault Saunier
5e069976f6 asset: Add a method to retrieve the GError of an asset loaded with error
API:
    ges_asset_get_error
2015-11-08 22:56:41 +01:00
Thibault Saunier
5d82971eef project: Add a 'asset-loading' signal 2015-11-08 22:56:41 +01:00
Thibault Saunier
320b611ff7 ges: Set restriction caps in the audio source caps filter
Otherwise we could have not negotiated errors in audiomixer when
the channel/channel-mask do not match

Differential Revision: https://phabricator.freedesktop.org/D493
Reviewed-by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2015-11-05 23:49:05 +01:00
Thibault Saunier
fcf8d5382e formatter: Do not serialize top effect priorities
We just need to make sure they are always serialized in the right
order (which is the case) and de serializing them will lead to the
right behaviour.

We should not serialize the priority as the priority of the source
itself depends on the action having been done on the parent clip,
and we do not serialize the source priorities (and should not, GES
should just do the right thing).

Differential Revision: https://phabricator.freedesktop.org/D491
2015-11-04 21:13:07 +01:00