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 containing all `Asset` methods. # Implementors [`Asset`](struct.Asset.html), [`Project`](struct.Project.html) 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. 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` 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 Finalize the request of an async `Asset` ## `res` The `gio::AsyncResult` from which to get the newly created `Asset` # Returns The `Asset` previously requested 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` # Returns The `glib::Error` of the asset or `None` if the asset was loaded without issue Gets the type of object that can be extracted from `self` # Returns the type of object that can be extracted from `self` Gets the ID of a `Asset` # Returns The ID of `self` # Returns The proxy in use for `self` # Returns The `Asset` that is proxied by `self` # Returns The list of proxies `self` has. Note that the default asset to be used is always the first in that list. 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. 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. # Implements [`TrackElementExt`](trait.TrackElementExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html) 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 containing all `Clip` methods. # Implementors [`Clip`](struct.Clip.html) 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 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 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`. 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. Get the formats supported by `self`. # Returns The formats supported by `self`. 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. 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`. 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 Sets the formats supported by the file. ## `supportedformats` the `TrackType` defining formats supported by `self` 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. 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. 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. The formats supported by the clip. The formats supported by the clip. 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 containing all `Container` methods. # Implementors [`Clip`](struct.Clip.html), [`Container`](struct.Container.html), [`Group`](struct.Group.html) 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 Add the `TimelineElement` to the container. ## `child` the `TimelineElement` # Returns `true` on success, `false` on failure. 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 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`. Release the `child` from the control of `self`. ## `child` the `TimelineElement` to release # Returns `true` if the `child` was properly released, else `false`. 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. 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. Will be emitted after a child was removed from `container`. ## `element` the `TimelineElement` that was removed. The span of priorities which this container occupies. The edges of an object contain in a `Timeline` or `Track` Represents the start of an object. Represents the end of an object. Represent the fact we are not workin with any edge of an object. You can also find more explanation about the behaviour of those modes at: trim, ripple and roll`` and clip management``. The object is edited the normal way (default). 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. 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. 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. 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) # 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 containing all `Effect` methods. # Implementors [`Effect`](struct.Effect.html) 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. The description of the effect bin with a gst-launch-style pipeline description. Example: "videobalance saturation=1.5 hue=+0.5" The description of the effect bin with a gst-launch-style pipeline description. Example: "videobalance saturation=1.5 hue=+0.5" FIXME: Long description needed # Implements [`ExtractableExt`](trait.ExtractableExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html) 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) Method for getting an asset from a `Extractable` # Returns The `Asset` or `None` if none has been set # Returns The `id` of the associated `Asset`, free with `g_free` Method to set the asset which instantiated the specified object ## `asset` The `Asset` to set # Returns `true` if `asset` could be set `false` otherwize 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 containing all `Group` methods. # Implementors [`Group`](struct.Group.html) 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. The duration (in nanoseconds) which will be used in the container The duration (in nanoseconds) which will be used in the container 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. 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. The maximum duration (in nanoseconds) of the `Group`. The maximum duration (in nanoseconds) of the `Group`. The position of the object in its container (in nanoseconds). The position of the object in its container (in nanoseconds). 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 containing all `Layer` methods. # Implementors [`Layer`](struct.Layer.html) Creates a new `Layer`. # Returns A new `Layer` 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` 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. Gets whether transitions are automatically added when objects overlap or not. # Returns `true` if transitions are automatically added, else `false`. 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. 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`. 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 Get the priority of `self` within the timeline. # Returns The priority of the `self` within the 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. 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` 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. 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 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 Will be emitted after the clip was added to the layer. ## `clip` the `Clip` that was added. Will be emitted after the clip was removed from the layer. ## `clip` the `Clip` that was removed Sets whether transitions are added automagically when clips overlap. Sets whether transitions are added automagically when clips overlap. 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. 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. `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 containing all `Pipeline` methods. # Implementors [`Pipeline`](struct.Pipeline.html) Creates a new conveninence `Pipeline`. # Returns the new `Pipeline`. # Returns the `PipelineFlags` currently in use. 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` 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` 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` 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` 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` 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` 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`. 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`. 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` 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`. Audio sink for the preview. Audio sink for the preview. Pipeline mode. See `GESPipelineExt::set_mode` for more info. Pipeline mode. See `GESPipelineExt::set_mode` for more info. Timeline to use in this pipeline. See also `GESPipelineExt::set_timeline` for more info. Timeline to use in this pipeline. See also `GESPipelineExt::set_timeline` for more info. Video sink for the preview. Video sink for the preview. 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 containing all `Project` methods. # Implementors [`Project`](struct.Project.html) 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` 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 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 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 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`. ## `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 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 Retrieve the uri that is currently set on `self` # Returns a newly allocated string representing uri. 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 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` Loads `self` into `timeline` ## `timeline` A blank timeline to load `self` into # Returns `true` if the project could be loaded `false` otherwize. remove a `asset` to from `self`. ## `asset` A `Asset` to remove from `self` # Returns `true` if the asset could be removed `false` otherwise 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 ## `asset` The `Asset` that has been added to `project` ## `asset` The `Asset` that started loading ## `asset` The `Asset` that has been removed from `project` 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 ## `timeline` The `Timeline` that complete loading ```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` `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 containing all `Timeline` methods. # Implementors [`Timeline`](struct.Timeline.html) Creates a new empty `Timeline`. # Returns The new timeline. Creates a new `Timeline` containing a raw audio and a raw video track. # Returns The newly created `Timeline`. 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. 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`. 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`. 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`. 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 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 Gets whether transitions are automatically added when objects overlap or not. # Returns `true` if transitions are automatically added, else `false`. Get the current duration of `self` # Returns The current duration of `self` Gets a `TimelineElement` contained in the timeline # Returns The `TimelineElement` or `None` if not found. 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. 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 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. 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. 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 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. 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. Check whether a `Timeline` is empty or not # Returns `true` if the timeline is empty `false` otherwize 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. 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 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 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`. 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`. 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`. 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 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 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. Will be emitted after a new group is added to to the timeline. ## `group` the `Group` Will be emitted after a group has been removed from the timeline. ## `group` the `Group` ## `children` a list of `Container` Will be emitted after a new layer is added to the timeline. ## `layer` the `Layer` that was added to the timeline Will be emitted after the layer was removed from the timeline. ## `layer` the `Layer` that was removed from the timeline ## `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 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. 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. Will be emitted after the track was added to the timeline. ## `track` the `Track` that was added to the timeline Will be emitted after the track was removed from the timeline. ## `track` the `Track` that was removed from the timeline Sets whether transitions are added automagically when clips overlap. Sets whether transitions are added automagically when clips overlap. Current duration (in nanoseconds) of the `Timeline` Distance (in nanoseconds) from which a moving object will snap with it neighboors. 0 means no snapping. Distance (in nanoseconds) from which a moving object will snap with it neighboors. 0 means no snapping. 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 containing all `TimelineElement` methods. # Implementors [`Container`](struct.Container.html), [`TimelineElement`](struct.TimelineElement.html), [`TrackElement`](struct.TrackElement.html) Copies `self` ## `deep` whether we want to create the elements `self` contains or not # Returns The newly create `TimelineElement`, copied from `self` Gets properties of a child of `self`. ## `first_property_name` The name of the first property to get 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 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 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 # Returns The `duration` of `self` # Returns The `inpoint` of `self` 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. # Returns The `maxduration` of `self` Returns a copy of the name of `self`. Caller should `g_free` the return value after usage. # Returns The name of `self` 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. # Returns The `priority` of `self` # Returns The `start` of `self` 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. Gets the toplevel `TimelineElement` controlling `self` # Returns The toplevel controlling parent of `self` Gets all the TrackTypes `self` will interact with 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 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. 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` 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 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 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 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 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 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 Sets a property of a child of `self`. ## `pspec` The `gobject::ParamSpec` that specifies the property you want to set ## `value` the value 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 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. 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. Set the maximun duration of the object ## `maxduration` the maximum duration in `gst::ClockTime` # Returns `true` if `maxduration` could be set. 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<) 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. 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. 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. 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. 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 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 The duration (in nanoseconds) which will be used in the container The duration (in nanoseconds) which will be used in the container 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. 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. The maximum duration (in nanoseconds) of the `TimelineElement`. The maximum duration (in nanoseconds) of the `TimelineElement`. The name of the object The name of the object The parent container of the object The parent container of the object The priority of the object. Setting GESTimelineElement priorities is deprecated as all priority management is done by GES itself now. The priority of the object. Setting GESTimelineElement priorities is deprecated as all priority management is done by GES itself now. Whether the element should be serialized. Whether the element should be serialized. The position of the object in its container (in nanoseconds). The position of the object in its container (in nanoseconds). The timeline in which `element` is The timeline in which `element` is 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 containing all `Track` methods. # Implementors [`Track`](struct.Track.html) 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`. 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. 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 Get the `gst::Caps` this track is configured to output. # Returns The `gst::Caps` this track is configured to output. Gets the `TrackElement` contained in `self` # Returns the list of `TrackElement` present in the Track sorted by priority and start. Gets if the underlying `NleComposition` contains an expandable mixer. # Returns `True` if there is a mixer, `False` otherwise. Get the `Timeline` this track belongs to. Can be `None`. # Returns The `Timeline` this track belongs to. Can be `None`. 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). 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 Sets if the `Track` should be mixing. ## `mixing` TRUE if the track should be mixing, FALSE otherwise. Sets the given `caps` as the caps the track has to output. ## `caps` the `gst::Caps` to set Sets `timeline` as the timeline controlling `self`. ## `timeline` a `Timeline` 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 Will be emitted after a track element was added to the track. ## `effect` the `TrackElement` that was added. Will be emitted after a track element was removed from the track. ## `effect` the `TrackElement` that was removed. 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`. 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`. Current duration of the track Default value: O Whether layer mixing is activated or not on the track. Whether layer mixing is activated or not on the track. Caps used to filter/choose the output stream. Default value: `GST_CAPS_ANY`. Caps used to filter/choose the output stream. Default value: `GST_CAPS_ANY`. 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. 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. `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 containing all `TrackElement` methods. # Implementors [`TrackElement`](struct.TrackElement.html) 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 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 # Returns A `glib::HashTable` containing all property_name: GstControlBinding Gets properties of a child of `self`. # Deprecated Use `TimelineElementExt::get_child_properties` ## `first_property_name` The name of the first property to get 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 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 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 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. Get the `gst::Element` this track element is controlling within GNonLin. # Returns the `gst::Element` this track element is controlling within GNonLin. Get the NleObject object this object is controlling. # Deprecated use `TrackElementExt::get_nleobject` instead. # Returns the NleObject object this object is controlling. Get the GNonLin object this object is controlling. # Returns the GNonLin object this object is controlling. 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 Lets you know if `self` will be used for playback and rendering, or not. # Returns `true` if `self` is active, `false` otherwize 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 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. 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 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` 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 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 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 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 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 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 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 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. 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. 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 containing all `UriClip` methods. # Implementors [`UriClip`](struct.UriClip.html) 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. Get the location of the resource. # Returns The location of the resource. Lets you know if `self` is an image or not. # Returns `true` if `self` is a still image `false` otherwise. 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. Sets whether the clip is a still image or not. ## `is_image` `true` if `self` is a still image, `false` otherwise Sets whether the audio track of this clip is muted or not. ## `mute` `true` to mute `self` audio track, `false` to unmute it Whether this uri clip represents a still image or not. This must be set before create_track_elements is called. Whether this uri clip represents a still image or not. This must be set before create_track_elements is called. Whether the sound will be played or not. Whether the sound will be played or not. The location of the file/resource to use. The location of the file/resource to use. 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 containing all `UriClipAsset` methods. # Implementors [`UriClipAsset`](struct.UriClipAsset.html) 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 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 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 Gets duration of the file represented by `self` # Returns The duration of `self` Gets `gst_pbutils::DiscovererInfo` about the file # Returns `gst_pbutils::DiscovererInfo` of specified asset Get the GESUriSourceAsset `self` containes # Returns a `glib::List` of `UriSourceAsset` Gets Whether the file represented by `self` is an image or not # Returns Whether the file represented by `self` is an image or not The duration (in nanoseconds) of the media file The duration (in nanoseconds) of the media file 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 containing all `UriSourceAsset` methods. # Implementors [`UriSourceAsset`](struct.UriSourceAsset.html) Get the `UriClipAsset` `self_` is contained in # Returns a `UriClipAsset` Get the `gst_pbutils::DiscovererStreamInfo` user by `self` # Returns a `UriClipAsset`