diff --git a/Cargo.toml b/Cargo.toml index 319d09819..f5f5df086 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,4 +16,5 @@ members = [ "gstreamer-rtsp-server-sys", "gstreamer-webrtc-sys", "gstreamer-gl-sys", + "gstreamer-editing-services-sys", ] diff --git a/Gir_GstEditingServices.toml b/Gir_GstEditingServices.toml new file mode 100644 index 000000000..b661ec5e1 --- /dev/null +++ b/Gir_GstEditingServices.toml @@ -0,0 +1,19 @@ +[options] +girs_dir = "gir-files" +library = "GES" +version = "1.0" +min_cfg_version = "1.0" +target_path = "gstreamer-editing-services-sys" +work_mode = "sys" + +external_libraries = [ + "GLib", + "GObject", + "Gio", +] + +[external_libraries] +gstreamer="Gst" +gstreamer_base="GstBase" +gstreamer_pbutils="GstPbutils" + diff --git a/gir-files/GES-1.0.gir b/gir-files/GES-1.0.gir new file mode 100644 index 000000000..82e566537 --- /dev/null +++ b/gir-files/GES-1.0.gir @@ -0,0 +1,13157 @@ + + + + + + + + + + + + + The Assets in the GStreamer Editing Services represent the resources +that can be used. You can create assets for any type that implements the #GESExtractable +interface, for example #GESClips, #GESFormatter, and #GESTrackElement do implement it. +This means that assets will represent for example a #GESUriClips, #GESBaseEffect etc, +and then you can extract objects of those types with the appropriate parameters from the asset +using the #ges_asset_extract method: + +|[ +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 #GESAsset 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 #GESAsset through the #GESMetaContainer interface and you have a model for your +custom effects. Note that #GESAsset management is making easier thanks to the #GESProject class. + +Each asset is represented by a pair of @extractable_type and @id (string). Actually the @extractable_type +is the type that implements the #GESExtractable interface, that means that for example for a #GESUriClip, +the type that implements the #GESExtractable interface is #GESClip. +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 #GESAsset actually represents for that type. By default, +we only have one #GESAsset 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 #GESEffect 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 #GESAsset 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: +|[ + 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 ges_asset_request() or +ges_asset_request_async(). All the #GESAssets are cached and thus any asset that has already +been created can be requested again without overhead. + + + + + 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. + + %TRUE if the asset was in the cache and could be set as needing reload, +%FALSE otherwise. + + + + + The #GType of the object that can be extracted from the + asset to be reloaded. + + + + The identifier of the asset to mark as needing reload + + + + + + Create a #GESAsset 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 +#ges_uri_clip_asset_request_sync method if you really want to. + + A reference to the wanted #GESAsset or %NULL + + + + + The #GType of the object that can be extracted from the new asset. + + + + The Identifier or %NULL + + + + + + Request a new #GESAsset 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: +|[ +// 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); +]| + + + + + + The #GType of the object that can be extracted from the + new asset. The class must implement the #GESExtractable interface. + + + + 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 %NULL), 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 #GESExtractable +type you want to create a #GESAsset for. + + + + optional %GCancellable object, %NULL to ignore. + + + + a #GAsyncReadyCallback to call when the initialization is finished, +Note that the @source of the callback will be the #GESAsset, but you need to +make sure that the asset is properly loaded using the #ges_asset_request_finish +method. This asset can not be used as is. + + + + The user data to pass when @callback is called + + + + + + Finalize the request of an async #GESAsset + + The #GESAsset previously requested + + + + + The #GAsyncResult from which to get the newly created #GESAsset + + + + + + Extracts a new #GObject 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 +#ges_asset_get_extractable_type + + A newly created #GESExtractable + + + + + The #GESAsset to get extract an object from + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extracts a new #GObject 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 +#ges_asset_get_extractable_type + + A newly created #GESExtractable + + + + + The #GESAsset to get extract an object from + + + + + + + The #GError of the asset or %NULL if +the asset was loaded without issue + + + + + The asset to retrieve the error from + + + + + + Gets the type of object that can be extracted from @self + + the type of object that can be extracted from @self + + + + + The #GESAsset + + + + + + Gets the ID of a #GESAsset + + The ID of @self + + + + + The #GESAsset to get ID from + + + + + + + The proxy in use for @asset + + + + + The #GESAsset to get currenlty used proxy + + + + + + + The #GESAsset that is proxied by @proxy + + + + + The #GESAsset from which to get the the asset it proxies. + + + + + + + The list of proxies @asset has. Note that the default asset to be +used is always the first in that list. + + + + + + + The #GESAsset to get proxies from + + + + + + A proxying asset is an asset that can substitue the real @asset. For example if you +have a full HD #GESUriClipAsset you might want to set a lower resolution (HD version +of the same file) as proxy. Note that when an asset is proxied, calling +#ges_asset_request will actually return the proxy asset. + + %TRUE if @proxy has been set on @asset, %FALSE otherwise. + + + + + The #GESAsset to set proxy on + + + + The #GESAsset that should be used as default proxy for @asset or +%NULL if you want to use the currently set proxy. Note that an asset can proxy one and only +one other asset. + + + + + + Removes @proxy from the list of known proxies for @asset. +If @proxy was the current proxy for @asset, stop using it. + + %TRUE if @proxy was a known proxy for @asset, %FALSE otherwise. + + + + + The #GESAsset to stop proxying with @proxy + + + + The #GESAsset to stop considering as a proxy for @asset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A newly created #GESExtractable + + + + + The #GESAsset to get extract an object from + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## Children Properties + +You can use the following children properties through the +#ges_track_element_set_child_property and alike set of methods: + +<informaltable frame="none"> +<tgroup cols="3"> +<colspec colname="properties_type" colwidth="150px"/> +<colspec colname="properties_name" colwidth="200px"/> +<colspec colname="properties_flags" colwidth="400px"/> +<tbody> +<row> + <entry role="property_type"><link linkend="gdouble"><type>double</type></link></entry> + <entry role="property_name"><link linkend="GESAudioSource--volume">volume</link></entry> + <entry>volume factor, 1.0=100%.</entry> +</row> +<row> + <entry role="property_type"><link linkend="gboolean"><type>gboolean</type></link></entry> + <entry role="property_name"><link linkend="GESAudioSource--mute">mute</link></entry> + <entry>mute channel.</entry> +</row> +</tbody> +</tgroup> +</informaltable> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Outputs a test audio stream using audiotestsrc. The default property values +output silence. Useful for testing pipelines, or to fill gaps in an audio +track. + + + + Get the current frequency of @self. + + The current frequency of @self. + + + + + a #GESAudioTestSource + + + + + + Get the current volume of @self. + + The current volume of @self + + + + + a #GESAudioTestSource + + + + + + Lets you set the frequency applied on the track element + + + + + + a #GESAudioTestSource + + + + The frequency you want to apply on @self + + + + + + Sets the volume of the test audio signal. + + + + + + a #GESAudioTestSource + + + + The volume you want to apply on @self + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sane default properties to specify and fixate the output stream are +set as restriction-caps. +It is advised, to modify these properties, to use +#ges_track_update_restriction_caps, setting them directly is +possible through #ges_track_set_restriction_caps, but not specifying +one of them can lead to negotiation issues, only use that function +if you actually know what you're doing :) + +The default properties are: +- format: S32LE +- channels: 2 +- rate: 44100 +- layout: interleaved + + + + Creates a new #GESAudioTrack of type #GES_TRACK_TYPE_AUDIO and with generic +raw audio caps ("audio/x-raw"); + + A new #GESTrack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates a new #GESAudioTransition. + + The newly created #GESAudioTransition. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The location of the file/resource to use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + The effect will be applied on the sources that have lower priorities +(higher number) between the inpoint and the end of it. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A #GESClip is a 'natural' object which controls one or more +#GESTrackElement(s) in one or more #GESTrack(s). + +Keeps a reference to the #GESTrackElement(s) it created and +sets/updates their properties. + + + + + the #GESTrackElement to be used, or %NULL if it can't provide one +for the given @track. + + + + + a #GESClip + + + + a #GESTrackType + + + + + + + %TRUE on success %FALSE on failure. + + + + + + + a #GESClip + + + + a #GESTrackType + + + + + + Extracts a #GESTrackElement from @asset and adds it to the @clip. +Should only be called in order to add operations to a #GESClip, +ni other cases TrackElement are added automatically when adding the +#GESClip/#GESAsset to a layer. + +Takes a reference on @track_element. + + Created #GESTrackElement or NULL +if an error happened + + + + + a #GESClip + + + + a #GESAsset with #GES_TYPE_TRACK_ELEMENT as extractable_type + + + + + + Finds the #GESTrackElement controlled by @clip 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. + + The #GESTrackElement used by @track, +else %NULL. Unref after usage + + + + + a #GESClip + + + + a #GESTrack or NULL + + + + a #GType indicating the type of track element you are looking +for or %G_TYPE_NONE if you do not care about the track type. + + + + + + Finds all the #GESTrackElement controlled by @clip that is used in @track. You +may optionally specify a GType to further narrow search criteria. + + a #GList of the +#GESTrackElement contained in @clip. +The refcount of the objects will be increased. The user will have to +unref each #GESTrackElement and free the #GList. + + + + + + + a #GESClip + + + + a #GESTrack or NULL + + + + a #GESTrackType indicating the type of tracks in which elements +should be searched. + + + + a #GType indicating the type of track element you are looking +for or %G_TYPE_NONE if you do not care about the track type. + + + + + + Get the #GESLayer to which this clip belongs. + + The #GESLayer where this @clip is being +used, or %NULL if it is not used on any layer. The caller should unref it +usage. + + + + + a #GESClip + + + + + + Get the formats supported by @clip. + + The formats supported by @clip. + + + + + the #GESClip + + + + + + Gets the index position of an effect. + + The top index of the effect, -1 if something went wrong. + + + + + The origin #GESClip + + + + The #GESBaseEffect we want to get the top index from + + + + + + + + + + + + + + + + + + + Get effects applied on @clip + + a #GList of the +#GESBaseEffect that are applied on @clip order by ascendant priorities. +The refcount of the objects will be increased. The user will have to +unref each #GESBaseEffect and free the #GList. + + + + + + + The origin #GESClip + + + + + + Moves @clip to @layer. If @clip is not in any layer, it adds it to +@layer, else, it removes it from its current layer, and adds it to @layer. + + %TRUE if @clip could be moved %FALSE otherwize + + + + + a #GESClip + + + + the new #GESLayer + + + + + + Sets the formats supported by the file. + + + + + + the #GESClip to set supported formats on + + + + the #GESTrackType defining formats supported by @clip + + + + + + This is a convenience method that lets you set the index of a top effect. + + %TRUE if @effect was successfuly moved, %FALSE otherwise. + + + + + The origin #GESClip + + + + The #GESBaseEffect to move + + + + the new index at which to move the @effect inside this +#GESClip + + + + + + + + + + + + + + + + + + + + + + The function modifies @clip, and creates another #GESClip 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 @clip is in. This +implies that @clip must be in a #GESLayer 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 #GESEffect '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 @ges_effect_class_register_rate_property; +for the 'pitch' plugin, this is already done. + + The newly created #GESClip resulting +from the splitting or %NULL if the clip can't be split. + + + + + the #GESClip to split + + + + a #GstClockTime representing the timeline position at which to 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 #GESUriClipAsset is a special #GESAsset specilized in #GESClip. +it is mostly used to get information about the #GESTrackType-s the objects extracted +from it can potentialy create #GESTrackElement for. + + + + + Gets track types for which objects extracted from @self can create #GESTrackElement + + The track types on which @self will create TrackElement when added to +a layer + + + + + a #GESClipAsset + + + + + + Sets track types for which objects extracted from @self can create #GESTrackElement + + + + + + a #GESClipAsset + + + + The track types supported by the GESClipAsset + + + + + + The formats supported by the asset. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Subclasses can override the @create_track_element. + + + + + method to create a single #GESTrackElement for a given #GESTrack. + + + + method to create multiple #GESTrackElements for a +#GESTrack. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The #GESContainer base class. + + + + Groups the #GESContainer-s provided in @containers. It creates a subclass +of #GESContainer, depending on the containers provided in @containers. +Basically, if all the containers in @containers should be contained in a same +clip (all the #GESTrackElement they contain have the exact same +start/inpoint/duration and are in the same layer), it will create a #GESClip +otherwise a #GESGroup will be created + + The #GESContainer (subclass) resulting of the +grouping + + + + + The +#GESContainer to group, they must all be in a same #GESTimeline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Edit @container in the different exisiting #GESEditMode modes. In the case of +slide, and roll, you need to specify a #GESEdge + + %TRUE if the container as been edited properly, %FALSE if an error +occured + + + + + the #GESClip to edit + + + + The layers you want the edit to + happen in, %NULL means that the edition is done in all the + #GESLayers contained in the current timeline. + + + + + + The priority of the layer @container 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. + + + + The #GESEditMode in which the editition will happen. + + + + The #GESEdge the edit should happen on. + + + + The position at which to edit @container (in nanosecond) + + + + + + + + + + + + + + + + + + + Ungroups the #GESTimelineElement contained in this GESContainer, +creating new #GESContainer containing those #GESTimelineElement +apropriately. + + The list of +#GESContainer resulting from the ungrouping operation +The user is responsible for unreffing the contained objects +and freeing the list. + + + + + + + The #GESContainer to ungroup + + + + Wether to recursively ungroup @container + + + + + + Add the #GESTimelineElement to the container. + + %TRUE on success, %FALSE on failure. + + + + + a #GESContainer + + + + the #GESTimelineElement + + + + + + Edit @container in the different exisiting #GESEditMode modes. In the case of +slide, and roll, you need to specify a #GESEdge + + %TRUE if the container as been edited properly, %FALSE if an error +occured + + + + + the #GESClip to edit + + + + The layers you want the edit to + happen in, %NULL means that the edition is done in all the + #GESLayers contained in the current timeline. + + + + + + The priority of the layer @container 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. + + + + The #GESEditMode in which the editition will happen. + + + + The #GESEdge the edit should happen on. + + + + The position at which to edit @container (in nanosecond) + + + + + + Get the list of #GESTimelineElement contained in @container +The user is responsible for unreffing the contained objects +and freeing the list. + + The list of +timeline element contained in @container. + + + + + + + a #GESContainer + + + + Whether to recursively get children in @container + + + + + + Release the @child from the control of @container. + + %TRUE if the @child was properly released, else %FALSE. + + + + + a #GESContainer + + + + the #GESTimelineElement to release + + + + + + Ungroups the #GESTimelineElement contained in this GESContainer, +creating new #GESContainer containing those #GESTimelineElement +apropriately. + + The list of +#GESContainer resulting from the ungrouping operation +The user is responsible for unreffing the contained objects +and freeing the list. + + + + + + + The #GESContainer to ungroup + + + + Wether to recursively ungroup @container + + + + + + The span of priorities which this container occupies. + + + + + + + A list of TimelineElement +controlled by this Container. NOTE: Do not modify. + + + + + + The span of priorities this container occupies + + + + + + + + + + + + + + + + + + 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. + + + + + + the #GESTimelineElement that was added. + + + + + + Will be emitted after a child was removed from @container. + + + + + + the #GESTimelineElement that was removed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The list of +#GESContainer resulting from the ungrouping operation +The user is responsible for unreffing the contained objects +and freeing the list. + + + + + + + The #GESContainer to ungroup + + + + Wether to recursively ungroup @container + + + + + + + + + + + + + + + + + + + + + + + %TRUE if the container as been edited properly, %FALSE if an error +occured + + + + + the #GESClip to edit + + + + The layers you want the edit to + happen in, %NULL means that the edition is done in all the + #GESLayers contained in the current timeline. + + + + + + The priority of the layer @container 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. + + + + The #GESEditMode in which the editition will happen. + + + + The #GESEdge the edit should happen on. + + + + The position at which to edit @container (in nanosecond) + + + + + + + + + + + + + + + + + + A function that will be called to create the #GstElement that will be used +as a source to fill the gaps in @track. + + A #GstElement (must be a source) that will be used to +fill the gaps (periods of time in @track that containes no source). + + + + + the #GESTrack + + + + + + Creates the 'primary' track element for this @clip. + +Subclasses should implement this method if they only provide a +single #GESTrackElement per track. + +If the subclass needs to create more than one #GESTrackElement for a +given track, then it should implement the 'create_track_elements' +method instead. + +The implementer of this function shall return the proper #GESTrackElement +that should be controlled by @clip for the given @track. + +The returned #GESTrackElement will be automatically added to the list +of objects controlled by the #GESClip. + + the #GESTrackElement to be used, or %NULL if it can't provide one +for the given @track. + + + + + a #GESClip + + + + a #GESTrackType + + + + + + Create all track elements this clip handles for this type of track. + +Subclasses should implement this method if they potentially need to +return more than one #GESTrackElement(s) for a given #GESTrack. + + %TRUE on success %FALSE on failure. + + + + + + + a #GESClip + + + + a #GESTrackType + + + + + + The edges of an object contain in a #GESTimeline or #GESTrack + + 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: +<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>. + + 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) + + + + + + + Creates a new #GESEffect 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: +#ges_asset_request (GES_TYPE_EFFECT, "audio your ! bin ! description", NULL); +and extract that asset to be in full control. + + a newly created #GESEffect, or %NULL if something went +wrong. + + + + + The gst-launch like bin description of the effect + + + + + + The description of the effect bin with a gst-launch-style +pipeline description. + +Example: "videobalance saturation=1.5 hue=+0.5" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + + + + + Register an element that can change the rate at which media is playing. The +property type must be float or double, and must be a factor of the rate, +i.e. a value of 2.0 must mean that the media plays twice as fast. For +example, this is true for the properties 'rate' and 'tempo' of the element +'pitch', which is already registered by default. By registering the element, +timeline duration can be correctly converted into media duration, allowing +the right segment seeks to be sent to the sources. + +A reference to the GESEffectClass can be obtained as follows: + GES_EFFECT_CLASS (g_type_class_ref (GES_TYPE_EFFECT)); + + whether the rate property was succesfully registered. When this +method returns false, a warning is emitted with more information. + + + + + Instance of the GESEffectClass + + + + Name of the GstElement that changes the rate + + + + Name of the property that changes the rate + + + + + + + The effect will be applied on the sources that have lower priorities +(higher number) between the inpoint and the end of it. + + + + Creates a new #GESEffectClip from the description of the bin. + + a newly created #GESEffectClip, or +%NULL if something went wrong. + + + + + The gst-launch like bin description of the effect + + + + The gst-launch like bin description of the effect + + + + + + The description of the audio track of the effect bin with a gst-launch-style +pipeline description. This should be used for test purposes. + +Example: "audiopanorama panorama=1.0" + + + + The description of the video track of the effect bin with a gst-launch-style +pipeline description. This should be used for test purposes. + +Example: "videobalance saturation=1.5 hue=+0.5" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The ID passed is malformed + + + An error happened while loading the asset + + + The formatted files was malformed + + + + FIXME: Long description needed + + + + The #id of the associated #GESAsset, free with #g_free + + + + + The #GESExtractable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Method for getting an asset from a #GESExtractable + + The #GESAsset or %NULL if none has +been set + + + + + The #GESExtractable from which to retrieve a #GESAsset + + + + + + + The #id of the associated #GESAsset, free with #g_free + + + + + The #GESExtractable + + + + + + Method to set the asset which instantiated the specified object + + %TRUE if @asset could be set %FALSE otherwize + + + + + Target object + + + + The #GESAsset to set + + + + + + + + The ID to use for the asset or %NULL if @id is not valid + + + + + The #GType to check @id for: + + + + The id to check + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The #id of the associated #GESAsset, free with #g_free + + + + + The #GESExtractable + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A function that will be called when the GNonLin object of a corresponding +track element needs to be filled. + +The implementer of this function shall add the proper #GstElement to @nleobj +using gst_bin_add(). + + TRUE if the implementer succesfully filled the @nleobj, else #FALSE. + + + + + the #GESClip controlling the track elements + + + + the #GESTrackElement + + + + the GNonLin object that needs to be filled. + + + + + + Base class for timeline data serialization and deserialization. + + + Checks if there is a #GESFormatter available which can load a #GESTimeline +from the given URI. + + TRUE if there is a #GESFormatter that can support the given uri +or FALSE if not. + + + + + a #gchar * pointing to the URI + + + + + + Returns TRUE if there is a #GESFormatter available which can save a +#GESTimeline to the given URI. + + TRUE if the given @uri is supported, else FALSE. + + + + + a #gchar * pointing to a URI + + + + + + Get the default #GESAsset to use as formatter. It will return +the asset for the #GESFormatter that has the highest @rank + + The #GESAsset for the formatter with highest @rank + + + + + + + + + + + + + + + + + + Load data from the given URI into timeline. + + TRUE if the timeline data was successfully loaded from the URI, +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + + + Save data from timeline to the given URI. + + TRUE if the timeline data was successfully saved to the URI +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + %TRUE to overwrite file if it exists + + + + + + Load data from the given URI into timeline. + + TRUE if the timeline data was successfully loaded from the URI, +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + + + Save data from timeline to the given URI. + + TRUE if the timeline data was successfully saved to the URI +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + %TRUE to overwrite file if it exists + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GES Formatter class. Override the vmethods to implement the formatter functionnality. + + the parent class structure + + + + Whether the URI can be loaded + + + + class method to deserialize data from a URI + + + + class method to serialize data to a URI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Virtual method for loading a timeline from a given URI. + +Every #GESFormatter subclass needs to implement this method. + + TRUE if the timeline data was successfully loaded from the URI, +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + + + + + Virtual method for saving a timeline to a uri. + +Every #GESFormatter subclass needs to implement this method. + + TRUE if the timeline data was successfully saved to the URI +else FALSE. + + + + + a #GESFormatter + + + + a #GESTimeline + + + + a #gchar * pointing to a URI + + + + %TRUE to overwrite file if it exists + + + + + + A #GESGroup is an object which controls one or more +#GESClips in one or more #GESLayer(s). + +To instanciate a group, you should use the ges_container_group method, +this will be responsible for deciding what subclass of #GESContainer +should be instaciated to group the various #GESTimelineElement passed +in parametter. + + + + Created a new empty #GESGroup, if you want to group several container +together, it is recommanded to use the #ges_container_group method so the +proper subclass is selected. + + The new empty group. + + + + + The duration (in nanoseconds) which will be used in the container + + + + The in-point at which this #GESGroup 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 #GESGroup. + + + + + + + The position of the object in its container (in nanoseconds). + + + + + + + + + + + + + + + + + + + + + + + + + + + + Outputs the video stream from a given file as a still frame. The frame +chosen will be determined by the in-point property on the track element. For +image files, do not set the in-point property. + + + + The location of the file/resource to use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + + + Creates a new #GESLayer. + + A new #GESLayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates Clip from asset, adds it to layer and +returns a reference to it. + + Created #GESClip + + + + + a #GESLayer + + + + The asset to add to + + + + The start value to set on the new #GESClip, +if @start == GST_CLOCK_TIME_NONE, it will be set to +the current duration of @layer + + + + The inpoint value to set on the new #GESClip + + + + The duration value to set on the new #GESClip + + + + The #GESTrackType to set on the the new #GESClip + + + + + + 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 #GESTrackElement) +are constructed, you should connect to the container::child-added signal which +is emited right after those elements are ready to be used. + + %TRUE if the clip was properly added to the layer, or %FALSE +if the @layer refuses to add the clip. + + + + + a #GESLayer + + + + the #GESClip to add. + + + + + + Gets whether transitions are automatically added when objects +overlap or not. + + %TRUE if transitions are automatically added, else %FALSE. + + + + + a #GESLayer + + + + + + Get the clips this layer contains. + + a #GList of +clips. The user is responsible for +unreffing the contained objects and freeing the list. + + + + + + + a #GESLayer + + + + + + Gets the clips which appear between @start and @end on @layer. + + a #GList of clips intersecting [@start, @end) interval on @layer. + + + + + + + a #GESLayer + + + + start of the interval + + + + end of the interval + + + + + + Lets you retrieve the duration of the layer, which means +the end time of the last clip inside it + + The duration of a layer + + + + + The #GESLayer to get the duration from + + + + + + Get the priority of @layer within the timeline. + + The priority of the @layer within the timeline. + + + + + a #GESLayer + + + + + + Get the #GESTimeline in which #GESLayer currently is. + + the #GESTimeline in which #GESLayer +currently is or %NULL if not in any timeline yet. + + + + + The #GESLayer to get the parent #GESTimeline from + + + + + + Convenience method to check if @layer is empty (doesn't contain any clip), +or not. + + %TRUE if @layer is empty, %FALSE if it already contains at least +one #GESClip + + + + + The #GESLayer to check + + + + + + Removes the given @clip from the @layer and unparents it. +Unparenting it means the reference owned by @layer on the @clip will be +removed. If you wish to use the @clip after this function, make sure you +call gst_object_ref() before removing it from the @layer. + + %TRUE if the clip could be removed, %FALSE if the layer does +not want to remove the clip. + + + + + a #GESLayer + + + + the #GESClip to remove + + + + + + Sets the layer to the given @auto_transition. See the documentation of the +property auto_transition for more information. + + + + + + a #GESLayer + + + + whether the auto_transition is active + + + + + + Sets the layer to the given @priority. See the documentation of the +priority property for more information. + use #ges_timeline_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. + + + + + + a #GESLayer + + + + the priority to set + + + + + + + + + + + + + + + + + + + Sets whether transitions are added automagically when clips overlap. + + + + The priority of the layer in the #GESTimeline. 0 is the highest +priority. Conceptually, a #GESTimeline 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 #ges_timeline_commit) +for the change to be taken into account. + use #ges_timeline_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 #GESTimeline where this layer is being used. + + + + + + + + + + + + + + + + + + Will be emitted after the clip was added to the layer. + + + + + + the #GESClip that was added. + + + + + + Will be emitted after the clip was removed from the layer. + + + + + + the #GESClip that was removed + + + + + + + Subclasses can override the @get_objects if they can provide a more +efficient way of providing the list of contained #GESClip(s). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The description of an object, can be used in various context (string) + +The description + + + + The extension of the files produced by a formatter (string) + + + + Mimetype used for the file produced by a formatter (string) + +The mime type + + + + Name of a formatter it is used as ID of Formater assets (string) + +The name of the formatter + + + + The rank of a formatter (GstRank) + +The rank of a formatter + + + + The version of a formatter (double) + +The formatter version + + + + The version of the format in which a project is serialized + + + + The volume, can be used for audio track or layers + +The volume for a track or a layer, it is register as a float + + + + The default volume + +The default volume for a track or a layer as a float + + + + + + + Interface that allows reading and writing meta + + Deserializes a meta container. + + TRUE on success, FALSE if there was an error. + + + + + Target container + + + + a string created with ges_meta_container_metas_to_string() + + + + + + + + + + + + + + + + + + + + + + + + + Calls the given function for each metadata inside the meta container. Note +that if there is no metadata, the function won't be called at all. + + + + + + container to iterate over + + + + function to be called for each metadata + + + + user specified data + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns FALSE if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns %FALSE if @meta_item +can not be found. + + + + + + Gets the value of a given meta item, returns NULL if @key +can not be found. + + the #GValue corresponding to the meta with the given @key. + + + + + Target container + + + + The key name of the meta to retrieve + + + + + + + + + + + Target container + + + + Name of the meta item to get +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + + + + + + Target container + + + + Name of the meta item to get + + + + Destination to which value of meta item will be copied +Gets the value of a given meta item, returns NULL if @meta_item +can not be found. + + + + + + Serializes a meta container to a string. + + a newly-allocated string, or NULL in case of an error. +The string must be freed with g_free() when no longer needed. + + + + + a #GESMetaContainer + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the static meta could be added, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + + + + + + + + + + + + + + + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets a static meta on @container. This method lets you define static +metadatas, which means that the type of the registered will be the only +type accepted for this meta on that particular @container. + + %TRUE if the meta could be register, %FALSE otherwize + + + + + Target container + + + + The #GESMetaFlag to be used + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set +Sets the value of a given meta item + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + Sets the value of a given meta item + + %TRUE if the meta could be added, %FALSE otherwize + + + + + Target container + + + + Name of the meta item to set + + + + Value to set + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The metadata is readable + + + The metadata is writable + + + The metadata is readable and writable + + + + + + + + + + + + + + + + + + + + + + + Outputs the video stream from a given image sequence. The start frame +chosen will be determined by the in-point property on the track element. + + + + Creates a new #GESMultiFileSource for the provided @uri. + + A new #GESMultiFileSource. + + + + + the URI the source should control + + + + + + The uri of the file/resource to use. You can set a start index, +a stop index and a sequence pattern. +The format is &lt;multifile://start:stop\@location-pattern&gt;. +The pattern uses printf string formating. + +Example uris: + +multifile:///home/you/image\%03d.jpg + +multifile://20:50@/home/you/sequence/\%04d.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for overlays, transitions, and effects + + + + + + + + + + + + + + + + + + + + + + + + + + Operations are any kind of object that both outputs AND consumes data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overlays are objects which modify the underlying layer(s). + +Examples of overlays include text, image watermarks, or audio dubbing. + +Transitions, which change from one source to another over time, are +not considered overlays. + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + + + + + + + + + #GESPipeline allows developers to view and render #GESTimeline +in a simple fashion. +Its usage is inspired by the 'playbin' element from gst-plugins-base. + + + + Creates a new conveninence #GESPipeline. + + the new #GESPipeline. + + + + + + the #GESPipelineFlags currently in use. + + + + + a #GESPipeline + + + + + + Returns a #GstSample 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. + + a #GstSample or %NULL + + + + + a #GESPipeline in %GST_STATE_PLAYING or %GST_STATE_PAUSED + + + + caps specifying current format. Use %GST_CAPS_ANY +for native size. + + + + + + A convenience method for @ges_pipeline_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. + + a #GstSample or %NULL + + + + + a #GESPipeline in %GST_STATE_PLAYING or %GST_STATE_PAUSED + + + + the requested width or -1 for native size + + + + the requested height or -1 for native size + + + + + + Obtains a pointer to playsink's audio sink element that is used for +displaying audio when the #GESPipeline is in %GES_PIPELINE_MODE_PREVIEW + +The caller is responsible for unreffing the returned element with +#gst_object_unref. + + a pointer to the playsink audio sink #GstElement + + + + + a #GESPipeline + + + + + + Obtains a pointer to playsink's video sink element that is used for +displaying video when the #GESPipeline is in %GES_PIPELINE_MODE_PREVIEW + +The caller is responsible for unreffing the returned element with +#gst_object_unref. + + a pointer to the playsink video sink #GstElement + + + + + a #GESPipeline + + + + + + Sets playsink's audio sink element that is used for displaying audio when +the #GESPipeline is in %GES_PIPELINE_MODE_PREVIEW + + + + + + a #GESPipeline in %GST_STATE_NULL + + + + a audio sink #GstElement + + + + + + Sets playsink's video sink element that is used for displaying video when +the #GESPipeline is in %GES_PIPELINE_MODE_PREVIEW + + + + + + a #GESPipeline in %GST_STATE_NULL + + + + a video sink #GstElement + + + + + + Saves the current frame to the specified @location. + + %TRUE if the thumbnail was properly save, else %FALSE. + + + + + a #GESPipeline in %GST_STATE_PLAYING or %GST_STATE_PAUSED + + + + the requested width or -1 for native size + + + + the requested height or -1 for native size + + + + a string specifying the desired mime type (for example, +image/jpeg) + + + + the path to save the thumbnail + + + + + + switches the @pipeline to the specified @mode. The default mode when +creating a #GESPipeline is #GES_PIPELINE_MODE_PREVIEW. + +Note: The @pipeline 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 @pipeline to the requested state after calling this method. + + %TRUE if the mode was properly set, else %FALSE. + + + + + a #GESPipeline + + + + the #GESPipelineFlags to use + + + + + + 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 +#GES_PIPELINE_MODE_RENDER + + %TRUE if the settings were aknowledged properly, else %FALSE + + + + + a #GESPipeline + + + + the URI to which the timeline will be rendered + + + + the #GstEncodingProfile to use to render the timeline. + + + + + + Sets the timeline to use in this pipeline. + +The reference to the @timeline will be stolen by the @pipeline. + + %TRUE if the @timeline could be successfully set on the @pipeline, +else %FALSE. + + + + + a #GESPipeline + + + + the #GESTimeline to set on the @pipeline. + + + + + + + + + Audio sink for the preview. + + + + Pipeline mode. See ges_pipeline_set_mode() for more +info. + + + + Timeline to use in this pipeline. See also +ges_pipeline_set_timeline() for more info. + + + + + + + Video sink for the preview. + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + The various modes the #GESPipeline can be configured to. + + output audio to the soundcard + + + output video to the screen + + + output audio/video to soundcard/screen (default) + + + render timeline (forces decoding) + + + render timeline (tries to avoid decoding/reencoding) + + + + + + This is a legacy format and you should avoid to use it. The formatter +is really not in good shape and is deprecated. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The #GESProject is used to control a set of #GESAsset and is a +#GESAsset with #GES_TYPE_TIMELINE as @extractable_type itself. That +means that you can extract #GESTimeline from a project as followed: + +|[ + 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 #GESProject class offers a higher level API to handle #GESAsset-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 +#GstElement and lets you try to recover from those. + + + + + Creates a new #GESProject and sets its uri to @uri if provided. Note that +if @uri is not valid or %NULL, 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. + + A newly created #GESProject + + + + + The uri to be set after creating the project. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Adds a #Asset to @project, the project will keep a reference on +@asset. + + %TRUE if the asset could be added %FALSE it was already +in the project + + + + + A #GESProject + + + + A #GESAsset to add to @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. + + %TRUE if @profile could be added, %FALSE otherwize + + + + + A #GESProject + + + + A #GstEncodingProfile to add to the project. If a profile with +the same name already exists, it will be replaced + + + + + + Create and add a #GESAsset to @project. You should connect to the +"asset-added" signal to get the asset when it finally gets added to +@project + + %TRUE if the asset started to be added %FALSE it was already +in the project + + + + + A #GESProject + + + + The id of the asset to create and add to @project + + + + The #GType of the asset to create + + + + + + Create and add a #GESAsset to @project. You should connect to the +"asset-added" signal to get the asset when it finally gets added to +@project + + The newly created #GESAsset or %NULL. + + + + + A #GESProject + + + + The id of the asset to create and add to @project + + + + The #GType of the asset to create + + + + + + + The #GESAsset with +@id or %NULL if no asset with @id as an ID + + + + + A #GESProject + + + + The id of the asset to retrieve + + + + The extractable_type of the asset +to retrieve from @object + + + + + + Get the assets that are being loaded + + A set of loading asset +that will be added to @project. Note that those Asset are *not* loaded yet, +and thus can not be used + + + + + + + A #GESProject + + + + + + Retrieve the uri that is currently set on @project + + a newly allocated string representing uri. + + + + + A #GESProject + + + + + + List all @asset contained in @project filtering per extractable_type +as defined by @filter. It copies the asset and thus will not be updated +in time. + + The list of +#GESAsset the object contains + + + + + + + A #GESProject + + + + Type of assets to list, #GES_TYPE_EXTRACTABLE will list +all assets + + + + + + Lists the encoding profile that have been set to @project. The first one +is the latest added. + + The +list of #GstEncodingProfile used in @project + + + + + + + A #GESProject + + + + + + Loads @project into @timeline + + %TRUE if the project could be loaded %FALSE otherwize. + + + + + A #GESProject that has an @uri set already + + + + A blank timeline to load @project into + + + + + + remove a @asset to from @project. + + %TRUE if the asset could be removed %FALSE otherwise + + + + + A #GESProject + + + + A #GESAsset to remove from @project + + + + + + Save the timeline of @project to @uri. You should make sure that @timeline +is one of the timelines that have been extracted from @project +(using ges_asset_extract (@project);) + + %TRUE if the project could be save, %FALSE otherwize + + + + + A #GESProject to save + + + + The #GESTimeline to save, it must have been extracted from @project + + + + The uri where to save @project and @timeline + + + + The formatter asset to use or %NULL. If %NULL, +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 + + + + %TRUE to overwrite file if it exists + + + + + + + + + + + + + + + + + + + + + + + + + The #GESAsset that has been added to @project + + + + + + + + + + + The #GESAsset that started loading + + + + + + + + + + + The #GESAsset that has been removed from @project + + + + + + Informs you that a #GESAsset could not be created. In case of +missing GStreamer plugins, the error will be set to #GST_CORE_ERROR +#GST_CORE_ERROR_MISSING_PLUGIN + + + + + + The #GError defining the error that accured, might be %NULL + + + + The @id of the asset that failed loading + + + + The @extractable_type of the asset that +failed loading + + + + + + + + + + + The #GESTimeline that complete loading + + + + + + |[ +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)); +} +]| + + The new URI of @wrong_asset + + + + + The error that happened + + + + The asset with the wrong ID, you should us it and its content +only to find out what the new location is. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for single-media sources + + + + + + + + + + + + + + + + + + + + + + + + + + Base class for sources of a #GESLayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Useful for testing purposes. + +You can use the ges_asset_request_simple API to create an Asset +capable of extracting GESTestClip-s + + + + Creates a new #GESTestClip. + + The newly created #GESTestClip, +or %NULL if there was an error. + + + + + Creates a new #GESTestClip for the provided @nick. + + The newly created #GESTestClip, +or %NULL if there was an error. + + + + + the nickname for which to create the #GESTestClip + + + + + + Get the frequency @self generates. + + The frequency @self generates. See audiotestsrc element. + + + + + a #GESTestClip + + + + + + Get the volume of the test audio signal applied on @self. + + The volume of the test audio signal applied on @self. + + + + + a #GESTestClip + + + + + + Get the #GESVideoTestPattern which is applied on @self. + + The #GESVideoTestPattern which is applied on @self. + + + + + a #GESTestClip + + + + + + Let you know if the audio track of @self is muted or not. + + Whether the audio track of @self is muted or not. + + + + + a #GESTestClip + + + + + + Sets the frequency to generate. See audiotestsrc element. + + + + + + the #GESTestClip to set the frequency on + + + + the frequency you want to use on @self + + + + + + Sets whether the audio track of this clip is muted or not. + + + + + + the #GESTestClip on which to mute or unmute the audio track + + + + %TRUE to mute the audio track, %FALSE to unmute it + + + + + + Sets the volume of the test audio signal. + + + + + + the #GESTestClip to set the volume on + + + + the volume of the audio signal you want to use on @self + + + + + + Sets which video pattern to display on @self. + + + + + + the #GESTestClip to set the pattern on + + + + the #GESVideoTestPattern to use on @self + + + + + + The frequency to generate for audio track elements. + + + + Whether the sound will be played or not. + + + + The volume for the audio track elements. + + + + Video pattern to display in video track elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Horizontal alignment of the text. + + align text left + + + align text center + + + align text right + + + align text on xpos position + + + + + + + + + Creates a new #GESTextOverlay. + + The newly created #GESTextOverlay or +%NULL if something went wrong. + + + + + Get the color used by @source. + + The color used by @source. + + + + + a GESTextOverlay + + + + + + Get the pango font description currently set on @source. + + The pango font description currently set on @source. + + + + + a GESTextOverlay + + + + + + Get the horizontal aligment used by @source. + + The horizontal aligment used by @source. + + + + + a GESTextOverlay + + + + + + Get the text currently set on @source. + + The text currently set on @source. + + + + + a GESTextOverlay + + + + + + Get the vertical aligment used by @source. + + The vertical aligment used by @source. + + + + + a GESTextOverlay + + + + + + Get the horizontal position used by @source. + + The horizontal position used by @source. + + + + + a GESTextOverlay + + + + + + Get the vertical position used by @source. + + The vertical position used by @source. + + + + + a GESTextOverlay + + + + + + Sets the color of the text. + + + + + + the #GESTextOverlay* to set + + + + The color @self is being set to + + + + + + Sets the pango font description of the text this track element +will render. + + + + + + the #GESTextOverlay + + + + the pango font description + + + + + + Sets the horizontal aligment of the text. + + + + + + the #GESTextOverlay* to set text on + + + + The #GESTextHAlign defining the horizontal alignment +of the text render by @self. + + + + + + Sets the text this track element will render. + + + + + + the #GESTextOverlay* to set text on + + + + the text to render. an internal copy of this text will be +made. + + + + + + Sets the vertical aligment of the text. + + + + + + the #GESTextOverlay* to set text on + + + + The #GESTextVAlign defining the vertical alignment +of the text render by @self. + + + + + + Sets the horizontal position of the text. + + + + + + the #GESTextOverlay* to set + + + + The horizontal position @self is being set to + + + + + + Sets the vertical position of the text. + + + + + + the #GESTextOverlay* to set + + + + The vertical position @self is being set to + + + + + + + + + + + + + + + + + + + + + + + + + + + + Renders text onto the next lower priority stream using textrender. + + + + Creates a new #GESTextOverlayClip + + The newly created +#GESTextOverlayClip, or %NULL if there was an error. + + + + + Get the color used by @source. + + The color used by @source. + + + + + a #GESTextOverlayClip + + + + + + Get the pango font description used by @self. + + The pango font description used by @self. + + + + + a #GESTextOverlayClip + + + + + + Get the horizontal aligment used by @self. + + The horizontal aligment used by @self. + + + + + a #GESTextOverlayClip + + + + + + Get the text currently set on @self. + + The text currently set on @self. + + + + + a #GESTextOverlayClip + + + + + + Get the vertical aligment used by @self. + + The vertical aligment used by @self. + + + + + a #GESTextOverlayClip + + + + + + Get the horizontal position used by @source. + + The horizontal position used by @source. + + + + + a #GESTextOverlayClip + + + + + + Get the vertical position used by @source. + + The vertical position used by @source. + + + + + a #GESTextOverlayClip + + + + + + Sets the color of the text. + + + + + + the #GESTextOverlayClip* to set + + + + The color @self is being set to + + + + + + Sets the pango font description of the text + + + + + + the #GESTextOverlayClip* + + + + the pango font description + + + + + + Sets the horizontal aligment of the text. + + + + + + the #GESTextOverlayClip* to set horizontal alignement of text on + + + + #GESTextHAlign + + + + + + Sets the text this clip will render. + + + + + + the #GESTextOverlayClip* to set text on + + + + the text to render. an internal copy of this text will be +made. + + + + + + Sets the vertical aligment of the text. + + + + + + the #GESTextOverlayClip* to set vertical alignement of text on + + + + #GESTextVAlign + + + + + + Sets the horizontal position of the text. + + + + + + the #GESTextOverlayClip* to set + + + + The horizontal position @self is being set to + + + + + + Sets the vertical position of the text. + + + + + + the #GESTextOverlayClip* to set + + + + The vertical position @self is being set to + + + + + + The color of the text + + + + Pango font description string + + + + Horizontal alignment of the text + + + + The text to diplay + + + + Vertical alignent of the text + + + + The horizontal position of the text + + + + The vertical position of the text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vertical alignment of the text. + + draw text on the baseline + + + draw text on the bottom + + + draw text on top + + + draw text on ypos position + + + draw text on the center + + + + + + #GESTimeline is the central object for any multimedia timeline. + +Contains a list of #GESLayer which users should use to arrange the +various clips through time. + +The output type is determined by the #GESTrack that are set on +the #GESTimeline. + +To save/load a timeline, you can use the ges_timeline_load_from_uri() and +ges_timeline_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 #ges_timeline_commit method. + + + + + Creates a new empty #GESTimeline. + + The new timeline. + + + + + Creates a new #GESTimeline containing a raw audio and a +raw video track. + + The newly created #GESTimeline. + + + + + Creates a timeline from the given URI. + + A new timeline if the uri was loaded +successfully, or %NULL if the uri could not be loaded. + + + + + the URI to load from + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Add the layer to the timeline. The reference to the @layer will be stolen +by the @timeline. + + %TRUE if the layer was properly added, else %FALSE. + + + + + a #GESTimeline + + + + the #GESLayer to add + + + + + + Add a track to the timeline. The reference to the track will be stolen by the +pipeline. + + %TRUE if the track was properly added, else %FALSE. + + + + + a #GESTimeline + + + + the #GESTrack to add + + + + + + Append a newly created #GESLayer to @timeline +Note that you do not own any reference to the returned layer. + + The newly created #GESLayer, or the last (empty) +#GESLayer of @timeline. + + + + + a #GESTimeline + + + + + + Commit all the pending changes of the clips contained in the +@timeline. + +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 #GESTimeline::commited signal will be emitted when the (possibly updated) +#GstPipeline 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 #GESPipeline. + +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 #GESTimeline::commited signal. + +See #ges_timeline_commit_sync if you don't want to bother with waiting +for the signal. + + %TRUE if pending changes were commited or %FALSE if nothing needed +to be commited + + + + + a #GESTimeline + + + + + + Commit all the pending changes of the #GESClips contained in the +@timeline. + +Will return once the update is complete, that is when the +(possibly updated) #GstPipeline 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_element_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 #ges_timeline_commit for more information. + + %TRUE if pending changes were commited or %FALSE if nothing needed +to be commited + + + + + a #GESTimeline + + + + + + Gets whether transitions are automatically added when objects +overlap or not. + + %TRUE if transitions are automatically added, else %FALSE. + + + + + a #GESTimeline + + + + + + Get the current duration of @timeline + + The current duration of @timeline + + + + + a #GESTimeline + + + + + + Gets a #GESTimelineElement contained in the timeline + + The #GESTimelineElement or %NULL if +not found. + + + + + a #GESTimeline + + + + + + + + + Get the list of #GESGroup present in the Timeline. + + the list of +#GESGroup that contain clips present in the timeline's layers. +Must not be changed. + + + + + + + a #GESTimeline + + + + + + Retrieve the layer with @priority as a priority + + A #GESLayer or %NULL if no layer with +@priority was found + +Since 1.6 + + + + + The #GESTimeline to retrive a layer from + + + + The priority of the layer to find + + + + + + Get the list of #GESLayer present in the Timeline. + + the list of +#GESLayer present in the Timeline sorted by priority. +The caller should unref each Layer once he is done with them. + + + + + + + a #GESTimeline + + + + + + Search the #GstPad corresponding to the given @timeline's @track. + + The corresponding #GstPad if it is +found, or %NULL if there is an error. + + + + + The #GESTimeline + + + + The #GESTrack + + + + + + Gets the configured snapping distance of the timeline. See +the documentation of the property snapping_distance for more +information. + + The @snapping_distance property of the timeline + + + + + a #GESTimeline + + + + + + Search the #GESTrack corresponding to the given @timeline's @pad. + + The corresponding #GESTrack if it is +found, or %NULL if there is an error. + + + + + The #GESTimeline + + + + The #GstPad + + + + + + Returns the list of #GESTrack used by the Timeline. + + A list of #GESTrack. +The caller should unref each track once he is done with them. + + + + + + + a #GESTimeline + + + + + + Check whether a #GESTimeline is empty or not + + %TRUE if the timeline is empty %FALSE otherwize + + + + + a #GESTimeline + + + + + + Loads the contents of URI into the given timeline. + + %TRUE if the timeline was loaded successfully, or %FALSE if the uri +could not be loaded. + + + + + an empty #GESTimeline into which to load the formatter + + + + The URI to load from + + + + + + 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. + + + + + + The timeline in which @layer must be + + + + The layer to move at @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. + + Shallow copy of the @element pasted + + + + + The #GESTimeline onto which the #GESTimelineElement should be pasted + + + + The #GESTimelineElement to paste + + + + The position in the timeline the element should +be pasted to, meaning it will become the start of @element + + + + The #GESLayer to which the element should be pasted to. +-1 means paste to the same layer from which the @element has been copied from. + + + + + + Removes the layer from the timeline. The reference that the @timeline 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. + + %TRUE if the layer was properly removed, else %FALSE. + + + + + a #GESTimeline + + + + the #GESLayer to remove + + + + + + Remove the @track from the @timeline. 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. + + %TRUE if the @track was properly removed, else %FALSE. + + + + + a #GESTimeline + + + + the #GESTrack to remove + + + + + + Saves the timeline to the given location + + %TRUE if the timeline was successfully saved to the given location, +else %FALSE. + + + + + a #GESTimeline + + + + The location to save to + + + + The formatter asset to use or %NULL. If %NULL, +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 + + + + %TRUE to overwrite file if it exists + + + + + + Sets the layer to the given @auto_transition. See the documentation of the +property auto_transition for more information. + + + + + + a #GESLayer + + + + whether the auto_transition is active + + + + + + Sets the @snapping_distance of the timeline. See the documentation of the +property snapping_distance for more information. + + + + + + a #GESLayer + + + + whether the snapping_distance is active + + + + + + Sets whether transitions are added automagically when clips overlap. + + + + Current duration (in nanoseconds) of the #GESTimeline + + + + Distance (in nanoseconds) from which a moving object will snap +with it neighboors. 0 means no snapping. + + + + + + + A list of #GESLayer sorted by priority NOTE: Do not modify. + + + + + + A list of #GESTrack sorted by priority NOTE: Do not modify. + + + + + + + + + + + + + + This signal will be emitted once the changes initiated by #ges_timeline_commit +have been executed in the backend. Use #ges_timeline_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. + + + + + + the #GESGroup + + + + + + Will be emitted after a group has been removed from the timeline. + + + + + + the #GESGroup + + + + a list of #GESContainer + + + + + + + + Will be emitted after a new layer is added to the timeline. + + + + + + the #GESLayer that was added to the timeline + + + + + + Will be emitted after the layer was removed from the timeline. + + + + + + the #GESLayer that was removed from the timeline + + + + + + + a #GPtrArray of #GESTrack-s where that object should be added + + + + + + + The #GESClip on which @track_element will land + + + + The #GESTrackElement for which to choose the tracks it should land into + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Will be emitted after the track was added to the timeline. + + + + + + the #GESTrack that was added to the timeline + + + + + + Will be emitted after the track was removed from the timeline. + + + + + + the #GESTrack that was removed from the timeline + + + + + + + + parent class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + + + + + + + + + + + + + + + + Gets all the TrackTypes @self will interact with + + + + + + A #GESTimelineElement + + + + + + + + + + + + + + + + + + + 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. + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + + + + + + + + + + + + + + + + + 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. + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new start of @self in ripple mode. + + + + + + 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. + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new end (start + duration) of @self in ripple mode. It will + basically only change the duration of @self. + + + + + + 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. + + %TRUE if the self as been rolled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll. + + + + The new end (start + duration) of @self in roll mode + + + + + + 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. + + %TRUE if the self as been roll properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll + + + + The new start of @self in roll mode, it will also adapat +the in-point of @self according + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets the parent of @self to @parent. The parents needs to already +own a hard reference on @self. + + %TRUE if @parent could be set or %FALSE when @self +already had a parent or @self and @parent are the same. + + + + + a #GESTimelineElement + + + + new parent of self + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + %TRUE if the self as been trimmed properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to trim. + + + + The new start of @self in trim mode, will adapt the inpoint +of @self accordingly + + + + + + + + + + + + + + + + + + + + + + Copies @self + + The newly create #GESTimelineElement, copied from @self + + + + + The #GESTimelineElement to copy + + + + whether we want to create the elements @self contains or not + + + + + + Gets properties of a child of @self. + + + + + + The origin #GESTimelineElement + + + + The name of the first property to get + + + + return location for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + In general, a copy is made of the property contents and +the caller is responsible for freeing the memory by calling +g_value_unset(). + +Gets a property of a GstElement contained in @object. + +Note that #ges_timeline_element_get_child_property is really +intended for language bindings, #ges_timeline_element_get_child_properties +is much more convenient for C programming. + + %TRUE if the property was found, %FALSE otherwize + + + + + The origin #GESTimelineElement + + + + The name of the property + + + + return location for the property value, it will +be initialized if it is initialized with 0 + + + + + + Gets a property of a child of @self. + + + + + + a #GESTrackElement + + + + The #GParamSpec that specifies the property you want to get + + + + 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. + + + + + + The #GESTimelineElement parent object + + + + The name of the first property to get + + + + value for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + + The @duration of @self + + + + + a #GESTimelineElement + + + + + + + The @inpoint of @self + + + + + a #GESTimelineElement + + + + + + + The @maxduration of @self + + + + + a #GESTimelineElement + + + + + + Returns a copy of the name of @self. +Caller should g_free() the return value after usage. + + The name of @self + + + + + a #GESTimelineElement + + + + + + Returns the parent of @self. This function increases the refcount +of the parent object so you should gst_object_unref() it after usage. + + parent of @self, this can be %NULL if +@self has no parent. unref after usage. + + + + + a #GESTimelineElement + + + + + + + The @priority of @self + + + + + a #GESTimelineElement + + + + + + + The @start of @self + + + + + a #GESTimelineElement + + + + + + Returns the timeline of @self. This function increases the refcount +of the timeline so you should gst_object_unref() it after usage. + + timeline of @self, this can be %NULL if +@self has no timeline. unref after usage. + + + + + a #GESTimelineElement + + + + + + Gets the toplevel #GESTimelineElement controlling @self + + The toplevel controlling parent of @self + + + + + The #GESTimelineElement to get the toplevel parent from + + + + + + Gets all the TrackTypes @self will interact with + + + + + + A #GESTimelineElement + + + + + + Gets an array of #GParamSpec* for all configurable properties of the +children of @self. + + an array of #GParamSpec* which should be freed after use or +%NULL if something went wrong + + + + + + + The #GESTimelineElement to get the list of children properties from + + + + return location for the length of the returned array + + + + + + 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. + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + Paste @self inside the timeline. @self must have been created +using ges_timeline_element_copy with recurse=TRUE set, +otherwise it will fail. + + Paste @self copying the element + + + + + The #GESTimelineElement to paste + + + + The position in the timeline the element should +be copied to, meaning it will become the start of @self + + + + + + + + + + + + + + + + + + + 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. + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new start of @self in ripple mode. + + + + + + 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. + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new end (start + duration) of @self in ripple mode. It will + basically only change the duration of @self. + + + + + + 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. + + %TRUE if the self as been rolled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll. + + + + The new end (start + duration) of @self in roll mode + + + + + + 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. + + %TRUE if the self as been roll properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll + + + + The new start of @self in roll mode, it will also adapat +the in-point of @self according + + + + + + 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. + + + + + + The #GESTimelineElement parent object + + + + The name of the first property to set + + + + value for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + Sets a property of a child of @self + +Note that #ges_timeline_element_set_child_property is really +intended for language bindings, #ges_timeline_element_set_child_properties +is much more convenient for C programming. + + %TRUE if the property was set, %FALSE otherwize + + + + + The origin #GESTimelineElement + + + + The name of the property + + + + the value + + + + + + Sets a property of a child of @self. + + + + + + a #GESTimelineElement + + + + The #GParamSpec that specifies the property you want to set + + + + 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. + + + + + + The #GESTimelineElement parent object + + + + The name of the first property to set + + + + 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. + + + + + + a #GESTimelineElement + + + + the duration in #GstClockTime + + + + + + Set the in-point, that is the moment at which the @self will start +outputting data from its contents. + + + + + + a #GESTimelineElement + + + + the in-point in #GstClockTime + + + + + + Set the maximun duration of the object + + + + + + a #GESTimelineElement + + + + the maximum duration in #GstClockTime + + + + + + 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. + + + + + + a #GESTimelineElement + + + + 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. + + %TRUE if @parent could be set or %FALSE when @self +already had a parent or @self and @parent are the same. + + + + + a #GESTimelineElement + + + + new parent of self + + + + + + Sets the priority of the object within the containing layer + All priority management is done by GES itself now. +To set #GESEffect priorities #ges_clip_set_top_effect_index should +be used. + + + + + + a #GESTimelineElement + + + + the priority + + + + + + 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. + + + + + + a #GESTimelineElement + + + + the position in #GstClockTime + + + + + + Sets the timeline of @self to @timeline. + + %TRUE if @timeline could be set or %FALSE when @timeline +already had a timeline. + + + + + a #GESTimelineElement + + + + The #GESTimeline @self is in + + + + + + 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. + + %TRUE if the self as been trimmed properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to trim. + + + + The new start of @self in trim mode, will adapt the inpoint +of @self accordingly + + + + + + The duration (in nanoseconds) which will be used in the container + + + + The in-point at which this #GESTimelineElement 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 #GESTimelineElement. + + + + The name 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. + + + + Whether the element should be serialized. + + + + The position of the object in its container (in nanoseconds). + + + + The timeline in which @element is + + + + + + + The #GESTimelineElement that controls the object + + + + The #GESAsset from which the object has been extracted + + + + position (in time) of the object + + + + Position in the media from which the object should be used + + + + duration of the object to be used + + + + The maximum duration the object can have + + + + priority of the object in the layer (0:top priority) + + + + + + + + + + + + + + + + + + The deep notify signal is used to be notified of property changes of all +the childs of @timeline_element + + + + + + the object that originated the signal + + + + the property that changed + + + + + + + The GESTimelineElement base class. Subclasses should override at least +@set_start @set_inpoint @set_duration @ripple @ripple_end @roll_start +@roll_end and @trim. + +Vmethods in subclasses should apply all the operation they need to but +the real method implementation is in charge of setting the proper field, +and emit the notify signal. + + + + + + + %TRUE if @parent could be set or %FALSE when @self +already had a parent or @self and @parent are the same. + + + + + a #GESTimelineElement + + + + new parent of self + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new start of @self in ripple mode. + + + + + + + + + %TRUE if the self as been rippled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to ripple. + + + + The new end (start + duration) of @self in ripple mode. It will + basically only change the duration of @self. + + + + + + + + + %TRUE if the self as been roll properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll + + + + The new start of @self in roll mode, it will also adapat +the in-point of @self according + + + + + + + + + %TRUE if the self as been rolled properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to roll. + + + + The new end (start + duration) of @self in roll mode + + + + + + + + + %TRUE if the self as been trimmed properly, %FALSE if an error +occured + + + + + The #GESTimelineElement to trim. + + + + The new start of @self in trim mode, will adapt the inpoint +of @self accordingly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + + + + + + + + A #GESTimelineElement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Renders the given text in the specified font, at specified position, and +with the specified background pattern. + + + + Creates a new #GESTitleClip + + The newly created #GESTitleClip, +or %NULL if there was an error. + + + + + Get the background used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The color used by @self. + + + + + a #GESTitleClip + + + + + + Get the pango font description used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The pango font description used by @self. + + + + + a #GESTitleClip + + + + + + Get the horizontal aligment used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The horizontal aligment used by @self. + + + + + a #GESTitleClip + + + + + + Get the text currently set on @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The text currently set on @self. + + + + + a #GESTitleClip + + + + + + Get the color used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The color used by @self. + + + + + a #GESTitleClip + + + + + + Get the vertical aligment used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The vertical aligment used by @self. + + + + + a #GESTitleClip + + + + + + Get the horizontal position used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The horizontal position used by @self. + + + + + a #GESTitleClip + + + + + + Get the vertical position used by @self. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + The vertical position used by @self. + + + + + a #GESTitleClip + + + + + + Sets the background of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set + + + + The color @self is being set to + + + + + + Sets the color of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set + + + + The color @self is being set to + + + + + + Sets the pango font description of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* + + + + the pango font description + + + + + + Sets the horizontal aligment of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set horizontal alignement of text on + + + + #GESTextHAlign + + + + + + Sets the text this clip will render. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set text on + + + + the text to render. an internal copy of this text will be +made. + + + + + + Sets the vertical aligment of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set vertical alignement of text on + + + + #GESTextVAlign + + + + + + Sets the horizontal position of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set + + + + The horizontal position @self is being set to + + + + + + Sets the vertical position of the text. + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + the #GESTitleClip* to set + + + + The vertical position @self is being set to + + + + + + The background of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + The color of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + Pango font description string + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + Horizontal alignment of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + The text to diplay + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + Vertical alignent of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + The horizontal position of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + The vertical position of the text + use ges_track_element_get/set_children_properties on the +underlying GESTrackElement instead + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GESTitleSource is a GESTimelineElement that implements the notion +of titles in GES. + +## Children Properties + +You can use the following children properties through the +#ges_track_element_set_child_property and alike set of methods: +<informaltable frame="none"> +<tgroup cols="3"> +<colspec colname="properties_type" colwidth="150px"/> +<colspec colname="properties_name" colwidth="200px"/> +<colspec colname="properties_flags" colwidth="400px"/> +<tbody> +<row> + <entry role="property_type"><link linkend="guint"><type>guint</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--background">background</link></entry> + <entry>The color of the background</entry> +</row> +<row> + <entry role="property_type"><link linkend="guint"><type>guint</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--color">color</link></entry> + <entry>The color of the text</entry> +</row> +<row> + <entry role="property_type"><link linkend="gchar"><type>gchar</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--font-desc">font-desc</link></entry> + <entry>Pango font description string</entry> +</row> +<row> + <entry role="property_type"><link linkend="GESTextHAlign"><type>GESTextHAlign</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--halignment">halignment</link></entry> + <entry>Horizontal alignment of the text</entry> +</row> +<row> + <entry role="property_type"><link linkend="gchar"><type>gchar</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--text">text</link></entry> + <entry>The text to be rendered</entry> +</row> +<row> + <entry role="property_type"><link linkend="GESTextVAlign"><type>GESTextVAlign</type></link> + </entry><entry role="property_name"><link linkend="GESTileSource--valignment">valignment</link> + </entry><entry>Vertical alignent of the text</entry> +</row> +<row> + <entry role="property_type"><link linkend="gdouble"><type>gdouble</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--xpos">xpos</link></entry> + <entry>The horizontal position of the text</entry> +</row> +<row><entry role="property_type"><link linkend="gdouble"><type>gdouble</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--ypos">ypos</link></entry> + <entry>The vertical position of the text</entry> +</row> +<row><entry role="property_type"><link linkend="gboolean"><type>gboolean</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--shaded-background">shaded-background</link></entry> + <entry>Whether to shade the background under the text area</entry> +</row> +<row><entry role="property_type"><link linkend="guint"><type>guint</type></link></entry> + <entry role="property_name"><link linkend="GESTileSource--outline-color">outline-color</link></entry> + <entry>Color to use for outline the text (big-endian ARGB).</entry> +</row> +</tbody> +</tgroup> +</informaltable> + + + + Get the background used by @source. + + The background used by @source. + + + + + a #GESTitleSource + + + + + + Get the pango font description used by @source. + + The pango font description used by this +@source. + + + + + a #GESTitleSource + + + + + + Get the horizontal aligment used by @source. + + The horizontal aligment used by @source. + + + + + a #GESTitleSource + + + + + + Get the text currently set on the @source. + + The text currently set on the @source. + + + + + a #GESTitleSource + + + + + + Get the color used by @source. + + The color used by @source. + + + + + a #GESTitleSource + + + + + + Get the vertical aligment used by @source. + + The vertical aligment used by @source. + + + + + a #GESTitleSource + + + + + + Get the horizontal position used by @source. + + The horizontal position used by @source. + + + + + a #GESTitleSource + + + + + + Get the vertical position used by @source. + + The vertical position used by @source. + + + + + a #GESTitleSource + + + + + + Sets the color of the background + + + + + + the #GESTitleSource* to set + + + + the color @self is being set to + + + + + + Set the pango font description this source will use to render +the text. + + + + + + the #GESTitleSource + + + + the pango font description + + + + + + Sets the vertical aligment of the text. + + + + + + the #GESTitleSource* to set text on + + + + #GESTextHAlign + + + + + + Sets the text this track element will render. + use ges_track_element_get/set_children_properties on the +GESTrackElement instead + + + + + + the #GESTitleSource* to set text on + + + + the text to render. an internal copy of this text will be +made. + + + + + + Sets the color of the text. + + + + + + the #GESTitleSource* to set + + + + the color @self is being set to + + + + + + Sets the vertical aligment of the text. + + + + + + the #GESTitleSource* to set text on + + + + #GESTextVAlign + + + + + + Sets the horizontal position of the text. + + + + + + the #GESTitleSource* to set + + + + the horizontal position @self is being set to + + + + + + Sets the vertical position of the text. + + + + + + the #GESTitleSource* to set + + + + the color @self is being set to + + + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + + + Corresponds to one output format (i.e. audio OR video). + +Contains the compatible TrackElement(s). + + + + Creates a new #GESTrack 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. + + A new #GESTrack. + + + + + The type of track + + + + The caps to restrict the output of the track to. + + + + + + + + + + + + + + + + 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. + + #TRUE if the object was properly added. #FALSE if the track does not +want to accept the object. + + + + + a #GESTrack + + + + the #GESTrackElement to add + + + + + + 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. + + %TRUE if something as been commited %FALSE if nothing needed +to be commited + + + + + a #GESTrack + + + + + + Get the #GstCaps this track is configured to output. + + The #GstCaps this track is configured to output. + + + + + a #GESTrack + + + + + + Gets the #GESTrackElement contained in @track + + the list of +#GESTrackElement present in the Track sorted by priority and start. + + + + + + + a #GESTrack + + + + + + Gets if the underlying #NleComposition contains an expandable mixer. + + #True if there is a mixer, #False otherwise. + + + + + a #GESTrack + + + + + + Get the #GESTimeline this track belongs to. Can be %NULL. + + The #GESTimeline this track belongs to. Can be %NULL. + + + + + a #GESTrack + + + + + + Removes the object from the track and unparents it. +Unparenting it means the reference owned by @track on the @object will be +removed. If you wish to use the @object after this function, make sure you +call gst_object_ref() before removing it from the @track. + + #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). + + + + + a #GESTrack + + + + the #GESTrackElement to remove + + + + + + 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 +#ges_audio_track_new and #ges_video_track_new constructor when possible. + + + + + + a #GESTrack + + + + The #GESCreateElementForGapFunc that will be used +to create #GstElement to fill gaps + + + + + + Sets if the #GESTrack should be mixing. + + + + + + a #GESTrack + + + + TRUE if the track should be mixing, FALSE otherwise. + + + + + + Sets the given @caps as the caps the track has to output. + + + + + + a #GESTrack + + + + the #GstCaps to set + + + + + + Sets @timeline as the timeline controlling @track. + + + + + + a #GESTrack + + + + a #GESTimeline + + + + + + 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. + + + + + + a #GESTrack + + + + the #GstCaps to update with + + + + + + 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. + + + + 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 #GESTrack +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 #GESTrack without having to actually check the #GESTrack's caps +property. + + + + + + + a #GESTrackType indicting the basic type of the track. + + + + + + + + + + + + + + + + + Will be emitted after a track element was added to the track. + + + + + + the #GESTrackElement that was added. + + + + + + Will be emitted after a track element was removed from the track. + + + + + + the #GESTrackElement that was removed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GESTrackElement is the Base Class for any object that can be contained in a +#GESTrack. + +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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + Use #ges_timeline_element_lookup_child + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + Looks for the properties defines with the various parametters and add +them to the hashtable of children properties. + +To be used by subclasses only + + + + + + The #GESTrackElement to set chidlren props on + + + + The GstElement to retrieve properties from + + + + +An array of categories of GstElement to +take into account (as defined in the factory meta "klass" field) + + + + + + A +blacklist of elements factory names to not take into account + + + + + + A list +of propery names to add as children properties + + + + + + + + Edit @object in the different exisiting #GESEditMode modes. In the case of +slide, and roll, you need to specify a #GESEdge + + %TRUE if the object as been edited properly, %FALSE if an error +occured + + + + + the #GESTrackElement to edit + + + + The layers you want the edit to + happen in, %NULL means that the edition is done in all the + #GESLayers contained in the current timeline. + FIXME: This is not implemented yet. + + + + + + The #GESEditMode in which the edition will happen. + + + + The #GESEdge the edit should happen on. + + + + The position at which to edit @object (in nanosecond) + + + + + + + A +#GHashTable containing all property_name: GstControlBinding + + + + + + + + The #TrackElement from which to get all set bindings + + + + + + Gets properties of a child of @object. + Use #ges_timeline_element_get_child_properties + + + + + + The origin #GESTrackElement + + + + The name of the first property to get + + + + return location for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + In general, a copy is made of the property contents and +the caller is responsible for freeing the memory by calling +g_value_unset(). + +Gets a property of a GstElement contained in @object. + +Note that #ges_track_element_get_child_property is really +intended for language bindings, #ges_track_element_get_child_properties +is much more convenient for C programming. + Use #ges_timeline_element_get_child_property + + %TRUE if the property was found, %FALSE otherwize + + + + + The origin #GESTrackElement + + + + The name of the property + + + + return location for the property value, it will +be initialized if it is initialized with 0 + + + + + + Gets a property of a child of @object. + Use #ges_timeline_element_get_child_property_by_pspec + + + + + + a #GESTrackElement + + + + The #GParamSpec that specifies the property you want to get + + + + return location for the value + + + + + + Gets a property of a child of @object. 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. + Use #ges_timeline_element_get_child_property_valist + + + + + + The #GESTrackElement parent object + + + + The name of the first property to get + + + + value for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + Looks up the various controlled properties for that #GESTrackElement, +and returns the #GstControlBinding which controls @property_name. + + the #GstControlBinding associated with +@property_name, or %NULL if that property is not controlled. + + + + + the #GESTrackElement in which to lookup the bindings. + + + + The property_name to which the binding is associated. + + + + + + Get the #GstElement this track element is controlling within GNonLin. + + the #GstElement this track element is controlling +within GNonLin. + + + + + a #GESTrackElement + + + + + + Get the NleObject object this object is controlling. + use #ges_track_element_get_nleobject instead. + + the NleObject object this object is controlling. + + + + + a #GESTrackElement + + + + + + Get the GNonLin object this object is controlling. + + the GNonLin object this object is controlling. + + + + + a #GESTrackElement + + + + + + Get the #GESTrack to which this object belongs. + + The #GESTrack to which this object +belongs. Can be %NULL if it is not in any track + + + + + a #GESTrackElement + + + + + + + + + + + + + + + + Lets you know if @object will be used for playback and rendering, +or not. + + %TRUE if @object is active, %FALSE otherwize + + + + + a #GESTrackElement + + + + + + Gets an array of #GParamSpec* for all configurable properties of the +children of @object. + Use #ges_timeline_element_list_children_properties + + an array of #GParamSpec* which should be freed after use or +%NULL if something went wrong + + + + + + + The #GESTrackElement to get the list of children properties from + + + + return location for the length of the returned array + + + + + + 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. + Use #ges_timeline_element_lookup_child + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + Removes a #GstControlBinding from @object. + + %TRUE if the binding could be removed, %FALSE if an error +occured + + + + + the #GESTrackElement on which to set a control binding + + + + The name of the property to control. + + + + + + Sets the usage of the @object. If @active is %TRUE, the object will be used for +playback and rendering, else it will be ignored. + + %TRUE if the property was toggled, else %FALSE + + + + + a #GESTrackElement + + + + visibility + + + + + + Sets a property of a child of @object. 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. + Use #ges_timeline_element_set_child_properties + + + + + + The #GESTrackElement parent object + + + + The name of the first property to set + + + + value for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + Sets a property of a GstElement contained in @object. + +Note that #ges_track_element_set_child_property is really +intended for language bindings, #ges_track_element_set_child_properties +is much more convenient for C programming. + use #ges_timeline_element_set_child_property instead + + %TRUE if the property was set, %FALSE otherwize + + + + + The origin #GESTrackElement + + + + The name of the property + + + + the value + + + + + + Sets a property of a child of @object. + Use #ges_timeline_element_set_child_property_by_spec + + + + + + a #GESTrackElement + + + + The #GParamSpec that specifies the property you want to set + + + + the value + + + + + + Sets a property of a child of @object. 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. + Use #ges_timeline_element_set_child_property_valist + + + + + + The #GESTrackElement parent object + + + + The name of the first property to set + + + + value for the first property, followed optionally by more +name/return location pairs, followed by NULL + + + + + + Creates a #GstControlBinding and adds it to the #GstElement concerned by the +property. Use the same syntax as #ges_track_element_lookup_child for +the property name. + + %TRUE if the binding could be created and added, %FALSE if an error +occured + + + + + the #GESTrackElement on which to set a control binding + + + + the #GstControlSource to set on the binding. + + + + The name of the property to control. + + + + The type of binding to create. Only "direct" is available for now. + + + + + + + + + + + + + + + + + + + Whether the object should be taken into account in the #GESTrack output. +If #FALSE, then its contents will not be used in the resulting track. + + + + + + + + + + + + + + + + + + + + + + + + + + + The control-binding-added signal is emitted each time a control binding +is added for a child property of @track_element + + + + + + the #GstControlBinding 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 + + + + + + the #GstControlBinding that has been removed + + + + + + + + + + + Get the GESAssetTrackType the #GESTrackElement extracted from @self +should get into + + a #GESTrackType + + + + + A #GESAssetObject + + + + + + Set the #GESAssetTrackType the #GESTrackElement extracted from @self +should get into + + + + + + A #GESAssetObject + + + + A #GESTrackType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Subclasses can override the @create_gnl_object method to override what type +of GNonLin object will be created. + + + + + name of the GNonLin GStElementFactory type to use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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. + + + + + object to lookup the property in + + + + 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. + + + + pointer to a #GstElement that + takes the real object to set property on + + + + pointer to take the #GParamSpec + describing the property + + + + + + + + + + + + + + + + + Types of content handled by a track. If the content is not one of +@GES_TRACK_TYPE_AUDIO, @GES_TRACK_TYPE_VIDEO or @GES_TRACK_TYPE_TEXT, +the user of the #GESTrack must set the type to @GES_TRACK_TYPE_CUSTOM. + +@GES_TRACK_TYPE_UNKNOWN is for internal purposes and should not be used +by users + + A track of unknown type (i.e. invalid) + + + An audio track + + + A video track + + + A text (subtitle) track + + + A custom-content track + + + + + + + + + + + + + + Base class for media transitions. + + + + + + + + + + + + + + + + + + + + + + + + + + Creates an object that mixes together the two underlying objects, A and B. +The A object is assumed to have a higher prioirity (lower number) than the +B object. At the transition in point, only A will be visible, and by the +end only B will be visible. + +The shape of the video transition depends on the value of the "vtype" +property. The default value is "crossfade". For audio, only "crossfade" is +supported. + +The ID of the ExtractableType is the nickname of the vtype property value. Note +that this value can be changed after creation and the GESExtractable.asset value +will be updated when needed. + + + + Creates a new #GESTransitionClip. + + a newly created #GESTransitionClip, +or %NULL if something went wrong. + + + + + the type of transition to create + + + + + + Creates a new #GESTransitionClip for the provided @nick. + + The newly created #GESTransitionClip, +or %NULL if something went wrong + + + + + a string representing the type of transition to create + + + + + + a #GESVideoStandardTransitionType representing the wipe to use + + + + + + + a #GESVideoStandardTransitionType indicating the type of video transition +to apply. + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents all the output streams from a particular uri. It is assumed that +the URI points to a file of some type. + + + + Creates a new #GESUriClip for the provided @uri. + + The newly created #GESUriClip, or +%NULL if there was an error. + + + + + the URI the source should control + + + + + + Get the location of the resource. + + The location of the resource. + + + + + the #GESUriClip + + + + + + Lets you know if @self is an image or not. + + %TRUE if @self is a still image %FALSE otherwise. + + + + + the #GESUriClip + + + + + + Lets you know if the audio track of @self is muted or not. + + %TRUE if the audio track of @self is muted, %FALSE otherwise. + + + + + the #GESUriClip + + + + + + Sets whether the clip is a still image or not. + + + + + + the #GESUriClip + + + + %TRUE if @self is a still image, %FALSE otherwise + + + + + + Sets whether the audio track of this clip is muted or not. + + + + + + the #GESUriClip on which to mute or unmute the audio track + + + + %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 the sound will be played or not. + + + + + + + The location of the file/resource to use. + + + + + + + + + + + + + + + + The #GESUriClipAsset is a special #GESAsset 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 Metadatas of the Asser. + + + + + Creates a #GESUriClipAsset for @uri + +Example of request of a GESUriClipAsset: +|[ +// 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 (ges_asset_request_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); +]| + + + + + + The URI of the file for which to create a #GESUriClipAsset + + + + optional %GCancellable object, %NULL to ignore. + + + + a #GAsyncReadyCallback to call when the initialization is finished + + + + The user data to pass when @callback is called + + + + + + Creates a #GESUriClipAsset for @uri syncronously. You should avoid +to use it in application, and rather create #GESUriClipAsset asynchronously + + A reference to the requested asset or +%NULL if an error happened + + + + + The URI of the file for which to create a #GESUriClipAsset. +You can also use multi file uris for #GESMultiFileSource. + + + + + + Gets duration of the file represented by @self + + The duration of @self + + + + + a #GESUriClipAsset + + + + + + Gets #GstDiscovererInfo about the file + + #GstDiscovererInfo of specified asset + + + + + Target asset + + + + + + Get the GESUriSourceAsset @self containes + + a +#GList of #GESUriSourceAsset + + + + + + + A #GESUriClipAsset + + + + + + Gets Whether the file represented by @self is an image or not + + Whether the file represented by @self is an image or not + + + + + a #indent: Standard input:311: Error:Unexpected end of file +GESUriClipAsset + + + + + + The duration (in nanoseconds) of the media file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets the timeout of #GESUriClipAsset loading + + + + + + The #GESUriClipAssetClass on which to set the discoverer timeout + + + + The timeout to set + + + + + + + + + + + + + + + + + + + + + NOTE: You should never request such a #GESAsset as they will be created automatically +by #GESUriClipAsset-s. + + + + + Get the #GESUriClipAsset @self is contained in + + a #GESUriClipAsset + + + + + A #GESUriClipAsset + + + + + + Get the #GstDiscovererStreamInfo user by @asset + + a #GESUriClipAsset + + + + + A #GESUriClipAsset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # Children Properties: +You can use the following children properties through the +#ges_track_element_set_child_property and alike set of methods: + +<informaltable frame="none"> +<tgroup cols="3"> +<colspec colname="properties_type" colwidth="150px"/> +<colspec colname="properties_name" colwidth="200px"/> +<colspec colname="properties_flags" colwidth="400px"/> +<tbody> +<row> + <entry role="property_type"><link linkend="gdouble"><type>double</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--alpha">alpha</link></entry> + <entry>The desired alpha for the stream.</entry> +</row> +<row> + <entry role="property_type"><link linkend="gint"><type>gint</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--posx">posx</link></entry> + <entry>The desired x position for the stream.</entry> +</row> +<row> + <entry role="property_type"><link linkend="gint"><type>gint</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--posy">posy</link></entry> + <entry>The desired y position for the stream</entry> +</row> +<row> + <entry role="property_type"><link linkend="gint"><type>gint</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--width">width</link></entry> + <entry>The desired width for that source. Set to 0 if size is not mandatory, will be set to width of the current track.</entry> +</row> +<row> + <entry role="property_type"><link linkend="gint"><type>gint</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--height">height</link></entry> + <entry>The desired height for that source. Set to 0 if size is not mandatory, will be set to height of the current track.</entry> +</row> +<row> + <entry role="property_type"><link linkend="GstDeinterlaceModes"><type>GstDeinterlaceModes</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--deinterlace-mode">deinterlace-mode</link></entry> + <entry>Deinterlace Mode</entry> +</row> +<row> + <entry role="property_type"><link linkend="GstDeinterlaceFields"><type>GstDeinterlaceFields</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--deinterlace-fields">deinterlace-fields</link></entry> + <entry>Fields to use for deinterlacing</entry> +</row> +<row> + <entry role="property_type"><link linkend="GstDeinterlaceFieldLayout"><type>GstDeinterlaceFieldLayout</type></link></entry> + <entry role="property_name"><link linkend="GESVideoSource--deinterlace-tff">deinterlace-tff</link></entry> + <entry>Deinterlace top field first</entry> +</row> +</tbody> +</tgroup> +</informaltable> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transition type has not been set, + + + A bar moves from left to right, + + + A bar moves from top to bottom, + + + A box expands from the upper-left corner to the lower-right corner, + + + A box expands from the upper-right corner to the lower-left corner, + + + A box expands from the lower-right corner to the upper-left corner, + + + A box expands from the lower-left corner to the upper-right corner, + + + A box shape expands from each of the four corners toward the center, + + + A box shape expands from the center of each quadrant toward the corners of each quadrant, + + + A central, vertical line splits and expands toward the left and right edges, + + + A central, horizontal line splits and expands toward the top and bottom edges, + + + A box expands from the top edge's midpoint to the bottom corners, + + + A box expands from the right edge's midpoint to the left corners, + + + A box expands from the bottom edge's midpoint to the top corners, + + + A box expands from the left edge's midpoint to the right corners, + + + A diagonal line moves from the upper-left corner to the lower-right corner, + + + A diagonal line moves from the upper right corner to the lower-left corner, + + + Two wedge shapes slide in from the top and bottom edges toward the center, + + + Two wedge shapes slide in from the left and right edges toward the center, + + + A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners, + + + A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners, + + + Four wedge shapes split from the center and retract toward the four edges, + + + A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges, + + + A wedge shape moves from top to bottom, + + + A wedge shape moves from right to left, + + + A wedge shape moves from bottom to top, + + + A wedge shape moves from left to right, + + + A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, + + + A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, + + + A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, + + + A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, + + + A rectangle expands from the center., + + + A radial hand sweeps clockwise from the twelve o'clock position, + + + A radial hand sweeps clockwise from the three o'clock position, + + + A radial hand sweeps clockwise from the six o'clock position, + + + A radial hand sweeps clockwise from the nine o'clock position, + + + Two radial hands sweep clockwise from the twelve and six o'clock positions, + + + Two radial hands sweep clockwise from the nine and three o'clock positions, + + + Four radial hands sweep clockwise, + + + A fan unfolds from the top edge, the fan axis at the center, + + + A fan unfolds from the right edge, the fan axis at the center, + + + Two fans, their axes at the center, unfold from the top and bottom, + + + Two fans, their axes at the center, unfold from the left and right, + + + A radial hand sweeps clockwise from the top edge's midpoint, + + + A radial hand sweeps clockwise from the right edge's midpoint, + + + A radial hand sweeps clockwise from the bottom edge's midpoint, + + + A radial hand sweeps clockwise from the left edge's midpoint, + + + Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints, + + + Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints, + + + Two radial hands attached at the top and bottom edges' midpoints sweep from right to left, + + + Two radial hands attached at the left and right edges' midpoints sweep from top to bottom, + + + A fan unfolds from the bottom, the fan axis at the top edge's midpoint, + + + A fan unfolds from the left, the fan axis at the right edge's midpoint, + + + A fan unfolds from the top, the fan axis at the bottom edge's midpoint, + + + A fan unfolds from the right, the fan axis at the left edge's midpoint, + + + Two fans, their axes at the top and bottom, unfold from the center, + + + Two fans, their axes at the left and right, unfold from the center, + + + A radial hand sweeps clockwise from the upper-left corner, + + + A radial hand sweeps counter-clockwise from the lower-left corner., + + + A radial hand sweeps clockwise from the lower-right corner, + + + A radial hand sweeps counter-clockwise from the upper-right corner, + + + Two radial hands attached at the upper-left and lower-right corners sweep down and up, + + + Two radial hands attached at the lower-left and upper-right corners sweep down and up, + + + Two radial hands attached at the upper-left and upper-right corners sweep down, + + + Two radial hands attached at the upper-left and lower-left corners sweep to the right, + + + Two radial hands attached at the lower-left and lower-right corners sweep up, + + + Two radial hands attached at the upper-right and lower-right corners sweep to the left, + + + Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left, + + + Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom, + + + Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top, + + + Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left, + + + Crossfade + + + + The test pattern to produce + + A standard SMPTE test pattern + + + Random noise + + + A black image + + + A white image + + + A red image + + + A green image + + + A blue image + + + Checkers pattern (1px) + + + Checkers pattern (2px) + + + Checkers pattern (4px) + + + Checkers pattern (8px) + + + Circular pattern + + + Alternate between black and white + + + SMPTE test pattern (75% color bars) + + + Zone plate + + + Gamut checkers + + + Chroma zone plate + + + Solid color + + + + + + + Get the video pattern used by the @source. + + The video pattern used by the @source. + + + + + a #GESVideoTestPattern + + + + + + Sets the source to use the given @pattern. + + + + + + a #GESVideoTestSource + + + + a #GESVideoTestPattern + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates a new #GESVideoTrack of type #GES_TRACK_TYPE_VIDEO and with generic +raw video caps ("video/x-raw"); + + A new #GESTrack. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates a new #GESVideoTransition. + + The newly created +#GESVideoTransition, or %NULL if there was an error. + + + + + Get the border property of @self, this value represents +the border width of the transition. + + The border values of @self or -1 if not meaningful +(this will happen when not using a smpte transition). + + + + + The #GESVideoTransition to get the border from + + + + + + Get the transition type used by @trans. + + The transition type used by @trans. + + + + + a #GESVideoTransition + + + + + + Get the invert property of @self, this value represents +the direction of the transition. + + The invert value of @self + + + + + The #GESVideoTransition to get the inversion from + + + + + + Set the border property of @self, this value represents +the border width of the transition. In case this value does +not make sense for the current transition type, it is cached +for later use. + + + + + + The #GESVideoTransition to set the border to + + + + The value of the border to set on @object + + + + + + Set the invert property of @self, this value represents +the direction of the transition. In case this value does +not make sense for the current transition type, it is cached +for later use. + + + + + + The #GESVideoTransition to set invert on + + + + %TRUE if the transition should be inverted %FALSE otherwise + + + + + + Sets the transition being used to @type. + + %TRUE if the transition type was properly changed, else %FALSE. + + + + + a #GESVideoTransition + + + + a #GESVideoStandardTransitionType + + + + + + This value represents the border width of the transition. + + + + This value represents the direction of the transition. + + + + + + + + + + + + + + + + + + + + parent class + + + + + + + + + + + + + + + The location of the file/resource to use. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Clean up any resources created by GES in ges_init(). + +It is normally not needed to call this function in a normal application as the +resources will automatically be freed when the program terminates. +This function is therefore mostly used by testsuites and other memory profiling tools. + +After this call GES (including this method) should not be used anymore. + + + + + + Initialize the GStreamer Editing Service. Call this before any usage of +GES. You should take care of initilizing GStreamer before calling this +function. + + + + + + Initializes the GStreamer Editing Services library, setting up internal path lists, +and loading evrything needed. + +This function will return %FALSE if GES could not be initialized +for some reason. + + %TRUE if GES could be initialized. + + + + + pointer to application's argc + + + + pointer to application's argv + + + + + + + + Returns a #GOptionGroup with GES's argument specifications. The +group is set up to use standard GOption callbacks, so when using this +group in combination with GOption parsing methods, all argument parsing +and initialization is automated. + +This function is useful if you want to integrate GES with other +libraries that use GOption (see g_option_context_add_group() ). + +If you use this function, you should make sure you initialise the GStreamer +as one of the very first things in your program. That means you need to +use gst_init_get_option_group() and add it to the option context before +using the ges_init_get_option_group() result. + + a pointer to GES's option group. + + + + + List all @asset filtering per filter as defined by @filter. +It copies the asset and thus will not be updated in time. + + The list of +#GESAsset the object contains + + + + + + + Type of assets to list, #GES_TYPE_EXTRACTABLE will list +all assets + + + + + + Get the last buffer @playsink showed + + A #GstSample containing the last frame from +@playsink in the format defined by the @caps + + + + + The playsink to get last frame from + + + + The caps defining the format the return value will have + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the version number of the GStreamer Editing Services library. + + + + + + pointer to a guint to store the major version number + + + + pointer to a guint to store the minor version number + + + + pointer to a guint to store the micro version number + + + + pointer to a guint to store the nano version number + + + + + + diff --git a/gstreamer-editing-services-sys/Cargo.build b/gstreamer-editing-services-sys/Cargo.build new file mode 100644 index 000000000..e69de29bb diff --git a/gstreamer-editing-services-sys/Cargo.toml b/gstreamer-editing-services-sys/Cargo.toml new file mode 100644 index 000000000..9691d15ac --- /dev/null +++ b/gstreamer-editing-services-sys/Cargo.toml @@ -0,0 +1,56 @@ +[badges.travis-ci] +branch = "master" +repository = "sdroege/gstreamer-sys" + +[build-dependencies] +pkg-config = "0.3.7" + +[dependencies] +libc = "0.2" + +[dependencies.gio-sys] +git = "https://github.com/gtk-rs/sys" + +[dependencies.glib-sys] +git = "https://github.com/gtk-rs/sys" + +[dependencies.gobject-sys] +git = "https://github.com/gtk-rs/sys" + +[dependencies.gstreamer-base-sys] +path = "../gstreamer-base-sys" + +[dependencies.gstreamer-pbutils-sys] +path = "../gstreamer-pbutils-sys" + +[dependencies.gstreamer-sys] +path = "../gstreamer-sys" + +[dev-dependencies] +shell-words = "0.1.0" +tempdir = "0.3" + +[features] +dox = [] +v1_6 = [] +v1_8 = ["v1_6"] +v1_10 = ["v1_8"] +v1_12 = ["v1_10"] +v1_14 = ["v1_12"] +v1_16 = ["v1_14"] + +[lib] +name = "gstreamer_editing_services_sys" + +[package] +authors = ["Thibault Saunier ", "Sebastian Dröge "] +build = "build.rs" +description = "FFI bindings to libges-1.0" +homepage = "https://gstreamer.freedesktop.org" +keywords = ["ffi", "gstreamer", "gnome", "multimedia", "nle"] +license = "MIT" +links = "ges-1.0" +name = "gstreamer-editing-services-sys" +readme = "README.md" +repository = "https://github.com/sdroege/gstreamer-sys" +version = "0.7.0" diff --git a/gstreamer-editing-services-sys/README.md b/gstreamer-editing-services-sys/README.md new file mode 100644 index 000000000..d7415158b --- /dev/null +++ b/gstreamer-editing-services-sys/README.md @@ -0,0 +1,31 @@ +# gstreamer-editing-services-sys [![crates.io](https://img.shields.io/crates/v/gstreamer-sys.svg)](https://crates.io/crates/gstreamer-sys) [![Build Status](https://travis-ci.org/sdroege/gstreamer-sys.svg?branch=master)](https://travis-ci.org/sdroege/gstreamer-sys) + +[GStreamer](https://gstreamer.freedesktop.org/) (Editing Services) FFI bindings for Rust. + +These bindings are providing unsafe FFI API that can be used to interface with +GStreamer. Generally they are meant to be used as the building block for +higher-level abstractions like: + + * Application-side bindings for GStreamer: https://github.com/sdroege/gstreamer-rs + * Crate for writing GStreamer plugins in Rust: https://github.com/sdroege/gst-plugin-rs + +The bindings are autogenerated with [gir](https://github.com/gtk-rs/gir/) +based on the [GObject-Introspection](https://wiki.gnome.org/Projects/GObjectIntrospection/) +API metadata provided by the GStreamer project. + +## LICENSE + +gstreamer-sys and all crates contained here are licensed under the MIT +license ([LICENSE](LICENSE) or http://opensource.org/licenses/MIT). + +GStreamer itself is licensed under the Lesser General Public License version +2.1 or (at your option) any later version: +https://www.gnu.org/licenses/lgpl-2.1.html + +## Contribution + +Any kinds of contributions are welcome as a pull request. + +Unless you explicitly state otherwise, any contribution intentionally submitted +for inclusion in gstreamer-rs by you shall be licensed under the MIT license as above, +without any additional terms or conditions. diff --git a/gstreamer-editing-services-sys/build.rs b/gstreamer-editing-services-sys/build.rs new file mode 100644 index 000000000..7a02cce8a --- /dev/null +++ b/gstreamer-editing-services-sys/build.rs @@ -0,0 +1,72 @@ +extern crate pkg_config; + +use pkg_config::{Config, Error}; +use std::env; +use std::io::prelude::*; +use std::io; +use std::process; + +fn main() { + if let Err(s) = find() { + let _ = writeln!(io::stderr(), "{}", s); + process::exit(1); + } +} + +fn find() -> Result<(), Error> { + let package_name = "gst-editing-services-1.0"; + let shared_libs = ["ges-1.0"]; + let version = if cfg!(feature = "v1_14") { + "1.14" + } else if cfg!(feature = "v1_12") { + "1.12" + } else if cfg!(feature = "v1_10") { + "1.10" + } else if cfg!(feature = "v1_8") { + "1.8" + } else if cfg!(feature = "v1_6") { + "1.6" + } else { + "1.0" + }; + + if let Ok(lib_dir) = env::var("GTK_LIB_DIR") { + for lib_ in shared_libs.iter() { + println!("cargo:rustc-link-lib=dylib={}", lib_); + } + println!("cargo:rustc-link-search=native={}", lib_dir); + return Ok(()) + } + + let target = env::var("TARGET").expect("TARGET environment variable doesn't exist"); + let hardcode_shared_libs = target.contains("windows"); + + let mut config = Config::new(); + config.atleast_version(version); + config.print_system_libs(false); + if hardcode_shared_libs { + config.cargo_metadata(false); + } + match config.probe(package_name) { + Ok(library) => { + if hardcode_shared_libs { + for lib_ in shared_libs.iter() { + println!("cargo:rustc-link-lib=dylib={}", lib_); + } + for path in library.link_paths.iter() { + println!("cargo:rustc-link-search=native={}", + path.to_str().expect("library path doesn't exist")); + } + } + Ok(()) + } + Err(Error::EnvNoPkgConfig(_)) | Err(Error::Command { .. }) => { + for lib_ in shared_libs.iter() { + println!("cargo:rustc-link-lib=dylib={}", lib_); + } + Ok(()) + } + Err(err) => Err(err), + } +} + diff --git a/gstreamer-editing-services-sys/src/lib.rs b/gstreamer-editing-services-sys/src/lib.rs new file mode 100644 index 000000000..d8fa8a6fd --- /dev/null +++ b/gstreamer-editing-services-sys/src/lib.rs @@ -0,0 +1,3237 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir @ f5fca82) +// from gir-files (https://github.com/gtk-rs/gir-files @ ???) +// DO NOT EDIT + +#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)] +#![cfg_attr(feature = "cargo-clippy", allow(approx_constant, type_complexity, unreadable_literal))] + +extern crate libc; +extern crate glib_sys as glib; +extern crate gobject_sys as gobject; +extern crate gio_sys as gio; +extern crate gstreamer_sys as gst; +extern crate gstreamer_base_sys as gst_base; +extern crate gstreamer_pbutils_sys as gst_pbutils; + +#[allow(unused_imports)] +use libc::{c_int, c_char, c_uchar, c_float, c_uint, c_double, + c_short, c_ushort, c_long, c_ulong, + c_void, size_t, ssize_t, intptr_t, uintptr_t, time_t, FILE}; + +#[allow(unused_imports)] +use glib::{gboolean, gconstpointer, gpointer, GType}; + +// Enums +pub type GESAssetLoadingReturn = c_int; +pub const GES_ASSET_LOADING_ERROR: GESAssetLoadingReturn = 0; +pub const GES_ASSET_LOADING_ASYNC: GESAssetLoadingReturn = 1; +pub const GES_ASSET_LOADING_OK: GESAssetLoadingReturn = 2; + +pub type GESChildrenControlMode = c_int; +pub const GES_CHILDREN_UPDATE: GESChildrenControlMode = 0; +pub const GES_CHILDREN_IGNORE_NOTIFIES: GESChildrenControlMode = 1; +pub const GES_CHILDREN_UPDATE_OFFSETS: GESChildrenControlMode = 2; +pub const GES_CHILDREN_UPDATE_ALL_VALUES: GESChildrenControlMode = 3; +pub const GES_CHILDREN_LAST: GESChildrenControlMode = 4; + +pub type GESEdge = c_int; +pub const GES_EDGE_START: GESEdge = 0; +pub const GES_EDGE_END: GESEdge = 1; +pub const GES_EDGE_NONE: GESEdge = 2; + +pub type GESEditMode = c_int; +pub const GES_EDIT_MODE_NORMAL: GESEditMode = 0; +pub const GES_EDIT_MODE_RIPPLE: GESEditMode = 1; +pub const GES_EDIT_MODE_ROLL: GESEditMode = 2; +pub const GES_EDIT_MODE_TRIM: GESEditMode = 3; +pub const GES_EDIT_MODE_SLIDE: GESEditMode = 4; + +pub type GESError = c_int; +pub const GES_ERROR_ASSET_WRONG_ID: GESError = 0; +pub const GES_ERROR_ASSET_LOADING: GESError = 1; +pub const GES_ERROR_FORMATTER_MALFORMED_INPUT_FILE: GESError = 2; + +pub type GESTextHAlign = c_int; +pub const GES_TEXT_HALIGN_LEFT: GESTextHAlign = 0; +pub const GES_TEXT_HALIGN_CENTER: GESTextHAlign = 1; +pub const GES_TEXT_HALIGN_RIGHT: GESTextHAlign = 2; +pub const GES_TEXT_HALIGN_POSITION: GESTextHAlign = 4; +pub const GES_TEXT_HALIGN_ABSOLUTE: GESTextHAlign = 5; + +pub type GESTextVAlign = c_int; +pub const GES_TEXT_VALIGN_BASELINE: GESTextVAlign = 0; +pub const GES_TEXT_VALIGN_BOTTOM: GESTextVAlign = 1; +pub const GES_TEXT_VALIGN_TOP: GESTextVAlign = 2; +pub const GES_TEXT_VALIGN_POSITION: GESTextVAlign = 3; +pub const GES_TEXT_VALIGN_CENTER: GESTextVAlign = 4; +pub const GES_TEXT_VALIGN_ABSOLUTE: GESTextVAlign = 5; + +pub type GESVideoStandardTransitionType = c_int; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE: GESVideoStandardTransitionType = 0; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR: GESVideoStandardTransitionType = 1; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB: GESVideoStandardTransitionType = 2; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL: GESVideoStandardTransitionType = 3; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR: GESVideoStandardTransitionType = 4; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR: GESVideoStandardTransitionType = 5; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL: GESVideoStandardTransitionType = 6; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI: GESVideoStandardTransitionType = 7; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO: GESVideoStandardTransitionType = 8; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V: GESVideoStandardTransitionType = 21; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H: GESVideoStandardTransitionType = 22; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC: GESVideoStandardTransitionType = 23; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC: GESVideoStandardTransitionType = 24; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC: GESVideoStandardTransitionType = 25; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC: GESVideoStandardTransitionType = 26; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL: GESVideoStandardTransitionType = 41; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR: GESVideoStandardTransitionType = 42; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V: GESVideoStandardTransitionType = 43; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H: GESVideoStandardTransitionType = 44; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL: GESVideoStandardTransitionType = 45; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL: GESVideoStandardTransitionType = 46; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD: GESVideoStandardTransitionType = 47; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD: GESVideoStandardTransitionType = 48; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D: GESVideoStandardTransitionType = 61; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L: GESVideoStandardTransitionType = 62; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U: GESVideoStandardTransitionType = 63; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R: GESVideoStandardTransitionType = 64; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D: GESVideoStandardTransitionType = 65; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L: GESVideoStandardTransitionType = 66; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U: GESVideoStandardTransitionType = 67; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R: GESVideoStandardTransitionType = 68; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT: GESVideoStandardTransitionType = 101; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12: GESVideoStandardTransitionType = 201; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3: GESVideoStandardTransitionType = 202; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6: GESVideoStandardTransitionType = 203; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9: GESVideoStandardTransitionType = 204; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV: GESVideoStandardTransitionType = 205; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH: GESVideoStandardTransitionType = 206; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB: GESVideoStandardTransitionType = 207; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT: GESVideoStandardTransitionType = 211; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR: GESVideoStandardTransitionType = 212; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV: GESVideoStandardTransitionType = 213; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH: GESVideoStandardTransitionType = 214; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT: GESVideoStandardTransitionType = 221; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR: GESVideoStandardTransitionType = 222; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB: GESVideoStandardTransitionType = 223; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL: GESVideoStandardTransitionType = 224; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV: GESVideoStandardTransitionType = 225; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD: GESVideoStandardTransitionType = 226; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV: GESVideoStandardTransitionType = 227; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH: GESVideoStandardTransitionType = 228; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T: GESVideoStandardTransitionType = 231; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R: GESVideoStandardTransitionType = 232; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B: GESVideoStandardTransitionType = 233; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L: GESVideoStandardTransitionType = 234; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV: GESVideoStandardTransitionType = 235; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH: GESVideoStandardTransitionType = 236; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL: GESVideoStandardTransitionType = 241; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL: GESVideoStandardTransitionType = 242; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR: GESVideoStandardTransitionType = 243; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR: GESVideoStandardTransitionType = 244; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL: GESVideoStandardTransitionType = 245; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL: GESVideoStandardTransitionType = 246; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T: GESVideoStandardTransitionType = 251; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L: GESVideoStandardTransitionType = 252; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B: GESVideoStandardTransitionType = 253; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R: GESVideoStandardTransitionType = 254; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R: GESVideoStandardTransitionType = 261; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U: GESVideoStandardTransitionType = 262; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V: GESVideoStandardTransitionType = 263; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H: GESVideoStandardTransitionType = 264; +pub const GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE: GESVideoStandardTransitionType = 512; + +pub type GESVideoTestPattern = c_int; +pub const GES_VIDEO_TEST_PATTERN_SMPTE: GESVideoTestPattern = 0; +pub const GES_VIDEO_TEST_PATTERN_SNOW: GESVideoTestPattern = 1; +pub const GES_VIDEO_TEST_PATTERN_BLACK: GESVideoTestPattern = 2; +pub const GES_VIDEO_TEST_PATTERN_WHITE: GESVideoTestPattern = 3; +pub const GES_VIDEO_TEST_PATTERN_RED: GESVideoTestPattern = 4; +pub const GES_VIDEO_TEST_PATTERN_GREEN: GESVideoTestPattern = 5; +pub const GES_VIDEO_TEST_PATTERN_BLUE: GESVideoTestPattern = 6; +pub const GES_VIDEO_TEST_PATTERN_CHECKERS1: GESVideoTestPattern = 7; +pub const GES_VIDEO_TEST_PATTERN_CHECKERS2: GESVideoTestPattern = 8; +pub const GES_VIDEO_TEST_PATTERN_CHECKERS4: GESVideoTestPattern = 9; +pub const GES_VIDEO_TEST_PATTERN_CHECKERS8: GESVideoTestPattern = 10; +pub const GES_VIDEO_TEST_PATTERN_CIRCULAR: GESVideoTestPattern = 11; +pub const GES_VIDEO_TEST_PATTERN_BLINK: GESVideoTestPattern = 12; +pub const GES_VIDEO_TEST_PATTERN_SMPTE75: GESVideoTestPattern = 13; +pub const GES_VIDEO_TEST_ZONE_PLATE: GESVideoTestPattern = 14; +pub const GES_VIDEO_TEST_GAMUT: GESVideoTestPattern = 15; +pub const GES_VIDEO_TEST_CHROMA_ZONE_PLATE: GESVideoTestPattern = 16; +pub const GES_VIDEO_TEST_PATTERN_SOLID: GESVideoTestPattern = 17; + +// Constants +pub const GES_META_DESCRIPTION: *const c_char = b"description\0" as *const u8 as *const c_char; +pub const GES_META_FORMATTER_EXTENSION: *const c_char = b"extension\0" as *const u8 as *const c_char; +pub const GES_META_FORMATTER_MIMETYPE: *const c_char = b"mimetype\0" as *const u8 as *const c_char; +pub const GES_META_FORMATTER_NAME: *const c_char = b"name\0" as *const u8 as *const c_char; +pub const GES_META_FORMATTER_RANK: *const c_char = b"rank\0" as *const u8 as *const c_char; +pub const GES_META_FORMATTER_VERSION: *const c_char = b"version\0" as *const u8 as *const c_char; +pub const GES_META_FORMAT_VERSION: *const c_char = b"format-version\0" as *const u8 as *const c_char; +pub const GES_META_VOLUME: *const c_char = b"volume\0" as *const u8 as *const c_char; +pub const GES_META_VOLUME_DEFAULT: c_double = 1.000000; +pub const GES_MULTI_FILE_URI_PREFIX: *const c_char = b"multifile://\0" as *const u8 as *const c_char; +pub const GES_PADDING: c_int = 4; +pub const GES_PADDING_LARGE: c_int = 20; + +// Flags +pub type GESMetaFlag = c_uint; +pub const GES_META_READABLE: GESMetaFlag = 1; +pub const GES_META_WRITABLE: GESMetaFlag = 2; +pub const GES_META_READ_WRITE: GESMetaFlag = 3; + +pub type GESPipelineFlags = c_uint; +pub const GES_PIPELINE_MODE_PREVIEW_AUDIO: GESPipelineFlags = 1; +pub const GES_PIPELINE_MODE_PREVIEW_VIDEO: GESPipelineFlags = 2; +pub const GES_PIPELINE_MODE_PREVIEW: GESPipelineFlags = 3; +pub const GES_PIPELINE_MODE_RENDER: GESPipelineFlags = 4; +pub const GES_PIPELINE_MODE_SMART_RENDER: GESPipelineFlags = 8; + +pub type GESTrackType = c_uint; +pub const GES_TRACK_TYPE_UNKNOWN: GESTrackType = 1; +pub const GES_TRACK_TYPE_AUDIO: GESTrackType = 2; +pub const GES_TRACK_TYPE_VIDEO: GESTrackType = 4; +pub const GES_TRACK_TYPE_TEXT: GESTrackType = 8; +pub const GES_TRACK_TYPE_CUSTOM: GESTrackType = 16; + +// Unions +#[repr(C)] +#[derive(Copy, Clone)] +pub union GESVideoSourceClass_ABI { + pub _ges_reserved: [gpointer; 4], + pub abi: GESVideoSourceClass_ABI_abi, +} + +impl ::std::fmt::Debug for GESVideoSourceClass_ABI { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoSourceClass_ABI @ {:?}", self as *const _)) + .field("_ges_reserved", unsafe { &self._ges_reserved }) + .field("abi", unsafe { &self.abi }) + .finish() + } +} + +// Callbacks +pub type GESCreateElementForGapFunc = Option *mut gst::GstElement>; +pub type GESCreateTrackElementFunc = Option *mut GESTrackElement>; +pub type GESCreateTrackElementsFunc = Option *mut glib::GList>; +pub type GESExtractableCheckId = Option *mut c_char>; +pub type GESFillTrackElementFunc = Option gboolean>; +pub type GESFormatterCanLoadURIMethod = Option gboolean>; +pub type GESFormatterLoadFromURIMethod = Option gboolean>; +pub type GESFormatterSaveToURIMethod = Option gboolean>; +pub type GESMetaForeachFunc = Option; + +// Records +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAssetClass { + pub parent: gobject::GObjectClass, + pub start_loading: Option GESAssetLoadingReturn>, + pub extract: Option *mut GESExtractable>, + pub inform_proxy: Option, + pub proxied: Option, + pub request_id_update: Option gboolean>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAssetClass @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("start_loading", &self.start_loading) + .field("extract", &self.extract) + .field("inform_proxy", &self.inform_proxy) + .field("proxied", &self.proxied) + .field("request_id_update", &self.request_id_update) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioSourceClass { + pub parent_class: GESSourceClass, + pub create_source: Option *mut gst::GstElement>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioSourceClass @ {:?}", self as *const _)) + .field("create_source", &self.create_source) + .finish() + } +} + +#[repr(C)] +pub struct GESAudioSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESAudioSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTestSourceClass { + pub parent_class: GESAudioSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTestSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTestSourceClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESAudioTestSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESAudioTestSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTestSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTrackClass { + pub parent_class: GESTrackClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTrackClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTrackClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESAudioTrackPrivate(c_void); + +impl ::std::fmt::Debug for GESAudioTrackPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTrackPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTransitionClass { + pub parent_class: GESTransitionClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTransitionClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTransitionClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESAudioTransitionPrivate(c_void); + +impl ::std::fmt::Debug for GESAudioTransitionPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTransitionPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioUriSourceClass { + pub parent_class: GESAudioSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioUriSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioUriSourceClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESAudioUriSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESAudioUriSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioUriSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseEffectClass { + pub parent_class: GESOperationClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseEffectClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffectClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseEffectClipClass { + pub parent_class: GESOperationClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseEffectClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffectClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESBaseEffectClipPrivate(c_void); + +impl ::std::fmt::Debug for GESBaseEffectClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffectClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESBaseEffectPrivate(c_void); + +impl ::std::fmt::Debug for GESBaseEffectPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffectPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseTransitionClipClass { + pub parent_class: GESOperationClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseTransitionClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseTransitionClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESBaseTransitionClipPrivate(c_void); + +impl ::std::fmt::Debug for GESBaseTransitionClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseTransitionClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseXmlFormatterClass { + pub parent: GESFormatterClass, + pub content_parser: glib::GMarkupParser, + pub save: Option *mut glib::GString>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseXmlFormatterClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseXmlFormatterClass @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("content_parser", &self.content_parser) + .field("save", &self.save) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESBaseXmlFormatterPrivate(c_void); + +impl ::std::fmt::Debug for GESBaseXmlFormatterPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseXmlFormatterPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESClipAssetClass { + pub parent: GESAssetClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESClipAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClipAssetClass @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESClipAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESClipAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClipAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESClipClass { + pub parent_class: GESContainerClass, + pub create_track_element: GESCreateTrackElementFunc, + pub create_track_elements: GESCreateTrackElementsFunc, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClipClass @ {:?}", self as *const _)) + .field("create_track_element", &self.create_track_element) + .field("create_track_elements", &self.create_track_elements) + .finish() + } +} + +#[repr(C)] +pub struct GESClipPrivate(c_void); + +impl ::std::fmt::Debug for GESClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESCommandLineFormatterClass { + pub parent_class: GESFormatterClass, +} + +impl ::std::fmt::Debug for GESCommandLineFormatterClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESCommandLineFormatterClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +pub struct GESCommandLineFormatterPrivate(c_void); + +impl ::std::fmt::Debug for GESCommandLineFormatterPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESCommandLineFormatterPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESContainerClass { + pub parent_class: GESTimelineElementClass, + pub child_added: Option, + pub child_removed: Option, + pub add_child: Option gboolean>, + pub remove_child: Option gboolean>, + pub ungroup: Option *mut glib::GList>, + pub group: Option *mut GESContainer>, + pub edit: Option gboolean>, + pub grouping_priority: c_uint, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESContainerClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESContainerClass @ {:?}", self as *const _)) + .field("child_added", &self.child_added) + .field("child_removed", &self.child_removed) + .field("add_child", &self.add_child) + .field("remove_child", &self.remove_child) + .field("ungroup", &self.ungroup) + .field("group", &self.group) + .field("edit", &self.edit) + .finish() + } +} + +#[repr(C)] +pub struct GESContainerPrivate(c_void); + +impl ::std::fmt::Debug for GESContainerPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESContainerPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffectAssetClass { + pub parent_class: GESTrackElementAssetClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffectAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectAssetClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESEffectAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESEffectAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffectClass { + pub parent_class: GESBaseEffectClass, + pub rate_properties: *mut glib::GList, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffectClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffectClipClass { + pub parent_class: GESBaseEffectClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffectClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESEffectClipPrivate(c_void); + +impl ::std::fmt::Debug for GESEffectClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESEffectPrivate(c_void); + +impl ::std::fmt::Debug for GESEffectPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESExtractableInterface { + pub parent: gobject::GTypeInterface, + pub asset_type: GType, + pub check_id: GESExtractableCheckId, + pub can_update_asset: gboolean, + pub set_asset: Option, + pub set_asset_full: Option gboolean>, + pub get_parameters_from_id: Option *mut gobject::GParameter>, + pub get_id: Option *mut c_char>, + pub get_real_extractable_type: Option GType>, + pub register_metas: Option gboolean>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESExtractableInterface { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESExtractableInterface @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("asset_type", &self.asset_type) + .field("check_id", &self.check_id) + .field("can_update_asset", &self.can_update_asset) + .field("set_asset", &self.set_asset) + .field("set_asset_full", &self.set_asset_full) + .field("get_parameters_from_id", &self.get_parameters_from_id) + .field("get_id", &self.get_id) + .field("get_real_extractable_type", &self.get_real_extractable_type) + .field("register_metas", &self.register_metas) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESFormatterClass { + pub parent_class: gobject::GInitiallyUnownedClass, + pub can_load_uri: GESFormatterCanLoadURIMethod, + pub load_from_uri: GESFormatterLoadFromURIMethod, + pub save_to_uri: GESFormatterSaveToURIMethod, + pub name: *const c_char, + pub description: *const c_char, + pub extension: *const c_char, + pub mimetype: *const c_char, + pub version: c_double, + pub rank: gst::GstRank, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESFormatterClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESFormatterClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("can_load_uri", &self.can_load_uri) + .field("load_from_uri", &self.load_from_uri) + .field("save_to_uri", &self.save_to_uri) + .finish() + } +} + +#[repr(C)] +pub struct GESFormatterPrivate(c_void); + +impl ::std::fmt::Debug for GESFormatterPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESFormatterPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESGroupClass { + pub parent_class: GESContainerClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESGroupClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESGroupClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESGroupPrivate(c_void); + +impl ::std::fmt::Debug for GESGroupPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESGroupPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESImageSourceClass { + pub parent_class: GESVideoSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESImageSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESImageSourceClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESImageSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESImageSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESImageSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESLayerClass { + pub parent_class: gobject::GInitiallyUnownedClass, + pub get_objects: Option *mut glib::GList>, + pub object_added: Option, + pub object_removed: Option, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESLayerClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESLayerClass @ {:?}", self as *const _)) + .field("get_objects", &self.get_objects) + .field("object_added", &self.object_added) + .field("object_removed", &self.object_removed) + .finish() + } +} + +#[repr(C)] +pub struct GESLayerPrivate(c_void); + +impl ::std::fmt::Debug for GESLayerPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESLayerPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESMetaContainerInterface { + pub parent_iface: gobject::GTypeInterface, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESMetaContainerInterface { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESMetaContainerInterface @ {:?}", self as *const _)) + .field("parent_iface", &self.parent_iface) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESMultiFileSourceClass { + pub parent_class: GESVideoSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESMultiFileSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESMultiFileSourceClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESMultiFileSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESMultiFileSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESMultiFileSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOperationClass { + pub parent_class: GESTrackElementClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOperationClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperationClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOperationClipClass { + pub parent_class: GESClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOperationClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperationClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESOperationClipPrivate(c_void); + +impl ::std::fmt::Debug for GESOperationClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperationClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESOperationPrivate(c_void); + +impl ::std::fmt::Debug for GESOperationPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperationPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOverlayClipClass { + pub parent_class: GESOperationClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOverlayClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOverlayClipClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +pub struct GESOverlayClipPrivate(c_void); + +impl ::std::fmt::Debug for GESOverlayClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOverlayClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESPipelineClass { + pub parent_class: gst::GstPipelineClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESPipelineClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPipelineClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESPipelinePrivate(c_void); + +impl ::std::fmt::Debug for GESPipelinePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPipelinePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESPitiviFormatterClass { + pub parent_class: GESFormatterClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESPitiviFormatterClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPitiviFormatterClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESPitiviFormatterPrivate(c_void); + +impl ::std::fmt::Debug for GESPitiviFormatterPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPitiviFormatterPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESProjectClass { + pub parent_class: GESAssetClass, + pub asset_added: Option, + pub asset_loading: Option, + pub asset_removed: Option, + pub missing_uri: Option *mut c_char>, + pub loading_error: Option gboolean>, + pub loaded: Option gboolean>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESProjectClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESProjectClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("asset_added", &self.asset_added) + .field("asset_loading", &self.asset_loading) + .field("asset_removed", &self.asset_removed) + .field("missing_uri", &self.missing_uri) + .field("loading_error", &self.loading_error) + .field("loaded", &self.loaded) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESProjectPrivate(c_void); + +impl ::std::fmt::Debug for GESProjectPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESProjectPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESSourceClass { + pub parent_class: GESTrackElementClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSourceClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESSourceClipClass { + pub parent_class: GESClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESSourceClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSourceClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESSourceClipPrivate(c_void); + +impl ::std::fmt::Debug for GESSourceClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSourceClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTestClipClass { + pub parent_class: GESSourceClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTestClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTestClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTestClipPrivate(c_void); + +impl ::std::fmt::Debug for GESTestClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTestClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTextOverlayClass { + pub parent_class: GESOperationClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTextOverlayClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlayClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTextOverlayClipClass { + pub parent_class: GESOverlayClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTextOverlayClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlayClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTextOverlayClipPrivate(c_void); + +impl ::std::fmt::Debug for GESTextOverlayClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlayClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTextOverlayPrivate(c_void); + +impl ::std::fmt::Debug for GESTextOverlayPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlayPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTimelineClass { + pub parent_class: gst::GstBinClass, + pub track_added: Option, + pub track_removed: Option, + pub layer_added: Option, + pub layer_removed: Option, + pub group_added: Option, + pub group_removed: Option, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTimelineClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimelineClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("track_added", &self.track_added) + .field("track_removed", &self.track_removed) + .field("layer_added", &self.layer_added) + .field("layer_removed", &self.layer_removed) + .field("group_added", &self.group_added) + .field("group_removed", &self.group_removed) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTimelineElementClass { + pub parent_class: gobject::GInitiallyUnownedClass, + pub set_parent: Option gboolean>, + pub set_start: Option gboolean>, + pub set_inpoint: Option gboolean>, + pub set_duration: Option gboolean>, + pub set_max_duration: Option gboolean>, + pub set_priority: Option gboolean>, + pub ripple: Option gboolean>, + pub ripple_end: Option gboolean>, + pub roll_start: Option gboolean>, + pub roll_end: Option gboolean>, + pub trim: Option gboolean>, + pub deep_copy: Option, + pub paste: Option *mut GESTimelineElement>, + pub list_children_properties: Option *mut *mut gobject::GParamSpec>, + pub lookup_child: Option gboolean>, + pub get_track_types: Option GESTrackType>, + pub set_child_property: Option, + pub _ges_reserved: [gpointer; 17], +} + +impl ::std::fmt::Debug for GESTimelineElementClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimelineElementClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("set_parent", &self.set_parent) + .field("set_start", &self.set_start) + .field("set_inpoint", &self.set_inpoint) + .field("set_duration", &self.set_duration) + .field("set_max_duration", &self.set_max_duration) + .field("set_priority", &self.set_priority) + .field("ripple", &self.ripple) + .field("ripple_end", &self.ripple_end) + .field("roll_start", &self.roll_start) + .field("roll_end", &self.roll_end) + .field("trim", &self.trim) + .field("deep_copy", &self.deep_copy) + .field("paste", &self.paste) + .field("list_children_properties", &self.list_children_properties) + .field("lookup_child", &self.lookup_child) + .field("get_track_types", &self.get_track_types) + .field("set_child_property", &self.set_child_property) + .finish() + } +} + +#[repr(C)] +pub struct GESTimelineElementPrivate(c_void); + +impl ::std::fmt::Debug for GESTimelineElementPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimelineElementPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTimelinePrivate(c_void); + +impl ::std::fmt::Debug for GESTimelinePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimelinePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTitleClipClass { + pub parent_class: GESSourceClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTitleClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTitleClipPrivate(c_void); + +impl ::std::fmt::Debug for GESTitleClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTitleSourceClass { + pub parent_class: GESVideoSourceClass, + pub _ges_reserved: [gpointer; 3], +} + +impl ::std::fmt::Debug for GESTitleSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleSourceClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +pub struct GESTitleSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESTitleSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrackClass { + pub parent_class: gst::GstBinClass, + pub get_mixing_element: Option *mut gst::GstElement>, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTrackClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackClass @ {:?}", self as *const _)) + .field("get_mixing_element", &self.get_mixing_element) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrackElementAssetClass { + pub parent_class: GESAssetClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTrackElementAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElementAssetClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESTrackElementAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESTrackElementAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElementAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrackElementClass { + pub parent_class: GESTimelineElementClass, + pub nleobject_factorytype: *const c_char, + pub create_gnl_object: Option *mut gst::GstElement>, + pub create_element: Option *mut gst::GstElement>, + pub active_changed: Option, + pub changed: Option, + pub list_children_properties: Option *mut *mut gobject::GParamSpec>, + pub lookup_child: Option gboolean>, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESTrackElementClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElementClass @ {:?}", self as *const _)) + .field("nleobject_factorytype", &self.nleobject_factorytype) + .field("create_gnl_object", &self.create_gnl_object) + .field("create_element", &self.create_element) + .field("active_changed", &self.active_changed) + .field("changed", &self.changed) + .field("list_children_properties", &self.list_children_properties) + .field("lookup_child", &self.lookup_child) + .finish() + } +} + +#[repr(C)] +pub struct GESTrackElementPrivate(c_void); + +impl ::std::fmt::Debug for GESTrackElementPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElementPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTrackPrivate(c_void); + +impl ::std::fmt::Debug for GESTrackPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTransitionClass { + pub parent_class: GESOperationClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTransitionClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransitionClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTransitionClipClass { + pub parent_class: GESBaseTransitionClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTransitionClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransitionClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTransitionClipPrivate(c_void); + +impl ::std::fmt::Debug for GESTransitionClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransitionClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESTransitionPrivate(c_void); + +impl ::std::fmt::Debug for GESTransitionPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransitionPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriClipAssetClass { + pub parent_class: GESClipAssetClass, + pub discoverer: *mut gst_pbutils::GstDiscoverer, + pub sync_discoverer: *mut gst_pbutils::GstDiscoverer, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriClipAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClipAssetClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +pub struct GESUriClipAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESUriClipAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClipAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriClipClass { + pub parent_class: GESSourceClipClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriClipClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClipClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESUriClipPrivate(c_void); + +impl ::std::fmt::Debug for GESUriClipPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClipPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriSourceAssetClass { + pub parent_class: GESTrackElementAssetClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriSourceAssetClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriSourceAssetClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESUriSourceAssetPrivate(c_void); + +impl ::std::fmt::Debug for GESUriSourceAssetPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriSourceAssetPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoSourceClass { + pub parent_class: GESSourceClass, + pub create_source: Option *mut gst::GstElement>, + pub ABI: GESVideoSourceClass_ABI, +} + +impl ::std::fmt::Debug for GESVideoSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoSourceClass @ {:?}", self as *const _)) + .field("create_source", &self.create_source) + .field("ABI", &self.ABI) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoSourceClass_ABI_abi { + pub disable_scale_in_compositor: gboolean, +} + +impl ::std::fmt::Debug for GESVideoSourceClass_ABI_abi { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoSourceClass_ABI_abi @ {:?}", self as *const _)) + .field("disable_scale_in_compositor", &self.disable_scale_in_compositor) + .finish() + } +} + +#[repr(C)] +pub struct GESVideoSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESVideoSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTestSourceClass { + pub parent_class: GESVideoSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTestSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTestSourceClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESVideoTestSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESVideoTestSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTestSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTrackClass { + pub parent_class: GESTrackClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTrackClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTrackClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESVideoTrackPrivate(c_void); + +impl ::std::fmt::Debug for GESVideoTrackPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTrackPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTransitionClass { + pub parent_class: GESTransitionClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTransitionClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTransitionClass @ {:?}", self as *const _)) + .field("parent_class", &self.parent_class) + .finish() + } +} + +#[repr(C)] +pub struct GESVideoTransitionPrivate(c_void); + +impl ::std::fmt::Debug for GESVideoTransitionPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTransitionPrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoUriSourceClass { + pub parent_class: GESVideoSourceClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoUriSourceClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoUriSourceClass @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +pub struct GESVideoUriSourcePrivate(c_void); + +impl ::std::fmt::Debug for GESVideoUriSourcePrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoUriSourcePrivate @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESXmlFormatterClass { + pub parent: GESBaseXmlFormatterClass, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESXmlFormatterClass { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESXmlFormatterClass @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +pub struct GESXmlFormatterPrivate(c_void); + +impl ::std::fmt::Debug for GESXmlFormatterPrivate { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESXmlFormatterPrivate @ {:?}", self as *const _)) + .finish() + } +} + +// Classes +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAsset { + pub parent: gobject::GObject, + pub priv_: *mut GESAssetPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAsset @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioSource { + pub parent: GESSource, + pub priv_: *mut GESAudioSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTestSource { + pub parent: GESAudioSource, + pub priv_: *mut GESAudioTestSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTestSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTestSource @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTrack { + pub parent_instance: GESTrack, + pub priv_: *mut GESAudioTrackPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTrack { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTrack @ {:?}", self as *const _)) + .field("parent_instance", &self.parent_instance) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioTransition { + pub parent: GESTransition, + pub priv_: *mut GESAudioTransitionPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioTransition { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioTransition @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESAudioUriSource { + pub parent: GESAudioSource, + pub uri: *mut c_char, + pub priv_: *mut GESAudioUriSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESAudioUriSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESAudioUriSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseEffect { + pub parent: GESOperation, + pub priv_: *mut GESBaseEffectPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseEffect { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffect @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseEffectClip { + pub parent: GESOperationClip, + pub priv_: *mut GESBaseEffectClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseEffectClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseEffectClip @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseTransitionClip { + pub parent: GESOperationClip, + pub priv_: *mut GESBaseTransitionClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseTransitionClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseTransitionClip @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESBaseXmlFormatter { + pub parent: GESFormatter, + pub priv_: *mut GESBaseXmlFormatterPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESBaseXmlFormatter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESBaseXmlFormatter @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESClip { + pub parent: GESContainer, + pub priv_: *mut GESClipPrivate, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESClipAsset { + pub parent: GESAsset, + pub priv_: *mut GESClipAssetPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESClipAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESClipAsset @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESCommandLineFormatter { + pub parent_instance: GESFormatter, + pub priv_: *mut GESCommandLineFormatterPrivate, +} + +impl ::std::fmt::Debug for GESCommandLineFormatter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESCommandLineFormatter @ {:?}", self as *const _)) + .field("parent_instance", &self.parent_instance) + .field("priv_", &self.priv_) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESContainer { + pub parent: GESTimelineElement, + pub children: *mut glib::GList, + pub height: u32, + pub children_control_mode: GESChildrenControlMode, + pub initiated_move: *mut GESTimelineElement, + pub priv_: *mut GESContainerPrivate, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESContainer { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESContainer @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("children", &self.children) + .field("height", &self.height) + .field("children_control_mode", &self.children_control_mode) + .field("initiated_move", &self.initiated_move) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffect { + pub parent: GESBaseEffect, + pub priv_: *mut GESEffectPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffect { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffect @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffectAsset { + pub parent_instance: GESTrackElementAsset, + pub priv_: *mut GESEffectAssetPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffectAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectAsset @ {:?}", self as *const _)) + .field("parent_instance", &self.parent_instance) + .field("priv_", &self.priv_) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESEffectClip { + pub parent: GESBaseEffectClip, + pub priv_: *mut GESEffectClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESEffectClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESEffectClip @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESFormatter { + pub parent: gobject::GInitiallyUnowned, + pub priv_: *mut GESFormatterPrivate, + pub project: *mut GESProject, + pub timeline: *mut GESTimeline, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESFormatter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESFormatter @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESGroup { + pub parent: GESContainer, + pub priv_: *mut GESGroupPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESGroup { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESGroup @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESImageSource { + pub parent: GESVideoSource, + pub uri: *mut c_char, + pub priv_: *mut GESImageSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESImageSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESImageSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESLayer { + pub parent: gobject::GInitiallyUnowned, + pub timeline: *mut GESTimeline, + pub min_nle_priority: u32, + pub max_nle_priority: u32, + pub priv_: *mut GESLayerPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESLayer { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESLayer @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("timeline", &self.timeline) + .field("min_nle_priority", &self.min_nle_priority) + .field("max_nle_priority", &self.max_nle_priority) + .field("priv_", &self.priv_) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESMultiFileSource { + pub parent: GESVideoSource, + pub uri: *mut c_char, + pub priv_: *mut GESMultiFileSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESMultiFileSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESMultiFileSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOperation { + pub parent: GESTrackElement, + pub priv_: *mut GESOperationPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOperation { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperation @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOperationClip { + pub parent: GESClip, + pub priv_: *mut GESOperationClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOperationClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOperationClip @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESOverlayClip { + pub parent: GESOperationClip, + pub priv_: *mut GESOverlayClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESOverlayClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESOverlayClip @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESPipeline { + pub parent: gst::GstPipeline, + pub priv_: *mut GESPipelinePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESPipeline { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPipeline @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESPitiviFormatter { + pub parent: GESFormatter, + pub priv_: *mut GESPitiviFormatterPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESPitiviFormatter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESPitiviFormatter @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESProject { + pub parent: GESAsset, + pub priv_: *mut GESProjectPrivate, + pub __ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESProject { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESProject @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESSource { + pub parent: GESTrackElement, + pub priv_: *mut GESSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESSourceClip { + pub parent: GESClip, + pub priv_: *mut GESSourceClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESSourceClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESSourceClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTestClip { + pub parent: GESSourceClip, + pub priv_: *mut GESTestClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTestClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTestClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTextOverlay { + pub parent: GESOperation, + pub priv_: *mut GESTextOverlayPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTextOverlay { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlay @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTextOverlayClip { + pub parent: GESOverlayClip, + pub priv_: *mut GESTextOverlayClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTextOverlayClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTextOverlayClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTimeline { + pub parent: gst::GstBin, + pub layers: *mut glib::GList, + pub tracks: *mut glib::GList, + pub priv_: *mut GESTimelinePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTimeline { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimeline @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("layers", &self.layers) + .field("tracks", &self.tracks) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTimelineElement { + pub parent_instance: gobject::GInitiallyUnowned, + pub parent: *mut GESTimelineElement, + pub asset: *mut GESAsset, + pub start: gst::GstClockTime, + pub inpoint: gst::GstClockTime, + pub duration: gst::GstClockTime, + pub maxduration: gst::GstClockTime, + pub priority: u32, + pub timeline: *mut GESTimeline, + pub name: *mut c_char, + pub priv_: *mut GESTimelineElementPrivate, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESTimelineElement { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTimelineElement @ {:?}", self as *const _)) + .field("parent_instance", &self.parent_instance) + .field("parent", &self.parent) + .field("asset", &self.asset) + .field("start", &self.start) + .field("inpoint", &self.inpoint) + .field("duration", &self.duration) + .field("maxduration", &self.maxduration) + .field("priority", &self.priority) + .field("timeline", &self.timeline) + .field("name", &self.name) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTitleClip { + pub parent: GESSourceClip, + pub priv_: *mut GESTitleClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTitleClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTitleSource { + pub parent: GESVideoSource, + pub priv_: *mut GESTitleSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTitleSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTitleSource @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrack { + pub parent: gst::GstBin, + pub type_: GESTrackType, + pub priv_: *mut GESTrackPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTrack { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrack @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("type_", &self.type_) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrackElement { + pub parent: GESTimelineElement, + pub active: gboolean, + pub priv_: *mut GESTrackElementPrivate, + pub asset: *mut GESAsset, + pub _ges_reserved: [gpointer; 20], +} + +impl ::std::fmt::Debug for GESTrackElement { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElement @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTrackElementAsset { + pub parent: GESAsset, + pub priv_: *mut GESTrackElementAssetPrivate, + pub __ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTrackElementAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTrackElementAsset @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTransition { + pub parent: GESOperation, + pub priv_: *mut GESTransitionPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTransition { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransition @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESTransitionClip { + pub parent: GESBaseTransitionClip, + pub vtype: GESVideoStandardTransitionType, + pub priv_: *mut GESTransitionClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESTransitionClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESTransitionClip @ {:?}", self as *const _)) + .field("vtype", &self.vtype) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriClip { + pub parent: GESSourceClip, + pub priv_: *mut GESUriClipPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriClip { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClip @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriClipAsset { + pub parent: GESClipAsset, + pub priv_: *mut GESUriClipAssetPrivate, + pub __ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriClipAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriClipAsset @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESUriSourceAsset { + pub parent: GESTrackElementAsset, + pub priv_: *mut GESUriSourceAssetPrivate, + pub __ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESUriSourceAsset { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESUriSourceAsset @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoSource { + pub parent: GESSource, + pub priv_: *mut GESVideoSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTestSource { + pub parent: GESVideoSource, + pub priv_: *mut GESVideoTestSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTestSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTestSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTrack { + pub parent_instance: GESTrack, + pub priv_: *mut GESVideoTrackPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTrack { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTrack @ {:?}", self as *const _)) + .field("parent_instance", &self.parent_instance) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoTransition { + pub parent: GESTransition, + pub priv_: *mut GESVideoTransitionPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoTransition { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoTransition @ {:?}", self as *const _)) + .field("parent", &self.parent) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESVideoUriSource { + pub parent: GESVideoSource, + pub uri: *mut c_char, + pub priv_: *mut GESVideoUriSourcePrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESVideoUriSource { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESVideoUriSource @ {:?}", self as *const _)) + .finish() + } +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GESXmlFormatter { + pub parent: GESBaseXmlFormatter, + pub priv_: *mut GESXmlFormatterPrivate, + pub _ges_reserved: [gpointer; 4], +} + +impl ::std::fmt::Debug for GESXmlFormatter { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + f.debug_struct(&format!("GESXmlFormatter @ {:?}", self as *const _)) + .field("parent", &self.parent) + .field("priv_", &self.priv_) + .field("_ges_reserved", &self._ges_reserved) + .finish() + } +} + +// Interfaces +#[repr(C)] +pub struct GESExtractable(c_void); + +impl ::std::fmt::Debug for GESExtractable { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + write!(f, "GESExtractable @ {:?}", self as *const _) + } +} + +#[repr(C)] +pub struct GESMetaContainer(c_void); + +impl ::std::fmt::Debug for GESMetaContainer { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + write!(f, "GESMetaContainer @ {:?}", self as *const _) + } +} + + +extern "C" { + + //========================================================================= + // GESEdge + //========================================================================= + pub fn ges_edge_get_type() -> GType; + + //========================================================================= + // GESEditMode + //========================================================================= + pub fn ges_edit_mode_get_type() -> GType; + + //========================================================================= + // GESTextHAlign + //========================================================================= + pub fn ges_text_halign_get_type() -> GType; + + //========================================================================= + // GESTextVAlign + //========================================================================= + pub fn ges_text_valign_get_type() -> GType; + + //========================================================================= + // GESVideoStandardTransitionType + //========================================================================= + pub fn ges_video_standard_transition_type_get_type() -> GType; + + //========================================================================= + // GESVideoTestPattern + //========================================================================= + pub fn ges_video_test_pattern_get_type() -> GType; + + //========================================================================= + // GESMetaFlag + //========================================================================= + pub fn ges_meta_flag_get_type() -> GType; + + //========================================================================= + // GESPipelineFlags + //========================================================================= + pub fn ges_pipeline_flags_get_type() -> GType; + + //========================================================================= + // GESTrackType + //========================================================================= + pub fn ges_track_type_get_type() -> GType; + pub fn ges_track_type_name(type_: GESTrackType) -> *const c_char; + + //========================================================================= + // GESEffectClass + //========================================================================= + pub fn ges_effect_class_register_rate_property(klass: *mut GESEffectClass, element_name: *const c_char, property_name: *const c_char) -> gboolean; + + //========================================================================= + // GESFormatterClass + //========================================================================= + pub fn ges_formatter_class_register_metas(klass: *mut GESFormatterClass, name: *const c_char, description: *const c_char, extension: *const c_char, mimetype: *const c_char, version: c_double, rank: gst::GstRank); + + //========================================================================= + // GESUriClipAssetClass + //========================================================================= + pub fn ges_uri_clip_asset_class_set_timeout(klass: *mut GESUriClipAssetClass, timeout: gst::GstClockTime); + + //========================================================================= + // GESAsset + //========================================================================= + pub fn ges_asset_get_type() -> GType; + pub fn ges_asset_needs_reload(extractable_type: GType, id: *const c_char) -> gboolean; + pub fn ges_asset_request(extractable_type: GType, id: *const c_char, error: *mut *mut glib::GError) -> *mut GESAsset; + pub fn ges_asset_request_async(extractable_type: GType, id: *const c_char, cancellable: *mut gio::GCancellable, callback: gio::GAsyncReadyCallback, user_data: gpointer); + pub fn ges_asset_request_finish(res: *mut gio::GAsyncResult, error: *mut *mut glib::GError) -> *mut GESAsset; + pub fn ges_asset_extract(self_: *mut GESAsset, error: *mut *mut glib::GError) -> *mut GESExtractable; + #[cfg(any(feature = "v1_8", feature = "dox"))] + pub fn ges_asset_get_error(self_: *mut GESAsset) -> *mut glib::GError; + pub fn ges_asset_get_extractable_type(self_: *mut GESAsset) -> GType; + pub fn ges_asset_get_id(self_: *mut GESAsset) -> *const c_char; + pub fn ges_asset_get_proxy(asset: *mut GESAsset) -> *mut GESAsset; + pub fn ges_asset_get_proxy_target(proxy: *mut GESAsset) -> *mut GESAsset; + pub fn ges_asset_list_proxies(asset: *mut GESAsset) -> *mut glib::GList; + pub fn ges_asset_set_proxy(asset: *mut GESAsset, proxy: *mut GESAsset) -> gboolean; + pub fn ges_asset_unproxy(asset: *mut GESAsset, proxy: *mut GESAsset) -> gboolean; + + //========================================================================= + // GESAudioSource + //========================================================================= + pub fn ges_audio_source_get_type() -> GType; + + //========================================================================= + // GESAudioTestSource + //========================================================================= + pub fn ges_audio_test_source_get_type() -> GType; + pub fn ges_audio_test_source_get_freq(self_: *mut GESAudioTestSource) -> c_double; + pub fn ges_audio_test_source_get_volume(self_: *mut GESAudioTestSource) -> c_double; + pub fn ges_audio_test_source_set_freq(self_: *mut GESAudioTestSource, freq: c_double); + pub fn ges_audio_test_source_set_volume(self_: *mut GESAudioTestSource, volume: c_double); + + //========================================================================= + // GESAudioTrack + //========================================================================= + pub fn ges_audio_track_get_type() -> GType; + pub fn ges_audio_track_new() -> *mut GESAudioTrack; + + //========================================================================= + // GESAudioTransition + //========================================================================= + pub fn ges_audio_transition_get_type() -> GType; + pub fn ges_audio_transition_new() -> *mut GESAudioTransition; + + //========================================================================= + // GESAudioUriSource + //========================================================================= + pub fn ges_audio_uri_source_get_type() -> GType; + + //========================================================================= + // GESBaseEffect + //========================================================================= + pub fn ges_base_effect_get_type() -> GType; + + //========================================================================= + // GESBaseEffectClip + //========================================================================= + pub fn ges_base_effect_clip_get_type() -> GType; + + //========================================================================= + // GESBaseTransitionClip + //========================================================================= + pub fn ges_base_transition_clip_get_type() -> GType; + + //========================================================================= + // GESBaseXmlFormatter + //========================================================================= + pub fn ges_base_xml_formatter_get_type() -> GType; + + //========================================================================= + // GESClip + //========================================================================= + pub fn ges_clip_get_type() -> GType; + pub fn ges_clip_add_asset(clip: *mut GESClip, asset: *mut GESAsset) -> *mut GESTrackElement; + pub fn ges_clip_find_track_element(clip: *mut GESClip, track: *mut GESTrack, type_: GType) -> *mut GESTrackElement; + pub fn ges_clip_find_track_elements(clip: *mut GESClip, track: *mut GESTrack, track_type: GESTrackType, type_: GType) -> *mut glib::GList; + pub fn ges_clip_get_layer(clip: *mut GESClip) -> *mut GESLayer; + pub fn ges_clip_get_supported_formats(clip: *mut GESClip) -> GESTrackType; + pub fn ges_clip_get_top_effect_index(clip: *mut GESClip, effect: *mut GESBaseEffect) -> c_int; + pub fn ges_clip_get_top_effect_position(clip: *mut GESClip, effect: *mut GESBaseEffect) -> c_int; + pub fn ges_clip_get_top_effects(clip: *mut GESClip) -> *mut glib::GList; + pub fn ges_clip_move_to_layer(clip: *mut GESClip, layer: *mut GESLayer) -> gboolean; + pub fn ges_clip_set_supported_formats(clip: *mut GESClip, supportedformats: GESTrackType); + pub fn ges_clip_set_top_effect_index(clip: *mut GESClip, effect: *mut GESBaseEffect, newindex: c_uint) -> gboolean; + pub fn ges_clip_set_top_effect_priority(clip: *mut GESClip, effect: *mut GESBaseEffect, newpriority: c_uint) -> gboolean; + pub fn ges_clip_split(clip: *mut GESClip, position: u64) -> *mut GESClip; + + //========================================================================= + // GESClipAsset + //========================================================================= + pub fn ges_clip_asset_get_type() -> GType; + pub fn ges_clip_asset_get_supported_formats(self_: *mut GESClipAsset) -> GESTrackType; + pub fn ges_clip_asset_set_supported_formats(self_: *mut GESClipAsset, supportedformats: GESTrackType); + + //========================================================================= + // GESCommandLineFormatter + //========================================================================= + pub fn ges_command_line_formatter_get_type() -> GType; + pub fn ges_command_line_formatter_get_help(nargs: c_int, commands: *mut *mut c_char) -> *mut c_char; + + //========================================================================= + // GESContainer + //========================================================================= + pub fn ges_container_get_type() -> GType; + pub fn ges_container_group(containers: *mut glib::GList) -> *mut GESContainer; + pub fn ges_container_add(container: *mut GESContainer, child: *mut GESTimelineElement) -> gboolean; + pub fn ges_container_edit(container: *mut GESContainer, layers: *mut glib::GList, new_layer_priority: c_int, mode: GESEditMode, edge: GESEdge, position: u64) -> gboolean; + pub fn ges_container_get_children(container: *mut GESContainer, recursive: gboolean) -> *mut glib::GList; + pub fn ges_container_remove(container: *mut GESContainer, child: *mut GESTimelineElement) -> gboolean; + pub fn ges_container_ungroup(container: *mut GESContainer, recursive: gboolean) -> *mut glib::GList; + + //========================================================================= + // GESEffect + //========================================================================= + pub fn ges_effect_get_type() -> GType; + pub fn ges_effect_new(bin_description: *const c_char) -> *mut GESEffect; + + //========================================================================= + // GESEffectAsset + //========================================================================= + pub fn ges_effect_asset_get_type() -> GType; + + //========================================================================= + // GESEffectClip + //========================================================================= + pub fn ges_effect_clip_get_type() -> GType; + pub fn ges_effect_clip_new(video_bin_description: *const c_char, audio_bin_description: *const c_char) -> *mut GESEffectClip; + + //========================================================================= + // GESFormatter + //========================================================================= + pub fn ges_formatter_get_type() -> GType; + pub fn ges_formatter_can_load_uri(uri: *const c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_formatter_can_save_uri(uri: *const c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_formatter_get_default() -> *mut GESAsset; + pub fn ges_formatter_load_from_uri(formatter: *mut GESFormatter, timeline: *mut GESTimeline, uri: *const c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_formatter_save_to_uri(formatter: *mut GESFormatter, timeline: *mut GESTimeline, uri: *const c_char, overwrite: gboolean, error: *mut *mut glib::GError) -> gboolean; + + //========================================================================= + // GESGroup + //========================================================================= + pub fn ges_group_get_type() -> GType; + pub fn ges_group_new() -> *mut GESGroup; + + //========================================================================= + // GESImageSource + //========================================================================= + pub fn ges_image_source_get_type() -> GType; + + //========================================================================= + // GESLayer + //========================================================================= + pub fn ges_layer_get_type() -> GType; + pub fn ges_layer_new() -> *mut GESLayer; + pub fn ges_layer_add_asset(layer: *mut GESLayer, asset: *mut GESAsset, start: gst::GstClockTime, inpoint: gst::GstClockTime, duration: gst::GstClockTime, track_types: GESTrackType) -> *mut GESClip; + pub fn ges_layer_add_clip(layer: *mut GESLayer, clip: *mut GESClip) -> gboolean; + pub fn ges_layer_get_auto_transition(layer: *mut GESLayer) -> gboolean; + pub fn ges_layer_get_clips(layer: *mut GESLayer) -> *mut glib::GList; + pub fn ges_layer_get_clips_in_interval(layer: *mut GESLayer, start: gst::GstClockTime, end: gst::GstClockTime) -> *mut glib::GList; + pub fn ges_layer_get_duration(layer: *mut GESLayer) -> gst::GstClockTime; + pub fn ges_layer_get_priority(layer: *mut GESLayer) -> c_uint; + pub fn ges_layer_get_timeline(layer: *mut GESLayer) -> *mut GESTimeline; + pub fn ges_layer_is_empty(layer: *mut GESLayer) -> gboolean; + pub fn ges_layer_remove_clip(layer: *mut GESLayer, clip: *mut GESClip) -> gboolean; + pub fn ges_layer_set_auto_transition(layer: *mut GESLayer, auto_transition: gboolean); + pub fn ges_layer_set_priority(layer: *mut GESLayer, priority: c_uint); + pub fn ges_layer_set_timeline(layer: *mut GESLayer, timeline: *mut GESTimeline); + + //========================================================================= + // GESMultiFileSource + //========================================================================= + pub fn ges_multi_file_source_get_type() -> GType; + pub fn ges_multi_file_source_new(uri: *mut c_char) -> *mut GESMultiFileSource; + + //========================================================================= + // GESOperation + //========================================================================= + pub fn ges_operation_get_type() -> GType; + + //========================================================================= + // GESOperationClip + //========================================================================= + pub fn ges_operation_clip_get_type() -> GType; + + //========================================================================= + // GESOverlayClip + //========================================================================= + pub fn ges_overlay_clip_get_type() -> GType; + + //========================================================================= + // GESPipeline + //========================================================================= + pub fn ges_pipeline_get_type() -> GType; + pub fn ges_pipeline_new() -> *mut GESPipeline; + pub fn ges_pipeline_get_mode(pipeline: *mut GESPipeline) -> GESPipelineFlags; + pub fn ges_pipeline_get_thumbnail(self_: *mut GESPipeline, caps: *mut gst::GstCaps) -> *mut gst::GstSample; + pub fn ges_pipeline_get_thumbnail_rgb24(self_: *mut GESPipeline, width: c_int, height: c_int) -> *mut gst::GstSample; + pub fn ges_pipeline_preview_get_audio_sink(self_: *mut GESPipeline) -> *mut gst::GstElement; + pub fn ges_pipeline_preview_get_video_sink(self_: *mut GESPipeline) -> *mut gst::GstElement; + pub fn ges_pipeline_preview_set_audio_sink(self_: *mut GESPipeline, sink: *mut gst::GstElement); + pub fn ges_pipeline_preview_set_video_sink(self_: *mut GESPipeline, sink: *mut gst::GstElement); + pub fn ges_pipeline_save_thumbnail(self_: *mut GESPipeline, width: c_int, height: c_int, format: *const c_char, location: *const c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_pipeline_set_mode(pipeline: *mut GESPipeline, mode: GESPipelineFlags) -> gboolean; + pub fn ges_pipeline_set_render_settings(pipeline: *mut GESPipeline, output_uri: *const c_char, profile: *mut gst_pbutils::GstEncodingProfile) -> gboolean; + pub fn ges_pipeline_set_timeline(pipeline: *mut GESPipeline, timeline: *mut GESTimeline) -> gboolean; + + //========================================================================= + // GESPitiviFormatter + //========================================================================= + pub fn ges_pitivi_formatter_get_type() -> GType; + pub fn ges_pitivi_formatter_new() -> *mut GESPitiviFormatter; + + //========================================================================= + // GESProject + //========================================================================= + pub fn ges_project_get_type() -> GType; + pub fn ges_project_new(uri: *const c_char) -> *mut GESProject; + pub fn ges_project_add_asset(project: *mut GESProject, asset: *mut GESAsset) -> gboolean; + pub fn ges_project_add_encoding_profile(project: *mut GESProject, profile: *mut gst_pbutils::GstEncodingProfile) -> gboolean; + pub fn ges_project_create_asset(project: *mut GESProject, id: *const c_char, extractable_type: GType) -> gboolean; + pub fn ges_project_create_asset_sync(project: *mut GESProject, id: *const c_char, extractable_type: GType, error: *mut *mut glib::GError) -> *mut GESAsset; + pub fn ges_project_get_asset(project: *mut GESProject, id: *const c_char, extractable_type: GType) -> *mut GESAsset; + pub fn ges_project_get_loading_assets(project: *mut GESProject) -> *mut glib::GList; + pub fn ges_project_get_uri(project: *mut GESProject) -> *mut c_char; + pub fn ges_project_list_assets(project: *mut GESProject, filter: GType) -> *mut glib::GList; + pub fn ges_project_list_encoding_profiles(project: *mut GESProject) -> *const glib::GList; + pub fn ges_project_load(project: *mut GESProject, timeline: *mut GESTimeline, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_project_remove_asset(project: *mut GESProject, asset: *mut GESAsset) -> gboolean; + pub fn ges_project_save(project: *mut GESProject, timeline: *mut GESTimeline, uri: *const c_char, formatter_asset: *mut GESAsset, overwrite: gboolean, error: *mut *mut glib::GError) -> gboolean; + + //========================================================================= + // GESSource + //========================================================================= + pub fn ges_source_get_type() -> GType; + + //========================================================================= + // GESSourceClip + //========================================================================= + pub fn ges_source_clip_get_type() -> GType; + + //========================================================================= + // GESTestClip + //========================================================================= + pub fn ges_test_clip_get_type() -> GType; + pub fn ges_test_clip_new() -> *mut GESTestClip; + pub fn ges_test_clip_new_for_nick(nick: *mut c_char) -> *mut GESTestClip; + pub fn ges_test_clip_get_frequency(self_: *mut GESTestClip) -> c_double; + pub fn ges_test_clip_get_volume(self_: *mut GESTestClip) -> c_double; + pub fn ges_test_clip_get_vpattern(self_: *mut GESTestClip) -> GESVideoTestPattern; + pub fn ges_test_clip_is_muted(self_: *mut GESTestClip) -> gboolean; + pub fn ges_test_clip_set_frequency(self_: *mut GESTestClip, freq: c_double); + pub fn ges_test_clip_set_mute(self_: *mut GESTestClip, mute: gboolean); + pub fn ges_test_clip_set_volume(self_: *mut GESTestClip, volume: c_double); + pub fn ges_test_clip_set_vpattern(self_: *mut GESTestClip, vpattern: GESVideoTestPattern); + + //========================================================================= + // GESTextOverlay + //========================================================================= + pub fn ges_text_overlay_get_type() -> GType; + pub fn ges_text_overlay_new() -> *mut GESTextOverlay; + pub fn ges_text_overlay_get_color(self_: *mut GESTextOverlay) -> u32; + pub fn ges_text_overlay_get_font_desc(self_: *mut GESTextOverlay) -> *const c_char; + pub fn ges_text_overlay_get_halignment(self_: *mut GESTextOverlay) -> GESTextHAlign; + pub fn ges_text_overlay_get_text(self_: *mut GESTextOverlay) -> *const c_char; + pub fn ges_text_overlay_get_valignment(self_: *mut GESTextOverlay) -> GESTextVAlign; + pub fn ges_text_overlay_get_xpos(self_: *mut GESTextOverlay) -> c_double; + pub fn ges_text_overlay_get_ypos(self_: *mut GESTextOverlay) -> c_double; + pub fn ges_text_overlay_set_color(self_: *mut GESTextOverlay, color: u32); + pub fn ges_text_overlay_set_font_desc(self_: *mut GESTextOverlay, font_desc: *const c_char); + pub fn ges_text_overlay_set_halignment(self_: *mut GESTextOverlay, halign: GESTextHAlign); + pub fn ges_text_overlay_set_text(self_: *mut GESTextOverlay, text: *const c_char); + pub fn ges_text_overlay_set_valignment(self_: *mut GESTextOverlay, valign: GESTextVAlign); + pub fn ges_text_overlay_set_xpos(self_: *mut GESTextOverlay, position: c_double); + pub fn ges_text_overlay_set_ypos(self_: *mut GESTextOverlay, position: c_double); + + //========================================================================= + // GESTextOverlayClip + //========================================================================= + pub fn ges_text_overlay_clip_get_type() -> GType; + pub fn ges_text_overlay_clip_new() -> *mut GESTextOverlayClip; + pub fn ges_text_overlay_clip_get_color(self_: *mut GESTextOverlayClip) -> u32; + pub fn ges_text_overlay_clip_get_font_desc(self_: *mut GESTextOverlayClip) -> *const c_char; + pub fn ges_text_overlay_clip_get_halignment(self_: *mut GESTextOverlayClip) -> GESTextHAlign; + pub fn ges_text_overlay_clip_get_text(self_: *mut GESTextOverlayClip) -> *const c_char; + pub fn ges_text_overlay_clip_get_valignment(self_: *mut GESTextOverlayClip) -> GESTextVAlign; + pub fn ges_text_overlay_clip_get_xpos(self_: *mut GESTextOverlayClip) -> c_double; + pub fn ges_text_overlay_clip_get_ypos(self_: *mut GESTextOverlayClip) -> c_double; + pub fn ges_text_overlay_clip_set_color(self_: *mut GESTextOverlayClip, color: u32); + pub fn ges_text_overlay_clip_set_font_desc(self_: *mut GESTextOverlayClip, font_desc: *const c_char); + pub fn ges_text_overlay_clip_set_halign(self_: *mut GESTextOverlayClip, halign: GESTextHAlign); + pub fn ges_text_overlay_clip_set_text(self_: *mut GESTextOverlayClip, text: *const c_char); + pub fn ges_text_overlay_clip_set_valign(self_: *mut GESTextOverlayClip, valign: GESTextVAlign); + pub fn ges_text_overlay_clip_set_xpos(self_: *mut GESTextOverlayClip, position: c_double); + pub fn ges_text_overlay_clip_set_ypos(self_: *mut GESTextOverlayClip, position: c_double); + + //========================================================================= + // GESTimeline + //========================================================================= + pub fn ges_timeline_get_type() -> GType; + pub fn ges_timeline_new() -> *mut GESTimeline; + pub fn ges_timeline_new_audio_video() -> *mut GESTimeline; + pub fn ges_timeline_new_from_uri(uri: *const c_char, error: *mut *mut glib::GError) -> *mut GESTimeline; + pub fn ges_timeline_add_layer(timeline: *mut GESTimeline, layer: *mut GESLayer) -> gboolean; + pub fn ges_timeline_add_track(timeline: *mut GESTimeline, track: *mut GESTrack) -> gboolean; + pub fn ges_timeline_append_layer(timeline: *mut GESTimeline) -> *mut GESLayer; + pub fn ges_timeline_commit(timeline: *mut GESTimeline) -> gboolean; + pub fn ges_timeline_commit_sync(timeline: *mut GESTimeline) -> gboolean; + pub fn ges_timeline_get_auto_transition(timeline: *mut GESTimeline) -> gboolean; + pub fn ges_timeline_get_duration(timeline: *mut GESTimeline) -> gst::GstClockTime; + pub fn ges_timeline_get_element(timeline: *mut GESTimeline, name: *const c_char) -> *mut GESTimelineElement; + pub fn ges_timeline_get_groups(timeline: *mut GESTimeline) -> *mut glib::GList; + pub fn ges_timeline_get_layer(timeline: *mut GESTimeline, priority: c_uint) -> *mut GESLayer; + pub fn ges_timeline_get_layers(timeline: *mut GESTimeline) -> *mut glib::GList; + pub fn ges_timeline_get_pad_for_track(timeline: *mut GESTimeline, track: *mut GESTrack) -> *mut gst::GstPad; + pub fn ges_timeline_get_snapping_distance(timeline: *mut GESTimeline) -> gst::GstClockTime; + pub fn ges_timeline_get_track_for_pad(timeline: *mut GESTimeline, pad: *mut gst::GstPad) -> *mut GESTrack; + pub fn ges_timeline_get_tracks(timeline: *mut GESTimeline) -> *mut glib::GList; + pub fn ges_timeline_is_empty(timeline: *mut GESTimeline) -> gboolean; + pub fn ges_timeline_load_from_uri(timeline: *mut GESTimeline, uri: *const c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_timeline_move_layer(timeline: *mut GESTimeline, layer: *mut GESLayer, new_layer_priority: c_uint) -> gboolean; + pub fn ges_timeline_paste_element(timeline: *mut GESTimeline, element: *mut GESTimelineElement, position: gst::GstClockTime, layer_priority: c_int) -> *mut GESTimelineElement; + pub fn ges_timeline_remove_layer(timeline: *mut GESTimeline, layer: *mut GESLayer) -> gboolean; + pub fn ges_timeline_remove_track(timeline: *mut GESTimeline, track: *mut GESTrack) -> gboolean; + pub fn ges_timeline_save_to_uri(timeline: *mut GESTimeline, uri: *const c_char, formatter_asset: *mut GESAsset, overwrite: gboolean, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_timeline_set_auto_transition(timeline: *mut GESTimeline, auto_transition: gboolean); + pub fn ges_timeline_set_snapping_distance(timeline: *mut GESTimeline, snapping_distance: gst::GstClockTime); + + //========================================================================= + // GESTimelineElement + //========================================================================= + pub fn ges_timeline_element_get_type() -> GType; + pub fn ges_timeline_element_add_child_property(self_: *mut GESTimelineElement, pspec: *mut gobject::GParamSpec, child: *mut gobject::GObject) -> gboolean; + pub fn ges_timeline_element_copy(self_: *mut GESTimelineElement, deep: gboolean) -> *mut GESTimelineElement; + pub fn ges_timeline_element_get_child_properties(self_: *mut GESTimelineElement, first_property_name: *const c_char, ...); + pub fn ges_timeline_element_get_child_property(self_: *mut GESTimelineElement, property_name: *const c_char, value: *mut gobject::GValue) -> gboolean; + pub fn ges_timeline_element_get_child_property_by_pspec(self_: *mut GESTimelineElement, pspec: *mut gobject::GParamSpec, value: *mut gobject::GValue); + //pub fn ges_timeline_element_get_child_property_valist(self_: *mut GESTimelineElement, first_property_name: *const c_char, var_args: /*Unimplemented*/va_list); + pub fn ges_timeline_element_get_duration(self_: *mut GESTimelineElement) -> gst::GstClockTime; + pub fn ges_timeline_element_get_inpoint(self_: *mut GESTimelineElement) -> gst::GstClockTime; + pub fn ges_timeline_element_get_max_duration(self_: *mut GESTimelineElement) -> gst::GstClockTime; + pub fn ges_timeline_element_get_name(self_: *mut GESTimelineElement) -> *mut c_char; + pub fn ges_timeline_element_get_parent(self_: *mut GESTimelineElement) -> *mut GESTimelineElement; + pub fn ges_timeline_element_get_priority(self_: *mut GESTimelineElement) -> u32; + pub fn ges_timeline_element_get_start(self_: *mut GESTimelineElement) -> gst::GstClockTime; + pub fn ges_timeline_element_get_timeline(self_: *mut GESTimelineElement) -> *mut GESTimeline; + pub fn ges_timeline_element_get_toplevel_parent(self_: *mut GESTimelineElement) -> *mut GESTimelineElement; + #[cfg(any(feature = "v1_6", feature = "dox"))] + pub fn ges_timeline_element_get_track_types(self_: *mut GESTimelineElement) -> GESTrackType; + pub fn ges_timeline_element_list_children_properties(self_: *mut GESTimelineElement, n_properties: *mut c_uint) -> *mut *mut gobject::GParamSpec; + pub fn ges_timeline_element_lookup_child(self_: *mut GESTimelineElement, prop_name: *const c_char, child: *mut *mut gobject::GObject, pspec: *mut *mut gobject::GParamSpec) -> gboolean; + #[cfg(any(feature = "v1_6", feature = "dox"))] + pub fn ges_timeline_element_paste(self_: *mut GESTimelineElement, paste_position: gst::GstClockTime) -> *mut GESTimelineElement; + pub fn ges_timeline_element_remove_child_property(self_: *mut GESTimelineElement, pspec: *mut gobject::GParamSpec) -> gboolean; + pub fn ges_timeline_element_ripple(self_: *mut GESTimelineElement, start: gst::GstClockTime) -> gboolean; + pub fn ges_timeline_element_ripple_end(self_: *mut GESTimelineElement, end: gst::GstClockTime) -> gboolean; + pub fn ges_timeline_element_roll_end(self_: *mut GESTimelineElement, end: gst::GstClockTime) -> gboolean; + pub fn ges_timeline_element_roll_start(self_: *mut GESTimelineElement, start: gst::GstClockTime) -> gboolean; + pub fn ges_timeline_element_set_child_properties(self_: *mut GESTimelineElement, first_property_name: *const c_char, ...); + pub fn ges_timeline_element_set_child_property(self_: *mut GESTimelineElement, property_name: *const c_char, value: *mut gobject::GValue) -> gboolean; + pub fn ges_timeline_element_set_child_property_by_pspec(self_: *mut GESTimelineElement, pspec: *mut gobject::GParamSpec, value: *mut gobject::GValue); + //pub fn ges_timeline_element_set_child_property_valist(self_: *mut GESTimelineElement, first_property_name: *const c_char, var_args: /*Unimplemented*/va_list); + pub fn ges_timeline_element_set_duration(self_: *mut GESTimelineElement, duration: gst::GstClockTime); + pub fn ges_timeline_element_set_inpoint(self_: *mut GESTimelineElement, inpoint: gst::GstClockTime); + pub fn ges_timeline_element_set_max_duration(self_: *mut GESTimelineElement, maxduration: gst::GstClockTime); + pub fn ges_timeline_element_set_name(self_: *mut GESTimelineElement, name: *const c_char) -> gboolean; + pub fn ges_timeline_element_set_parent(self_: *mut GESTimelineElement, parent: *mut GESTimelineElement) -> gboolean; + pub fn ges_timeline_element_set_priority(self_: *mut GESTimelineElement, priority: u32); + pub fn ges_timeline_element_set_start(self_: *mut GESTimelineElement, start: gst::GstClockTime); + pub fn ges_timeline_element_set_timeline(self_: *mut GESTimelineElement, timeline: *mut GESTimeline) -> gboolean; + pub fn ges_timeline_element_trim(self_: *mut GESTimelineElement, start: gst::GstClockTime) -> gboolean; + + //========================================================================= + // GESTitleClip + //========================================================================= + pub fn ges_title_clip_get_type() -> GType; + pub fn ges_title_clip_new() -> *mut GESTitleClip; + pub fn ges_title_clip_get_background_color(self_: *mut GESTitleClip) -> u32; + pub fn ges_title_clip_get_font_desc(self_: *mut GESTitleClip) -> *const c_char; + pub fn ges_title_clip_get_halignment(self_: *mut GESTitleClip) -> GESTextHAlign; + pub fn ges_title_clip_get_text(self_: *mut GESTitleClip) -> *const c_char; + pub fn ges_title_clip_get_text_color(self_: *mut GESTitleClip) -> u32; + pub fn ges_title_clip_get_valignment(self_: *mut GESTitleClip) -> GESTextVAlign; + pub fn ges_title_clip_get_xpos(self_: *mut GESTitleClip) -> c_double; + pub fn ges_title_clip_get_ypos(self_: *mut GESTitleClip) -> c_double; + pub fn ges_title_clip_set_background(self_: *mut GESTitleClip, background: u32); + pub fn ges_title_clip_set_color(self_: *mut GESTitleClip, color: u32); + pub fn ges_title_clip_set_font_desc(self_: *mut GESTitleClip, font_desc: *const c_char); + pub fn ges_title_clip_set_halignment(self_: *mut GESTitleClip, halign: GESTextHAlign); + pub fn ges_title_clip_set_text(self_: *mut GESTitleClip, text: *const c_char); + pub fn ges_title_clip_set_valignment(self_: *mut GESTitleClip, valign: GESTextVAlign); + pub fn ges_title_clip_set_xpos(self_: *mut GESTitleClip, position: c_double); + pub fn ges_title_clip_set_ypos(self_: *mut GESTitleClip, position: c_double); + + //========================================================================= + // GESTitleSource + //========================================================================= + pub fn ges_title_source_get_type() -> GType; + pub fn ges_title_source_get_background_color(source: *mut GESTitleSource) -> u32; + pub fn ges_title_source_get_font_desc(source: *mut GESTitleSource) -> *const c_char; + pub fn ges_title_source_get_halignment(source: *mut GESTitleSource) -> GESTextHAlign; + pub fn ges_title_source_get_text(source: *mut GESTitleSource) -> *const c_char; + pub fn ges_title_source_get_text_color(source: *mut GESTitleSource) -> u32; + pub fn ges_title_source_get_valignment(source: *mut GESTitleSource) -> GESTextVAlign; + pub fn ges_title_source_get_xpos(source: *mut GESTitleSource) -> c_double; + pub fn ges_title_source_get_ypos(source: *mut GESTitleSource) -> c_double; + pub fn ges_title_source_set_background_color(self_: *mut GESTitleSource, color: u32); + pub fn ges_title_source_set_font_desc(self_: *mut GESTitleSource, font_desc: *const c_char); + pub fn ges_title_source_set_halignment(self_: *mut GESTitleSource, halign: GESTextHAlign); + pub fn ges_title_source_set_text(self_: *mut GESTitleSource, text: *const c_char); + pub fn ges_title_source_set_text_color(self_: *mut GESTitleSource, color: u32); + pub fn ges_title_source_set_valignment(self_: *mut GESTitleSource, valign: GESTextVAlign); + pub fn ges_title_source_set_xpos(self_: *mut GESTitleSource, position: c_double); + pub fn ges_title_source_set_ypos(self_: *mut GESTitleSource, position: c_double); + + //========================================================================= + // GESTrack + //========================================================================= + pub fn ges_track_get_type() -> GType; + pub fn ges_track_new(type_: GESTrackType, caps: *mut gst::GstCaps) -> *mut GESTrack; + pub fn ges_track_add_element(track: *mut GESTrack, object: *mut GESTrackElement) -> gboolean; + pub fn ges_track_commit(track: *mut GESTrack) -> gboolean; + pub fn ges_track_get_caps(track: *mut GESTrack) -> *const gst::GstCaps; + pub fn ges_track_get_elements(track: *mut GESTrack) -> *mut glib::GList; + pub fn ges_track_get_mixing(track: *mut GESTrack) -> gboolean; + pub fn ges_track_get_timeline(track: *mut GESTrack) -> *const GESTimeline; + pub fn ges_track_remove_element(track: *mut GESTrack, object: *mut GESTrackElement) -> gboolean; + pub fn ges_track_set_create_element_for_gap_func(track: *mut GESTrack, func: GESCreateElementForGapFunc); + pub fn ges_track_set_mixing(track: *mut GESTrack, mixing: gboolean); + pub fn ges_track_set_restriction_caps(track: *mut GESTrack, caps: *const gst::GstCaps); + pub fn ges_track_set_timeline(track: *mut GESTrack, timeline: *mut GESTimeline); + pub fn ges_track_update_restriction_caps(track: *mut GESTrack, caps: *const gst::GstCaps); + + //========================================================================= + // GESTrackElement + //========================================================================= + pub fn ges_track_element_get_type() -> GType; + pub fn ges_track_element_add_children_props(self_: *mut GESTrackElement, element: *mut gst::GstElement, wanted_categories: *mut *mut c_char, blacklist: *mut *mut c_char, whitelist: *mut *mut c_char); + pub fn ges_track_element_edit(object: *mut GESTrackElement, layers: *mut glib::GList, mode: GESEditMode, edge: GESEdge, position: u64) -> gboolean; + pub fn ges_track_element_get_all_control_bindings(trackelement: *mut GESTrackElement) -> *mut glib::GHashTable; + pub fn ges_track_element_get_child_properties(object: *mut GESTrackElement, first_property_name: *const c_char, ...); + pub fn ges_track_element_get_child_property(object: *mut GESTrackElement, property_name: *const c_char, value: *mut gobject::GValue) -> gboolean; + pub fn ges_track_element_get_child_property_by_pspec(object: *mut GESTrackElement, pspec: *mut gobject::GParamSpec, value: *mut gobject::GValue); + //pub fn ges_track_element_get_child_property_valist(object: *mut GESTrackElement, first_property_name: *const c_char, var_args: /*Unimplemented*/va_list); + pub fn ges_track_element_get_control_binding(object: *mut GESTrackElement, property_name: *const c_char) -> *mut gst::GstControlBinding; + pub fn ges_track_element_get_element(object: *mut GESTrackElement) -> *mut gst::GstElement; + pub fn ges_track_element_get_gnlobject(object: *mut GESTrackElement) -> *mut gst::GstElement; + #[cfg(any(feature = "v1_6", feature = "dox"))] + pub fn ges_track_element_get_nleobject(object: *mut GESTrackElement) -> *mut gst::GstElement; + pub fn ges_track_element_get_track(object: *mut GESTrackElement) -> *mut GESTrack; + pub fn ges_track_element_get_track_type(object: *mut GESTrackElement) -> GESTrackType; + pub fn ges_track_element_is_active(object: *mut GESTrackElement) -> gboolean; + pub fn ges_track_element_list_children_properties(object: *mut GESTrackElement, n_properties: *mut c_uint) -> *mut *mut gobject::GParamSpec; + pub fn ges_track_element_lookup_child(object: *mut GESTrackElement, prop_name: *const c_char, element: *mut *mut gst::GstElement, pspec: *mut *mut gobject::GParamSpec) -> gboolean; + pub fn ges_track_element_remove_control_binding(object: *mut GESTrackElement, property_name: *const c_char) -> gboolean; + pub fn ges_track_element_set_active(object: *mut GESTrackElement, active: gboolean) -> gboolean; + pub fn ges_track_element_set_child_properties(object: *mut GESTrackElement, first_property_name: *const c_char, ...); + pub fn ges_track_element_set_child_property(object: *mut GESTrackElement, property_name: *const c_char, value: *mut gobject::GValue) -> gboolean; + pub fn ges_track_element_set_child_property_by_pspec(object: *mut GESTrackElement, pspec: *mut gobject::GParamSpec, value: *mut gobject::GValue); + //pub fn ges_track_element_set_child_property_valist(object: *mut GESTrackElement, first_property_name: *const c_char, var_args: /*Unimplemented*/va_list); + pub fn ges_track_element_set_control_source(object: *mut GESTrackElement, source: *mut gst::GstControlSource, property_name: *const c_char, binding_type: *const c_char) -> gboolean; + pub fn ges_track_element_set_track_type(object: *mut GESTrackElement, type_: GESTrackType); + + //========================================================================= + // GESTrackElementAsset + //========================================================================= + pub fn ges_track_element_asset_get_type() -> GType; + pub fn ges_track_element_asset_get_track_type(asset: *mut GESTrackElementAsset) -> GESTrackType; + pub fn ges_track_element_asset_set_track_type(asset: *mut GESTrackElementAsset, type_: GESTrackType); + + //========================================================================= + // GESTransition + //========================================================================= + pub fn ges_transition_get_type() -> GType; + + //========================================================================= + // GESTransitionClip + //========================================================================= + pub fn ges_transition_clip_get_type() -> GType; + pub fn ges_transition_clip_new(vtype: GESVideoStandardTransitionType) -> *mut GESTransitionClip; + pub fn ges_transition_clip_new_for_nick(nick: *mut c_char) -> *mut GESTransitionClip; + + //========================================================================= + // GESUriClip + //========================================================================= + pub fn ges_uri_clip_get_type() -> GType; + pub fn ges_uri_clip_new(uri: *const c_char) -> *mut GESUriClip; + pub fn ges_uri_clip_get_uri(self_: *mut GESUriClip) -> *const c_char; + pub fn ges_uri_clip_is_image(self_: *mut GESUriClip) -> gboolean; + pub fn ges_uri_clip_is_muted(self_: *mut GESUriClip) -> gboolean; + pub fn ges_uri_clip_set_is_image(self_: *mut GESUriClip, is_image: gboolean); + pub fn ges_uri_clip_set_mute(self_: *mut GESUriClip, mute: gboolean); + + //========================================================================= + // GESUriClipAsset + //========================================================================= + pub fn ges_uri_clip_asset_get_type() -> GType; + pub fn ges_uri_clip_asset_new(uri: *const c_char, cancellable: *mut gio::GCancellable, callback: gio::GAsyncReadyCallback, user_data: gpointer); + pub fn ges_uri_clip_asset_request_sync(uri: *const c_char, error: *mut *mut glib::GError) -> *mut GESUriClipAsset; + pub fn ges_uri_clip_asset_get_duration(self_: *mut GESUriClipAsset) -> gst::GstClockTime; + pub fn ges_uri_clip_asset_get_info(self_: *const GESUriClipAsset) -> *mut gst_pbutils::GstDiscovererInfo; + pub fn ges_uri_clip_asset_get_stream_assets(self_: *mut GESUriClipAsset) -> *const glib::GList; + pub fn ges_uri_clip_asset_is_image(self_: *mut GESUriClipAsset) -> gboolean; + + //========================================================================= + // GESUriSourceAsset + //========================================================================= + pub fn ges_uri_source_asset_get_type() -> GType; + pub fn ges_uri_source_asset_get_filesource_asset(asset: *mut GESUriSourceAsset) -> *const GESUriClipAsset; + pub fn ges_uri_source_asset_get_stream_info(asset: *mut GESUriSourceAsset) -> *mut gst_pbutils::GstDiscovererStreamInfo; + pub fn ges_uri_source_asset_get_stream_uri(asset: *mut GESUriSourceAsset) -> *const c_char; + + //========================================================================= + // GESVideoSource + //========================================================================= + pub fn ges_video_source_get_type() -> GType; + + //========================================================================= + // GESVideoTestSource + //========================================================================= + pub fn ges_video_test_source_get_type() -> GType; + pub fn ges_video_test_source_get_pattern(source: *mut GESVideoTestSource) -> GESVideoTestPattern; + pub fn ges_video_test_source_set_pattern(self_: *mut GESVideoTestSource, pattern: GESVideoTestPattern); + + //========================================================================= + // GESVideoTrack + //========================================================================= + pub fn ges_video_track_get_type() -> GType; + pub fn ges_video_track_new() -> *mut GESVideoTrack; + + //========================================================================= + // GESVideoTransition + //========================================================================= + pub fn ges_video_transition_get_type() -> GType; + pub fn ges_video_transition_new() -> *mut GESVideoTransition; + pub fn ges_video_transition_get_border(self_: *mut GESVideoTransition) -> c_int; + pub fn ges_video_transition_get_transition_type(trans: *mut GESVideoTransition) -> GESVideoStandardTransitionType; + pub fn ges_video_transition_is_inverted(self_: *mut GESVideoTransition) -> gboolean; + pub fn ges_video_transition_set_border(self_: *mut GESVideoTransition, value: c_uint); + pub fn ges_video_transition_set_inverted(self_: *mut GESVideoTransition, inverted: gboolean); + pub fn ges_video_transition_set_transition_type(self_: *mut GESVideoTransition, type_: GESVideoStandardTransitionType) -> gboolean; + + //========================================================================= + // GESVideoUriSource + //========================================================================= + pub fn ges_video_uri_source_get_type() -> GType; + + //========================================================================= + // GESXmlFormatter + //========================================================================= + pub fn ges_xml_formatter_get_type() -> GType; + + //========================================================================= + // GESExtractable + //========================================================================= + pub fn ges_extractable_get_type() -> GType; + pub fn ges_extractable_get_asset(self_: *mut GESExtractable) -> *mut GESAsset; + pub fn ges_extractable_get_id(self_: *mut GESExtractable) -> *mut c_char; + pub fn ges_extractable_set_asset(self_: *mut GESExtractable, asset: *mut GESAsset) -> gboolean; + + //========================================================================= + // GESMetaContainer + //========================================================================= + pub fn ges_meta_container_get_type() -> GType; + pub fn ges_meta_container_add_metas_from_string(container: *mut GESMetaContainer, str: *const c_char) -> gboolean; + pub fn ges_meta_container_check_meta_registered(container: *mut GESMetaContainer, meta_item: *const c_char, flags: *mut GESMetaFlag, type_: *mut GType) -> gboolean; + pub fn ges_meta_container_foreach(container: *mut GESMetaContainer, func: GESMetaForeachFunc, user_data: gpointer); + pub fn ges_meta_container_get_boolean(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut gboolean) -> gboolean; + pub fn ges_meta_container_get_date(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut *mut glib::GDate) -> gboolean; + pub fn ges_meta_container_get_date_time(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut *mut gst::GstDateTime) -> gboolean; + pub fn ges_meta_container_get_double(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut c_double) -> gboolean; + pub fn ges_meta_container_get_float(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut c_float) -> gboolean; + pub fn ges_meta_container_get_int(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut c_int) -> gboolean; + pub fn ges_meta_container_get_int64(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut i64) -> gboolean; + pub fn ges_meta_container_get_meta(container: *mut GESMetaContainer, key: *const c_char) -> *const gobject::GValue; + pub fn ges_meta_container_get_string(container: *mut GESMetaContainer, meta_item: *const c_char) -> *const c_char; + pub fn ges_meta_container_get_uint(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut c_uint) -> gboolean; + pub fn ges_meta_container_get_uint64(container: *mut GESMetaContainer, meta_item: *const c_char, dest: *mut u64) -> gboolean; + pub fn ges_meta_container_metas_to_string(container: *mut GESMetaContainer) -> *mut c_char; + pub fn ges_meta_container_register_meta(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: *const gobject::GValue) -> gboolean; + pub fn ges_meta_container_register_meta_boolean(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: gboolean) -> gboolean; + pub fn ges_meta_container_register_meta_date(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: *const glib::GDate) -> gboolean; + pub fn ges_meta_container_register_meta_date_time(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: *const gst::GstDateTime) -> gboolean; + pub fn ges_meta_container_register_meta_double(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: c_double) -> gboolean; + pub fn ges_meta_container_register_meta_float(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: c_float) -> gboolean; + pub fn ges_meta_container_register_meta_int(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: c_int) -> gboolean; + pub fn ges_meta_container_register_meta_int64(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: i64) -> gboolean; + pub fn ges_meta_container_register_meta_string(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: *const c_char) -> gboolean; + pub fn ges_meta_container_register_meta_uint(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: c_uint) -> gboolean; + pub fn ges_meta_container_register_meta_uint64(container: *mut GESMetaContainer, flags: GESMetaFlag, meta_item: *const c_char, value: u64) -> gboolean; + pub fn ges_meta_container_set_boolean(container: *mut GESMetaContainer, meta_item: *const c_char, value: gboolean) -> gboolean; + pub fn ges_meta_container_set_date(container: *mut GESMetaContainer, meta_item: *const c_char, value: *const glib::GDate) -> gboolean; + pub fn ges_meta_container_set_date_time(container: *mut GESMetaContainer, meta_item: *const c_char, value: *const gst::GstDateTime) -> gboolean; + pub fn ges_meta_container_set_double(container: *mut GESMetaContainer, meta_item: *const c_char, value: c_double) -> gboolean; + pub fn ges_meta_container_set_float(container: *mut GESMetaContainer, meta_item: *const c_char, value: c_float) -> gboolean; + pub fn ges_meta_container_set_int(container: *mut GESMetaContainer, meta_item: *const c_char, value: c_int) -> gboolean; + pub fn ges_meta_container_set_int64(container: *mut GESMetaContainer, meta_item: *const c_char, value: i64) -> gboolean; + pub fn ges_meta_container_set_meta(container: *mut GESMetaContainer, meta_item: *const c_char, value: *const gobject::GValue) -> gboolean; + pub fn ges_meta_container_set_string(container: *mut GESMetaContainer, meta_item: *const c_char, value: *const c_char) -> gboolean; + pub fn ges_meta_container_set_uint(container: *mut GESMetaContainer, meta_item: *const c_char, value: c_uint) -> gboolean; + pub fn ges_meta_container_set_uint64(container: *mut GESMetaContainer, meta_item: *const c_char, value: u64) -> gboolean; + + //========================================================================= + // Other functions + //========================================================================= + pub fn ges_add_missing_uri_relocation_uri(uri: *const c_char, recurse: gboolean) -> gboolean; + pub fn ges_deinit(); + pub fn ges_init() -> gboolean; + pub fn ges_init_check(argc: *mut c_int, argv: *mut *mut c_char, error: *mut *mut glib::GError) -> gboolean; + pub fn ges_init_get_option_group() -> *mut glib::GOptionGroup; + pub fn ges_list_assets(filter: GType) -> *mut glib::GList; + pub fn ges_play_sink_convert_frame(playsink: *mut gst::GstElement, caps: *mut gst::GstCaps) -> *mut gst::GstSample; + pub fn ges_pspec_equal(key_spec_1: gconstpointer, key_spec_2: gconstpointer) -> gboolean; + pub fn ges_pspec_hash(key_spec: gconstpointer) -> c_uint; + pub fn ges_validate_register_action_types() -> gboolean; + pub fn ges_version(major: *mut c_uint, minor: *mut c_uint, micro: *mut c_uint, nano: *mut c_uint); + +} diff --git a/gstreamer-editing-services-sys/tests/abi.rs b/gstreamer-editing-services-sys/tests/abi.rs new file mode 100644 index 000000000..58a8089e3 --- /dev/null +++ b/gstreamer-editing-services-sys/tests/abi.rs @@ -0,0 +1,500 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir @ f5fca82) +// from gir-files (https://github.com/gtk-rs/gir-files @ ???) +// DO NOT EDIT + +extern crate gstreamer_editing_services_sys; +extern crate shell_words; +extern crate tempdir; +use std::env; +use std::error::Error; +use std::path::Path; +use std::mem::{align_of, size_of}; +use std::process::Command; +use std::str; +use gstreamer_editing_services_sys::*; + +static PACKAGES: &[&str] = &["gst-editing-services-1.0"]; + +#[derive(Clone, Debug)] +struct Compiler { + pub args: Vec, +} + +impl Compiler { + pub fn new() -> Result> { + let mut args = get_var("CC", "cc")?; + args.push("-Wno-deprecated-declarations".to_owned()); + // For %z support in printf when using MinGW. + args.push("-D__USE_MINGW_ANSI_STDIO".to_owned()); + args.extend(get_var("CFLAGS", "")?); + args.extend(get_var("CPPFLAGS", "")?); + args.extend(pkg_config_cflags(PACKAGES)?); + Ok(Compiler { args }) + } + + pub fn define<'a, V: Into>>(&mut self, var: &str, val: V) { + let arg = match val.into() { + None => format!("-D{}", var), + Some(val) => format!("-D{}={}", var, val), + }; + self.args.push(arg); + } + + pub fn compile(&self, src: &Path, out: &Path) -> Result<(), Box> { + let mut cmd = self.to_command(); + cmd.arg(src); + cmd.arg("-o"); + cmd.arg(out); + let status = cmd.spawn()?.wait()?; + if !status.success() { + return Err(format!("compilation command {:?} failed, {}", + &cmd, status).into()); + } + Ok(()) + } + + fn to_command(&self) -> Command { + let mut cmd = Command::new(&self.args[0]); + cmd.args(&self.args[1..]); + cmd + } +} + +fn get_var(name: &str, default: &str) -> Result, Box> { + match env::var(name) { + Ok(value) => Ok(shell_words::split(&value)?), + Err(env::VarError::NotPresent) => Ok(shell_words::split(default)?), + Err(err) => Err(format!("{} {}", name, err).into()), + } +} + +fn pkg_config_cflags(packages: &[&str]) -> Result, Box> { + if packages.is_empty() { + return Ok(Vec::new()); + } + let mut cmd = Command::new("pkg-config"); + cmd.arg("--cflags"); + cmd.args(packages); + let out = cmd.output()?; + if !out.status.success() { + return Err(format!("command {:?} returned {}", + &cmd, out.status).into()); + } + let stdout = str::from_utf8(&out.stdout)?; + Ok(shell_words::split(stdout.trim())?) +} + + +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +struct Layout { + size: usize, + alignment: usize, +} + +#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)] +struct Results { + /// Number of successfully completed tests. + passed: usize, + /// Total number of failed tests (including those that failed to compile). + failed: usize, + /// Number of tests that failed to compile. + failed_to_compile: usize, +} + +impl Results { + fn record_passed(&mut self) { + self.passed += 1; + } + fn record_failed(&mut self) { + self.failed += 1; + } + fn record_failed_to_compile(&mut self) { + self.failed += 1; + self.failed_to_compile += 1; + } + fn summary(&self) -> String { + format!( + "{} passed; {} failed (compilation errors: {})", + self.passed, + self.failed, + self.failed_to_compile) + } + fn expect_total_success(&self) { + if self.failed == 0 { + println!("OK: {}", self.summary()); + } else { + panic!("FAILED: {}", self.summary()); + }; + } +} + +#[test] +fn cross_validate_constants_with_c() { + let tmpdir = tempdir::TempDir::new("abi").expect("temporary directory"); + let cc = Compiler::new().expect("configured compiler"); + + assert_eq!("1", + get_c_value(tmpdir.path(), &cc, "1").expect("C constant"), + "failed to obtain correct constant value for 1"); + + let mut results : Results = Default::default(); + for (i, &(name, rust_value)) in RUST_CONSTANTS.iter().enumerate() { + match get_c_value(tmpdir.path(), &cc, name) { + Err(e) => { + results.record_failed_to_compile(); + eprintln!("{}", e); + }, + Ok(ref c_value) => { + if rust_value == c_value { + results.record_passed(); + } else { + results.record_failed(); + eprintln!("Constant value mismatch for {}\nRust: {:?}\nC: {:?}", + name, rust_value, c_value); + } + } + }; + if (i + 1) % 25 == 0 { + println!("constants ... {}", results.summary()); + } + } + results.expect_total_success(); +} + +#[test] +fn cross_validate_layout_with_c() { + let tmpdir = tempdir::TempDir::new("abi").expect("temporary directory"); + let cc = Compiler::new().expect("configured compiler"); + + assert_eq!(Layout {size: 1, alignment: 1}, + get_c_layout(tmpdir.path(), &cc, "char").expect("C layout"), + "failed to obtain correct layout for char type"); + + let mut results : Results = Default::default(); + for (i, &(name, rust_layout)) in RUST_LAYOUTS.iter().enumerate() { + match get_c_layout(tmpdir.path(), &cc, name) { + Err(e) => { + results.record_failed_to_compile(); + eprintln!("{}", e); + }, + Ok(c_layout) => { + if rust_layout == c_layout { + results.record_passed(); + } else { + results.record_failed(); + eprintln!("Layout mismatch for {}\nRust: {:?}\nC: {:?}", + name, rust_layout, &c_layout); + } + } + }; + if (i + 1) % 25 == 0 { + println!("layout ... {}", results.summary()); + } + } + results.expect_total_success(); +} + +fn get_c_layout(dir: &Path, cc: &Compiler, name: &str) -> Result> { + let exe = dir.join("layout"); + let mut cc = cc.clone(); + cc.define("ABI_TYPE_NAME", name); + cc.compile(Path::new("tests/layout.c"), &exe)?; + + let mut abi_cmd = Command::new(exe); + let output = abi_cmd.output()?; + if !output.status.success() { + return Err(format!("command {:?} failed, {:?}", + &abi_cmd, &output).into()); + } + + let stdout = str::from_utf8(&output.stdout)?; + let mut words = stdout.trim().split_whitespace(); + let size = words.next().unwrap().parse().unwrap(); + let alignment = words.next().unwrap().parse().unwrap(); + Ok(Layout {size, alignment}) +} + +fn get_c_value(dir: &Path, cc: &Compiler, name: &str) -> Result> { + let exe = dir.join("constant"); + let mut cc = cc.clone(); + cc.define("ABI_CONSTANT_NAME", name); + cc.compile(Path::new("tests/constant.c"), &exe)?; + + let mut abi_cmd = Command::new(exe); + let output = abi_cmd.output()?; + if !output.status.success() { + return Err(format!("command {:?} failed, {:?}", + &abi_cmd, &output).into()); + } + + Ok(str::from_utf8(&output.stdout)?.trim().to_owned()) +} + +const RUST_LAYOUTS: &[(&str, Layout)] = &[ + ("GESAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAssetLoadingReturn", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTestSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTestSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTrack", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTrackClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTransition", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioTransitionClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioUriSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESAudioUriSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseEffect", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseEffectClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseEffectClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseEffectClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseTransitionClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseTransitionClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseXmlFormatter", Layout {size: size_of::(), alignment: align_of::()}), + ("GESBaseXmlFormatterClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESChildrenControlMode", Layout {size: size_of::(), alignment: align_of::()}), + ("GESClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESClipAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESClipAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESCommandLineFormatter", Layout {size: size_of::(), alignment: align_of::()}), + ("GESCommandLineFormatterClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESContainer", Layout {size: size_of::(), alignment: align_of::()}), + ("GESContainerClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEdge", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEditMode", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffect", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffectAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffectAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffectClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffectClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESEffectClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESError", Layout {size: size_of::(), alignment: align_of::()}), + ("GESExtractableInterface", Layout {size: size_of::(), alignment: align_of::()}), + ("GESFormatter", Layout {size: size_of::(), alignment: align_of::()}), + ("GESFormatterClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESGroup", Layout {size: size_of::(), alignment: align_of::()}), + ("GESGroupClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESImageSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESImageSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESLayer", Layout {size: size_of::(), alignment: align_of::()}), + ("GESLayerClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESMetaContainerInterface", Layout {size: size_of::(), alignment: align_of::()}), + ("GESMetaFlag", Layout {size: size_of::(), alignment: align_of::()}), + ("GESMultiFileSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESMultiFileSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOperation", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOperationClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOperationClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOperationClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOverlayClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESOverlayClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESPipeline", Layout {size: size_of::(), alignment: align_of::()}), + ("GESPipelineClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESPipelineFlags", Layout {size: size_of::(), alignment: align_of::()}), + ("GESPitiviFormatter", Layout {size: size_of::(), alignment: align_of::()}), + ("GESPitiviFormatterClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESProject", Layout {size: size_of::(), alignment: align_of::()}), + ("GESProjectClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESSourceClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESSourceClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTestClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTestClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextHAlign", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextOverlay", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextOverlayClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextOverlayClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextOverlayClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTextVAlign", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTimeline", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTimelineClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTimelineElement", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTimelineElementClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTitleClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTitleClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTitleSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTitleSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrack", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackElement", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackElementAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackElementAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackElementClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTrackType", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTransition", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTransitionClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTransitionClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESTransitionClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriClip", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriClipAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriClipAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriClipClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriSourceAsset", Layout {size: size_of::(), alignment: align_of::()}), + ("GESUriSourceAssetClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoStandardTransitionType", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTestPattern", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTestSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTestSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTrack", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTrackClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTransition", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoTransitionClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoUriSource", Layout {size: size_of::(), alignment: align_of::()}), + ("GESVideoUriSourceClass", Layout {size: size_of::(), alignment: align_of::()}), + ("GESXmlFormatter", Layout {size: size_of::(), alignment: align_of::()}), + ("GESXmlFormatterClass", Layout {size: size_of::(), alignment: align_of::()}), +]; + +const RUST_CONSTANTS: &[(&str, &str)] = &[ + ("GES_ASSET_LOADING_ASYNC", "1"), + ("GES_ASSET_LOADING_ERROR", "0"), + ("GES_ASSET_LOADING_OK", "2"), + ("GES_CHILDREN_IGNORE_NOTIFIES", "1"), + ("GES_CHILDREN_LAST", "4"), + ("GES_CHILDREN_UPDATE", "0"), + ("GES_CHILDREN_UPDATE_ALL_VALUES", "3"), + ("GES_CHILDREN_UPDATE_OFFSETS", "2"), + ("GES_EDGE_END", "1"), + ("GES_EDGE_NONE", "2"), + ("GES_EDGE_START", "0"), + ("GES_EDIT_MODE_NORMAL", "0"), + ("GES_EDIT_MODE_RIPPLE", "1"), + ("GES_EDIT_MODE_ROLL", "2"), + ("GES_EDIT_MODE_SLIDE", "4"), + ("GES_EDIT_MODE_TRIM", "3"), + ("GES_ERROR_ASSET_LOADING", "1"), + ("GES_ERROR_ASSET_WRONG_ID", "0"), + ("GES_ERROR_FORMATTER_MALFORMED_INPUT_FILE", "2"), + ("GES_META_DESCRIPTION", "description"), + ("GES_META_FORMATTER_EXTENSION", "extension"), + ("GES_META_FORMATTER_MIMETYPE", "mimetype"), + ("GES_META_FORMATTER_NAME", "name"), + ("GES_META_FORMATTER_RANK", "rank"), + ("GES_META_FORMATTER_VERSION", "version"), + ("GES_META_FORMAT_VERSION", "format-version"), + ("GES_META_READABLE", "1"), + ("GES_META_READ_WRITE", "3"), + ("GES_META_VOLUME", "volume"), + ("GES_META_VOLUME_DEFAULT", "1.000000"), + ("GES_META_WRITABLE", "2"), + ("GES_MULTI_FILE_URI_PREFIX", "multifile://"), + ("GES_PADDING", "4"), + ("GES_PADDING_LARGE", "20"), + ("GES_PIPELINE_MODE_PREVIEW", "3"), + ("GES_PIPELINE_MODE_PREVIEW_AUDIO", "1"), + ("GES_PIPELINE_MODE_PREVIEW_VIDEO", "2"), + ("GES_PIPELINE_MODE_RENDER", "4"), + ("GES_PIPELINE_MODE_SMART_RENDER", "8"), + ("GES_TEXT_HALIGN_ABSOLUTE", "5"), + ("GES_TEXT_HALIGN_CENTER", "1"), + ("GES_TEXT_HALIGN_LEFT", "0"), + ("GES_TEXT_HALIGN_POSITION", "4"), + ("GES_TEXT_HALIGN_RIGHT", "2"), + ("GES_TEXT_VALIGN_ABSOLUTE", "5"), + ("GES_TEXT_VALIGN_BASELINE", "0"), + ("GES_TEXT_VALIGN_BOTTOM", "1"), + ("GES_TEXT_VALIGN_CENTER", "4"), + ("GES_TEXT_VALIGN_POSITION", "3"), + ("GES_TEXT_VALIGN_TOP", "2"), + ("GES_TRACK_TYPE_AUDIO", "2"), + ("GES_TRACK_TYPE_CUSTOM", "16"), + ("GES_TRACK_TYPE_TEXT", "8"), + ("GES_TRACK_TYPE_UNKNOWN", "1"), + ("GES_TRACK_TYPE_VIDEO", "4"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL", "45"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL", "46"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H", "22"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V", "21"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D", "65"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L", "66"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R", "68"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U", "67"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR", "1"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB", "2"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H", "44"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V", "43"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC", "25"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL", "6"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR", "5"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC", "26"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC", "24"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC", "23"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL", "3"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR", "4"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12", "201"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3", "202"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6", "203"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9", "204"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE", "512"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL", "41"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR", "42"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH", "236"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV", "235"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH", "214"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV", "213"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH", "228"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV", "227"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD", "226"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL", "246"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL", "245"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV", "225"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B", "233"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR", "212"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT", "211"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L", "234"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R", "232"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T", "231"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI", "7"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO", "8"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT", "101"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD", "47"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD", "48"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE", "0"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB", "207"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH", "206"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV", "205"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B", "253"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L", "252"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R", "254"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T", "251"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB", "223"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL", "242"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR", "243"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL", "224"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR", "222"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT", "221"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL", "241"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR", "244"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D", "61"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L", "62"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R", "64"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U", "63"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H", "264"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R", "261"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U", "262"), + ("GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V", "263"), + ("GES_VIDEO_TEST_CHROMA_ZONE_PLATE", "16"), + ("GES_VIDEO_TEST_GAMUT", "15"), + ("GES_VIDEO_TEST_PATTERN_BLACK", "2"), + ("GES_VIDEO_TEST_PATTERN_BLINK", "12"), + ("GES_VIDEO_TEST_PATTERN_BLUE", "6"), + ("GES_VIDEO_TEST_PATTERN_CHECKERS1", "7"), + ("GES_VIDEO_TEST_PATTERN_CHECKERS2", "8"), + ("GES_VIDEO_TEST_PATTERN_CHECKERS4", "9"), + ("GES_VIDEO_TEST_PATTERN_CHECKERS8", "10"), + ("GES_VIDEO_TEST_PATTERN_CIRCULAR", "11"), + ("GES_VIDEO_TEST_PATTERN_GREEN", "5"), + ("GES_VIDEO_TEST_PATTERN_RED", "4"), + ("GES_VIDEO_TEST_PATTERN_SMPTE", "0"), + ("GES_VIDEO_TEST_PATTERN_SMPTE75", "13"), + ("GES_VIDEO_TEST_PATTERN_SNOW", "1"), + ("GES_VIDEO_TEST_PATTERN_SOLID", "17"), + ("GES_VIDEO_TEST_PATTERN_WHITE", "3"), + ("GES_VIDEO_TEST_ZONE_PLATE", "14"), +]; + + diff --git a/gstreamer-editing-services-sys/tests/constant.c b/gstreamer-editing-services-sys/tests/constant.c new file mode 100644 index 000000000..ca2c6e574 --- /dev/null +++ b/gstreamer-editing-services-sys/tests/constant.c @@ -0,0 +1,27 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir @ f5fca82) +// from gir-files (https://github.com/gtk-rs/gir-files @ ???) +// DO NOT EDIT + +#include "manual.h" +#include + +int main() { + printf(_Generic((ABI_CONSTANT_NAME), + char *: "%s", + const char *: "%s", + char: "%c", + signed char: "%hhd", + unsigned char: "%hhu", + short int: "%hd", + unsigned short int: "%hu", + int: "%d", + unsigned int: "%u", + long: "%ld", + unsigned long: "%lu", + long long: "%lld", + unsigned long long: "%llu", + double: "%f", + long double: "%ld"), + ABI_CONSTANT_NAME); + return 0; +} diff --git a/gstreamer-editing-services-sys/tests/layout.c b/gstreamer-editing-services-sys/tests/layout.c new file mode 100644 index 000000000..0d766ac33 --- /dev/null +++ b/gstreamer-editing-services-sys/tests/layout.c @@ -0,0 +1,12 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir @ f5fca82) +// from gir-files (https://github.com/gtk-rs/gir-files @ ???) +// DO NOT EDIT + +#include "manual.h" +#include +#include + +int main() { + printf("%zu\n%zu", sizeof(ABI_TYPE_NAME), alignof(ABI_TYPE_NAME)); + return 0; +} diff --git a/gstreamer-editing-services-sys/tests/manual.h b/gstreamer-editing-services-sys/tests/manual.h new file mode 100644 index 000000000..b09b0dd31 --- /dev/null +++ b/gstreamer-editing-services-sys/tests/manual.h @@ -0,0 +1,3 @@ +// Feel free to edit this file, it won't be regenerated by gir generator unless removed. + +#include