/*< private > */
GESTimeline *timeline;
GList *trackobjects;
+ guint64 duration;
GstCaps *caps;
ARG_0,
ARG_CAPS,
ARG_TYPE,
+ ARG_DURATION,
ARG_LAST
};
static void pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track);
static void
pad_removed_cb (GstElement * element, GstPad * pad, GESTrack * track);
+static void composition_duration_cb (GstElement * composition, GParamSpec * arg
+ G_GNUC_UNUSED, GESTrack * obj);
static void
ges_track_get_property (GObject * object, guint property_id,
case ARG_TYPE:
g_value_set_flags (value, track->type);
break;
+ case ARG_DURATION:
+ g_value_set_uint64 (value, track->priv->duration);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
g_object_class_install_property (object_class, ARG_CAPS,
properties[ARG_CAPS]);
+ /**
+ * GESTrack:duration
+ *
+ * Current duration of the track
+ *
+ * Default value: O
+ */
+ properties[ARG_DURATION] = g_param_spec_uint64 ("duration", "Duration",
+ "The current duration of the track", 0, G_MAXUINT64, GST_SECOND,
+ G_PARAM_READABLE);
+ g_object_class_install_property (object_class, ARG_DURATION,
+ properties[ARG_DURATION]);
/**
* GESTrack:track-type
self->priv->composition = gst_element_factory_make ("gnlcomposition", NULL);
+ g_signal_connect (G_OBJECT (self->priv->composition), "notify::duration",
+ G_CALLBACK (composition_duration_cb), self);
g_signal_connect (self->priv->composition, "pad-added",
(GCallback) pad_added_cb, self);
g_signal_connect (self->priv->composition, "pad-removed",
GST_DEBUG ("done");
}
+static void
+composition_duration_cb (GstElement * composition,
+ GParamSpec * arg G_GNUC_UNUSED, GESTrack * obj)
+{
+ guint64 duration;
+
+ g_object_get (composition, "duration", &duration, NULL);
+
+
+ if (obj->priv->duration != duration) {
+ GST_DEBUG ("composition duration : %" GST_TIME_FORMAT " current : %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (duration),
+ GST_TIME_ARGS (obj->priv->duration));
+
+ obj->priv->duration = duration;
+
+#if GLIB_CHECK_VERSION(2,26,0)
+ g_object_notify_by_pspec (G_OBJECT (obj), properties[ARG_DURATION]);
+#else
+ g_object_notify (G_OBJECT (obj), "duration");
+#endif
+ }
+}
+
/**
* ges_track_get_caps:
* @track: a #GESTrack