GstElement *gnlobject; /* The GnlObject */
GstElement *element; /* The element contained in the gnlobject (can be NULL) */
+ /* We keep a link between properties name and elements internally
+ * The hashtable should look like
+ * {'ClassName-propertyName' ---> element,}*/
+ GHashTable *properties_hashtable;
+
GESTimelineObject *timelineobj;
GESTrack *track;
static void
ges_track_object_dispose (GObject * object)
{
+ GESTrackObjectPrivate *priv = GES_TRACK_OBJECT (object)->priv;
+ if (priv->properties_hashtable)
+ g_hash_table_destroy (priv->properties_hashtable);
+
G_OBJECT_CLASS (ges_track_object_parent_class)->dispose (object);
}
self->priv->pending_priority = 1;
self->priv->pending_active = TRUE;
self->priv->locked = TRUE;
+ self->priv->properties_hashtable = NULL;
}
static inline gboolean
{
GESTrackObjectClass *class;
GstElement *gnlobject;
+ GHashTable *props_hash;
gboolean res = FALSE;
if (object->priv->gnlobject && object->priv->valid)
"priority", object->priv->pending_priority,
"active", object->priv->pending_active, NULL);
+ /* We feed up the props_hashtable if possible */
+ if (class->get_props_hastable) {
+ props_hash = class->get_props_hastable (object);
+
+ if (props_hash == NULL) {
+ GST_DEBUG ("'get_props_hastable' implementation returned TRUE but no\
+ properties_hashtable is available");
+ } else {
+ object->priv->properties_hashtable = props_hash;
+ }
+ }
}
}
const gchar *gnlobject_factorytype;
GstElement* (*create_gnl_object) (GESTrackObject * object);
GstElement* (*create_element) (GESTrackObject * object);
+ GHashTable* (*get_props_hastable) (GESTrackObject * object);
void (*start_changed) (GESTrackObject *object, guint64 start);
void (*media_start_changed) (GESTrackObject *object, guint64 media_start);