push struct fields down to VideoTransition
authorBrandon Lewis <brandon@collabora.co.uk>
Fri, 18 Jun 2010 14:22:21 +0000 (16:22 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 9 Jul 2010 11:21:11 +0000 (13:21 +0200)
ges/ges-timeline-transition.c
ges/ges-track-transition.c
ges/ges-track-transition.h
ges/ges-track-video-transition.c
ges/ges-track-video-transition.h

index 593b9db..251a6d2 100644 (file)
@@ -61,7 +61,8 @@ ges_timeline_transition_update_vtype_internal (GESTimelineObject * self,
     to = (GESTrackObject *) tr;
 
     if ((to->track) && (to->track->type == GES_TRACK_TYPE_VIDEO)) {
-      ges_track_transition_set_vtype (tr, value);
+      ges_track_video_transition_set_type ((GESTrackVideoTransition *) tr,
+          value);
     }
   }
 }
@@ -153,7 +154,7 @@ 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_transition_set_vtype (GES_TRACK_TRANSITION (res),
+    ges_track_video_transition_set_type ((GESTrackVideoTransition *) res,
         transition->vtype);
   }
 
@@ -162,7 +163,7 @@ ges_tl_transition_create_track_object (GESTimelineObject * obj,
   }
 
   else {
-    res = GES_TRACK_OBJECT (ges_track_transition_new (transition->vtype));
+    res = GES_TRACK_OBJECT (ges_track_transition_new ());
   }
 
   return res;
index f04fe68..ecc4671 100644 (file)
@@ -80,32 +80,6 @@ ges_track_transition_set_property (GObject * object, guint property_id,
 static void
 ges_track_transition_dispose (GObject * object)
 {
-  GESTrackTransition *self = GES_TRACK_TRANSITION (object);
-
-  GST_DEBUG ("disposing");
-  GST_LOG ("mixer: %p smpte: %p sinka: %p sinkb: %p",
-      self->vmixer, self->vsmpte, self->sinka, self->sinkb);
-
-  if (self->vcontroller) {
-    g_object_unref (self->vcontroller);
-    self->vcontroller = NULL;
-    if (self->vcontrol_source)
-      gst_object_unref (self->vcontrol_source);
-    self->vcontrol_source = NULL;
-  }
-
-  if (self->vmixer && self->sinka && self->sinkb) {
-    GST_DEBUG ("releasing request pads for vmixer");
-    gst_element_release_request_pad (self->vmixer, self->sinka);
-    gst_element_release_request_pad (self->vmixer, self->sinkb);
-    gst_object_unref (self->vmixer);
-    gst_object_unref (self->sinka);
-    gst_object_unref (self->sinkb);
-    self->vmixer = NULL;
-    self->sinka = NULL;
-    self->sinkb = NULL;
-  }
-
   G_OBJECT_CLASS (ges_track_transition_parent_class)->dispose (object);
 }
 
@@ -173,36 +147,12 @@ ges_track_transition_class_init (GESTrackTransitionClass * klass)
 static void
 ges_track_transition_init (GESTrackTransition * self)
 {
-  self->vcontroller = NULL;
-  self->vcontrol_source = NULL;
-  self->vsmpte = NULL;
-  self->vmixer = NULL;
-  self->sinka = NULL;
-  self->sinkb = NULL;
-  self->vtype = 0;
-  self->vstart_value = 0.0;
-  self->vend_value = 0.0;
-}
-
-void
-ges_track_transition_set_vtype (GESTrackTransition * self, gint vtype)
-{
-  if (((vtype == VTYPE_CROSSFADE) && (self->vtype != VTYPE_CROSSFADE)) ||
-      ((vtype != VTYPE_CROSSFADE) && (self->vtype = VTYPE_CROSSFADE))) {
-    GST_WARNING
-        ("Changing between 'crossfade' and other types is not supported\n");
-  }
-
-  self->vtype = vtype;
-  if (self->vsmpte && (vtype != VTYPE_CROSSFADE))
-    g_object_set (self->vsmpte, "type", (gint) vtype, NULL);
 }
 
 GESTrackTransition *
-ges_track_transition_new (gint value)
+ges_track_transition_new (void)
 {
   GESTrackTransition *ret = g_object_new (GES_TYPE_TRACK_TRANSITION, NULL);
-  ret->vtype = value;
 
   return ret;
 }
index a0bd5f4..46a3474 100644 (file)
@@ -65,25 +65,6 @@ struct _GESTrackTransition
   GESTrackObject parent;
 
   /*< public >*/
-  /* given to to smpte alpha element */
-  gint                          vtype;
-
-  /*< private >*/
-  
-  /* these enable video interpolation */
-  GstController                 *vcontroller;
-  GstInterpolationControlSource *vcontrol_source;
-
-  /* so we can support changing between wipes */
-  GstElement                    *vsmpte;
-  GstElement                    *vmixer;
-  GstPad                        *sinka;
-  GstPad                        *sinkb;
-  
-  /* these will be different depending on whether smptealpha or alpha element
-   * is used */
-  gdouble                       vstart_value;
-  gdouble                       vend_value;
 };
 
 /**
@@ -102,8 +83,7 @@ struct _GESTrackTransitionClass {
 
 GType ges_track_transition_get_type (void);
 
-GESTrackTransition *ges_track_transition_new (gint value);
-void ges_track_transition_set_vtype(GESTrackTransition *tr, gint vtype);
+GESTrackTransition *ges_track_transition_new (void);
 
 G_END_DECLS
 
index e338167..e14d8c1 100644 (file)
@@ -81,11 +81,46 @@ ges_track_video_transition_class_init (GESTrackVideoTransitionClass * klass)
 static void
 ges_track_video_transition_init (GESTrackVideoTransition * self)
 {
+  self->controller = NULL;
+  self->control_source = NULL;
+  self->smpte = NULL;
+  self->mixer = NULL;
+  self->sinka = NULL;
+  self->sinkb = NULL;
+  self->type = 0;
+  self->start_value = 0.0;
+  self->end_value = 0.0;
 }
 
 static void
 ges_track_video_transition_dispose (GObject * object)
 {
+  GESTrackVideoTransition *self = GES_TRACK_VIDEO_TRANSITION (object);
+
+  GST_DEBUG ("disposing");
+  GST_LOG ("mixer: %p smpte: %p sinka: %p sinkb: %p",
+      self->mixer, self->smpte, self->sinka, self->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 (self->mixer && self->sinka && self->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->mixer);
+    gst_object_unref (self->sinka);
+    gst_object_unref (self->sinkb);
+    self->mixer = NULL;
+    self->sinka = NULL;
+    self->sinkb = NULL;
+  }
+
   G_OBJECT_CLASS (ges_track_video_transition_parent_class)->dispose (object);
 }
 
@@ -116,7 +151,7 @@ ges_track_video_transition_set_property (GObject * object,
 }
 
 static GstElement *
-ges_track_video_transition_create_element (GESTrackTransition * self,
+ges_track_video_transition_create_element (GESTrackTransition * object,
     GESTrack * unused)
 {
   GstElement *topbin, *iconva, *iconvb, *oconv;
@@ -126,6 +161,9 @@ ges_track_video_transition_create_element (GESTrackTransition * self,
   GstPad *sinka_target, *sinkb_target, *src_target, *sinka, *sinkb, *src;
   GstController *controller;
   GstInterpolationControlSource *control_source;
+  GESTrackVideoTransition *self;
+
+  self = GES_TRACK_VIDEO_TRANSITION (object);
 
   GST_LOG ("creating a video bin");
 
@@ -139,22 +177,22 @@ ges_track_video_transition_create_element (GESTrackTransition * self,
   g_object_set (G_OBJECT (mixer), "background", 1, NULL);
   gst_bin_add (GST_BIN (topbin), mixer);
 
-  if (self->vtype != VTYPE_CROSSFADE) {
+  if (self->type != VTYPE_CROSSFADE) {
     link_element_to_mixer_with_smpte (GST_BIN (topbin), iconva, mixer,
-        self->vtype, NULL);
+        self->type, NULL);
     target = link_element_to_mixer_with_smpte (GST_BIN (topbin), iconvb,
-        mixer, self->vtype, &self->vsmpte);
+        mixer, self->type, &self->smpte);
     propname = "position";
-    self->vstart_value = 1.0;
-    self->vend_value = 0.0;
+    self->start_value = 1.0;
+    self->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;
-    self->vmixer = gst_object_ref (mixer);
+    self->mixer = gst_object_ref (mixer);
     propname = "alpha";
-    self->vstart_value = 0.0;
-    self->vend_value = 1.0;
+    self->start_value = 0.0;
+    self->end_value = 1.0;
   }
 
   gst_element_link (mixer, oconv);
@@ -187,8 +225,8 @@ ges_track_video_transition_create_element (GESTrackTransition * self,
   gst_interpolation_control_source_set_interpolation_mode (control_source,
       GST_INTERPOLATE_LINEAR);
 
-  self->vcontroller = controller;
-  self->vcontrol_source = control_source;
+  self->controller = controller;
+  self->control_source = control_source;
 
   return topbin;
 }
@@ -228,19 +266,20 @@ link_element_to_mixer_with_smpte (GstBin * bin, GstElement * element,
 }
 
 static void
-ges_track_video_transition_duration_changed (GESTrackTransition * self,
+ges_track_video_transition_duration_changed (GESTrackTransition * object,
     GstElement * gnlobj)
 {
   GValue start_value = { 0, };
   GValue end_value = { 0, };
   guint64 duration;
+  GESTrackVideoTransition *self = GES_TRACK_VIDEO_TRANSITION (object);
 
   GST_LOG ("updating controller");
 
   if (!gnlobj)
     return;
 
-  if (!(self->vcontroller))
+  if (!(self->controller))
     return;
 
   GST_LOG ("getting properties");
@@ -249,22 +288,36 @@ ges_track_video_transition_duration_changed (GESTrackTransition * self,
   GST_INFO ("duration: %d\n", duration);
   g_value_init (&start_value, G_TYPE_DOUBLE);
   g_value_init (&end_value, G_TYPE_DOUBLE);
-  g_value_set_double (&start_value, self->vstart_value);
-  g_value_set_double (&end_value, self->vend_value);
+  g_value_set_double (&start_value, self->start_value);
+  g_value_set_double (&end_value, self->end_value);
 
   GST_LOG ("setting values on controller");
 
-  g_assert (GST_IS_CONTROLLER (self->vcontroller));
-  g_assert (GST_IS_CONTROL_SOURCE (self->vcontrol_source));
+  g_assert (GST_IS_CONTROLLER (self->controller));
+  g_assert (GST_IS_CONTROL_SOURCE (self->control_source));
 
-  gst_interpolation_control_source_unset_all (self->vcontrol_source);
-  gst_interpolation_control_source_set (self->vcontrol_source, 0, &start_value);
-  gst_interpolation_control_source_set (self->vcontrol_source,
+  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,
       duration, &end_value);
 
   GST_LOG ("done updating controller");
 }
 
+void
+ges_track_video_transition_set_type (GESTrackVideoTransition * self, gint type)
+{
+  if (((type == VTYPE_CROSSFADE) && (self->type != VTYPE_CROSSFADE)) ||
+      ((type != VTYPE_CROSSFADE) && (self->type = VTYPE_CROSSFADE))) {
+    GST_WARNING
+        ("Changing between 'crossfade' and other types is not supported\n");
+  }
+
+  self->type = type;
+  if (self->smpte && (type != VTYPE_CROSSFADE))
+    g_object_set (self->smpte, "type", (gint) type, NULL);
+}
+
 GESTrackVideoTransition *
 ges_track_video_transition_new (void)
 {
index defabfd..c8faf80 100644 (file)
@@ -52,6 +52,27 @@ G_BEGIN_DECLS
 
 struct _GESTrackVideoTransition {
   GESTrackTransition parent;
+  
+  /*< public >*/
+  /* given to to smpte alpha element */
+  gint                          type;
+
+  /*< private >*/
+  
+  /* 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;
 
   /*< public >*/
 };
@@ -70,6 +91,9 @@ struct _GESTrackVideoTransitionClass {
 
 GType ges_track_video_transition_get_type (void);
 
+void
+ges_track_video_transition_set_type (GESTrackVideoTransition * self, gint type);
+
 GESTrackVideoTransition* ges_track_video_transition_new (void);
 
 G_END_DECLS