gstreamer-rs/docs/gstreamer-editing-services/docs.md
2019-12-18 19:15:21 +02:00

2634 lines
90 KiB
Markdown

<!-- file * -->
<!-- struct Asset -->
The Assets in the GStreamer Editing Services represent the resources
that can be used. You can create assets for any type that implements the `Extractable`
interface, for example `GESClips`, `Formatter`, and `TrackElement` do implement it.
This means that assets will represent for example a `GESUriClips`, `BaseEffect` etc,
and then you can extract objects of those types with the appropriate parameters from the asset
using the `AssetExt::extract` method:
```text
GESAsset *effect_asset;
GESEffect *effect;
// You create an asset for an effect
effect_asset = ges_asset_request (GES_TYPE_EFFECT, "agingtv", NULL);
// And now you can extract an instance of GESEffect from that asset
effect = GES_EFFECT (ges_asset_extract (effect_asset));
```
In that example, the advantages of having a `Asset` are that you can know what effects
you are working with and let your user know about the avalaible ones, you can add metadata
to the `Asset` through the `MetaContainer` interface and you have a model for your
custom effects. Note that `Asset` management is making easier thanks to the `Project` class.
Each asset is represented by a pair of `extractable_type` and `id` (string). Actually the `extractable_type`
is the type that implements the `Extractable` interface, that means that for example for a `UriClip`,
the type that implements the `Extractable` interface is `Clip`.
The identifier represents different things depending on the `extractable_type` and you should check
the documentation of each type to know what the ID of `Asset` actually represents for that type. By default,
we only have one `Asset` per type, and the `id` is the name of the type, but this behaviour is overriden
to be more useful. For example, for GESTransitionClips, the ID is the vtype of the transition
you will extract from it (ie crossfade, box-wipe-rc etc..) For `Effect` the ID is the
`bin`-description property of the extracted objects (ie the gst-launch style description of the bin that
will be used).
Each and every `Asset` is cached into GES, and you can query those with the `ges_list_assets` function.
Also the system will automatically register `GESAssets` for `GESFormatters` and `GESTransitionClips`
and standard effects (actually not implemented yet) and you can simply query those calling:
```text
GList *formatter_assets, *tmp;
// List all the transitions
formatter_assets = ges_list_assets (GES_TYPE_FORMATTER);
// Print some infos about the formatter GESAsset
for (tmp = formatter_assets; tmp; tmp = tmp->next) {
g_print ("Name of the formatter: %s, file extension it produces: %s",
ges_meta_container_get_string (GES_META_CONTAINER (tmp->data), GES_META_FORMATTER_NAME),
ges_meta_container_get_string (GES_META_CONTAINER (tmp->data), GES_META_FORMATTER_EXTENSION));
}
g_list_free (transition_assets);
```
You can request the creation of `GESAssets` using either `Asset::request` or
`Asset::request_async`. All the `GESAssets` are cached and thus any asset that has already
been created can be requested again without overhead.
# Implements
[`AssetExt`](trait.AssetExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait AssetExt -->
Trait containing all `Asset` methods.
# Implementors
[`Asset`](struct.Asset.html), [`Project`](struct.Project.html)
<!-- impl Asset::fn needs_reload -->
Sets an asset from the internal cache as needing reload. An asset needs reload
in the case where, for example, we were missing a GstPlugin to use it and that
plugin has been installed, or, that particular asset content as changed
meanwhile (in the case of the usage of proxies).
Once an asset has been set as "needs reload", requesting that asset again
will lead to it being re discovered, and reloaded as if it was not in the
cache before.
## `extractable_type`
The `glib::Type` of the object that can be extracted from the
asset to be reloaded.
## `id`
The identifier of the asset to mark as needing reload
# Returns
`true` if the asset was in the cache and could be set as needing reload,
`false` otherwise.
<!-- impl Asset::fn request -->
Create a `Asset` in the most simple cases, you should look at the `extractable_type`
documentation to see if that constructor can be called for this particular type
As it is recommanded not to instanciate assets for GESUriClip synchronously,
it will not work with this method, but you can instead use the specific
`UriClipAsset::request_sync` method if you really want to.
## `extractable_type`
The `glib::Type` of the object that can be extracted from the new asset.
## `id`
The Identifier or `None`
# Returns
A reference to the wanted `Asset` or `None`
<!-- impl Asset::fn request_async -->
The `callback` will be called from a running `glib::MainLoop` which is iterating a `glib::MainContext`.
Note that, users should ensure the `glib::MainContext`, since this method will notify
`callback` from the thread which was associated with a thread default
`glib::MainContext` at calling `ges_init`.
For example, if a user wants non-default `glib::MainContext` to be associated
with `callback`, `ges_init` must be called after g_main_context_push_thread_default ()
with custom `glib::MainContext`.
Request a new `Asset` asyncronously, `callback` will be called when the materail is
ready to be used or if an error occured.
Example of request of a GESAsset async:
```text
// The request callback
static void
asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
{
GESAsset *asset;
GError *error = NULL;
asset = ges_asset_request_finish (res, &error);
if (asset) {
g_print ("The file: %s is usable as a FileSource",
ges_asset_get_id (asset));
} else {
g_print ("The file: %s is *not* usable as a FileSource because: %s",
ges_asset_get_id (source), error->message);
}
gst_object_unref (mfs);
}
// The request:
ges_asset_request_async (GES_TYPE_URI_CLIP, some_uri, NULL,
(GAsyncReadyCallback) asset_loaded_cb, user_data);
```
## `extractable_type`
The `glib::Type` of the object that can be extracted from the
new asset. The class must implement the `Extractable` interface.
## `id`
The Identifier of the asset we want to create. This identifier depends of the extractable,
type you want. By default it is the name of the class itself (or `None`), but for example for a
GESEffect, it will be the pipeline description, for a GESUriClip it
will be the name of the file, etc... You should refer to the documentation of the `Extractable`
type you want to create a `Asset` for.
## `cancellable`
optional `gio::Cancellable` object, `None` to ignore.
## `callback`
a `GAsyncReadyCallback` to call when the initialization is finished,
Note that the `source` of the callback will be the `Asset`, but you need to
make sure that the asset is properly loaded using the `Asset::request_finish`
method. This asset can not be used as is.
## `user_data`
The user data to pass when `callback` is called
<!-- impl Asset::fn request_finish -->
Finalize the request of an async `Asset`
## `res`
The `gio::AsyncResult` from which to get the newly created `Asset`
# Returns
The `Asset` previously requested
<!-- trait AssetExt::fn extract -->
Extracts a new `gobject::Object` from `asset`. The type of the object is
defined by the extractable-type of `asset`, you can check what
type will be extracted from `asset` using
`AssetExt::get_extractable_type`
# Returns
A newly created `Extractable`
<!-- trait AssetExt::fn get_error -->
# Returns
The `glib::Error` of the asset or `None` if
the asset was loaded without issue
<!-- trait AssetExt::fn get_extractable_type -->
Gets the type of object that can be extracted from `self`
# Returns
the type of object that can be extracted from `self`
<!-- trait AssetExt::fn get_id -->
Gets the ID of a `Asset`
# Returns
The ID of `self`
<!-- trait AssetExt::fn get_proxy -->
# Returns
The proxy in use for `self`
<!-- trait AssetExt::fn get_proxy_target -->
# Returns
The `Asset` that is proxied by `self`
<!-- trait AssetExt::fn list_proxies -->
# Returns
The list of proxies `self` has. Note that the default asset to be
used is always the first in that list.
<!-- trait AssetExt::fn set_proxy -->
A proxying asset is an asset that can substitue the real `self`. For example if you
have a full HD `UriClipAsset` you might want to set a lower resolution (HD version
of the same file) as proxy. Note that when an asset is proxied, calling
`Asset::request` will actually return the proxy asset.
## `proxy`
The `Asset` that should be used as default proxy for `self` or
`None` if you want to use the currently set proxy. Note that an asset can proxy one and only
one other asset.
# Returns
`true` if `proxy` has been set on `self`, `false` otherwise.
<!-- trait AssetExt::fn unproxy -->
Removes `proxy` from the list of known proxies for `self`.
If `proxy` was the current proxy for `self`, stop using it.
## `proxy`
The `Asset` to stop considering as a proxy for `self`
# Returns
`true` if `proxy` was a known proxy for `self`, `false` otherwise.
<!-- struct BaseEffect -->
# Implements
[`TrackElementExt`](trait.TrackElementExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- struct Clip -->
A `Clip` is a 'natural' object which controls one or more
`TrackElement`(s) in one or more `Track`(s).
Keeps a reference to the `TrackElement`(s) it created and
sets/updates their properties.
# Implements
[`ClipExt`](trait.ClipExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait ClipExt -->
Trait containing all `Clip` methods.
# Implementors
[`Clip`](struct.Clip.html)
<!-- trait ClipExt::fn add_asset -->
Extracts a `TrackElement` from `asset` and adds it to the `self`.
Should only be called in order to add operations to a `Clip`,
ni other cases TrackElement are added automatically when adding the
`Clip`/`Asset` to a layer.
Takes a reference on `track_element`.
## `asset`
a `Asset` with `GES_TYPE_TRACK_ELEMENT` as extractable_type
# Returns
Created `TrackElement` or NULL
if an error happened
<!-- trait ClipExt::fn find_track_element -->
Finds the `TrackElement` controlled by `self` that is used in `track`. You
may optionally specify a GType to further narrow search criteria.
Note: If many objects match, then the one with the highest priority will be
returned.
## `track`
a `Track` or NULL
## `type_`
a `glib::Type` indicating the type of track element you are looking
for or `G_TYPE_NONE` if you do not care about the track type.
# Returns
The `TrackElement` used by `track`,
else `None`. Unref after usage
<!-- trait ClipExt::fn find_track_elements -->
Finds all the `TrackElement` controlled by `self` that is used in `track`. You
may optionally specify a GType to further narrow search criteria.
## `track`
a `Track` or NULL
## `track_type`
a `TrackType` indicating the type of tracks in which elements
should be searched.
## `type_`
a `glib::Type` indicating the type of track element you are looking
for or `G_TYPE_NONE` if you do not care about the track type.
# Returns
a `glib::List` of the
`TrackElement` contained in `self`.
The refcount of the objects will be increased. The user will have to
unref each `TrackElement` and free the `glib::List`.
<!-- trait ClipExt::fn get_layer -->
Get the `Layer` to which this clip belongs.
# Returns
The `Layer` where this `self` is being
used, or `None` if it is not used on any layer. The caller should unref it
usage.
<!-- trait ClipExt::fn get_supported_formats -->
Get the formats supported by `self`.
# Returns
The formats supported by `self`.
<!-- trait ClipExt::fn get_top_effect_index -->
Gets the index position of an effect.
## `effect`
The `BaseEffect` we want to get the top index from
# Returns
The top index of the effect, -1 if something went wrong.
<!-- trait ClipExt::fn get_top_effects -->
Get effects applied on `self`
# Returns
a `glib::List` of the
`BaseEffect` that are applied on `self` order by ascendant priorities.
The refcount of the objects will be increased. The user will have to
unref each `BaseEffect` and free the `glib::List`.
<!-- trait ClipExt::fn move_to_layer -->
Moves `self` to `layer`. If `self` is not in any layer, it adds it to
`layer`, else, it removes it from its current layer, and adds it to `layer`.
## `layer`
the new `Layer`
# Returns
`true` if `self` could be moved `false` otherwize
<!-- trait ClipExt::fn set_supported_formats -->
Sets the formats supported by the file.
## `supportedformats`
the `TrackType` defining formats supported by `self`
<!-- trait ClipExt::fn set_top_effect_index -->
This is a convenience method that lets you set the index of a top effect.
## `effect`
The `BaseEffect` to move
## `newindex`
the new index at which to move the `effect` inside this
`Clip`
# Returns
`true` if `effect` was successfuly moved, `false` otherwise.
<!-- trait ClipExt::fn split -->
The function modifies `self`, and creates another `Clip` so we have two
clips at the end, splitted at the time specified by `position`, as a position
in the timeline (not in the clip to be split). For example, if
ges_clip_split is called on a 4-second clip playing from 0:01.00 until
0:05.00, with a split position of 0:02.00, this will result in one clip of 1
second and one clip of 3 seconds, not in two clips of 2 seconds.
The newly created clip will be added to the same layer as `self` is in. This
implies that `self` must be in a `Layer` for the operation to be possible.
This method supports clips playing at a different tempo than one second per
second. For example, splitting a clip with a `Effect` 'pitch tempo=1.5'
four seconds after it starts, will set the inpoint of the new clip to six
seconds after that of the clip to split. For this, the rate-changing
property must be registered using `EffectClass::register_rate_property`;
for the 'pitch' plugin, this is already done.
## `position`
a `gst::ClockTime` representing the timeline position at which to split
# Returns
The newly created `Clip` resulting
from the splitting or `None` if the clip can't be split.
<!-- trait ClipExt::fn get_property_layer -->
The GESLayer where this clip is being used. If you want to connect to its
notify signal you should connect to it with g_signal_connect_after as the
signal emission can be stop in the first fase.
<!-- trait ClipExt::fn get_property_supported_formats -->
The formats supported by the clip.
<!-- trait ClipExt::fn set_property_supported_formats -->
The formats supported by the clip.
<!-- struct Container -->
The `Container` base class.
# Implements
[`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait GESContainerExt -->
Trait containing all `Container` methods.
# Implementors
[`Clip`](struct.Clip.html), [`Container`](struct.Container.html), [`Group`](struct.Group.html)
<!-- impl Container::fn group -->
Groups the `Container`-s provided in `containers`. It creates a subclass
of `Container`, depending on the containers provided in `containers`.
Basically, if all the containers in `containers` should be contained in a same
clip (all the `TrackElement` they contain have the exact same
start/inpoint/duration and are in the same layer), it will create a `Clip`
otherwise a `Group` will be created
## `containers`
The
`Container` to group, they must all be in a same `Timeline`
# Returns
The `Container` (subclass) resulting of the
grouping
<!-- trait GESContainerExt::fn add -->
Add the `TimelineElement` to the container.
## `child`
the `TimelineElement`
# Returns
`true` on success, `false` on failure.
<!-- trait GESContainerExt::fn edit -->
Edit `self` in the different exisiting `EditMode` modes. In the case of
slide, and roll, you need to specify a `Edge`
## `layers`
The layers you want the edit to
happen in, `None` means that the edition is done in all the
`GESLayers` contained in the current timeline.
## `new_layer_priority`
The priority of the layer `self` should land in.
If the layer you're trying to move the container to doesn't exist, it will
be created automatically. -1 means no move.
## `mode`
The `EditMode` in which the editition will happen.
## `edge`
The `Edge` the edit should happen on.
## `position`
The position at which to edit `self` (in nanosecond)
# Returns
`true` if the container as been edited properly, `false` if an error
occured
<!-- trait GESContainerExt::fn get_children -->
Get the list of `TimelineElement` contained in `self`
The user is responsible for unreffing the contained objects
and freeing the list.
## `recursive`
Whether to recursively get children in `self`
# Returns
The list of
timeline element contained in `self`.
<!-- trait GESContainerExt::fn remove -->
Release the `child` from the control of `self`.
## `child`
the `TimelineElement` to release
# Returns
`true` if the `child` was properly released, else `false`.
<!-- trait GESContainerExt::fn ungroup -->
Ungroups the `TimelineElement` contained in this GESContainer,
creating new `Container` containing those `TimelineElement`
apropriately.
## `recursive`
Wether to recursively ungroup `self`
# Returns
The list of
`Container` resulting from the ungrouping operation
The user is responsible for unreffing the contained objects
and freeing the list.
<!-- trait GESContainerExt::fn connect_child_added -->
Will be emitted after a child was added to `container`.
Usually you should connect with `g_signal_connect_after`
as in the first emission stage, the signal emission might
get stopped internally.
## `element`
the `TimelineElement` that was added.
<!-- trait GESContainerExt::fn connect_child_removed -->
Will be emitted after a child was removed from `container`.
## `element`
the `TimelineElement` that was removed.
<!-- trait GESContainerExt::fn get_property_height -->
The span of priorities which this container occupies.
<!-- enum Edge -->
The edges of an object contain in a `Timeline` or `Track`
<!-- enum Edge::variant EdgeStart -->
Represents the start of an object.
<!-- enum Edge::variant EdgeEnd -->
Represents the end of an object.
<!-- enum Edge::variant EdgeNone -->
Represent the fact we are not workin with any edge of an
object.
<!-- enum EditMode -->
You can also find more explanation about the behaviour of those modes at:
<ulink url="http://pitivi.org/manual/trimming.html"> trim, ripple and roll`</ulink>`
and <ulink url="http://pitivi.org/manual/usingclips.html">clip management`</ulink>`.
<!-- enum EditMode::variant EditNormal -->
The object is edited the normal way (default).
<!-- enum EditMode::variant EditRipple -->
The objects are edited in ripple mode.
The Ripple mode allows you to modify the beginning/end of a clip
and move the neighbours accordingly. This will change the overall
timeline duration. In the case of ripple end, the duration of the
clip being rippled can't be superior to its max_duration - inpoint
otherwise the action won't be executed.
<!-- enum EditMode::variant EditRoll -->
The object is edited in roll mode.
The Roll mode allows you to modify the position of an editing point
between two clips without modifying the inpoint of the first clip
nor the out-point of the second clip. This will not change the
overall timeline duration.
<!-- enum EditMode::variant EditTrim -->
The object is edited in trim mode.
The Trim mode allows you to modify the in-point/duration of a clip
without modifying its position in the timeline.
<!-- enum EditMode::variant EditSlide -->
The object is edited in slide mode.
The Slide mode allows you to modify the position of a clip in a
timeline without modifying its duration or its in-point, but will
modify the duration of the previous clip and in-point of the
following clip so does not modify the overall timeline duration.
(not implemented yet)
<!-- struct Effect -->
# Implements
[`EffectExt`](trait.EffectExt.html), [`BaseEffectExt`](trait.BaseEffectExt.html), [`TrackElementExt`](trait.TrackElementExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait EffectExt -->
Trait containing all `Effect` methods.
# Implementors
[`Effect`](struct.Effect.html)
<!-- impl Effect::fn new -->
Creates a new `Effect` from the description of the bin. It should be
possible to determine the type of the effect through the element
'klass' metadata of the GstElements that will be created.
In that corner case, you should use:
`Asset::request` (GES_TYPE_EFFECT, "audio your ! bin ! description", NULL);
and extract that asset to be in full control.
## `bin_description`
The gst-launch like bin description of the effect
# Returns
a newly created `Effect`, or `None` if something went
wrong.
<!-- trait EffectExt::fn get_property_bin_description -->
The description of the effect bin with a gst-launch-style
pipeline description.
Example: "videobalance saturation=1.5 hue=+0.5"
<!-- trait EffectExt::fn set_property_bin_description -->
The description of the effect bin with a gst-launch-style
pipeline description.
Example: "videobalance saturation=1.5 hue=+0.5"
<!-- struct Extractable -->
FIXME: Long description needed
# Implements
[`ExtractableExt`](trait.ExtractableExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait ExtractableExt -->
Trait containing all `Extractable` methods.
# Implementors
[`BaseEffect`](struct.BaseEffect.html), [`Clip`](struct.Clip.html), [`Container`](struct.Container.html), [`Effect`](struct.Effect.html), [`Extractable`](struct.Extractable.html), [`Group`](struct.Group.html), [`Layer`](struct.Layer.html), [`TimelineElement`](struct.TimelineElement.html), [`Timeline`](struct.Timeline.html), [`TrackElement`](struct.TrackElement.html), [`UriClip`](struct.UriClip.html)
<!-- trait ExtractableExt::fn get_asset -->
Method for getting an asset from a `Extractable`
# Returns
The `Asset` or `None` if none has
been set
<!-- trait ExtractableExt::fn get_id -->
# Returns
The `id` of the associated `Asset`, free with `g_free`
<!-- trait ExtractableExt::fn set_asset -->
Method to set the asset which instantiated the specified object
## `asset`
The `Asset` to set
# Returns
`true` if `asset` could be set `false` otherwize
<!-- struct Group -->
A `Group` is an object which controls one or more
`GESClips` in one or more `Layer`(s).
To instanciate a group, you should use the ges_container_group method,
this will be responsible for deciding what subclass of `Container`
should be instaciated to group the various `TimelineElement` passed
in parametter.
# Implements
[`GroupExt`](trait.GroupExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait GroupExt -->
Trait containing all `Group` methods.
# Implementors
[`Group`](struct.Group.html)
<!-- impl Group::fn new -->
Created a new empty `Group`, if you want to group several container
together, it is recommanded to use the `Container::group` method so the
proper subclass is selected.
# Returns
The new empty group.
<!-- trait GroupExt::fn get_property_duration -->
The duration (in nanoseconds) which will be used in the container
<!-- trait GroupExt::fn set_property_duration -->
The duration (in nanoseconds) which will be used in the container
<!-- trait GroupExt::fn get_property_in_point -->
The in-point at which this `Group` will start outputting data
from its contents (in nanoseconds).
Ex : an in-point of 5 seconds means that the first outputted buffer will
be the one located 5 seconds in the controlled resource.
<!-- trait GroupExt::fn set_property_in_point -->
The in-point at which this `Group` will start outputting data
from its contents (in nanoseconds).
Ex : an in-point of 5 seconds means that the first outputted buffer will
be the one located 5 seconds in the controlled resource.
<!-- trait GroupExt::fn get_property_max_duration -->
The maximum duration (in nanoseconds) of the `Group`.
<!-- trait GroupExt::fn set_property_max_duration -->
The maximum duration (in nanoseconds) of the `Group`.
<!-- trait GroupExt::fn get_property_start -->
The position of the object in its container (in nanoseconds).
<!-- trait GroupExt::fn set_property_start -->
The position of the object in its container (in nanoseconds).
<!-- struct Layer -->
Responsible for the ordering of the various contained Clip(s). A
timeline layer has a "priority" property, which is used to manage the
priorities of individual Clips. Two layers should not have the
same priority within a given timeline.
# Implements
[`LayerExt`](trait.LayerExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait LayerExt -->
Trait containing all `Layer` methods.
# Implementors
[`Layer`](struct.Layer.html)
<!-- impl Layer::fn new -->
Creates a new `Layer`.
# Returns
A new `Layer`
<!-- trait LayerExt::fn add_asset -->
Creates Clip from asset, adds it to layer and
returns a reference to it.
## `asset`
The asset to add to
## `start`
The start value to set on the new `Clip`,
if `start` == GST_CLOCK_TIME_NONE, it will be set to
the current duration of `self`
## `inpoint`
The inpoint value to set on the new `Clip`
## `duration`
The duration value to set on the new `Clip`
## `track_types`
The `TrackType` to set on the the new `Clip`
# Returns
Created `Clip`
<!-- trait LayerExt::fn add_clip -->
Adds the given clip to the layer. Sets the clip's parent, and thus
takes ownership of the clip.
An clip can only be added to one layer.
Calling this method will construct and properly set all the media related
elements on `clip`. If you need to know when those objects (actually `TrackElement`)
are constructed, you should connect to the container::child-added signal which
is emited right after those elements are ready to be used.
## `clip`
the `Clip` to add.
# Returns
`true` if the clip was properly added to the layer, or `false`
if the `self` refuses to add the clip.
<!-- trait LayerExt::fn get_auto_transition -->
Gets whether transitions are automatically added when objects
overlap or not.
# Returns
`true` if transitions are automatically added, else `false`.
<!-- trait LayerExt::fn get_clips -->
Get the clips this layer contains.
# Returns
a `glib::List` of
clips. The user is responsible for
unreffing the contained objects and freeing the list.
<!-- trait LayerExt::fn get_clips_in_interval -->
Gets the clips which appear between `start` and `end` on `self`.
## `start`
start of the interval
## `end`
end of the interval
# Returns
a `glib::List` of clips intersecting [`start`, `end`) interval on `self`.
<!-- trait LayerExt::fn get_duration -->
Lets you retrieve the duration of the layer, which means
the end time of the last clip inside it
# Returns
The duration of a layer
<!-- trait LayerExt::fn get_priority -->
Get the priority of `self` within the timeline.
# Returns
The priority of the `self` within the timeline.
<!-- trait LayerExt::fn get_timeline -->
Get the `Timeline` in which `Layer` currently is.
# Returns
the `Timeline` in which `Layer`
currently is or `None` if not in any timeline yet.
<!-- trait LayerExt::fn is_empty -->
Convenience method to check if `self` is empty (doesn't contain any clip),
or not.
# Returns
`true` if `self` is empty, `false` if it already contains at least
one `Clip`
<!-- trait LayerExt::fn remove_clip -->
Removes the given `clip` from the `self` and unparents it.
Unparenting it means the reference owned by `self` on the `clip` will be
removed. If you wish to use the `clip` after this function, make sure you
call `gst::ObjectExt::ref` before removing it from the `self`.
## `clip`
the `Clip` to remove
# Returns
`true` if the clip could be removed, `false` if the layer does
not want to remove the clip.
<!-- trait LayerExt::fn set_auto_transition -->
Sets the layer to the given `auto_transition`. See the documentation of the
property auto_transition for more information.
## `auto_transition`
whether the auto_transition is active
<!-- trait LayerExt::fn set_priority -->
Sets the layer to the given `priority`. See the documentation of the
priority property for more information.
# Deprecated since 1.16
use `TimelineExt::move_layer` instead. This deprecation means
that you will not need to handle layer priorities at all yourself, GES
will make sure there is never 'gaps' between layer priorities.
## `priority`
the priority to set
<!-- trait LayerExt::fn connect_clip_added -->
Will be emitted after the clip was added to the layer.
## `clip`
the `Clip` that was added.
<!-- trait LayerExt::fn connect_clip_removed -->
Will be emitted after the clip was removed from the layer.
## `clip`
the `Clip` that was removed
<!-- trait LayerExt::fn get_property_auto_transition -->
Sets whether transitions are added automagically when clips overlap.
<!-- trait LayerExt::fn set_property_auto_transition -->
Sets whether transitions are added automagically when clips overlap.
<!-- trait LayerExt::fn get_property_priority -->
The priority of the layer in the `Timeline`. 0 is the highest
priority. Conceptually, a `Timeline` is a stack of GESLayers,
and the priority of the layer represents its position in the stack. Two
layers should not have the same priority within a given GESTimeline.
Note that the timeline needs to be commited (with `TimelineExt::commit`)
for the change to be taken into account.
# Deprecated since 1.16
use `TimelineExt::move_layer` instead. This deprecation means
that you will not need to handle layer priorities at all yourself, GES
will make sure there is never 'gaps' between layer priorities.
<!-- trait LayerExt::fn set_property_priority -->
The priority of the layer in the `Timeline`. 0 is the highest
priority. Conceptually, a `Timeline` is a stack of GESLayers,
and the priority of the layer represents its position in the stack. Two
layers should not have the same priority within a given GESTimeline.
Note that the timeline needs to be commited (with `TimelineExt::commit`)
for the change to be taken into account.
# Deprecated since 1.16
use `TimelineExt::move_layer` instead. This deprecation means
that you will not need to handle layer priorities at all yourself, GES
will make sure there is never 'gaps' between layer priorities.
<!-- struct Pipeline -->
`Pipeline` allows developers to view and render `Timeline`
in a simple fashion.
Its usage is inspired by the 'playbin' element from gst-plugins-base.
# Implements
[`GESPipelineExt`](trait.GESPipelineExt.html), [`gst::PipelineExt`](../gst/trait.PipelineExt.html), [`gst::ElementExt`](../gst/trait.ElementExt.html), [`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait GESPipelineExt -->
Trait containing all `Pipeline` methods.
# Implementors
[`Pipeline`](struct.Pipeline.html)
<!-- impl Pipeline::fn new -->
Creates a new conveninence `Pipeline`.
# Returns
the new `Pipeline`.
<!-- trait GESPipelineExt::fn get_mode -->
# Returns
the `PipelineFlags` currently in use.
<!-- trait GESPipelineExt::fn get_thumbnail -->
Returns a `gst::Sample` with the currently playing image in the format specified by
caps. The caller should free the sample with `gst_sample_unref` when finished. If ANY
caps are specified, the information will be returned in the whatever format
is currently used by the sink. This information can be retrieve from caps
associated with the buffer.
## `caps`
caps specifying current format. Use `GST_CAPS_ANY`
for native size.
# Returns
a `gst::Sample` or `None`
<!-- trait GESPipelineExt::fn get_thumbnail_rgb24 -->
A convenience method for `GESPipelineExt::get_thumbnail` which
returns a buffer in 24-bit RGB, optionally scaled to the specified width
and height. If -1 is specified for either dimension, it will be left at
native size. You can retreive this information from the caps associated
with the buffer.
The caller is responsible for unreffing the returned sample with
`gst_sample_unref`.
## `width`
the requested width or -1 for native size
## `height`
the requested height or -1 for native size
# Returns
a `gst::Sample` or `None`
<!-- trait GESPipelineExt::fn preview_get_audio_sink -->
Obtains a pointer to playsink's audio sink element that is used for
displaying audio when the `Pipeline` is in `PipelineFlags::FullPreview`
The caller is responsible for unreffing the returned element with
`gst::ObjectExt::unref`.
# Returns
a pointer to the playsink audio sink `gst::Element`
<!-- trait GESPipelineExt::fn preview_get_video_sink -->
Obtains a pointer to playsink's video sink element that is used for
displaying video when the `Pipeline` is in `PipelineFlags::FullPreview`
The caller is responsible for unreffing the returned element with
`gst::ObjectExt::unref`.
# Returns
a pointer to the playsink video sink `gst::Element`
<!-- trait GESPipelineExt::fn preview_set_audio_sink -->
Sets playsink's audio sink element that is used for displaying audio when
the `Pipeline` is in `PipelineFlags::FullPreview`
## `sink`
a audio sink `gst::Element`
<!-- trait GESPipelineExt::fn preview_set_video_sink -->
Sets playsink's video sink element that is used for displaying video when
the `Pipeline` is in `PipelineFlags::FullPreview`
## `sink`
a video sink `gst::Element`
<!-- trait GESPipelineExt::fn save_thumbnail -->
Saves the current frame to the specified `location`.
## `width`
the requested width or -1 for native size
## `height`
the requested height or -1 for native size
## `format`
a string specifying the desired mime type (for example,
image/jpeg)
## `location`
the path to save the thumbnail
# Returns
`true` if the thumbnail was properly save, else `false`.
<!-- trait GESPipelineExt::fn set_mode -->
switches the `self` to the specified `mode`. The default mode when
creating a `Pipeline` is `PipelineFlags::FullPreview`.
Note: The `self` will be set to `gst::State::Null` during this call due to
the internal changes that happen. The caller will therefore have to
set the `self` to the requested state after calling this method.
## `mode`
the `PipelineFlags` to use
# Returns
`true` if the mode was properly set, else `false`.
<!-- trait GESPipelineExt::fn set_render_settings -->
Specify where the pipeline shall be rendered and with what settings.
A copy of `profile` and `output_uri` will be done internally, the caller can
safely free those values afterwards.
This method must be called before setting the pipeline mode to
`PipelineFlags::Render`
## `output_uri`
the URI to which the timeline will be rendered
## `profile`
the `gst_pbutils::EncodingProfile` to use to render the timeline.
# Returns
`true` if the settings were aknowledged properly, else `false`
<!-- trait GESPipelineExt::fn set_timeline -->
Sets the timeline to use in this pipeline.
The reference to the `timeline` will be stolen by the `self`.
## `timeline`
the `Timeline` to set on the `self`.
# Returns
`true` if the `timeline` could be successfully set on the `self`,
else `false`.
<!-- trait GESPipelineExt::fn get_property_audio_sink -->
Audio sink for the preview.
<!-- trait GESPipelineExt::fn set_property_audio_sink -->
Audio sink for the preview.
<!-- trait GESPipelineExt::fn get_property_mode -->
Pipeline mode. See `GESPipelineExt::set_mode` for more
info.
<!-- trait GESPipelineExt::fn set_property_mode -->
Pipeline mode. See `GESPipelineExt::set_mode` for more
info.
<!-- trait GESPipelineExt::fn get_property_timeline -->
Timeline to use in this pipeline. See also
`GESPipelineExt::set_timeline` for more info.
<!-- trait GESPipelineExt::fn set_property_timeline -->
Timeline to use in this pipeline. See also
`GESPipelineExt::set_timeline` for more info.
<!-- trait GESPipelineExt::fn get_property_video_sink -->
Video sink for the preview.
<!-- trait GESPipelineExt::fn set_property_video_sink -->
Video sink for the preview.
<!-- struct Project -->
The `Project` is used to control a set of `Asset` and is a
`Asset` with `GES_TYPE_TIMELINE` as `extractable_type` itself. That
means that you can extract `Timeline` from a project as followed:
```text
GESProject *project;
GESTimeline *timeline;
project = ges_project_new ("file:///path/to/a/valid/project/uri");
// Here you can connect to the various signal to get more infos about
// what is happening and recover from errors if possible
...
timeline = ges_asset_extract (GES_ASSET (project));
```
The `Project` class offers a higher level API to handle `Asset`-s.
It lets you request new asset, and it informs you about new assets through
a set of signals. Also it handles problem such as missing files/missing
`gst::Element` and lets you try to recover from those.
# Implements
[`ProjectExt`](trait.ProjectExt.html), [`AssetExt`](trait.AssetExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait ProjectExt -->
Trait containing all `Project` methods.
# Implementors
[`Project`](struct.Project.html)
<!-- impl Project::fn new -->
Creates a new `Project` and sets its uri to `uri` if provided. Note that
if `uri` is not valid or `None`, the uri of the project will then be set
the first time you save the project. If you then save the project to
other locations, it will never be updated again and the first valid URI is
the URI it will keep refering to.
## `uri`
The uri to be set after creating the project.
# Returns
A newly created `Project`
<!-- trait ProjectExt::fn add_asset -->
Adds a `Asset` to `self`, the project will keep a reference on
`asset`.
## `asset`
A `Asset` to add to `self`
# Returns
`true` if the asset could be added `false` it was already
in the project
<!-- trait ProjectExt::fn add_encoding_profile -->
Adds `profile` to the project. It lets you save in what format
the project has been renders and keep a reference to those formats.
Also, those formats will be saves to the project file when possible.
## `profile`
A `gst_pbutils::EncodingProfile` to add to the project. If a profile with
the same name already exists, it will be replaced
# Returns
`true` if `profile` could be added, `false` otherwize
<!-- trait ProjectExt::fn create_asset -->
Create and add a `Asset` to `self`. You should connect to the
"asset-added" signal to get the asset when it finally gets added to
`self`
## `id`
The id of the asset to create and add to `self`
## `extractable_type`
The `glib::Type` of the asset to create
# Returns
`true` if the asset started to be added `false` it was already
in the project
<!-- trait ProjectExt::fn create_asset_sync -->
Create and add a `Asset` to `self`. You should connect to the
"asset-added" signal to get the asset when it finally gets added to
`self`
## `id`
The id of the asset to create and add to `self`
## `extractable_type`
The `glib::Type` of the asset to create
# Returns
The newly created `Asset` or `None`.
<!-- trait ProjectExt::fn get_asset -->
## `id`
The id of the asset to retrieve
## `extractable_type`
The extractable_type of the asset
to retrieve from `object`
# Returns
The `Asset` with
`id` or `None` if no asset with `id` as an ID
<!-- trait ProjectExt::fn get_loading_assets -->
Get the assets that are being loaded
# Returns
A set of loading asset
that will be added to `self`. Note that those Asset are *not* loaded yet,
and thus can not be used
<!-- trait ProjectExt::fn get_uri -->
Retrieve the uri that is currently set on `self`
# Returns
a newly allocated string representing uri.
<!-- trait ProjectExt::fn list_assets -->
List all `asset` contained in `self` filtering per extractable_type
as defined by `filter`. It copies the asset and thus will not be updated
in time.
## `filter`
Type of assets to list, `GES_TYPE_EXTRACTABLE` will list
all assets
# Returns
The list of
`Asset` the object contains
<!-- trait ProjectExt::fn list_encoding_profiles -->
Lists the encoding profile that have been set to `self`. The first one
is the latest added.
# Returns
The
list of `gst_pbutils::EncodingProfile` used in `self`
<!-- trait ProjectExt::fn load -->
Loads `self` into `timeline`
## `timeline`
A blank timeline to load `self` into
# Returns
`true` if the project could be loaded `false` otherwize.
<!-- trait ProjectExt::fn remove_asset -->
remove a `asset` to from `self`.
## `asset`
A `Asset` to remove from `self`
# Returns
`true` if the asset could be removed `false` otherwise
<!-- trait ProjectExt::fn save -->
Save the timeline of `self` to `uri`. You should make sure that `timeline`
is one of the timelines that have been extracted from `self`
(using ges_asset_extract (`self`);)
## `timeline`
The `Timeline` to save, it must have been extracted from `self`
## `uri`
The uri where to save `self` and `timeline`
## `formatter_asset`
The formatter asset to use or `None`. If `None`,
will try to save in the same format as the one from which the timeline as been loaded
or default to the formatter with highest rank
## `overwrite`
`true` to overwrite file if it exists
# Returns
`true` if the project could be save, `false` otherwize
<!-- trait ProjectExt::fn connect_asset_added -->
## `asset`
The `Asset` that has been added to `project`
<!-- trait ProjectExt::fn connect_asset_loading -->
## `asset`
The `Asset` that started loading
<!-- trait ProjectExt::fn connect_asset_removed -->
## `asset`
The `Asset` that has been removed from `project`
<!-- trait ProjectExt::fn connect_error_loading_asset -->
Informs you that a `Asset` could not be created. In case of
missing GStreamer plugins, the error will be set to `GST_CORE_ERROR`
`gst::CoreError::MissingPlugin`
## `error`
The `glib::Error` defining the error that occured, might be `None`
## `id`
The `id` of the asset that failed loading
## `extractable_type`
The `extractable_type` of the asset that
failed loading
<!-- trait ProjectExt::fn connect_loaded -->
## `timeline`
The `Timeline` that complete loading
<!-- trait ProjectExt::fn connect_missing_uri -->
```text
static gchar
source_moved_cb (GESProject *project, GError *error, GESAsset *asset_with_error)
{
return g_strdup ("file:///the/new/uri.ogg");
}
static int
main (int argc, gchar ** argv)
{
GESTimeline *timeline;
GESProject *project = ges_project_new ("file:///some/uri.xges");
g_signal_connect (project, "missing-uri", source_moved_cb, NULL);
timeline = ges_asset_extract (GES_ASSET (project));
}
```
## `error`
The error that happened
## `wrong_asset`
The asset with the wrong ID, you should us it and its content
only to find out what the new location is.
# Returns
The new URI of `wrong_asset`
<!-- struct Timeline -->
`Timeline` is the central object for any multimedia timeline.
Contains a list of `Layer` which users should use to arrange the
various clips through time.
The output type is determined by the `Track` that are set on
the `Timeline`.
To save/load a timeline, you can use the `TimelineExt::load_from_uri` and
`TimelineExt::save_to_uri` methods to use the default format. If you wish
Note that any change you make in the timeline will not actually be taken
into account until you call the `TimelineExt::commit` method.
# Implements
[`TimelineExt`](trait.TimelineExt.html), [`gst::ElementExt`](../gst/trait.ElementExt.html), [`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait TimelineExt -->
Trait containing all `Timeline` methods.
# Implementors
[`Timeline`](struct.Timeline.html)
<!-- impl Timeline::fn new -->
Creates a new empty `Timeline`.
# Returns
The new timeline.
<!-- impl Timeline::fn new_audio_video -->
Creates a new `Timeline` containing a raw audio and a
raw video track.
# Returns
The newly created `Timeline`.
<!-- impl Timeline::fn new_from_uri -->
Creates a timeline from the given URI.
## `uri`
the URI to load from
# Returns
A new timeline if the uri was loaded
successfully, or `None` if the uri could not be loaded.
<!-- trait TimelineExt::fn add_layer -->
Add the layer to the timeline. The reference to the `layer` will be stolen
by the `self`.
## `layer`
the `Layer` to add
# Returns
`true` if the layer was properly added, else `false`.
<!-- trait TimelineExt::fn add_track -->
Add a track to the timeline. The reference to the track will be stolen by the
pipeline.
## `track`
the `Track` to add
# Returns
`true` if the track was properly added, else `false`.
<!-- trait TimelineExt::fn append_layer -->
Append a newly created `Layer` to `self`
Note that you do not own any reference to the returned layer.
# Returns
The newly created `Layer`, or the last (empty)
`Layer` of `self`.
<!-- trait TimelineExt::fn commit -->
Commit all the pending changes of the clips contained in the
`self`.
When changes happen in a timeline, they are not
directly executed in the non-linear engine. Call this method once you are
done with a set of changes and want it to be executed.
The `Timeline::commited` signal will be emitted when the (possibly updated)
`gst::Pipeline` is ready to output data again, except if the state of the
timeline was `gst::State::Ready` or `gst::State::Null`.
Note that all the pending changes will automatically be executed when the
timeline goes from `gst::State::Ready` to `gst::State::Paused`, which usually is
triggered by corresponding state changes in a containing `Pipeline`.
You should not try to change the state of the timeline, seek it or add
tracks to it during a commit operation, that is between a call to this
function and after receiving the `Timeline::commited` signal.
See `TimelineExt::commit_sync` if you don't want to bother with waiting
for the signal.
# Returns
`true` if pending changes were commited or `false` if nothing needed
to be commited
<!-- trait TimelineExt::fn commit_sync -->
Commit all the pending changes of the `GESClips` contained in the
`self`.
Will return once the update is complete, that is when the
(possibly updated) `gst::Pipeline` is ready to output data again, or if the
state of the timeline was `gst::State::Ready` or `gst::State::Null`.
This function will wait for any pending state change of the timeline by
calling `gst::ElementExt::get_state` with a `GST_CLOCK_TIME_NONE` timeout, you
should not try to change the state from another thread before this function
has returned.
See `TimelineExt::commit` for more information.
# Returns
`true` if pending changes were commited or `false` if nothing needed
to be commited
<!-- trait TimelineExt::fn get_auto_transition -->
Gets whether transitions are automatically added when objects
overlap or not.
# Returns
`true` if transitions are automatically added, else `false`.
<!-- trait TimelineExt::fn get_duration -->
Get the current duration of `self`
# Returns
The current duration of `self`
<!-- trait TimelineExt::fn get_element -->
Gets a `TimelineElement` contained in the timeline
# Returns
The `TimelineElement` or `None` if
not found.
<!-- trait TimelineExt::fn get_groups -->
Get the list of `Group` present in the Timeline.
# Returns
the list of
`Group` that contain clips present in the timeline's layers.
Must not be changed.
<!-- trait TimelineExt::fn get_layer -->
Retrieve the layer with `priority` as a priority
## `priority`
The priority of the layer to find
# Returns
A `Layer` or `None` if no layer with
`priority` was found
Since 1.6
<!-- trait TimelineExt::fn get_layers -->
Get the list of `Layer` present in the Timeline.
# Returns
the list of
`Layer` present in the Timeline sorted by priority.
The caller should unref each Layer once he is done with them.
<!-- trait TimelineExt::fn get_pad_for_track -->
Search the `gst::Pad` corresponding to the given `self`'s `track`.
## `track`
The `Track`
# Returns
The corresponding `gst::Pad` if it is
found, or `None` if there is an error.
<!-- trait TimelineExt::fn get_snapping_distance -->
Gets the configured snapping distance of the timeline. See
the documentation of the property snapping_distance for more
information.
# Returns
The `snapping_distance` property of the timeline
<!-- trait TimelineExt::fn get_track_for_pad -->
Search the `Track` corresponding to the given `self`'s `pad`.
## `pad`
The `gst::Pad`
# Returns
The corresponding `Track` if it is
found, or `None` if there is an error.
<!-- trait TimelineExt::fn get_tracks -->
Returns the list of `Track` used by the Timeline.
# Returns
A list of `Track`.
The caller should unref each track once he is done with them.
<!-- trait TimelineExt::fn is_empty -->
Check whether a `Timeline` is empty or not
# Returns
`true` if the timeline is empty `false` otherwize
<!-- trait TimelineExt::fn load_from_uri -->
Loads the contents of URI into the given timeline.
## `uri`
The URI to load from
# Returns
`true` if the timeline was loaded successfully, or `false` if the uri
could not be loaded.
<!-- trait TimelineExt::fn move_layer -->
Moves `layer` at `new_layer_priority` meaning that `layer`
we land at that position in the stack of layers inside
the timeline. If `new_layer_priority` is superior than the number
of layers present in the time, it will move to the end of the
stack of layers.
Feature: `v1_16`
## `layer`
The layer to move at `new_layer_priority`
## `new_layer_priority`
The index at which `layer` should land
<!-- trait TimelineExt::fn paste_element -->
Paste `element` inside the timeline. `element` must have been
created using ges_timeline_element_copy with deep=TRUE set,
i.e. it must be a deep copy, otherwise it will fail.
## `element`
The `TimelineElement` to paste
## `position`
The position in the timeline the element should
be pasted to, meaning it will become the start of `element`
## `layer_priority`
The `Layer` to which the element should be pasted to.
-1 means paste to the same layer from which the `element` has been copied from.
# Returns
Shallow copy of the `element` pasted
<!-- trait TimelineExt::fn remove_layer -->
Removes the layer from the timeline. The reference that the `self` holds on
the layer will be dropped. If you wish to use the `layer` after calling this
method, you need to take a reference before calling.
## `layer`
the `Layer` to remove
# Returns
`true` if the layer was properly removed, else `false`.
<!-- trait TimelineExt::fn remove_track -->
Remove the `track` from the `self`. The reference stolen when adding the
`track` will be removed. If you wish to use the `track` after calling this
function you must ensure that you have a reference to it.
## `track`
the `Track` to remove
# Returns
`true` if the `track` was properly removed, else `false`.
<!-- trait TimelineExt::fn save_to_uri -->
Saves the timeline to the given location
## `uri`
The location to save to
## `formatter_asset`
The formatter asset to use or `None`. If `None`,
will try to save in the same format as the one from which the timeline as been loaded
or default to the formatter with highest rank
## `overwrite`
`true` to overwrite file if it exists
# Returns
`true` if the timeline was successfully saved to the given location,
else `false`.
<!-- trait TimelineExt::fn set_auto_transition -->
Sets the layer to the given `auto_transition`. See the documentation of the
property auto_transition for more information.
## `auto_transition`
whether the auto_transition is active
<!-- trait TimelineExt::fn set_snapping_distance -->
Sets the `snapping_distance` of the timeline. See the documentation of the
property snapping_distance for more information.
## `snapping_distance`
whether the snapping_distance is active
<!-- trait TimelineExt::fn connect_commited -->
This signal will be emitted once the changes initiated by `TimelineExt::commit`
have been executed in the backend. Use `TimelineExt::commit_sync` if you
don't need to do anything in the meantime.
<!-- trait TimelineExt::fn connect_group_added -->
Will be emitted after a new group is added to to the timeline.
## `group`
the `Group`
<!-- trait TimelineExt::fn connect_group_removed -->
Will be emitted after a group has been removed from the timeline.
## `group`
the `Group`
## `children`
a list of `Container`
<!-- trait TimelineExt::fn connect_layer_added -->
Will be emitted after a new layer is added to the timeline.
## `layer`
the `Layer` that was added to the timeline
<!-- trait TimelineExt::fn connect_layer_removed -->
Will be emitted after the layer was removed from the timeline.
## `layer`
the `Layer` that was removed from the timeline
<!-- trait TimelineExt::fn connect_select_tracks_for_object -->
## `clip`
The `Clip` on which `track_element` will land
## `track_element`
The `TrackElement` for which to choose the tracks it should land into
# Returns
a `glib::PtrArray` of `Track`-s where that object should be added
<!-- trait TimelineExt::fn connect_snapping_ended -->
Will be emitted when the 2 `TrackElement` ended to snap
## `obj1`
the first `TrackElement` that was snapping.
## `obj2`
the second `TrackElement` that was snapping.
## `position`
the position where the two objects finally snapping.
<!-- trait TimelineExt::fn connect_snapping_started -->
Will be emitted when the 2 `TrackElement` first snapped
## `obj1`
the first `TrackElement` that was snapping.
## `obj2`
the second `TrackElement` that was snapping.
## `position`
the position where the two objects finally snapping.
<!-- trait TimelineExt::fn connect_track_added -->
Will be emitted after the track was added to the timeline.
## `track`
the `Track` that was added to the timeline
<!-- trait TimelineExt::fn connect_track_removed -->
Will be emitted after the track was removed from the timeline.
## `track`
the `Track` that was removed from the timeline
<!-- trait TimelineExt::fn get_property_auto_transition -->
Sets whether transitions are added automagically when clips overlap.
<!-- trait TimelineExt::fn set_property_auto_transition -->
Sets whether transitions are added automagically when clips overlap.
<!-- trait TimelineExt::fn get_property_duration -->
Current duration (in nanoseconds) of the `Timeline`
<!-- trait TimelineExt::fn get_property_snapping_distance -->
Distance (in nanoseconds) from which a moving object will snap
with it neighboors. 0 means no snapping.
<!-- trait TimelineExt::fn set_property_snapping_distance -->
Distance (in nanoseconds) from which a moving object will snap
with it neighboors. 0 means no snapping.
<!-- struct TimelineElement -->
The GESTimelineElement base class implements the notion of timing as well
as priority. A GESTimelineElement can have a parent object which will be
responsible for controlling its timing properties.
# Implements
[`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait TimelineElementExt -->
Trait containing all `TimelineElement` methods.
# Implementors
[`Container`](struct.Container.html), [`TimelineElement`](struct.TimelineElement.html), [`TrackElement`](struct.TrackElement.html)
<!-- trait TimelineElementExt::fn copy -->
Copies `self`
## `deep`
whether we want to create the elements `self` contains or not
# Returns
The newly create `TimelineElement`, copied from `self`
<!-- trait TimelineElementExt::fn get_child_properties -->
Gets properties of a child of `self`.
## `first_property_name`
The name of the first property to get
<!-- trait TimelineElementExt::fn get_child_property -->
In general, a copy is made of the property contents and
the caller is responsible for freeing the memory by calling
`gobject::Value::unset`.
Gets a property of a GstElement contained in `object`.
Note that `TimelineElementExt::get_child_property` is really
intended for language bindings, `TimelineElementExt::get_child_properties`
is much more convenient for C programming.
## `property_name`
The name of the property
## `value`
return location for the property value, it will
be initialized if it is initialized with 0
# Returns
`true` if the property was found, `false` otherwize
<!-- trait TimelineElementExt::fn get_child_property_by_pspec -->
Gets a property of a child of `self`.
## `pspec`
The `gobject::ParamSpec` that specifies the property you want to get
## `value`
return location for the value
<!-- trait TimelineElementExt::fn get_child_property_valist -->
Gets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
## `first_property_name`
The name of the first property to get
## `var_args`
value for the first property, followed optionally by more
name/return location pairs, followed by NULL
<!-- trait TimelineElementExt::fn get_duration -->
# Returns
The `duration` of `self`
<!-- trait TimelineElementExt::fn get_inpoint -->
# Returns
The `inpoint` of `self`
<!-- trait TimelineElementExt::fn get_layer_priority -->
Feature: `v1_16`
# Returns
The priority of the first layer the element is in (note that only
groups can span over several layers). `GES_TIMELINE_ELEMENT_NO_LAYER_PRIORITY`
means that the element is not in a layer.
<!-- trait TimelineElementExt::fn get_max_duration -->
# Returns
The `maxduration` of `self`
<!-- trait TimelineElementExt::fn get_name -->
Returns a copy of the name of `self`.
Caller should `g_free` the return value after usage.
# Returns
The name of `self`
<!-- trait TimelineElementExt::fn get_parent -->
Returns the parent of `self`. This function increases the refcount
of the parent object so you should `gst::ObjectExt::unref` it after usage.
# Returns
parent of `self`, this can be `None` if
`self` has no parent. unref after usage.
<!-- trait TimelineElementExt::fn get_priority -->
# Returns
The `priority` of `self`
<!-- trait TimelineElementExt::fn get_start -->
# Returns
The `start` of `self`
<!-- trait TimelineElementExt::fn get_timeline -->
Returns the timeline of `self`. This function increases the refcount
of the timeline so you should `gst::ObjectExt::unref` it after usage.
# Returns
timeline of `self`, this can be `None` if
`self` has no timeline. unref after usage.
<!-- trait TimelineElementExt::fn get_toplevel_parent -->
Gets the toplevel `TimelineElement` controlling `self`
# Returns
The toplevel controlling parent of `self`
<!-- trait TimelineElementExt::fn get_track_types -->
Gets all the TrackTypes `self` will interact with
<!-- trait TimelineElementExt::fn list_children_properties -->
Gets an array of `gobject::ParamSpec`* for all configurable properties of the
children of `self`.
## `n_properties`
return location for the length of the returned array
# Returns
an array of `gobject::ParamSpec`* which should be freed after use or
`None` if something went wrong
<!-- trait TimelineElementExt::fn lookup_child -->
Looks up which `element` and `pspec` would be effected by the given `name`. If various
contained elements have this property name you will get the first one, unless you
specify the class name in `name`.
## `prop_name`
name of the property to look up. You can specify the name of the
class as such: "ClassName::property-name", to guarantee that you get the
proper GParamSpec in case various GstElement-s contain the same property
name. If you don't do so, you will get the first element found, having
this property and the and the corresponding GParamSpec.
## `child`
pointer to a `gst::Element` that
takes the real object to set property on
## `pspec`
pointer to take the `gobject::ParamSpec`
describing the property
# Returns
TRUE if `element` and `pspec` could be found. FALSE otherwise. In that
case the values for `pspec` and `element` are not modified. Unref `element` after
usage.
<!-- trait TimelineElementExt::fn paste -->
Paste `self` inside the timeline. `self` must have been created
using ges_timeline_element_copy with recurse=TRUE set,
otherwise it will fail.
## `paste_position`
The position in the timeline the element should
be copied to, meaning it will become the start of `self`
# Returns
New element resulting of pasting `self`
or `None`
<!-- trait TimelineElementExt::fn ripple -->
Edits `self` in ripple mode. It allows you to modify the
start of `self` and move the following neighbours accordingly.
This will change the overall timeline duration.
## `start`
The new start of `self` in ripple mode.
# Returns
`true` if the self as been rippled properly, `false` if an error
occured
<!-- trait TimelineElementExt::fn ripple_end -->
Edits `self` in ripple mode. It allows you to modify the
duration of a `self` and move the following neighbours accordingly.
This will change the overall timeline duration.
## `end`
The new end (start + duration) of `self` in ripple mode. It will
basically only change the duration of `self`.
# Returns
`true` if the self as been rippled properly, `false` if an error
occured
<!-- trait TimelineElementExt::fn roll_end -->
Edits `self` in roll mode. It allows you to modify the
duration of a `self` and trim (basicly change the start + inpoint
in this case) the following neighbours accordingly.
This will not change the overall timeline duration.
## `end`
The new end (start + duration) of `self` in roll mode
# Returns
`true` if the self as been rolled properly, `false` if an error
occured
<!-- trait TimelineElementExt::fn roll_start -->
Edits `self` in roll mode. It allows you to modify the
start and inpoint of a `self` and "resize" (basicly change the duration
in this case) of the previous neighbours accordingly.
This will not change the overall timeline duration.
## `start`
The new start of `self` in roll mode, it will also adapat
the in-point of `self` according
# Returns
`true` if the self as been roll properly, `false` if an error
occured
<!-- trait TimelineElementExt::fn set_child_properties -->
Sets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
## `first_property_name`
The name of the first property to set
<!-- trait TimelineElementExt::fn set_child_property -->
Sets a property of a child of `self`
Note that `TimelineElementExt::set_child_property` is really
intended for language bindings, `TimelineElementExt::set_child_properties`
is much more convenient for C programming.
## `property_name`
The name of the property
## `value`
the value
# Returns
`true` if the property was set, `false` otherwize
<!-- trait TimelineElementExt::fn set_child_property_by_pspec -->
Sets a property of a child of `self`.
## `pspec`
The `gobject::ParamSpec` that specifies the property you want to set
## `value`
the value
<!-- trait TimelineElementExt::fn set_child_property_valist -->
Sets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
## `first_property_name`
The name of the first property to set
## `var_args`
value for the first property, followed optionally by more
name/return location pairs, followed by NULL
<!-- trait TimelineElementExt::fn set_duration -->
Set the duration of the object
Note that if the timeline snap-distance property of the timeline containing
`self` is set, `self` will properly snap to its neighboors.
## `duration`
the duration in `gst::ClockTime`
# Returns
`true` if `duration` could be set.
<!-- trait TimelineElementExt::fn set_inpoint -->
Set the in-point, that is the moment at which the `self` will start
outputting data from its contents.
## `inpoint`
the in-point in `gst::ClockTime`
# Returns
`true` if `inpoint` could be set.
<!-- trait TimelineElementExt::fn set_max_duration -->
Set the maximun duration of the object
## `maxduration`
the maximum duration in `gst::ClockTime`
# Returns
`true` if `maxduration` could be set.
<!-- trait TimelineElementExt::fn set_name -->
Sets the name of object, or gives `self` a guaranteed unique name (if name is NULL).
This function makes a copy of the provided name, so the caller retains ownership
of the name it sent.
## `name`
The name `self` should take (if avalaible<)
<!-- trait TimelineElementExt::fn set_parent -->
Sets the parent of `self` to `parent`. The parents needs to already
own a hard reference on `self`.
## `parent`
new parent of self
# Returns
`true` if `parent` could be set or `false` when `self`
already had a parent or `self` and `parent` are the same.
<!-- trait TimelineElementExt::fn set_priority -->
Sets the priority of the object within the containing layer
# Deprecated
All priority management is done by GES itself now.
To set `Effect` priorities `ClipExt::set_top_effect_index` should
be used.
## `priority`
the priority
# Returns
`true` if `priority` could be set.
<!-- trait TimelineElementExt::fn set_start -->
Set the position of the object in its containing layer.
Note that if the snapping-distance property of the timeline containing
`self` is set, `self` will properly snap to the edges around `start`.
## `start`
the position in `gst::ClockTime`
# Returns
`true` if `start` could be set.
<!-- trait TimelineElementExt::fn set_timeline -->
Sets the timeline of `self` to `timeline`.
## `timeline`
The `Timeline` `self` is in
# Returns
`true` if `timeline` could be set or `false` when `timeline`
already had a timeline.
<!-- trait TimelineElementExt::fn trim -->
Edits `self` in trim mode. It allows you to modify the
inpoint and start of `self`.
This will not change the overall timeline duration.
Note that to trim the end of an self you can just set its duration. The same way
as this method, it will take into account the snapping-distance property of the
timeline in which `self` is.
## `start`
The new start of `self` in trim mode, will adapt the inpoint
of `self` accordingly
# Returns
`true` if the self as been trimmed properly, `false` if an error
occured
<!-- trait TimelineElementExt::fn connect_deep_notify -->
The deep notify signal is used to be notified of property changes of all
the childs of `timeline_element`
## `prop_object`
the object that originated the signal
## `prop`
the property that changed
<!-- trait TimelineElementExt::fn get_property_duration -->
The duration (in nanoseconds) which will be used in the container
<!-- trait TimelineElementExt::fn set_property_duration -->
The duration (in nanoseconds) which will be used in the container
<!-- trait TimelineElementExt::fn get_property_in_point -->
The in-point at which this `TimelineElement` will start outputting data
from its contents (in nanoseconds).
Ex : an in-point of 5 seconds means that the first outputted buffer will
be the one located 5 seconds in the controlled resource.
<!-- trait TimelineElementExt::fn set_property_in_point -->
The in-point at which this `TimelineElement` will start outputting data
from its contents (in nanoseconds).
Ex : an in-point of 5 seconds means that the first outputted buffer will
be the one located 5 seconds in the controlled resource.
<!-- trait TimelineElementExt::fn get_property_max_duration -->
The maximum duration (in nanoseconds) of the `TimelineElement`.
<!-- trait TimelineElementExt::fn set_property_max_duration -->
The maximum duration (in nanoseconds) of the `TimelineElement`.
<!-- trait TimelineElementExt::fn get_property_name -->
The name of the object
<!-- trait TimelineElementExt::fn set_property_name -->
The name of the object
<!-- trait TimelineElementExt::fn get_property_parent -->
The parent container of the object
<!-- trait TimelineElementExt::fn set_property_parent -->
The parent container of the object
<!-- trait TimelineElementExt::fn get_property_priority -->
The priority of the object.
Setting GESTimelineElement priorities is deprecated
as all priority management is done by GES itself now.
<!-- trait TimelineElementExt::fn set_property_priority -->
The priority of the object.
Setting GESTimelineElement priorities is deprecated
as all priority management is done by GES itself now.
<!-- trait TimelineElementExt::fn get_property_serialize -->
Whether the element should be serialized.
<!-- trait TimelineElementExt::fn set_property_serialize -->
Whether the element should be serialized.
<!-- trait TimelineElementExt::fn get_property_start -->
The position of the object in its container (in nanoseconds).
<!-- trait TimelineElementExt::fn set_property_start -->
The position of the object in its container (in nanoseconds).
<!-- trait TimelineElementExt::fn get_property_timeline -->
The timeline in which `element` is
<!-- trait TimelineElementExt::fn set_property_timeline -->
The timeline in which `element` is
<!-- struct Track -->
Corresponds to one output format (i.e. audio OR video).
Contains the compatible TrackElement(s).
# Implements
[`GESTrackExt`](trait.GESTrackExt.html), [`gst::ElementExt`](../gst/trait.ElementExt.html), [`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait GESTrackExt -->
Trait containing all `Track` methods.
# Implementors
[`Track`](struct.Track.html)
<!-- impl Track::fn new -->
Creates a new `Track` with the given `type_` and `caps`.
The newly created track will steal a reference to the caps. If you wish to
use those caps elsewhere, you will have to take an extra reference.
## `type_`
The type of track
## `caps`
The caps to restrict the output of the track to.
# Returns
A new `Track`.
<!-- trait GESTrackExt::fn add_element -->
Adds the given object to the track. Sets the object's controlling track,
and thus takes ownership of the `object`.
An object can only be added to one track.
## `object`
the `TrackElement` to add
# Returns
`true` if the object was properly added. `false` if the track does not
want to accept the object.
<!-- trait GESTrackExt::fn commit -->
Commits all the pending changes of the TrackElement contained in the
track.
When timing changes happen in a timeline, the changes are not
directly done inside NLE. This method needs to be called so any changes
on a clip contained in the timeline actually happen at the media
processing level.
# Returns
`true` if something as been commited `false` if nothing needed
to be commited
<!-- trait GESTrackExt::fn get_caps -->
Get the `gst::Caps` this track is configured to output.
# Returns
The `gst::Caps` this track is configured to output.
<!-- trait GESTrackExt::fn get_elements -->
Gets the `TrackElement` contained in `self`
# Returns
the list of
`TrackElement` present in the Track sorted by priority and start.
<!-- trait GESTrackExt::fn get_mixing -->
Gets if the underlying `NleComposition` contains an expandable mixer.
# Returns
`True` if there is a mixer, `False` otherwise.
<!-- trait GESTrackExt::fn get_timeline -->
Get the `Timeline` this track belongs to. Can be `None`.
# Returns
The `Timeline` this track belongs to. Can be `None`.
<!-- trait GESTrackExt::fn remove_element -->
Removes the object from the track and unparents it.
Unparenting it means the reference owned by `self` on the `object` will be
removed. If you wish to use the `object` after this function, make sure you
call `gst::ObjectExt::ref` before removing it from the `self`.
## `object`
the `TrackElement` to remove
# Returns
`true` if the object was removed, else `false` if the track
could not remove the object (like if it didn't belong to the track).
<!-- trait GESTrackExt::fn set_create_element_for_gap_func -->
Sets the function that should be used to create the GstElement used to fill gaps.
To avoid to provide such a function we advice you to use the
`AudioTrack::new` and `VideoTrack::new` constructor when possible.
## `func`
The `GESCreateElementForGapFunc` that will be used
to create `gst::Element` to fill gaps
<!-- trait GESTrackExt::fn set_mixing -->
Sets if the `Track` should be mixing.
## `mixing`
TRUE if the track should be mixing, FALSE otherwise.
<!-- trait GESTrackExt::fn set_restriction_caps -->
Sets the given `caps` as the caps the track has to output.
## `caps`
the `gst::Caps` to set
<!-- trait GESTrackExt::fn set_timeline -->
Sets `timeline` as the timeline controlling `self`.
## `timeline`
a `Timeline`
<!-- trait GESTrackExt::fn update_restriction_caps -->
Updates the restriction caps by modifying all the fields present in `caps`
in the original restriction caps. If for example the current restriction caps
are video/x-raw, format=I420, width=360 and `caps` is video/x-raw, format=RGB,
the restriction caps will be updated to video/x-raw, format=RGB, width=360.
Modification happens for each structure in the new caps, and
one can add new fields or structures through that function.
## `caps`
the `gst::Caps` to update with
<!-- trait GESTrackExt::fn connect_track_element_added -->
Will be emitted after a track element was added to the track.
## `effect`
the `TrackElement` that was added.
<!-- trait GESTrackExt::fn connect_track_element_removed -->
Will be emitted after a track element was removed from the track.
## `effect`
the `TrackElement` that was removed.
<!-- trait GESTrackExt::fn get_property_caps -->
Caps used to filter/choose the output stream. This is generally set to
a generic set of caps like 'video/x-raw' for raw video.
Default value: `GST_CAPS_ANY`.
<!-- trait GESTrackExt::fn set_property_caps -->
Caps used to filter/choose the output stream. This is generally set to
a generic set of caps like 'video/x-raw' for raw video.
Default value: `GST_CAPS_ANY`.
<!-- trait GESTrackExt::fn get_property_duration -->
Current duration of the track
Default value: O
<!-- trait GESTrackExt::fn get_property_mixing -->
Whether layer mixing is activated or not on the track.
<!-- trait GESTrackExt::fn set_property_mixing -->
Whether layer mixing is activated or not on the track.
<!-- trait GESTrackExt::fn get_property_restriction_caps -->
Caps used to filter/choose the output stream.
Default value: `GST_CAPS_ANY`.
<!-- trait GESTrackExt::fn set_property_restriction_caps -->
Caps used to filter/choose the output stream.
Default value: `GST_CAPS_ANY`.
<!-- trait GESTrackExt::fn get_property_track_type -->
Type of stream the track outputs. This is used when creating the `Track`
to specify in generic terms what type of content will be outputted.
It also serves as a 'fast' way to check what type of data will be outputted
from the `Track` without having to actually check the `Track`'s caps
property.
<!-- trait GESTrackExt::fn set_property_track_type -->
Type of stream the track outputs. This is used when creating the `Track`
to specify in generic terms what type of content will be outputted.
It also serves as a 'fast' way to check what type of data will be outputted
from the `Track` without having to actually check the `Track`'s caps
property.
<!-- struct TrackElement -->
`TrackElement` is the Base Class for any object that can be contained in a
`Track`.
It contains the basic information as to the location of the object within
its container, like the start position, the inpoint, the duration and the
priority.
# Implements
[`TrackElementExt`](trait.TrackElementExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait TrackElementExt -->
Trait containing all `TrackElement` methods.
# Implementors
[`TrackElement`](struct.TrackElement.html)
<!-- trait TrackElementExt::fn add_children_props -->
Looks for the properties defines with the various parametters and add
them to the hashtable of children properties.
To be used by subclasses only
## `element`
The GstElement to retrieve properties from
## `wanted_categories`
An array of categories of GstElement to
take into account (as defined in the factory meta "klass" field)
## `blacklist`
A
blacklist of elements factory names to not take into account
## `whitelist`
A list
of propery names to add as children properties
<!-- trait TrackElementExt::fn edit -->
Edit `self` in the different exisiting `EditMode` modes. In the case of
slide, and roll, you need to specify a `Edge`
## `layers`
The layers you want the edit to
happen in, `None` means that the edition is done in all the
`GESLayers` contained in the current timeline.
FIXME: This is not implemented yet.
## `mode`
The `EditMode` in which the edition will happen.
## `edge`
The `Edge` the edit should happen on.
## `position`
The position at which to edit `self` (in nanosecond)
# Returns
`true` if the object as been edited properly, `false` if an error
occured
<!-- trait TrackElementExt::fn get_all_control_bindings -->
# Returns
A
`glib::HashTable` containing all property_name: GstControlBinding
<!-- trait TrackElementExt::fn get_child_properties -->
Gets properties of a child of `self`.
# Deprecated
Use `TimelineElementExt::get_child_properties`
## `first_property_name`
The name of the first property to get
<!-- trait TrackElementExt::fn get_child_property -->
In general, a copy is made of the property contents and
the caller is responsible for freeing the memory by calling
`gobject::Value::unset`.
Gets a property of a GstElement contained in `self`.
Note that `TrackElement::get_child_property` is really
intended for language bindings, `TrackElement::get_child_properties`
is much more convenient for C programming.
# Deprecated
Use `TimelineElementExt::get_child_property`
## `property_name`
The name of the property
## `value`
return location for the property value, it will
be initialized if it is initialized with 0
# Returns
`true` if the property was found, `false` otherwize
<!-- trait TrackElementExt::fn get_child_property_by_pspec -->
Gets a property of a child of `self`.
# Deprecated
Use `TimelineElementExt::get_child_property_by_pspec`
## `pspec`
The `gobject::ParamSpec` that specifies the property you want to get
## `value`
return location for the value
<!-- trait TrackElementExt::fn get_child_property_valist -->
Gets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
# Deprecated
Use `TimelineElementExt::get_child_property_valist`
## `first_property_name`
The name of the first property to get
## `var_args`
value for the first property, followed optionally by more
name/return location pairs, followed by NULL
<!-- trait TrackElementExt::fn get_control_binding -->
Looks up the various controlled properties for that `TrackElement`,
and returns the `gst::ControlBinding` which controls `property_name`.
## `property_name`
The property_name to which the binding is associated.
# Returns
the `gst::ControlBinding` associated with
`property_name`, or `None` if that property is not controlled.
<!-- trait TrackElementExt::fn get_element -->
Get the `gst::Element` this track element is controlling within GNonLin.
# Returns
the `gst::Element` this track element is controlling
within GNonLin.
<!-- trait TrackElementExt::fn get_gnlobject -->
Get the NleObject object this object is controlling.
# Deprecated
use `TrackElementExt::get_nleobject` instead.
# Returns
the NleObject object this object is controlling.
<!-- trait TrackElementExt::fn get_nleobject -->
Get the GNonLin object this object is controlling.
# Returns
the GNonLin object this object is controlling.
<!-- trait TrackElementExt::fn get_track -->
Get the `Track` to which this object belongs.
# Returns
The `Track` to which this object
belongs. Can be `None` if it is not in any track
<!-- trait TrackElementExt::fn is_active -->
Lets you know if `self` will be used for playback and rendering,
or not.
# Returns
`true` if `self` is active, `false` otherwize
<!-- trait TrackElementExt::fn list_children_properties -->
Gets an array of `gobject::ParamSpec`* for all configurable properties of the
children of `self`.
# Deprecated
Use `TimelineElementExt::list_children_properties`
## `n_properties`
return location for the length of the returned array
# Returns
an array of `gobject::ParamSpec`* which should be freed after use or
`None` if something went wrong
<!-- trait TrackElementExt::fn lookup_child -->
Looks up which `element` and `pspec` would be effected by the given `name`. If various
contained elements have this property name you will get the first one, unless you
specify the class name in `name`.
# Deprecated
Use `TimelineElementExt::lookup_child`
## `prop_name`
name of the property to look up. You can specify the name of the
class as such: "ClassName::property-name", to guarantee that you get the
proper GParamSpec in case various GstElement-s contain the same property
name. If you don't do so, you will get the first element found, having
this property and the and the corresponding GParamSpec.
## `element`
pointer to a `gst::Element` that
takes the real object to set property on
## `pspec`
pointer to take the `gobject::ParamSpec`
describing the property
# Returns
TRUE if `element` and `pspec` could be found. FALSE otherwise. In that
case the values for `pspec` and `element` are not modified. Unref `element` after
usage.
<!-- trait TrackElementExt::fn remove_control_binding -->
Removes a `gst::ControlBinding` from `self`.
## `property_name`
The name of the property to control.
# Returns
`true` if the binding could be removed, `false` if an error
occured
<!-- trait TrackElementExt::fn set_active -->
Sets the usage of the `self`. If `active` is `true`, the object will be used for
playback and rendering, else it will be ignored.
## `active`
visibility
# Returns
`true` if the property was toggled, else `false`
<!-- trait TrackElementExt::fn set_child_properties -->
Sets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
# Deprecated
Use `TimelineElementExt::set_child_properties`
## `first_property_name`
The name of the first property to set
<!-- trait TrackElementExt::fn set_child_property -->
Sets a property of a GstElement contained in `self`.
Note that `TrackElement::set_child_property` is really
intended for language bindings, `TrackElement::set_child_properties`
is much more convenient for C programming.
# Deprecated
use `TimelineElementExt::set_child_property` instead
## `property_name`
The name of the property
## `value`
the value
# Returns
`true` if the property was set, `false` otherwize
<!-- trait TrackElementExt::fn set_child_property_by_pspec -->
Sets a property of a child of `self`.
# Deprecated
Use `ges_timeline_element_set_child_property_by_spec`
## `pspec`
The `gobject::ParamSpec` that specifies the property you want to set
## `value`
the value
<!-- trait TrackElementExt::fn set_child_property_valist -->
Sets a property of a child of `self`. If there are various child elements
that have the same property name, you can distinguish them using the following
syntax: 'ClasseName::property_name' as property name. If you don't, the
corresponding property of the first element found will be set.
# Deprecated
Use `TimelineElementExt::set_child_property_valist`
## `first_property_name`
The name of the first property to set
## `var_args`
value for the first property, followed optionally by more
name/return location pairs, followed by NULL
<!-- trait TrackElementExt::fn set_control_source -->
Creates a `gst::ControlBinding` and adds it to the `gst::Element` concerned by the
property. Use the same syntax as `TrackElementExt::lookup_child` for
the property name.
## `source`
the `gst::ControlSource` to set on the binding.
## `property_name`
The name of the property to control.
## `binding_type`
The type of binding to create. Currently the following values are valid:
- "direct": See `gst_direct_control_binding_new`
- "direct-absolute": See `gst_direct_control_binding_new_absolute`
# Returns
`true` if the binding could be created and added, `false` if an error
occured
<!-- trait TrackElementExt::fn connect_control_binding_added -->
The control-binding-added signal is emitted each time a control binding
is added for a child property of `track_element`
## `control_binding`
the `gst::ControlBinding` that has been added
<!-- trait TrackElementExt::fn connect_control_binding_removed -->
The control-binding-removed signal is emitted each time a control binding
is removed for a child property of `track_element`
## `control_binding`
the `gst::ControlBinding` that has been removed
<!-- trait TrackElementExt::fn get_property_active -->
Whether the object should be taken into account in the `Track` output.
If `false`, then its contents will not be used in the resulting track.
<!-- trait TrackElementExt::fn set_property_active -->
Whether the object should be taken into account in the `Track` output.
If `false`, then its contents will not be used in the resulting track.
<!-- struct UriClip -->
Represents all the output streams from a particular uri. It is assumed that
the URI points to a file of some type.
# Implements
[`UriClipExt`](trait.UriClipExt.html), [`ClipExt`](trait.ClipExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html)
<!-- trait UriClipExt -->
Trait containing all `UriClip` methods.
# Implementors
[`UriClip`](struct.UriClip.html)
<!-- impl UriClip::fn new -->
Creates a new `UriClip` for the provided `uri`.
## `uri`
the URI the source should control
# Returns
The newly created `UriClip`, or
`None` if there was an error.
<!-- trait UriClipExt::fn get_uri -->
Get the location of the resource.
# Returns
The location of the resource.
<!-- trait UriClipExt::fn is_image -->
Lets you know if `self` is an image or not.
# Returns
`true` if `self` is a still image `false` otherwise.
<!-- trait UriClipExt::fn is_muted -->
Lets you know if the audio track of `self` is muted or not.
# Returns
`true` if the audio track of `self` is muted, `false` otherwise.
<!-- trait UriClipExt::fn set_is_image -->
Sets whether the clip is a still image or not.
## `is_image`
`true` if `self` is a still image, `false` otherwise
<!-- trait UriClipExt::fn set_mute -->
Sets whether the audio track of this clip is muted or not.
## `mute`
`true` to mute `self` audio track, `false` to unmute it
<!-- trait UriClipExt::fn get_property_is_image -->
Whether this uri clip represents a still image or not. This must be set
before create_track_elements is called.
<!-- trait UriClipExt::fn set_property_is_image -->
Whether this uri clip represents a still image or not. This must be set
before create_track_elements is called.
<!-- trait UriClipExt::fn get_property_mute -->
Whether the sound will be played or not.
<!-- trait UriClipExt::fn set_property_mute -->
Whether the sound will be played or not.
<!-- trait UriClipExt::fn get_property_uri -->
The location of the file/resource to use.
<!-- trait UriClipExt::fn set_property_uri -->
The location of the file/resource to use.
<!-- struct UriClipAsset -->
The `UriClipAsset` is a special `Asset` that lets you handle
the media file to use inside the GStreamer Editing Services. It has APIs that
let you get information about the medias. Also, the tags found in the media file are
set as Metadata of the Asset.
# Implements
[`UriClipAssetExt`](trait.UriClipAssetExt.html), [`AssetExt`](trait.AssetExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait UriClipAssetExt -->
Trait containing all `UriClipAsset` methods.
# Implementors
[`UriClipAsset`](struct.UriClipAsset.html)
<!-- impl UriClipAsset::fn finish -->
Finalize the request of an async `UriClipAsset`
Feature: `v1_16`
## `res`
The `gio::AsyncResult` from which to get the newly created `UriClipAsset`
# Returns
The `UriClipAsset` previously requested
<!-- impl UriClipAsset::fn new -->
Creates a `UriClipAsset` for `uri`
Example of request of a GESUriClipAsset:
```text
// The request callback
static void
filesource_asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
{
GError *error = NULL;
GESUriClipAsset *filesource_asset;
filesource_asset = ges_uri_clip_asset_finish (res, &error);
if (filesource_asset) {
g_print ("The file: %s is usable as a FileSource, it is%s an image and lasts %" GST_TIME_FORMAT,
ges_asset_get_id (GES_ASSET (filesource_asset))
ges_uri_clip_asset_is_image (filesource_asset) ? "" : " not",
GST_TIME_ARGS (ges_uri_clip_asset_get_duration (filesource_asset));
} else {
g_print ("The file: %s is *not* usable as a FileSource because: %s",
ges_asset_get_id (source), error->message);
}
gst_object_unref (mfs);
}
// The request:
ges_uri_clip_asset_new (uri, (GAsyncReadyCallback) filesource_asset_loaded_cb, user_data);
```
## `uri`
The URI of the file for which to create a `UriClipAsset`
## `cancellable`
optional `gio::Cancellable` object, `None` to ignore.
## `callback`
a `GAsyncReadyCallback` to call when the initialization is finished
## `user_data`
The user data to pass when `callback` is called
<!-- impl UriClipAsset::fn request_sync -->
Creates a `UriClipAsset` for `uri` syncronously. You should avoid
to use it in application, and rather create `UriClipAsset` asynchronously
## `uri`
The URI of the file for which to create a `UriClipAsset`.
You can also use multi file uris for `MultiFileSource`.
# Returns
A reference to the requested asset or `None` if
an error happened
<!-- trait UriClipAssetExt::fn get_duration -->
Gets duration of the file represented by `self`
# Returns
The duration of `self`
<!-- trait UriClipAssetExt::fn get_info -->
Gets `gst_pbutils::DiscovererInfo` about the file
# Returns
`gst_pbutils::DiscovererInfo` of specified asset
<!-- trait UriClipAssetExt::fn get_stream_assets -->
Get the GESUriSourceAsset `self` containes
# Returns
a
`glib::List` of `UriSourceAsset`
<!-- trait UriClipAssetExt::fn is_image -->
Gets Whether the file represented by `self` is an image or not
# Returns
Whether the file represented by `self` is an image or not
<!-- trait UriClipAssetExt::fn get_property_duration -->
The duration (in nanoseconds) of the media file
<!-- trait UriClipAssetExt::fn set_property_duration -->
The duration (in nanoseconds) of the media file
<!-- struct UriSourceAsset -->
NOTE: You should never request such a `Asset` as they will be created automatically
by `UriClipAsset`-s.
# Implements
[`UriSourceAssetExt`](trait.UriSourceAssetExt.html), [`AssetExt`](trait.AssetExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
<!-- trait UriSourceAssetExt -->
Trait containing all `UriSourceAsset` methods.
# Implementors
[`UriSourceAsset`](struct.UriSourceAsset.html)
<!-- trait UriSourceAssetExt::fn get_filesource_asset -->
Get the `UriClipAsset` `self_` is contained in
# Returns
a `UriClipAsset`
<!-- trait UriSourceAssetExt::fn get_stream_info -->
Get the `gst_pbutils::DiscovererStreamInfo` user by `self`
# Returns
a `UriClipAsset`