Rename GESTimelineFileSource to GESUriClip

Conflicts:
	ges/ges-pitivi-formatter.c
	ges/ges-uri-clip.c
	tests/check/ges/project.c
	tests/check/ges/uriclip.c
This commit is contained in:
Thibault Saunier 2013-01-20 12:44:57 -03:00
parent 04a3c49ebd
commit 695c381bb1
39 changed files with 363 additions and 372 deletions

View file

@ -17,7 +17,7 @@ LOCAL_SRC_FILES := \
ges-clip.c \
ges-timeline-pipeline.c \
ges-timeline-source.c \
ges-timeline-file-source.c \
ges-uri-clip.c \
ges-timeline-operation.c \
ges-timeline-transition.c \
ges-timeline-standard-transition.c \

View file

@ -14,7 +14,7 @@ class Simple:
timeline.add_track(trackv)
timeline.add_layer(self.layer)
GES.Asset.new_async(GES.TimelineFileSource, uri, None, self.discoveredCb, None)
GES.Asset.new_async(GES.UriClip, uri, None, self.discoveredCb, None)
self.loop = GLib.MainLoop()
self.loop.run()

View file

@ -11,7 +11,7 @@ class Simple:
timeline.add_track(trackv)
timeline.add_layer(layer)
src = GES.TimelineFileSource.new(uri=uri)
src = GES.UriClip.new(uri=uri)
src.set_start(long(0))
src.set_duration(long(10 * Gst.SECOND))
print src

View file

@ -104,7 +104,7 @@ platform as well as Windows. It is released under the GNU Library General Public
<title>Assets</title>
<xi:include href="xml/ges-asset-clip.xml"/>
<xi:include href="xml/ges-asset-track-object.xml"/>
<xi:include href="xml/ges-asset-file-source.xml"/>
<xi:include href="xml/ges-uri-clip-asset.xml"/>
<xi:include href="xml/ges-asset-track-file-source.xml"/>
<xi:include href="xml/ges-project.xml"/>
</chapter>

View file

@ -440,26 +440,26 @@ GES_TYPE_TIMELINE_SOURCE
<SECTION>
<FILE>ges-timeline-filesource</FILE>
<TITLE>GESTimelineFileSource</TITLE>
GESTimelineFileSource
ges_timeline_filesource_new
ges_timeline_filesource_get_max_duration
ges_timeline_filesource_get_uri
ges_timeline_filesource_is_image
ges_timeline_filesource_is_muted
ges_timeline_filesource_set_is_image
ges_timeline_filesource_set_max_duration
ges_timeline_filesource_set_mute
<TITLE>GESUriClip</TITLE>
GESUriClip
ges_uri_clip_new
ges_uri_clip_get_max_duration
ges_uri_clip_get_uri
ges_uri_clip_is_image
ges_uri_clip_is_muted
ges_uri_clip_set_is_image
ges_uri_clip_set_max_duration
ges_uri_clip_set_mute
<SUBSECTION Standard>
GESTimelineFileSourceClass
GESTimelineFileSourcePrivate
ges_timeline_filesource_get_type
GES_IS_TIMELINE_FILE_SOURCE
GES_IS_TIMELINE_FILE_SOURCE_CLASS
GES_TIMELINE_FILE_SOURCE
GES_TIMELINE_FILE_SOURCE_CLASS
GES_TIMELINE_FILE_SOURCE_GET_CLASS
GES_TYPE_TIMELINE_FILE_SOURCE
GESUriClipClass
GESUriClipPrivate
ges_uri_clip_get_type
GES_IS_URI_CLIP
GES_IS_URI_CLIP_CLASS
GES_URI_CLIP
GES_URI_CLIP_CLASS
GES_URI_CLIP_GET_CLASS
GES_TYPE_URI_CLIP
</SECTION>
<SECTION>
@ -1017,24 +1017,24 @@ GES_ASSET_TRACK_OBJECT_GET_CLASS
</SECTION>
<SECTION>
<FILE>ges-asset-file-source</FILE>
<TITLE>GESAssetFileSource</TITLE>
GESAssetFileSource
ges_asset_filesource_get_type
ges_asset_filesource_get_duration
ges_asset_filesource_is_image
ges_asset_filesource_get_info
ges_asset_filesource_new
ges_asset_filesource_set_timeout
ges_asset_filesource_get_stream_assets
<FILE>ges-uri-clip-asset</FILE>
<TITLE>GESUriClipAsset</TITLE>
GESUriClipAsset
ges_uri_clip_asset_get_type
ges_uri_clip_asset_get_duration
ges_uri_clip_asset_is_image
ges_uri_clip_asset_get_info
ges_uri_clip_asset_new
ges_uri_clip_asset_set_timeout
ges_uri_clip_asset_get_stream_assets
<SUBSECTION Standard>
GESAssetFileSourcePrivate
GES_ASSET_FILESOURCE
GES_TYPE_ASSET_FILESOURCE
GES_ASSET_FILESOURCE_CLASS
GES_IS_ASSET_FILESOURCE
GES_IS_ASSET_FILESOURCE_CLASS
GES_ASSET_FILESOURCE_GET_CLASS
GESUriClipAssetPrivate
GES_URI_CLIP_ASSET
GES_TYPE_URI_CLIP_ASSET
GES_URI_CLIP_ASSET_CLASS
GES_IS_URI_CLIP_ASSET
GES_IS_URI_CLIP_ASSET_CLASS
GES_URI_CLIP_ASSET_GET_CLASS
</SECTION>
<SECTION>

View file

@ -18,7 +18,7 @@ ges_timeline_transition_get_type
ges_timeline_standard_transition_get_type
ges_timeline_effect_get_type
ges_timeline_parse_launch_effect_get_type
ges_timeline_filesource_get_type
ges_uri_clip_get_type
ges_timeline_text_overlay_get_type
ges_timeline_title_source_get_type
ges_track_audio_test_source_get_type

View file

@ -21,7 +21,7 @@ libges_@GST_API_VERSION@_la_SOURCES = \
ges-timeline-source.c \
ges-timeline-effect.c \
ges-timeline-parse-launch-effect.c \
ges-timeline-file-source.c \
ges-uri-clip.c \
ges-timeline-operation.c \
ges-timeline-transition.c \
ges-timeline-standard-transition.c \
@ -48,7 +48,7 @@ libges_@GST_API_VERSION@_la_SOURCES = \
ges-formatter.c \
ges-pitivi-formatter.c \
ges-asset.c \
ges-asset-file-source.c \
ges-uri-asset.c \
ges-asset-clip.c \
ges-asset-track-object.c \
ges-extractable.c \
@ -73,7 +73,7 @@ libges_@GST_API_VERSION@include_HEADERS = \
ges-clip.h \
ges-timeline-pipeline.h \
ges-timeline-source.h \
ges-timeline-file-source.h \
ges-uri-clip.h \
ges-timeline-effect.h \
ges-timeline-parse-launch-effect.h \
ges-timeline-operation.h \
@ -102,7 +102,7 @@ libges_@GST_API_VERSION@include_HEADERS = \
ges-formatter.h \
ges-pitivi-formatter.h \
ges-asset.h \
ges-asset-file-source.h \
ges-uri-asset.h \
ges-asset-clip.h \
ges-asset-track-object.h \
ges-extractable.h \

View file

@ -21,7 +21,7 @@
* SECTION: ges-asset-clip
* @short_description: A GESAsset subclass specialized in GESClip extraction
*
* The #GESAssetFileSource is a special #GESAsset specilized in #GESClip.
* 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 #GESTrackObject for.
*/

View file

@ -25,7 +25,7 @@
* The Assets in the GStreamer Editing Services represent the ressources
* that can be used. You can create assets for any type that implements the #GESExtractable
* interface, for example #GESClips, #GESFormatter, and #GESTrackObject do implement it.
* This means that asssets will represent for example a #GESTimelineFileSources, #GESTrackEffect etc,
* This means that asssets will represent for example a #GESUriClips, #GESTrackEffect etc,
* and then you can extract objects of those types with the appropriate parameters from the asset
* using the #ges_asset_extract method:
*
@ -47,7 +47,7 @@
* custom effects. Note that #GESAsset management is making easier thanks to the #GESProject class.
*
* Each asset are 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 #GESTimelineFileSource,
* 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,
@ -698,7 +698,7 @@ ges_asset_get_extractable_type (GESAsset * self)
*
* Note that it won't be possible to instantiate the first %GESAsset with
* @id depending on the @extractable_type. For example instantiate a
* #GESAsset that extract #GESTimelineFileSource needs to be done async
* #GESAsset that extract #GESUriClip needs to be done async
* the first time for a specific ID.
*
* Returns: (transfer full) (allow-none): A reference to the wanted #GESAsset or %NULL
@ -789,7 +789,7 @@ done:
* new asset. The class must implement the #GESExtractable interface.
* @id: The Identifier of the asset we want to create. This identifier depends of the extractable,
* type you want. By default it is the name of the class itself (or %NULL), but for example for a
* GESTrackParseLaunchEffect, it will be the pipeline description, for a GESTimelineFileSource it
* GESTrackParseLaunchEffect, 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.
* @cancellable: (allow-none): optional %GCancellable object, %NULL to ignore.
@ -824,7 +824,7 @@ done:
* }
*
* // The request:
* ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE, some_uri, NULL,
* ges_asset_request_async (GES_TYPE_URI_CLIP, some_uri, NULL,
* (GAsyncReadyCallback) asset_loaded_cb, user_data);
* ]|
*/

View file

@ -27,7 +27,7 @@
#include "ges-asset.h"
#include "ges-internal.h"
#include "ges-extractable.h"
#include "ges-timeline-file-source.h"
#include "ges-uri-clip.h"
static GQuark ges_asset_key;

View file

@ -14,7 +14,8 @@ static GQuark ges_meta_key;
G_DEFINE_INTERFACE_WITH_CODE (GESMetaContainer, ges_meta_container,
G_TYPE_OBJECT, ges_meta_key =
g_quark_from_static_string ("ges-meta-container-data"););
g_quark_from_static_string ("ges-meta-container-data");
);
enum
{

View file

@ -347,7 +347,7 @@ static GList *
save_sources (GESPitiviFormatter * formatter, GList * layers,
xmlTextWriterPtr writer)
{
GList *clipects, *tmp, *tmplayer;
GList *clips, *tmp, *tmplayer;
GESTimelineLayer *layer;
GESPitiviFormatterPrivate *priv = formatter->priv;
@ -361,17 +361,16 @@ save_sources (GESPitiviFormatter * formatter, GList * layers,
for (tmplayer = layers; tmplayer; tmplayer = tmplayer->next) {
layer = GES_TIMELINE_LAYER (tmplayer->data);
clipects = ges_timeline_layer_get_objects (layer);
for (tmp = clipects; tmp; tmp = tmp->next) {
clips = ges_timeline_layer_get_objects (layer);
for (tmp = clips; tmp; tmp = tmp->next) {
SrcMapping *srcmap = g_slice_new0 (SrcMapping);
GESClip *clip;
gchar *uriclip_uri;
clip = tmp->data;
if (GES_IS_TIMELINE_FILE_SOURCE (clip)) {
if (GES_IS_URI_CLIP (clip)) {
uriclip_uri = (gchar *) ges_timeline_filesource_get_uri
(GES_TIMELINE_FILE_SOURCE (clip));
uriclip_uri = (gchar *) ges_uri_clip_get_uri (GES_URI_CLIP (clip));
if (!g_hash_table_lookup (priv->saving_source_table, uriclip_uri)) {
gchar *strid = g_strdup_printf ("%i", priv->nb_sources);
@ -391,8 +390,8 @@ save_sources (GESPitiviFormatter * formatter, GList * layers,
source_list = g_list_append (source_list, srcmap);
}
}
g_list_foreach (clipects, (GFunc) g_object_unref, NULL);
g_list_free (clipects);
g_list_foreach (clips, (GFunc) g_object_unref, NULL);
g_list_free (clips);
g_object_unref (G_OBJECT (layer));
}
@ -579,8 +578,7 @@ list_sources (GESFormatter * self)
g_hash_table_insert (priv->source_uris, g_strdup (filename),
g_strdup (filename));
if (self->project)
ges_project_create_asset (self->project, filename,
GES_TYPE_TIMELINE_FILE_SOURCE);
ges_project_create_asset (self->project, filename, GES_TYPE_URI_CLIP);
}
xmlXPathFreeObject (xpathObj);
@ -852,7 +850,7 @@ make_source (GESFormatter * self, GList * reflist, GHashTable * source_table)
gchar *fac_ref = NULL, *media_type = NULL, *filename = NULL, *prio_str;
GList *tmp = NULL, *keys, *tmp_key;
GESTimelineFileSource *src = NULL;
GESUriClip *src = NULL;
gint prio;
gboolean a_avail = FALSE, v_avail = FALSE, video;
GHashTable *tckobj_table = priv->track_objects_table;
@ -906,7 +904,7 @@ make_source (GESFormatter * self, GList * reflist, GHashTable * source_table)
filename = (gchar *) g_hash_table_lookup (source_table, "filename");
src = ges_timeline_filesource_new (filename);
src = ges_uri_clip_new (filename);
if (!video) {
v_avail = TRUE;

View file

@ -1,90 +0,0 @@
/* GStreamer Editing Services
* Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
* 2009 Nokia Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef _GES_TIMELINE_FILESOURCE
#define _GES_TIMELINE_FILESOURCE
#include <glib-object.h>
#include <ges/ges-types.h>
#include <ges/ges-timeline-source.h>
#include <ges/ges-track.h>
G_BEGIN_DECLS
#define GES_TYPE_TIMELINE_FILE_SOURCE ges_timeline_filesource_get_type()
#define GES_TIMELINE_FILE_SOURCE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_TIMELINE_FILE_SOURCE, GESTimelineFileSource))
#define GES_TIMELINE_FILE_SOURCE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_TIMELINE_FILE_SOURCE, GESTimelineFileSourceClass))
#define GES_IS_TIMELINE_FILE_SOURCE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_TIMELINE_FILE_SOURCE))
#define GES_IS_TIMELINE_FILE_SOURCE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_TIMELINE_FILE_SOURCE))
#define GES_TIMELINE_FILE_SOURCE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TIMELINE_FILE_SOURCE, GESTimelineFileSourceClass))
typedef struct _GESTimelineFileSourcePrivate GESTimelineFileSourcePrivate;
struct _GESTimelineFileSource {
GESTimelineSource parent;
/*< private >*/
GESTimelineFileSourcePrivate *priv;
/* Padding for API extension */
gpointer _ges_reserved[GES_PADDING];
};
/**
* GESTimelineFileSourceClass:
*/
struct _GESTimelineFileSourceClass {
/*< private >*/
GESTimelineSourceClass parent_class;
/* Padding for API extension */
gpointer _ges_reserved[GES_PADDING];
};
GType ges_timeline_filesource_get_type (void);
void
ges_timeline_filesource_set_mute (GESTimelineFileSource * self, gboolean mute);
void
ges_timeline_filesource_set_is_image (GESTimelineFileSource * self,
gboolean is_image);
gboolean ges_timeline_filesource_is_muted (GESTimelineFileSource * self);
gboolean ges_timeline_filesource_is_image (GESTimelineFileSource * self);
const gchar *ges_timeline_filesource_get_uri (GESTimelineFileSource * self);
GESTimelineFileSource* ges_timeline_filesource_new (gchar *uri);
G_END_DECLS
#endif /* _GES_TIMELINE_FILESOURCE */

View file

@ -374,8 +374,8 @@ ges_timeline_pipeline_change_state (GstElement * element,
ret = GST_STATE_CHANGE_FAILURE;
goto done;
}
if (self->
priv->mode & (TIMELINE_MODE_RENDER | TIMELINE_MODE_SMART_RENDER))
if (self->priv->
mode & (TIMELINE_MODE_RENDER | TIMELINE_MODE_SMART_RENDER))
GST_DEBUG ("rendering => Updating pipeline caps");
if (!ges_timeline_pipeline_update_caps (self)) {
GST_ERROR_OBJECT (element, "Error setting the caps for rendering");

View file

@ -29,7 +29,7 @@
#include "ges-internal.h"
#include "ges-track-object.h"
#include "ges-track-filesource.h"
#include "ges-asset-file-source.h"
#include "ges-uri-asset.h"
#include "ges-extractable.h"
static gchar *

View file

@ -59,8 +59,8 @@ typedef struct _GESTimelineSourceClass GESTimelineSourceClass;
typedef struct _GESTimelineEffect GESTimelineEffect;
typedef struct _GESTimelineEffectClass GESTimelineEffectClass;
typedef struct _GESTimelineFileSource GESTimelineFileSource;
typedef struct _GESTimelineFileSourceClass GESTimelineFileSourceClass;
typedef struct _GESUriClip GESUriClip;
typedef struct _GESUriClipClass GESUriClipClass;
typedef struct _GESTimelineTransition GESTimelineTransition;
typedef struct _GESTimelineTransitionClass GESTimelineTransitionClass;
@ -146,8 +146,8 @@ typedef struct _GESAssetClass GESAssetClass;
typedef struct _GESAssetClip GESAssetClip;
typedef struct _GESAssetClipClass GESAssetClipClass;
typedef struct _GESAssetFileSource GESAssetFileSource;
typedef struct _GESAssetFileSourceClass GESAssetFileSourceClass;
typedef struct _GESUriClipAsset GESUriClipAsset;
typedef struct _GESUriClipAssetClass GESUriClipAssetClass;
typedef struct _GESAssetTrackObject GESAssetTrackObject;
typedef struct _GESAssetTrackObjectClass GESAssetTrackObjectClass;

View file

@ -19,10 +19,10 @@
* Boston, MA 02111-1307, USA.
*/
/**
* SECTION: ges-asset-file-source
* @short_description: A GESAsset subclass specialized in GESTimelineFileSource extraction
* SECTION: ges-uri-clip-asset
* @short_description: A GESAsset subclass specialized in GESUriClip extraction
*
* The #GESAssetFileSource is a special #GESAsset that lets you handle
* 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.
@ -40,7 +40,7 @@ initable_iface_init (GInitableIface * initable_iface)
initable_iface->init = NULL;
}
G_DEFINE_TYPE_WITH_CODE (GESAssetFileSource, ges_asset_filesource,
G_DEFINE_TYPE_WITH_CODE (GESUriClipAsset, ges_uri_clip_asset,
GES_TYPE_ASSET_CLIP,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init));
@ -58,7 +58,7 @@ static GParamSpec *properties[PROP_LAST];
static void discoverer_discovered_cb (GstDiscoverer * discoverer,
GstDiscovererInfo * info, GError * err, gpointer user_data);
struct _GESAssetFileSourcePrivate
struct _GESUriClipAssetPrivate
{
GstDiscovererInfo *info;
GstClockTime duration;
@ -70,7 +70,7 @@ struct _GESAssetFileSourcePrivate
struct _GESAssetTrackFileSourcePrivate
{
GstDiscovererStreamInfo *sinfo;
GESAssetFileSource *parent_asset;
GESUriClipAsset *parent_asset;
const gchar *uri;
GESTrackType type;
@ -78,10 +78,10 @@ struct _GESAssetTrackFileSourcePrivate
static void
ges_asset_filesource_get_property (GObject * object, guint property_id,
ges_uri_clip_asset_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
{
GESAssetFileSourcePrivate *priv = GES_ASSET_FILESOURCE (object)->priv;
GESUriClipAssetPrivate *priv = GES_URI_CLIP_ASSET (object)->priv;
switch (property_id) {
case PROP_DURATION:
@ -93,10 +93,10 @@ ges_asset_filesource_get_property (GObject * object, guint property_id,
}
static void
ges_asset_filesource_set_property (GObject * object, guint property_id,
ges_uri_clip_asset_set_property (GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
GESAssetFileSourcePrivate *priv = GES_ASSET_FILESOURCE (object)->priv;
GESUriClipAssetPrivate *priv = GES_URI_CLIP_ASSET (object)->priv;
switch (property_id) {
case PROP_DURATION:
@ -112,7 +112,7 @@ _start_loading (GESAsset * asset, GError ** error)
{
gboolean ret;
const gchar *uri;
GESAssetFileSourceClass *class = GES_ASSET_FILESOURCE_GET_CLASS (asset);
GESUriClipAssetClass *class = GES_URI_CLIP_ASSET_GET_CLASS (asset);
GST_DEBUG ("Started loading %p", asset);
@ -173,13 +173,13 @@ _asset_proxied (GESAsset * self, const gchar * new_uri)
}
static void
ges_asset_filesource_class_init (GESAssetFileSourceClass * klass)
ges_uri_clip_asset_class_init (GESUriClipAssetClass * klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (GESAssetFileSourcePrivate));
g_type_class_add_private (klass, sizeof (GESUriClipAssetPrivate));
object_class->get_property = ges_asset_filesource_get_property;
object_class->set_property = ges_asset_filesource_set_property;
object_class->get_property = ges_uri_clip_asset_get_property;
object_class->set_property = ges_uri_clip_asset_set_property;
GES_ASSET_CLASS (klass)->start_loading = _start_loading;
GES_ASSET_CLASS (klass)->request_id_update = _request_id_update;
@ -187,7 +187,7 @@ ges_asset_filesource_class_init (GESAssetFileSourceClass * klass)
/**
* GESAssetFileSource:duration:
* GESUriClipAsset:duration:
*
* The duration (in nanoseconds) of the media file
*/
@ -211,12 +211,12 @@ ges_asset_filesource_class_init (GESAssetFileSourceClass * klass)
}
static void
ges_asset_filesource_init (GESAssetFileSource * self)
ges_uri_clip_asset_init (GESUriClipAsset * self)
{
GESAssetFileSourcePrivate *priv;
GESUriClipAssetPrivate *priv;
priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
GES_TYPE_ASSET_FILESOURCE, GESAssetFileSourcePrivate);
GES_TYPE_URI_CLIP_ASSET, GESUriClipAssetPrivate);
priv->info = NULL;
priv->duration = GST_CLOCK_TIME_NONE;
@ -224,12 +224,12 @@ ges_asset_filesource_init (GESAssetFileSource * self)
}
static void
_create_track_file_source_asset (GESAssetFileSource * asset,
_create_track_file_source_asset (GESUriClipAsset * asset,
GstDiscovererStreamInfo * sinfo, GESTrackType type)
{
GESAsset *tck_filesource_asset;
GESAssetTrackFileSourcePrivate *priv_tckasset;
GESAssetFileSourcePrivate *priv = asset->priv;
GESUriClipAssetPrivate *priv = asset->priv;
gchar *stream_id =
g_strdup (gst_discoverer_stream_info_get_stream_id (sinfo));
@ -255,13 +255,12 @@ _create_track_file_source_asset (GESAssetFileSource * asset,
}
static void
ges_asset_filesource_set_info (GESAssetFileSource * self,
GstDiscovererInfo * info)
ges_uri_clip_asset_set_info (GESUriClipAsset * self, GstDiscovererInfo * info)
{
GList *tmp, *stream_list;
GESTrackType supportedformats = GES_TRACK_TYPE_UNKNOWN;
GESAssetFileSourcePrivate *priv = GES_ASSET_FILESOURCE (self)->priv;
GESUriClipAssetPrivate *priv = GES_URI_CLIP_ASSET (self)->priv;
/* Extract infos from the GstDiscovererInfo */
stream_list = gst_discoverer_info_get_stream_list (info);
@ -322,22 +321,21 @@ discoverer_discovered_cb (GstDiscoverer * discoverer,
const GstTagList *tags;
const gchar *uri = gst_discoverer_info_get_uri (info);
GESAssetFileSource *mfs =
GES_ASSET_FILESOURCE (ges_asset_cache_lookup
(GES_TYPE_TIMELINE_FILE_SOURCE, uri));
GESUriClipAsset *mfs =
GES_URI_CLIP_ASSET (ges_asset_cache_lookup (GES_TYPE_URI_CLIP, uri));
tags = gst_discoverer_info_get_tags (info);
if (tags)
gst_tag_list_foreach (tags, (GstTagForeachFunc) _set_meta_foreach, mfs);
if (err == NULL)
ges_asset_filesource_set_info (mfs, info);
ges_asset_cache_set_loaded (GES_TYPE_TIMELINE_FILE_SOURCE, uri, err);
ges_uri_clip_asset_set_info (mfs, info);
ges_asset_cache_set_loaded (GES_TYPE_URI_CLIP, uri, err);
}
/* API implementation */
/**
* ges_asset_filesource_get_info:
* ges_uri_clip_asset_get_info:
* @self: Target asset
*
* Gets #GstDiscovererInfo about the file
@ -345,68 +343,68 @@ discoverer_discovered_cb (GstDiscoverer * discoverer,
* Returns: (transfer none): #GstDiscovererInfo of specified asset
*/
GstDiscovererInfo *
ges_asset_filesource_get_info (const GESAssetFileSource * self)
ges_uri_clip_asset_get_info (const GESUriClipAsset * self)
{
return self->priv->info;
}
/**
* ges_asset_filesource_get_duration:
* @self: a #GESAssetFileSource
* ges_uri_clip_asset_get_duration:
* @self: a #GESUriClipAsset
*
* Gets duration of the file represented by @self
*
* Returns: The duration of @self
*/
GstClockTime
ges_asset_filesource_get_duration (GESAssetFileSource * self)
ges_uri_clip_asset_get_duration (GESUriClipAsset * self)
{
g_return_val_if_fail (GES_IS_ASSET_FILESOURCE (self), GST_CLOCK_TIME_NONE);
g_return_val_if_fail (GES_IS_URI_CLIP_ASSET (self), GST_CLOCK_TIME_NONE);
return self->priv->duration;
}
/**
* ges_asset_filesource_is_image:
* ges_uri_clip_asset_is_image:
* @self: a #indent: Standard input:311: Error:Unexpected end of file
GESAssetFileSource
GESUriClipAsset
*
* Gets Whether the file represented by @self is an image or not
*
* Returns: Whether the file represented by @self is an image or not
*/
gboolean
ges_asset_filesource_is_image (GESAssetFileSource * self)
ges_uri_clip_asset_is_image (GESUriClipAsset * self)
{
g_return_val_if_fail (GES_IS_ASSET_FILESOURCE (self), FALSE);
g_return_val_if_fail (GES_IS_URI_CLIP_ASSET (self), FALSE);
return self->priv->is_image;
}
/**
* ges_asset_filesource_new:
* @uri: The URI of the file for which to create a #GESAssetFileSource
* ges_uri_clip_asset_new:
* @uri: The URI of the file for which to create a #GESUriClipAsset
* @cancellable: optional %GCancellable object, %NULL to ignore.
* @callback: (scope async): a #GAsyncReadyCallback to call when the initialization is finished
* @user_data: The user data to pass when @callback is called
*
* Creates a #GESAssetFileSource for @uri
* Creates a #GESUriClipAsset for @uri
*
* Example of request of a GESAssetFileSource:
* 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;
* GESAssetFileSource *filesource_asset;
* GESUriClipAsset *filesource_asset;
*
* filesource_asset = GES_ASSET_FILESOURCE (ges_asset_request_finish (res, &error));
* 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_asset_filesource_is_image (filesource_asset) ? "" : " not",
* GST_TIME_ARGS (ges_asset_filesource_get_duration (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);
@ -416,36 +414,36 @@ ges_asset_filesource_is_image (GESAssetFileSource * self)
* }
*
* // The request:
* ges_asset_filesource_new (uri, (GAsyncReadyCallback) filesource_asset_loaded_cb, user_data);
* ges_uri_clip_asset_new (uri, (GAsyncReadyCallback) filesource_asset_loaded_cb, user_data);
* ]|
*/
void
ges_asset_filesource_new (const gchar * uri, GCancellable * cancellable,
ges_uri_clip_asset_new (const gchar * uri, GCancellable * cancellable,
GAsyncReadyCallback callback, gpointer user_data)
{
ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE, uri, cancellable,
ges_asset_request_async (GES_TYPE_URI_CLIP, uri, cancellable,
callback, user_data);
}
/**
* ges_asset_filesource_set_timeout:
* @class: The #GESAssetFileSourceClass on which to set the discoverer timeout
* ges_uri_clip_asset_set_timeout:
* @class: The #GESUriClipAssetClass on which to set the discoverer timeout
* @timeout: The timeout to set
*
* Sets the timeout of #GESAssetFileSource loading
* Sets the timeout of #GESUriClipAsset loading
*/
void
ges_asset_filesource_set_timeout (GESAssetFileSourceClass * class,
ges_uri_clip_asset_set_timeout (GESUriClipAssetClass * class,
GstClockTime timeout)
{
g_return_if_fail (GES_IS_ASSET_FILESOURCE_CLASS (class));
g_return_if_fail (GES_IS_URI_CLIP_ASSET_CLASS (class));
g_object_set (class->discoverer, "timeout", timeout, NULL);
}
/**
* ges_asset_filesource_get_stream_assets:
* @self: A #GESAssetFileSource
* ges_uri_clip_asset_get_stream_assets:
* @self: A #GESUriClipAsset
*
* Get the GESAssetTrackFileSource @self containes
*
@ -453,9 +451,9 @@ ges_asset_filesource_set_timeout (GESAssetFileSourceClass * class,
* #GList of #GESAssetTrackFileSource
*/
const GList *
ges_asset_filesource_get_stream_assets (GESAssetFileSource * self)
ges_uri_clip_asset_get_stream_assets (GESUriClipAsset * self)
{
g_return_val_if_fail (GES_IS_ASSET_FILESOURCE (self), FALSE);
g_return_val_if_fail (GES_IS_URI_CLIP_ASSET (self), FALSE);
return self->priv->asset_trackfilesources;
}
@ -468,7 +466,7 @@ ges_asset_filesource_get_stream_assets (GESAssetFileSource * self)
* @short_description: A GESAsset subclass specialized in GESTrackFileSource extraction
*
* NOTE: You should never request such a #GESAsset as they will be created automatically
* by #GESAssetFileSource-s.
* by #GESUriClipAsset-s.
*/
G_DEFINE_TYPE (GESAssetTrackFileSource, ges_asset_track_filesource,
@ -524,11 +522,11 @@ ges_asset_track_filesource_init (GESAssetTrackFileSource * self)
/**
* ges_asset_track_filesource_get_stream_info:
* @asset: A #GESAssetFileSource
* @asset: A #GESUriClipAsset
*
* Get the #GstDiscovererStreamInfo user by @asset
*
* Returns: (transfer none): a #GESAssetFileSource
* Returns: (transfer none): a #GESUriClipAsset
*/
GstDiscovererStreamInfo *
ges_asset_track_filesource_get_stream_info (GESAssetTrackFileSource * asset)
@ -548,13 +546,13 @@ ges_asset_track_filesource_get_stream_uri (GESAssetTrackFileSource * asset)
/**
* ges_asset_track_filesource_get_filesource_asset:
* @asset: A #GESAssetFileSource
* @asset: A #GESUriClipAsset
*
* Get the #GESAssetFileSource @self is contained in
* Get the #GESUriClipAsset @self is contained in
*
* Returns: a #GESAssetFileSource
* Returns: a #GESUriClipAsset
*/
const GESAssetFileSource *
const GESUriClipAsset *
ges_asset_track_filesource_get_filesource_asset (GESAssetTrackFileSource *
asset)
{

View file

@ -18,8 +18,8 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef _GES_ASSET_FILESOURCE_
#define _GES_ASSET_FILESOURCE_
#ifndef _GES_URI_CLIP_ASSET_
#define _GES_URI_CLIP_ASSET_
#include <glib-object.h>
#include <gio/gio.h>
@ -29,34 +29,34 @@
#include <ges/ges-asset-track-object.h>
G_BEGIN_DECLS
#define GES_TYPE_ASSET_FILESOURCE ges_asset_filesource_get_type()
#define GES_ASSET_FILESOURCE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_ASSET_FILESOURCE, GESAssetFileSource))
#define GES_ASSET_FILESOURCE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_ASSET_FILESOURCE, GESAssetFileSourceClass))
#define GES_IS_ASSET_FILESOURCE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_ASSET_FILESOURCE))
#define GES_IS_ASSET_FILESOURCE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_ASSET_FILESOURCE))
#define GES_ASSET_FILESOURCE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_ASSET_FILESOURCE, GESAssetFileSourceClass))
#define GES_TYPE_URI_CLIP_ASSET ges_uri_clip_asset_get_type()
#define GES_URI_CLIP_ASSET(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_URI_CLIP_ASSET, GESUriClipAsset))
#define GES_URI_CLIP_ASSET_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_URI_CLIP_ASSET, GESUriClipAssetClass))
#define GES_IS_URI_CLIP_ASSET(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_URI_CLIP_ASSET))
#define GES_IS_URI_CLIP_ASSET_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_URI_CLIP_ASSET))
#define GES_URI_CLIP_ASSET_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_URI_CLIP_ASSET, GESUriClipAssetClass))
typedef struct _GESAssetFileSourcePrivate GESAssetFileSourcePrivate;
typedef struct _GESUriClipAssetPrivate GESUriClipAssetPrivate;
GType ges_asset_filesource_get_type (void);
GType ges_uri_clip_asset_get_type (void);
struct _GESAssetFileSource
struct _GESUriClipAsset
{
GESAssetClip parent;
/* <private> */
GESAssetFileSourcePrivate *priv;
GESUriClipAssetPrivate *priv;
/* Padding for API extension */
gpointer __ges_reserved[GES_PADDING];
};
struct _GESAssetFileSourceClass
struct _GESUriClipAssetClass
{
GESAssetClipClass parent_class;
@ -66,16 +66,16 @@ struct _GESAssetFileSourceClass
gpointer _ges_reserved[GES_PADDING];
};
GstDiscovererInfo *ges_asset_filesource_get_info (const GESAssetFileSource * self);
GstClockTime ges_asset_filesource_get_duration (GESAssetFileSource *self);
gboolean ges_asset_filesource_is_image (GESAssetFileSource *self);
void ges_asset_filesource_new (const gchar *uri,
GstDiscovererInfo *ges_uri_clip_asset_get_info (const GESUriClipAsset * self);
GstClockTime ges_uri_clip_asset_get_duration (GESUriClipAsset *self);
gboolean ges_uri_clip_asset_is_image (GESUriClipAsset *self);
void ges_uri_clip_asset_new (const gchar *uri,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
void ges_asset_filesource_set_timeout (GESAssetFileSourceClass *class,
void ges_uri_clip_asset_set_timeout (GESUriClipAssetClass *class,
GstClockTime timeout);
const GList * ges_asset_filesource_get_stream_assets (GESAssetFileSource *self);
const GList * ges_uri_clip_asset_get_stream_assets (GESUriClipAsset *self);
#define GES_TYPE_ASSET_TRACK_FILESOURCE ges_asset_track_filesource_get_type()
#define GES_ASSET_TRACK_FILESOURCE(obj) \
@ -112,7 +112,7 @@ struct _GESAssetTrackFileSourceClass
};
GstDiscovererStreamInfo * ges_asset_track_filesource_get_stream_info (GESAssetTrackFileSource *asset);
const gchar * ges_asset_track_filesource_get_stream_uri (GESAssetTrackFileSource *asset);
const GESAssetFileSource *ges_asset_track_filesource_get_filesource_asset (GESAssetTrackFileSource *asset);
const GESUriClipAsset *ges_asset_track_filesource_get_filesource_asset (GESAssetTrackFileSource *asset);
G_END_DECLS
#endif /* _GES_ASSET_FILESOURCE */
#endif /* _GES_URI_CLIP_ASSET */

View file

@ -27,10 +27,10 @@
*/
#include "ges-internal.h"
#include "ges-timeline-file-source.h"
#include "ges-uri-clip.h"
#include "ges-timeline-source.h"
#include "ges-track-filesource.h"
#include "ges-asset-file-source.h"
#include "ges-uri-asset.h"
#include "ges-asset-track-object.h"
#include "ges-extractable.h"
#include "ges-track-image-source.h"
@ -38,16 +38,16 @@
static void ges_extractable_interface_init (GESExtractableInterface * iface);
#define parent_class ges_timeline_filesource_parent_class
#define parent_class ges_uri_clip_parent_class
G_DEFINE_TYPE_WITH_CODE (GESTimelineFileSource, ges_timeline_filesource,
G_DEFINE_TYPE_WITH_CODE (GESUriClip, ges_uri_clip,
GES_TYPE_TIMELINE_SOURCE,
G_IMPLEMENT_INTERFACE (GES_TYPE_EXTRACTABLE,
ges_extractable_interface_init));
GESExtractableInterface *parent_extractable_iface;
struct _GESTimelineFileSourcePrivate
struct _GESUriClipPrivate
{
gchar *uri;
@ -65,23 +65,21 @@ enum
};
static GList *ges_timeline_filesource_create_track_objects (GESClip *
static GList *ges_uri_clip_create_track_objects (GESClip *
obj, GESTrackType type);
static GESTrackObject
* ges_timeline_filesource_create_track_object (GESClip * obj,
GESTrackType type);
void ges_timeline_filesource_set_uri (GESTimelineFileSource * self,
gchar * uri);
* ges_uri_clip_create_track_object (GESClip * obj, GESTrackType type);
void ges_uri_clip_set_uri (GESUriClip * self, gchar * uri);
gboolean
filesource_set_max_duration (GESTimelineElement * element,
GstClockTime maxduration);
static void
ges_timeline_filesource_get_property (GObject * object, guint property_id,
ges_uri_clip_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
{
GESTimelineFileSourcePrivate *priv = GES_TIMELINE_FILE_SOURCE (object)->priv;
GESUriClipPrivate *priv = GES_URI_CLIP (object)->priv;
switch (property_id) {
case PROP_URI:
@ -103,21 +101,20 @@ ges_timeline_filesource_get_property (GObject * object, guint property_id,
}
static void
ges_timeline_filesource_set_property (GObject * object, guint property_id,
ges_uri_clip_set_property (GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
GESTimelineFileSource *uriclip = GES_TIMELINE_FILE_SOURCE (object);
GESUriClip *uriclip = GES_URI_CLIP (object);
switch (property_id) {
case PROP_URI:
ges_timeline_filesource_set_uri (uriclip, g_value_dup_string (value));
ges_uri_clip_set_uri (uriclip, g_value_dup_string (value));
break;
case PROP_MUTE:
ges_timeline_filesource_set_mute (uriclip, g_value_get_boolean (value));
ges_uri_clip_set_mute (uriclip, g_value_get_boolean (value));
break;
case PROP_IS_IMAGE:
ges_timeline_filesource_set_is_image (uriclip,
g_value_get_boolean (value));
ges_uri_clip_set_is_image (uriclip, g_value_get_boolean (value));
break;
case PROP_SUPPORTED_FORMATS:
ges_clip_set_supported_formats (GES_CLIP (uriclip),
@ -129,9 +126,9 @@ ges_timeline_filesource_set_property (GObject * object, guint property_id,
}
static void
ges_timeline_filesource_finalize (GObject * object)
ges_uri_clip_finalize (GObject * object)
{
GESTimelineFileSourcePrivate *priv = GES_TIMELINE_FILE_SOURCE (object)->priv;
GESUriClipPrivate *priv = GES_URI_CLIP (object)->priv;
if (priv->uri)
g_free (priv->uri);
@ -139,21 +136,21 @@ ges_timeline_filesource_finalize (GObject * object)
}
static void
ges_timeline_filesource_class_init (GESTimelineFileSourceClass * klass)
ges_uri_clip_class_init (GESUriClipClass * klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GESClipClass *timobj_class = GES_CLIP_CLASS (klass);
GESTimelineElementClass *element_class = GES_TIMELINE_ELEMENT_CLASS (klass);
g_type_class_add_private (klass, sizeof (GESTimelineFileSourcePrivate));
g_type_class_add_private (klass, sizeof (GESUriClipPrivate));
object_class->get_property = ges_timeline_filesource_get_property;
object_class->set_property = ges_timeline_filesource_set_property;
object_class->finalize = ges_timeline_filesource_finalize;
object_class->get_property = ges_uri_clip_get_property;
object_class->set_property = ges_uri_clip_set_property;
object_class->finalize = ges_uri_clip_finalize;
/**
* GESTimelineFileSource:uri:
* GESUriClip:uri:
*
* The location of the file/resource to use.
*/
@ -162,7 +159,7 @@ ges_timeline_filesource_class_init (GESTimelineFileSourceClass * klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/**
* GESTimelineFileSource:mute:
* GESUriClip:mute:
*
* Whether the sound will be played or not.
*/
@ -171,7 +168,7 @@ ges_timeline_filesource_class_init (GESTimelineFileSourceClass * klass)
FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
* GESTimelineFileSource:is-image:
* GESUriClip:is-image:
*
* Whether this filesource represents a still image or not. This must be set
* before create_track_objects is called.
@ -191,10 +188,8 @@ ges_timeline_filesource_class_init (GESTimelineFileSourceClass * klass)
element_class->set_max_duration = filesource_set_max_duration;
timobj_class->create_track_objects =
ges_timeline_filesource_create_track_objects;
timobj_class->create_track_object =
ges_timeline_filesource_create_track_object;
timobj_class->create_track_objects = ges_uri_clip_create_track_objects;
timobj_class->create_track_object = ges_uri_clip_create_track_object;
timobj_class->need_fill_track = FALSE;
}
@ -225,24 +220,24 @@ extractable_get_parameters_from_id (const gchar * id, guint * n_params)
static gchar *
extractable_get_id (GESExtractable * self)
{
return g_strdup (GES_TIMELINE_FILE_SOURCE (self)->priv->uri);
return g_strdup (GES_URI_CLIP (self)->priv->uri);
}
static void
extractable_set_asset (GESExtractable * self, GESAsset * asset)
{
GESTimelineFileSource *uriclip = GES_TIMELINE_FILE_SOURCE (self);
GESAssetFileSource *filesource_asset = GES_ASSET_FILESOURCE (asset);
GESUriClip *uriclip = GES_URI_CLIP (self);
GESUriClipAsset *filesource_asset = GES_URI_CLIP_ASSET (asset);
GESClip *clip = GES_CLIP (self);
if (GST_CLOCK_TIME_IS_VALID (GES_TIMELINE_ELEMENT (clip)) == FALSE)
_set_duration0 (GES_TIMELINE_ELEMENT (uriclip),
ges_asset_filesource_get_duration (filesource_asset));
ges_uri_clip_asset_get_duration (filesource_asset));
ges_timeline_element_set_max_duration (GES_TIMELINE_ELEMENT (uriclip),
ges_asset_filesource_get_duration (filesource_asset));
ges_timeline_filesource_set_is_image (uriclip,
ges_asset_filesource_is_image (filesource_asset));
ges_uri_clip_asset_get_duration (filesource_asset));
ges_uri_clip_set_is_image (uriclip,
ges_uri_clip_asset_is_image (filesource_asset));
if (ges_clip_get_supported_formats (clip) == GES_TRACK_TYPE_UNKNOWN) {
@ -257,7 +252,7 @@ extractable_set_asset (GESExtractable * self, GESAsset * asset)
static void
ges_extractable_interface_init (GESExtractableInterface * iface)
{
iface->asset_type = GES_TYPE_ASSET_FILESOURCE;
iface->asset_type = GES_TYPE_URI_CLIP_ASSET;
iface->check_id = (GESExtractableCheckId) extractable_check_id;
iface->get_parameters_from_id = extractable_get_parameters_from_id;
iface->get_id = extractable_get_id;
@ -265,25 +260,25 @@ ges_extractable_interface_init (GESExtractableInterface * iface)
}
static void
ges_timeline_filesource_init (GESTimelineFileSource * self)
ges_uri_clip_init (GESUriClip * self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
GES_TYPE_TIMELINE_FILE_SOURCE, GESTimelineFileSourcePrivate);
GES_TYPE_URI_CLIP, GESUriClipPrivate);
/* Setting the duration to -1 by default. */
GES_TIMELINE_ELEMENT (self)->duration = GST_CLOCK_TIME_NONE;
}
/**
* ges_timeline_filesource_set_mute:
* @self: the #GESTimelineFileSource on which to mute or unmute the audio track
* ges_uri_clip_set_mute:
* @self: the #GESUriClip on which to mute or unmute the audio track
* @mute: %TRUE to mute @self audio track, %FALSE to unmute it
*
* Sets whether the audio track of this timeline object is muted or not.
*
*/
void
ges_timeline_filesource_set_mute (GESTimelineFileSource * self, gboolean mute)
ges_uri_clip_set_mute (GESUriClip * self, gboolean mute)
{
GList *tmp, *trackobjects;
GESClip *object = (GESClip *) self;
@ -319,63 +314,62 @@ filesource_set_max_duration (GESTimelineElement * element,
}
/**
* ges_timeline_filesource_set_is_image:
* @self: the #GESTimelineFileSource
* ges_uri_clip_set_is_image:
* @self: the #GESUriClip
* @is_image: %TRUE if @self is a still image, %FALSE otherwise
*
* Sets whether the timeline object is a still image or not.
*/
void
ges_timeline_filesource_set_is_image (GESTimelineFileSource * self,
gboolean is_image)
ges_uri_clip_set_is_image (GESUriClip * self, gboolean is_image)
{
self->priv->is_image = is_image;
}
/**
* ges_timeline_filesource_is_muted:
* @self: the #GESTimelineFileSource
* ges_uri_clip_is_muted:
* @self: the #GESUriClip
*
* Lets you know if the audio track of @self is muted or not.
*
* Returns: %TRUE if the audio track of @self is muted, %FALSE otherwise.
*/
gboolean
ges_timeline_filesource_is_muted (GESTimelineFileSource * self)
ges_uri_clip_is_muted (GESUriClip * self)
{
return self->priv->mute;
}
/**
* ges_timeline_filesource_is_image:
* @self: the #GESTimelineFileSource
* ges_uri_clip_is_image:
* @self: the #GESUriClip
*
* Lets you know if @self is an image or not.
*
* Returns: %TRUE if @self is a still image %FALSE otherwise.
*/
gboolean
ges_timeline_filesource_is_image (GESTimelineFileSource * self)
ges_uri_clip_is_image (GESUriClip * self)
{
return self->priv->is_image;
}
/**
* ges_timeline_filesource_get_uri:
* @self: the #GESTimelineFileSource
* ges_uri_clip_get_uri:
* @self: the #GESUriClip
*
* Get the location of the resource.
*
* Returns: The location of the resource.
*/
const gchar *
ges_timeline_filesource_get_uri (GESTimelineFileSource * self)
ges_uri_clip_get_uri (GESUriClip * self)
{
return self->priv->uri;
}
static GList *
ges_timeline_filesource_create_track_objects (GESClip * obj, GESTrackType type)
ges_uri_clip_create_track_objects (GESClip * obj, GESTrackType type)
{
GList *res = NULL;
const GList *tmp, *stream_assets;
@ -383,7 +377,7 @@ ges_timeline_filesource_create_track_objects (GESClip * obj, GESTrackType type)
g_return_val_if_fail (GES_TIMELINE_ELEMENT (obj)->asset, NULL);
stream_assets =
ges_asset_filesource_get_stream_assets (GES_ASSET_FILESOURCE
ges_uri_clip_asset_get_stream_assets (GES_URI_CLIP_ASSET
(GES_TIMELINE_ELEMENT (obj)->asset));
for (tmp = stream_assets; tmp; tmp = tmp->next) {
GESAssetTrackObject *asset = GES_ASSET_TRACK_OBJECT (tmp->data);
@ -396,9 +390,9 @@ ges_timeline_filesource_create_track_objects (GESClip * obj, GESTrackType type)
}
static GESTrackObject *
ges_timeline_filesource_create_track_object (GESClip * obj, GESTrackType type)
ges_uri_clip_create_track_object (GESClip * obj, GESTrackType type)
{
GESTimelineFileSourcePrivate *priv = GES_TIMELINE_FILE_SOURCE (obj)->priv;
GESUriClipPrivate *priv = GES_URI_CLIP (obj)->priv;
GESTrackObject *res;
if (priv->is_image) {
@ -428,27 +422,27 @@ ges_timeline_filesource_create_track_object (GESClip * obj, GESTrackType type)
}
/**
* ges_timeline_filesource_new:
* ges_uri_clip_new:
* @uri: the URI the source should control
*
* Creates a new #GESTimelineFileSource for the provided @uri.
* Creates a new #GESUriClip for the provided @uri.
*
* Returns: The newly created #GESTimelineFileSource, or NULL if there was an
* Returns: The newly created #GESUriClip, or NULL if there was an
* error.
*/
GESTimelineFileSource *
ges_timeline_filesource_new (gchar * uri)
GESUriClip *
ges_uri_clip_new (gchar * uri)
{
GESTimelineFileSource *res = NULL;
GESUriClip *res = NULL;
if (gst_uri_is_valid (uri))
res = g_object_new (GES_TYPE_TIMELINE_FILE_SOURCE, "uri", uri, NULL);
res = g_object_new (GES_TYPE_URI_CLIP, "uri", uri, NULL);
return res;
}
void
ges_timeline_filesource_set_uri (GESTimelineFileSource * self, gchar * uri)
ges_uri_clip_set_uri (GESUriClip * self, gchar * uri)
{
GESClip *clip = GES_CLIP (self);
GList *tckobjs = ges_clip_get_track_objects (clip);

90
ges/ges-uri-clip.h Normal file
View file

@ -0,0 +1,90 @@
/* GStreamer Editing Services
* Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
* 2009 Nokia Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef _GES_URI_CLIP
#define _GES_URI_CLIP
#include <glib-object.h>
#include <ges/ges-types.h>
#include <ges/ges-timeline-source.h>
#include <ges/ges-track.h>
G_BEGIN_DECLS
#define GES_TYPE_URI_CLIP ges_uri_clip_get_type()
#define GES_URI_CLIP(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), GES_TYPE_URI_CLIP, GESUriClip))
#define GES_URI_CLIP_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), GES_TYPE_URI_CLIP, GESUriClipClass))
#define GES_IS_URI_CLIP(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GES_TYPE_URI_CLIP))
#define GES_IS_URI_CLIP_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GES_TYPE_URI_CLIP))
#define GES_URI_CLIP_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_URI_CLIP, GESUriClipClass))
typedef struct _GESUriClipPrivate GESUriClipPrivate;
struct _GESUriClip {
GESTimelineSource parent;
/*< private >*/
GESUriClipPrivate *priv;
/* Padding for API extension */
gpointer _ges_reserved[GES_PADDING];
};
/**
* GESUriClipClass:
*/
struct _GESUriClipClass {
/*< private >*/
GESTimelineSourceClass parent_class;
/* Padding for API extension */
gpointer _ges_reserved[GES_PADDING];
};
GType ges_uri_clip_get_type (void);
void
ges_uri_clip_set_mute (GESUriClip * self, gboolean mute);
void
ges_uri_clip_set_is_image (GESUriClip * self,
gboolean is_image);
gboolean ges_uri_clip_is_muted (GESUriClip * self);
gboolean ges_uri_clip_is_image (GESUriClip * self);
const gchar *ges_uri_clip_get_uri (GESUriClip * self);
GESUriClip* ges_uri_clip_new (gchar *uri);
G_END_DECLS
#endif /* _GES_URI_CLIP */

View file

@ -72,7 +72,7 @@ ges_init (void)
/* register timeline object classes with the system */
GES_TYPE_TIMELINE_TEST_SOURCE;
GES_TYPE_TIMELINE_FILE_SOURCE;
GES_TYPE_URI_CLIP;
GES_TYPE_TIMELINE_TITLE_SOURCE;
GES_TYPE_TIMELINE_STANDARD_TRANSITION;
GES_TYPE_TIMELINE_OVERLAY;

View file

@ -44,12 +44,12 @@
#include <ges/ges-timeline-parse-launch-effect.h>
#include <ges/ges-custom-timeline-source.h>
#include <ges/ges-timeline-effect.h>
#include <ges/ges-timeline-file-source.h>
#include <ges/ges-uri-clip.h>
#include <ges/ges-screenshot.h>
#include <ges/ges-asset.h>
#include <ges/ges-asset-clip.h>
#include <ges/ges-asset-track-object.h>
#include <ges/ges-asset-file-source.h>
#include <ges/ges-uri-asset.h>
#include <ges/ges-project.h>
#include <ges/ges-extractable.h>
#include <ges/ges-base-xml-formatter.h>

View file

@ -32,7 +32,7 @@ check_PROGRAMS = \
ges/basic \
ges/layer \
ges/effects \
ges/filesource \
ges/uriclip \
ges/simplelayer \
ges/clip \
ges/timelineedition \

View file

@ -44,7 +44,7 @@ GST_START_TEST (test_basic)
ges_init ();
mainloop = g_main_loop_new (NULL, FALSE);
ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE,
ges_asset_request_async (GES_TYPE_URI_CLIP,
"file:///this/is/not/for/real", NULL, source_asset_created, NULL);
g_main_loop_run (mainloop);

View file

@ -220,8 +220,8 @@ GST_START_TEST (test_effect_clip)
GES_TRACK_EFFECT (tmp->data));
fail_unless (priority > effect_prio);
fail_unless (GES_IS_TRACK_EFFECT (tmp->data));
fail_unless (ges_track_object_get_track (GES_TRACK_OBJECT (tmp->
data))->type == track_type[i]);
fail_unless (ges_track_object_get_track (GES_TRACK_OBJECT (tmp->data))->
type == track_type[i]);
effect_prio = priority;
g_object_unref (tmp->data);

View file

@ -173,7 +173,7 @@ asset_added_cb (GESProject * project, GESAsset * asset)
GES_TYPE_TRACK_PARSE_LAUNCH_EFFECT) {
assert_equals_string (ges_asset_get_id (asset), "agingtv");
} else {
info = ges_asset_filesource_get_info (GES_ASSET_FILESOURCE (asset));
info = ges_uri_clip_asset_get_info (GES_URI_CLIP_ASSET (asset));
fail_unless (GST_IS_DISCOVERER_INFO (info));
assert_equals_string (ges_asset_get_id (asset), uri);
}
@ -206,10 +206,10 @@ _test_project (GESProject * project, GESTimeline * timeline)
assert_equals_string (ges_meta_container_get_string (GES_META_CONTAINER
(project), "name"), "Example project");
clips =
ges_timeline_layer_get_objects (GES_TIMELINE_LAYER (timeline->layers->
data));
fail_unless (ges_meta_container_get_uint (GES_META_CONTAINER (timeline->
layers->data), "a", &a_meta));
ges_timeline_layer_get_objects (GES_TIMELINE_LAYER (timeline->
layers->data));
fail_unless (ges_meta_container_get_uint (GES_META_CONTAINER
(timeline->layers->data), "a", &a_meta));
assert_equals_int (a_meta, 3);
assert_equals_int (g_list_length (clips), 1);
media_uri = ges_test_file_uri ("audio_video.ogg");

View file

@ -8,19 +8,19 @@
</encoding-profiles>
<resources>
<asset id="file:///test/not/exisiting"
extractable-type-name="GESTimelineFileSource"/>
extractable-type-name="GESUriClip"/>
</resources>
<timeline>
<track track-type="2" caps="audio/x-raw" track-id="0"/>
<track track-type="4" caps="video/x-raw" track-id="1"/>
<layer priority="0" properties='properties, auto-transition=(boolean)true;' metadatas='metadatas, a=(guint)3'>
<clip id="0" layer-priority='0' asset-id="file:///test/not/exisiting" type-name="GESTimelineFileSource" track-types="6" start="0" duration="1000000000">
<clip id="0" layer-priority='0' asset-id="file:///test/not/exisiting" type-name="GESUriClip" track-types="6" start="0" duration="1000000000">
<effect asset-id='agingtv' clip-id='0' type-name='GESTrackParseLaunchEffect' track-type='4' track-id='1' metadatas='metadatas;' children-properties='properties, scratch-lines=(uint)12;'/>
</clip>
</layer>
<layer priority="1" properties='properties, auto-transition=(boolean)true;'>
<clip id="1" asset-id="file:///test/not/exisiting" layer-priority="1"
type-name="GESTimelineFileSource" track-types="2" start="1000000000" duration="1000000000">
type-name="GESUriClip" track-types="2" start="1000000000" duration="1000000000">
</clip>
</layer>
</timeline>

View file

@ -34,7 +34,7 @@ asset_created_cb (GObject * source, GAsyncResult * res, gpointer udata)
GList *tracks, *tmp;
GESAsset *asset;
GESTimelineLayer *layer;
GESTimelineFileSource *tlfs;
GESUriClip *tlfs;
GError *error = NULL;
@ -44,10 +44,10 @@ asset_created_cb (GObject * source, GAsyncResult * res, gpointer udata)
fail_if (g_strcmp0 (ges_asset_get_id (asset), av_uri));
layer = GES_TIMELINE_LAYER (g_async_result_get_user_data (res));
tlfs = GES_TIMELINE_FILE_SOURCE (ges_timeline_layer_add_asset (layer,
tlfs = GES_URI_CLIP (ges_timeline_layer_add_asset (layer,
asset, 0, 0, GST_CLOCK_TIME_NONE, 1, GES_TRACK_TYPE_UNKNOWN));
fail_unless (GES_IS_TIMELINE_FILE_SOURCE (tlfs));
fail_if (g_strcmp0 (ges_timeline_filesource_get_uri (tlfs), av_uri));
fail_unless (GES_IS_URI_CLIP (tlfs));
fail_if (g_strcmp0 (ges_uri_clip_get_uri (tlfs), av_uri));
assert_equals_uint64 (_DURATION (tlfs), GST_SECOND);
fail_unless (ges_clip_get_supported_formats
@ -85,7 +85,7 @@ GST_START_TEST (test_filesource_basic)
fail_unless (layer != NULL);
fail_unless (ges_timeline_add_layer (timeline, layer));
ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE,
ges_asset_request_async (GES_TYPE_URI_CLIP,
av_uri, NULL, asset_created_cb, layer);
g_main_loop_run (mainloop);
@ -122,7 +122,7 @@ GST_START_TEST (test_filesource_properties)
fail_unless (track != NULL);
object = (GESClip *)
ges_timeline_filesource_new ((gchar *)
ges_uri_clip_new ((gchar *)
"crack:///there/is/no/way/this/exists");
fail_unless (object != NULL);
@ -182,12 +182,12 @@ GST_START_TEST (test_filesource_images)
{
GESTrackObject *trobj;
GESClip *clip;
GESTimelineFileSource *uriclip;
GESUriClip *uriclip;
GESTrack *a, *v;
ges_init ();
uriclip = ges_timeline_filesource_new ((gchar *) TEST_URI);
uriclip = ges_uri_clip_new ((gchar *) TEST_URI);
g_object_set (G_OBJECT (uriclip), "supported-formats",
(GESTrackType) GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO, NULL);
clip = GES_CLIP (uriclip);

View file

@ -18,7 +18,7 @@
*/
#include <ges/ges.h>
#include <ges/ges-asset-file-source.h>
#include <ges/ges-uri-asset.h>
#include <gst/pbutils/encoding-profile.h>
#include <gst/pbutils/gstdiscoverer.h>
#include <ges/ges-internal.h>
@ -26,15 +26,15 @@
static void
asset_loaded_cb (GObject * source, GAsyncResult * res, GMainLoop * mainloop)
{
GESAssetFileSource *mfs =
GES_ASSET_FILESOURCE (ges_asset_request_finish (res, NULL));
GESUriClipAsset *mfs =
GES_URI_CLIP_ASSET (ges_asset_request_finish (res, NULL));
GstDiscovererInfo *discoverer_info = NULL;
discoverer_info = ges_asset_filesource_get_info (mfs);
discoverer_info = ges_uri_clip_asset_get_info (mfs);
GST_DEBUG ("Result is %d", gst_discoverer_info_get_result (discoverer_info));
GST_DEBUG ("Info type is %s", G_OBJECT_TYPE_NAME (mfs));
GST_DEBUG ("Duration is %" GST_TIME_FORMAT,
GST_TIME_ARGS (ges_asset_filesource_get_duration (mfs)));
GST_TIME_ARGS (ges_uri_clip_asset_get_duration (mfs)));
g_object_unref (mfs);
@ -60,7 +60,7 @@ main (int argc, gchar ** argv)
* order to function properly ! */
mainloop = g_main_loop_new (NULL, FALSE);
ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE, argv[1], NULL,
ges_asset_request_async (GES_TYPE_URI_CLIP, argv[1], NULL,
(GAsyncReadyCallback) asset_loaded_cb, mainloop);
g_main_loop_run (mainloop);

View file

@ -38,8 +38,8 @@ asset_loaded_cb (GObject * source_object, GAsyncResult * res,
{
GError *error = NULL;
GESAssetFileSource *mfs =
GES_ASSET_FILESOURCE (ges_asset_request_finish (res, &error));
GESUriClipAsset *mfs =
GES_URI_CLIP_ASSET (ges_asset_request_finish (res, &error));
if (error) {
GST_WARNING ("error creating asseti %s", error->message);
@ -52,7 +52,7 @@ asset_loaded_cb (GObject * source_object, GAsyncResult * res,
* Check if we have loaded last asset and trigger concatenating
*/
if (assetsLoaded == assetsCount) {
GstDiscovererInfo *info = ges_asset_filesource_get_info (mfs);
GstDiscovererInfo *info = ges_uri_clip_asset_get_info (mfs);
GstEncodingProfile *profile = make_profile_from_info (info);
ges_timeline_pipeline_set_render_settings (pipeline, output_uri, profile);
/* We want the pipeline to render (without any preview) */
@ -94,7 +94,7 @@ main (int argc, char **argv)
assetsCount = argc - 2;
for (i = 2; i < argc; i++) {
ges_asset_request_async (GES_TYPE_TIMELINE_FILE_SOURCE, argv[i],
ges_asset_request_async (GES_TYPE_URI_CLIP, argv[i],
NULL, (GAsyncReadyCallback) asset_loaded_cb, mainloop);
}

View file

@ -161,7 +161,7 @@ update_effect_sensitivity (App * app)
/* effects will work for multiple FileSource */
for (i = app->selected_objects; i; i = i->next) {
if (!GES_IS_TIMELINE_FILE_SOURCE (i->data)) {
if (!GES_IS_URI_CLIP (i->data)) {
ok = FALSE;
break;
}
@ -348,7 +348,7 @@ layer_object_added_cb (GESTimelineLayer * layer, GESClip * object, App * app)
gtk_list_store_append (app->model, &iter);
if (GES_IS_TIMELINE_FILE_SOURCE (object)) {
if (GES_IS_URI_CLIP (object)) {
g_object_get (G_OBJECT (object), "uri", &description, NULL);
gtk_list_store_set (app->model, &iter, 0, description, 2, object, -1);
}
@ -681,7 +681,7 @@ connect_to_object (GESClip * object, App * app)
GST_TIME_ARGS (duration));
gtk_entry_set_text (app->seconds, buf);
if (GES_IS_TIMELINE_FILE_SOURCE (object)) {
if (GES_IS_URI_CLIP (object)) {
connect_to_filesource (object, app);
} else if (GES_IS_TIMELINE_TITLE_SOURCE (object)) {
connect_to_title_source (object, app);
@ -695,7 +695,7 @@ connect_to_object (GESClip * object, App * app)
static void
disconnect_from_object (GESClip * object, App * app)
{
if (GES_IS_TIMELINE_FILE_SOURCE (object)) {
if (GES_IS_URI_CLIP (object)) {
disconnect_from_filesource (object, app);
} else if (GES_IS_TIMELINE_TITLE_SOURCE (object)) {
disconnect_from_title_source (object, app);
@ -1151,7 +1151,7 @@ app_add_file (App * app, gchar * uri)
GST_DEBUG ("adding file %s", uri);
obj = GES_CLIP (ges_timeline_filesource_new (uri));
obj = GES_CLIP (ges_uri_clip_new (uri));
ges_simple_timeline_layer_add_object (GES_SIMPLE_TIMELINE_LAYER (app->layer),
obj, -1);
@ -1603,7 +1603,7 @@ app_selection_changed_cb (GtkTreeSelection * selection, App * app)
gtk_widget_set_visible (app->properties, app->n_selected > 0);
gtk_widget_set_visible (app->filesource_properties,
app->selected_type == GES_TYPE_TIMELINE_FILE_SOURCE);
app->selected_type == GES_TYPE_URI_CLIP);
gtk_widget_set_visible (app->text_properties,
app->selected_type == GES_TYPE_TIMELINE_TITLE_SOURCE);

View file

@ -43,7 +43,7 @@ make_source (char *path, guint64 start, guint64 duration, gint priority)
{
gchar *uri = gst_filename_to_uri (path, NULL);
GESClip *ret = GES_CLIP (ges_timeline_filesource_new (uri));
GESClip *ret = GES_CLIP (ges_uri_clip_new (uri));
g_object_set (ret,
"start", (guint64) start,

View file

@ -30,7 +30,7 @@ main (int argc, gchar ** argv)
GESTimeline *timeline;
GESTrack *tracka, *trackv;
GESTimelineLayer *layer1, *layer2;
GESTimelineFileSource *src;
GESUriClip *src;
GMainLoop *mainloop;
gint inpoint = 0, duration = 10;
@ -90,7 +90,7 @@ main (int argc, gchar ** argv)
if (1) {
gchar *uri = gst_filename_to_uri (argv[1], NULL);
/* Add the main audio/video file */
src = ges_timeline_filesource_new (uri);
src = ges_uri_clip_new (uri);
g_free (uri);
g_object_set (src, "in-point", inpoint * GST_SECOND,
"duration", duration * GST_SECOND, "mute", mute, NULL);

View file

@ -63,7 +63,7 @@ main (int argc, gchar ** argv)
for (i = 1; i < argc; i++, offset += GST_SECOND) {
gchar *uri = gst_filename_to_uri (argv[i], NULL);
GESTimelineFileSource *src = ges_timeline_filesource_new (uri);
GESUriClip *src = ges_uri_clip_new (uri);
g_assert (src);
g_free (uri);

View file

@ -62,7 +62,7 @@ main (int argc, gchar ** argv)
for (i = 1; i < argc; i++) {
gchar *uri = gst_filename_to_uri (argv[i], NULL);
GESTimelineFileSource *src = ges_timeline_filesource_new (uri);
GESUriClip *src = ges_uri_clip_new (uri);
g_assert (src);
g_free (uri);

View file

@ -117,7 +117,7 @@ main (int argc, gchar ** argv)
for (i = 2; i < argc; i++) {
gchar *uri = gst_filename_to_uri (argv[i], NULL);
GESTimelineFileSource *src = ges_timeline_filesource_new (uri);
GESUriClip *src = ges_uri_clip_new (uri);
g_assert (src);
g_free (uri);

View file

@ -37,7 +37,7 @@ make_source (char *path, guint64 start, guint64 duration, gint priority,
{
gchar *uri = gst_filename_to_uri (path, NULL);
GESClip *ret = GES_CLIP (ges_timeline_filesource_new (uri));
GESClip *ret = GES_CLIP (ges_uri_clip_new (uri));
g_object_set (ret,
"start", (guint64) start,

View file

@ -42,7 +42,7 @@ make_source (gchar * path, guint64 start, guint64 duration, guint64 inpoint,
{
gchar *uri = gst_filename_to_uri (path, NULL);
GESClip *ret = GES_CLIP (ges_timeline_filesource_new (uri));
GESClip *ret = GES_CLIP (ges_uri_clip_new (uri));
g_object_set (ret,
"start", (guint64) start,

View file

@ -211,7 +211,7 @@ create_timeline (int nbargs, gchar ** argv, gchar * audio, gchar * video)
}
inpoint = str_to_time (argv[i * 3 + 1]);
obj = GES_CLIP (ges_timeline_filesource_new (uri));
obj = GES_CLIP (ges_uri_clip_new (uri));
g_object_set (obj,
"in-point", (guint64) inpoint, "duration", (guint64) duration, NULL);