From ca0bcfcd50559249ce9a432a559aac75eadf622c Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Mon, 19 Nov 2012 23:42:47 -0300 Subject: [PATCH] trackobject: Implement the GESExtractable interface --- ges/ges-track-object.c | 15 ++++++++++-- ges/ges-track-object.h | 4 ++- ges/ges-track-parse-launch-effect.c | 49 +++++++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 5 deletions(-) diff --git a/ges/ges-track-object.c b/ges/ges-track-object.c index a3a957c..27ad627 100644 --- a/ges/ges-track-object.c +++ b/ges/ges-track-object.c @@ -31,12 +31,18 @@ */ #include "ges-internal.h" +#include "ges-extractable.h" #include "ges-track-object.h" #include "ges-timeline-object.h" #include -G_DEFINE_ABSTRACT_TYPE (GESTrackObject, ges_track_object, - G_TYPE_INITIALLY_UNOWNED); +static void ges_extractable_interface_init (GESExtractableInterface * iface); + + +G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GESTrackObject, ges_track_object, + G_TYPE_INITIALLY_UNOWNED, + G_IMPLEMENT_INTERFACE (GES_TYPE_EXTRACTABLE, + ges_extractable_interface_init)); struct _GESTrackObjectPrivate { @@ -371,6 +377,11 @@ ges_track_object_init (GESTrackObject * self) priv->maxduration = GST_CLOCK_TIME_NONE; } +static void +ges_extractable_interface_init (GESExtractableInterface * iface) +{ +} + static inline gboolean ges_track_object_set_start_internal (GESTrackObject * object, guint64 start) { diff --git a/ges/ges-track-object.h b/ges/ges-track-object.h index a9bdc79..9f6e0ba 100644 --- a/ges/ges-track-object.h +++ b/ges/ges-track-object.h @@ -89,6 +89,8 @@ struct _GESTrackObject { GESTrackObjectPrivate *priv; + GESAsset *asset; + /* Padding for API extension */ gpointer _ges_reserved[GES_PADDING_LARGE]; }; @@ -113,7 +115,7 @@ struct _GESTrackObject { * * Subclasses can override the @create_gnl_object method to override what type * of GNonLin object will be created. - */ + */ struct _GESTrackObjectClass { /*< private >*/ GInitiallyUnownedClass parent_class; diff --git a/ges/ges-track-parse-launch-effect.c b/ges/ges-track-parse-launch-effect.c index 165fd88..9be8634 100644 --- a/ges/ges-track-parse-launch-effect.c +++ b/ges/ges-track-parse-launch-effect.c @@ -24,12 +24,17 @@ */ #include "ges-internal.h" +#include "ges-extractable.h" #include "ges-track-object.h" #include "ges-track-effect.h" #include "ges-track-parse-launch-effect.h" -G_DEFINE_TYPE (GESTrackParseLaunchEffect, ges_track_parse_launch_effect, - GES_TYPE_TRACK_EFFECT); +static void ges_extractable_interface_init (GESExtractableInterface * iface); + +G_DEFINE_TYPE_WITH_CODE (GESTrackParseLaunchEffect, + ges_track_parse_launch_effect, GES_TYPE_TRACK_EFFECT, + G_IMPLEMENT_INTERFACE (GES_TYPE_EXTRACTABLE, + ges_extractable_interface_init)); static void ges_track_parse_launch_effect_dispose (GObject * object); static void ges_track_parse_launch_effect_finalize (GObject * object); @@ -47,6 +52,46 @@ enum PROP_BIN_DESCRIPTION, }; +static gchar * +extractable_check_id (GType type, const gchar * id, GError ** error) +{ + GstElement *effect = gst_parse_bin_from_description (id, TRUE, error); + + if (effect == NULL) + return NULL; + + gst_object_unref (effect); + return g_strdup (id); +} + +static GParameter * +extractable_get_parameters_from_id (const gchar * id, guint * n_params) +{ + GParameter *params = g_new0 (GParameter, 2); + + params[0].name = g_strdup ("bin-description"); + g_value_init (¶ms[0].value, G_TYPE_STRING); + g_value_set_string (¶ms[0].value, id); + + *n_params = 1; + + return params; +} + +static gchar * +extractable_get_id (GESExtractable * self) +{ + return g_strdup (GES_TRACK_PARSE_LAUNCH_EFFECT (self)->priv->bin_description); +} + +static void +ges_extractable_interface_init (GESExtractableInterface * iface) +{ + iface->check_id = (GESExtractableCheckId) extractable_check_id; + iface->get_parameters_from_id = extractable_get_parameters_from_id; + iface->get_id = extractable_get_id; +} + static void ges_track_parse_launch_effect_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) -- 2.7.4