diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt
index d1bacaf5ba..d589f00984 100644
--- a/docs/libs/ges-sections.txt
+++ b/docs/libs/ges-sections.txt
@@ -198,7 +198,8 @@ GES_TYPE_TRACK_AUDIO_TRANSITION
GESTrackVideoTransition
GESTrackVideoTransition
ges_track_video_transition_new
-ges_track_video_transition_set_type
+ges_track_video_transition_set_transition_type
+ges_track_video_transition_get_transition_type
GESTrackVideoTransitionClass
GESTrackVideoTransitionPrivate
diff --git a/ges/ges-timeline-standard-transition.c b/ges/ges-timeline-standard-transition.c
index a8c0fa4375..5360de9709 100644
--- a/ges/ges-timeline-standard-transition.c
+++ b/ges/ges-timeline-standard-transition.c
@@ -71,7 +71,7 @@ ges_timeline_standard_transition_update_vtype_internal (GESTimelineObject *
GESTrackVideoTransition *obj;
if (GES_IS_TRACK_VIDEO_TRANSITION (tmp->data)) {
obj = (GESTrackVideoTransition *) tmp->data;
- if (!ges_track_video_transition_set_type (obj, value))
+ if (!ges_track_video_transition_set_transition_type (obj, value))
goto beach;
}
}
@@ -168,8 +168,8 @@ ges_tl_transition_create_track_object (GESTimelineObject * obj,
if (track->type == GES_TRACK_TYPE_VIDEO) {
res = GES_TRACK_OBJECT (ges_track_video_transition_new ());
- ges_track_video_transition_set_type ((GESTrackVideoTransition *) res,
- transition->vtype);
+ ges_track_video_transition_set_transition_type ((GESTrackVideoTransition *)
+ res, transition->vtype);
}
else if (track->type == GES_TRACK_TYPE_AUDIO) {
diff --git a/ges/ges-track-video-transition.c b/ges/ges-track-video-transition.c
index 9a214bfbdc..6f071d928e 100644
--- a/ges/ges-track-video-transition.c
+++ b/ges/ges-track-video-transition.c
@@ -31,8 +31,22 @@ G_DEFINE_TYPE (GESTrackVideoTransition, ges_track_video_transition,
struct _GESTrackVideoTransitionPrivate
{
- /* Dummy variable */
- void *nothing;
+ GESVideoStandardTransitionType type;
+
+ /* these enable video interpolation */
+ GstController *controller;
+ GstInterpolationControlSource *control_source;
+
+ /* so we can support changing between wipes */
+ GstElement *smpte;
+ GstElement *mixer;
+ GstPad *sinka;
+ GstPad *sinkb;
+
+ /* these will be different depending on whether smptealpha or alpha element
+ * is used */
+ gdouble start_value;
+ gdouble end_value;
};
enum
@@ -92,48 +106,49 @@ ges_track_video_transition_init (GESTrackVideoTransition * self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
GES_TYPE_TRACK_VIDEO_TRANSITION, GESTrackVideoTransitionPrivate);
- self->controller = NULL;
- self->control_source = NULL;
- self->smpte = NULL;
- self->mixer = NULL;
- self->sinka = NULL;
- self->sinkb = NULL;
- self->type = GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE;
- self->start_value = 0.0;
- self->end_value = 0.0;
+ self->priv->controller = NULL;
+ self->priv->control_source = NULL;
+ self->priv->smpte = NULL;
+ self->priv->mixer = NULL;
+ self->priv->sinka = NULL;
+ self->priv->sinkb = NULL;
+ self->priv->type = GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE;
+ self->priv->start_value = 0.0;
+ self->priv->end_value = 0.0;
}
static void
ges_track_video_transition_dispose (GObject * object)
{
GESTrackVideoTransition *self = GES_TRACK_VIDEO_TRANSITION (object);
+ GESTrackVideoTransitionPrivate *priv = self->priv;
GST_DEBUG ("disposing");
GST_LOG ("mixer: %p smpte: %p sinka: %p sinkb: %p",
- self->mixer, self->smpte, self->sinka, self->sinkb);
+ priv->mixer, priv->smpte, priv->sinka, priv->sinkb);
- if (self->controller) {
- g_object_unref (self->controller);
- self->controller = NULL;
- if (self->control_source)
- gst_object_unref (self->control_source);
- self->control_source = NULL;
+ if (priv->controller) {
+ g_object_unref (priv->controller);
+ priv->controller = NULL;
+ if (priv->control_source)
+ gst_object_unref (priv->control_source);
+ priv->control_source = NULL;
}
- if (self->sinka && self->sinkb) {
+ if (priv->sinka && priv->sinkb) {
GST_DEBUG ("releasing request pads for mixer");
- gst_element_release_request_pad (self->mixer, self->sinka);
- gst_element_release_request_pad (self->mixer, self->sinkb);
- gst_object_unref (self->sinka);
- gst_object_unref (self->sinkb);
- self->sinka = NULL;
- self->sinkb = NULL;
+ gst_element_release_request_pad (priv->mixer, priv->sinka);
+ gst_element_release_request_pad (priv->mixer, priv->sinkb);
+ gst_object_unref (priv->sinka);
+ gst_object_unref (priv->sinkb);
+ priv->sinka = NULL;
+ priv->sinkb = NULL;
}
- if (self->mixer) {
+ if (priv->mixer) {
GST_LOG ("unrefing mixer");
- gst_object_unref (self->mixer);
- self->mixer = NULL;
+ gst_object_unref (priv->mixer);
+ priv->mixer = NULL;
}
G_OBJECT_CLASS (ges_track_video_transition_parent_class)->dispose (object);
@@ -176,8 +191,10 @@ ges_track_video_transition_create_element (GESTrackObject * object)
GstController *controller;
GstInterpolationControlSource *control_source;
GESTrackVideoTransition *self;
+ GESTrackVideoTransitionPrivate *priv;
self = GES_TRACK_VIDEO_TRANSITION (object);
+ priv = self->priv;
GST_LOG ("creating a video bin");
@@ -194,27 +211,27 @@ ges_track_video_transition_create_element (GESTrackObject * object)
g_object_set (G_OBJECT (mixer), "background", 1, NULL);
gst_bin_add (GST_BIN (topbin), mixer);
- if (self->type != GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE) {
- self->sinka =
+ if (priv->type != GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE) {
+ priv->sinka =
(GstPad *) link_element_to_mixer_with_smpte (GST_BIN (topbin), iconva,
- mixer, self->type, NULL);
- self->sinkb =
+ mixer, priv->type, NULL);
+ priv->sinkb =
(GstPad *) link_element_to_mixer_with_smpte (GST_BIN (topbin), iconvb,
- mixer, self->type, &self->smpte);
- target = (GObject *) self->smpte;
+ mixer, priv->type, &priv->smpte);
+ target = (GObject *) priv->smpte;
propname = "position";
- self->start_value = 1.0;
- self->end_value = 0.0;
+ priv->start_value = 1.0;
+ priv->end_value = 0.0;
} else {
- self->sinka = (GstPad *) link_element_to_mixer (iconva, mixer);
- self->sinkb = (GstPad *) link_element_to_mixer (iconvb, mixer);
- target = (GObject *) self->sinkb;
+ priv->sinka = (GstPad *) link_element_to_mixer (iconva, mixer);
+ priv->sinkb = (GstPad *) link_element_to_mixer (iconvb, mixer);
+ target = (GObject *) priv->sinkb;
propname = "alpha";
- self->start_value = 0.0;
- self->end_value = 1.0;
+ priv->start_value = 0.0;
+ priv->end_value = 1.0;
}
- self->mixer = gst_object_ref (mixer);
+ priv->mixer = gst_object_ref (mixer);
fast_element_link (mixer, oconv);
@@ -246,8 +263,8 @@ ges_track_video_transition_create_element (GESTrackObject * object)
gst_interpolation_control_source_set_interpolation_mode (control_source,
GST_INTERPOLATE_LINEAR);
- self->controller = controller;
- self->control_source = control_source;
+ priv->controller = controller;
+ priv->control_source = control_source;
return topbin;
}
@@ -298,48 +315,72 @@ ges_track_video_transition_duration_changed (GESTrackObject * object,
GValue end_value = { 0, };
GstElement *gnlobj = ges_track_object_get_gnlobject (object);
GESTrackVideoTransition *self = GES_TRACK_VIDEO_TRANSITION (object);
+ GESTrackVideoTransitionPrivate *priv = self->priv;
GST_LOG ("updating controller");
- if (G_UNLIKELY (!gnlobj || !self->control_source))
+ if (G_UNLIKELY (!gnlobj || !priv->control_source))
return;
GST_INFO ("duration: %" G_GUINT64_FORMAT, duration);
g_value_init (&start_value, G_TYPE_DOUBLE);
g_value_init (&end_value, G_TYPE_DOUBLE);
- g_value_set_double (&start_value, self->start_value);
- g_value_set_double (&end_value, self->end_value);
+ g_value_set_double (&start_value, priv->start_value);
+ g_value_set_double (&end_value, priv->end_value);
GST_LOG ("setting values on controller");
- gst_interpolation_control_source_unset_all (self->control_source);
- gst_interpolation_control_source_set (self->control_source, 0, &start_value);
- gst_interpolation_control_source_set (self->control_source,
+ gst_interpolation_control_source_unset_all (priv->control_source);
+ gst_interpolation_control_source_set (priv->control_source, 0, &start_value);
+ gst_interpolation_control_source_set (priv->control_source,
duration, &end_value);
GST_LOG ("done updating controller");
}
+/**
+ * ges_track_video_transition_set_transition_type:
+ * @self: a #GESTrackVideoTransition
+ * @type: a #GESVideoStandardTransitionType
+ *
+ * Sets the transition being used to @type.
+ *
+ * Returns: %TRUE if the transition type was properly changed, else %FALSE.
+ */
gboolean
-ges_track_video_transition_set_type (GESTrackVideoTransition * self,
+ges_track_video_transition_set_transition_type (GESTrackVideoTransition * self,
GESVideoStandardTransitionType type)
{
- GST_DEBUG ("%p %d => %d", self, self->type, type);
+ GESTrackVideoTransitionPrivate *priv = self->priv;
- if (self->type && (self->type != type) &&
+ GST_DEBUG ("%p %d => %d", self, priv->type, type);
+
+ if (priv->type && (priv->type != type) &&
((type == GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE) ||
- (self->type == GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE))) {
+ (priv->type == GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE))) {
GST_WARNING
("Changing between 'crossfade' and other types is not supported");
return FALSE;
}
- self->type = type;
- if (self->smpte && (type != GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE))
- g_object_set (self->smpte, "type", (gint) type, NULL);
+ priv->type = type;
+ if (priv->smpte && (type != GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE))
+ g_object_set (priv->smpte, "type", (gint) type, NULL);
return TRUE;
}
+/**
+ * ges_track_video_transition_get_transition_type:
+ * @trans: a #GESTrackVideoTransition
+ *
+ * Returns: The transition type used by @trans.
+ */
+GESVideoStandardTransitionType
+ges_track_video_transition_get_transition_type (GESTrackVideoTransition * trans)
+{
+ return trans->priv->type;
+}
+
GESTrackVideoTransition *
ges_track_video_transition_new (void)
{
diff --git a/ges/ges-track-video-transition.h b/ges/ges-track-video-transition.h
index 1ea1366558..fc051ac235 100644
--- a/ges/ges-track-video-transition.h
+++ b/ges/ges-track-video-transition.h
@@ -54,22 +54,6 @@ struct _GESTrackVideoTransition {
GESTrackTransition parent;
/*< private >*/
- GESVideoStandardTransitionType type;
-
- /* these enable video interpolation */
- GstController *controller;
- GstInterpolationControlSource *control_source;
-
- /* so we can support changing between wipes */
- GstElement *smpte;
- GstElement *mixer;
- GstPad *sinka;
- GstPad *sinkb;
-
- /* these will be different depending on whether smptealpha or alpha element
- * is used */
- gdouble start_value;
- gdouble end_value;
GESTrackVideoTransitionPrivate *priv;
@@ -93,8 +77,11 @@ struct _GESTrackVideoTransitionClass {
GType ges_track_video_transition_get_type (void);
-gboolean ges_track_video_transition_set_type (GESTrackVideoTransition * self,
- GESVideoStandardTransitionType type);
+gboolean
+ges_track_video_transition_set_transition_type (GESTrackVideoTransition * self,
+ GESVideoStandardTransitionType type);
+GESVideoStandardTransitionType
+ges_track_video_transition_get_transition_type (GESTrackVideoTransition * trans);
GESTrackVideoTransition* ges_track_video_transition_new (void);
diff --git a/tests/check/ges/transition.c b/tests/check/ges/transition.c
index b542716865..4a382ba01e 100644
--- a/tests/check/ges/transition.c
+++ b/tests/check/ges/transition.c
@@ -51,7 +51,8 @@ GST_START_TEST (test_transition_basic)
track);
fail_unless (trackobject != NULL);
- fail_unless (GES_TRACK_VIDEO_TRANSITION (trackobject)->type == 1);
+ fail_unless (ges_track_video_transition_get_transition_type
+ (GES_TRACK_VIDEO_TRANSITION (trackobject)) == 1);
fail_unless (ges_timeline_object_release_track_object (GES_TIMELINE_OBJECT
(tr2), trackobject) == TRUE);
@@ -134,7 +135,8 @@ GST_START_TEST (test_transition_properties)
NULL);
assert_equals_int (GES_TIMELINE_STANDARD_TRANSITION (object)->vtype,
GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE);
- assert_equals_int (GES_TRACK_VIDEO_TRANSITION (trackobject)->type,
+ assert_equals_int (ges_track_video_transition_get_transition_type
+ (GES_TRACK_VIDEO_TRANSITION (trackobject)),
GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE);
/* Check that changing from crossfade to anything else fails (it should
@@ -144,7 +146,8 @@ GST_START_TEST (test_transition_properties)
/* FIXME : This should succeed */
assert_equals_int (GES_TIMELINE_STANDARD_TRANSITION (object)->vtype,
GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE);
- assert_equals_int (GES_TRACK_VIDEO_TRANSITION (trackobject)->type,
+ assert_equals_int (ges_track_video_transition_get_transition_type
+ (GES_TRACK_VIDEO_TRANSITION (trackobject)),
GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE);
GST_DEBUG ("Releasing track object");
@@ -160,7 +163,8 @@ GST_START_TEST (test_transition_properties)
/* The new track object should have taken the previously set transition
* type (in this case 1) */
GST_DEBUG ("Setting to vtype:1");
- assert_equals_int (GES_TRACK_VIDEO_TRANSITION (trackobject)->type, 1);
+ assert_equals_int (ges_track_video_transition_get_transition_type
+ (GES_TRACK_VIDEO_TRANSITION (trackobject)), 1);
assert_equals_int (GES_TIMELINE_STANDARD_TRANSITION (object)->vtype, 1);
ges_timeline_object_release_track_object (object, trackobject);