GESTrack: Make more properties private
authorEdward Hervey <edward.hervey@collabora.co.uk>
Wed, 15 Dec 2010 18:05:48 +0000 (19:05 +0100)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Wed, 15 Dec 2010 18:05:48 +0000 (19:05 +0100)
And ensure exported symbols are properly documented and have
argument checking.

docs/libs/ges-sections.txt
ges/ges-keyfile-formatter.c
ges/ges-track-object.c
ges/ges-track-object.h
ges/ges-track.c
ges/ges-track.h
tests/check/ges/basic.c
tests/check/ges/save_and_load.c

index 0fcc350b6a0330e373c3c2ef2fef3c69c583902b..84282270235a7388bb1b8bf0598bfcff166e0a78 100644 (file)
@@ -47,10 +47,12 @@ ges_track_new
 ges_track_add_object
 ges_track_remove_object
 ges_track_set_caps
+ges_track_get_caps
 <SUBSECTION Standard>
 GESTrackClass
 GESTrackPrivate
 ges_track_set_timeline
+ges_track_get_timeline
 ges_track_get_type
 GES_IS_TRACK
 GES_IS_TRACK_CLASS
@@ -65,13 +67,12 @@ GES_TYPE_TRACK
 <TITLE>GESTrackObject</TITLE>
 GESTrackObject
 GESTrackObjectClass
+ges_track_object_set_active
+<SUBSECTION Standard>
 GES_TRACK_OBJECT_DURATION
 GES_TRACK_OBJECT_INPOINT
-GES_TRACK_OBJECT_PRIORITY
-GES_TRACK_OBJECT_PRIORITY_OFFSET
 GES_TRACK_OBJECT_START
-ges_track_object_set_active
-<SUBSECTION Standard>
+ges_track_object_get_priority_offset
 GESTrackObjectPrivate
 ges_track_object_set_timeline_object
 ges_track_object_set_track
index e6876921034220dff68b2887205d0700d6ac83d9..a32ca1bc7954d15a562f3d0c6eab90888fb021dd 100644 (file)
@@ -90,7 +90,7 @@ save_keyfile (GESFormatter * keyfile_formatter, GESTimeline * timeline)
     g_object_get_property (G_OBJECT (track), "track-type", &v);
 
     type = gst_value_serialize (&v);
-    caps = gst_caps_to_string (track->caps);
+    caps = gst_caps_to_string (ges_track_get_caps (track));
 
     g_key_file_set_value (kf, buffer, "type", type);
     g_key_file_set_string (kf, buffer, "caps", caps);
index 0054ea1207c537d06f435dc18ce8a70f3c789023..820061694dbc6a6af7535ce864e10adb0e611fa8 100644 (file)
@@ -631,7 +631,7 @@ ensure_gnl_object (GESTrackObject * object)
     if (res) {
       /* Set some properties on the GnlObject */
       g_object_set (object->gnlobject,
-          "caps", object->track->caps,
+          "caps", ges_track_get_caps (object->track),
           "duration", object->pending_duration,
           "media-duration", object->pending_duration,
           "start", object->pending_start,
index cabcc77e0f841ad2990faf8624c9eabca05fde11..a996b8d337d96113525027bbab89c62d072223a2 100644 (file)
@@ -80,8 +80,6 @@ typedef struct _GESTrackObjectPrivate GESTrackObjectPrivate;
  * @start: Position (in nanoseconds) of the object the track.
  * @inpoint: in-point (in nanoseconds) of the object in the track.
  * @duration: Duration of the object.
- * @base_priority: base priority of the object in the track (0:top priority)
- * @priority_offset: priority relative to its parent timeline object.
  * @gnl_priority: the cached gnl priority (base + offset)
  * @active: Whether the object is to be used or not.
  *
index 941c2e063f1d137ddd67e4a87c47d39490883419..ff353d88a05f7326a6947454f12eeffef17fadb1 100644 (file)
@@ -37,8 +37,14 @@ G_DEFINE_TYPE (GESTrack, ges_track, GST_TYPE_BIN);
 
 struct _GESTrackPrivate
 {
-  /* Dummy variable */
-  void *nothing;
+  /*< private > */
+  GESTimeline *timeline;
+  GList *trackobjects;
+
+  GstCaps *caps;
+
+  GstElement *composition;      /* The composition associated with this track */
+  GstPad *srcpad;               /* The source GhostPad */
 };
 
 enum
@@ -61,7 +67,7 @@ ges_track_get_property (GObject * object, guint property_id,
 
   switch (property_id) {
     case ARG_CAPS:
-      gst_value_set_caps (value, track->caps);
+      gst_value_set_caps (value, track->priv->caps);
       break;
     case ARG_TYPE:
       g_value_set_flags (value, track->type);
@@ -93,21 +99,22 @@ static void
 ges_track_dispose (GObject * object)
 {
   GESTrack *track = (GESTrack *) object;
+  GESTrackPrivate *priv = track->priv;
 
-  while (track->trackobjects) {
-    GESTrackObject *trobj = GES_TRACK_OBJECT (track->trackobjects->data);
+  while (priv->trackobjects) {
+    GESTrackObject *trobj = GES_TRACK_OBJECT (priv->trackobjects->data);
     ges_track_remove_object (track, trobj);
     ges_timeline_object_release_track_object (trobj->timelineobj, trobj);
   }
 
-  if (track->composition) {
-    gst_bin_remove (GST_BIN (object), track->composition);
-    track->composition = NULL;
+  if (priv->composition) {
+    gst_bin_remove (GST_BIN (object), priv->composition);
+    priv->composition = NULL;
   }
 
-  if (track->caps) {
-    gst_caps_unref (track->caps);
-    track->caps = NULL;
+  if (priv->caps) {
+    gst_caps_unref (priv->caps);
+    priv->caps = NULL;
   }
 
   G_OBJECT_CLASS (ges_track_parent_class)->dispose (object);
@@ -167,14 +174,14 @@ ges_track_init (GESTrack * self)
   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
       GES_TYPE_TRACK, GESTrackPrivate);
 
-  self->composition = gst_element_factory_make ("gnlcomposition", NULL);
+  self->priv->composition = gst_element_factory_make ("gnlcomposition", NULL);
 
-  g_signal_connect (self->composition, "pad-added", (GCallback) pad_added_cb,
-      self);
-  g_signal_connect (self->composition, "pad-removed",
+  g_signal_connect (self->priv->composition, "pad-added",
+      (GCallback) pad_added_cb, self);
+  g_signal_connect (self->priv->composition, "pad-removed",
       (GCallback) pad_removed_cb, self);
 
-  if (!gst_bin_add (GST_BIN (self), self->composition))
+  if (!gst_bin_add (GST_BIN (self), self->priv->composition))
     GST_ERROR ("Couldn't add composition to bin !");
 }
 
@@ -239,12 +246,19 @@ ges_track_audio_raw_new (void)
   return track;
 }
 
+/**
+ * ges_track_set_timeline:
+ * @track: a #GESTrack
+ * @timeline: a #GESTimeline
+ *
+ * Sets @timeline as the timeline controlling @track.
+ */
 void
 ges_track_set_timeline (GESTrack * track, GESTimeline * timeline)
 {
   GST_DEBUG ("track:%p, timeline:%p", track, timeline);
 
-  track->timeline = timeline;
+  track->priv->timeline = timeline;
 }
 
 /**
@@ -257,15 +271,20 @@ ges_track_set_timeline (GESTrack * track, GESTimeline * timeline)
 void
 ges_track_set_caps (GESTrack * track, const GstCaps * caps)
 {
-  GST_DEBUG ("track:%p, caps:%" GST_PTR_FORMAT, track, caps);
+  GESTrackPrivate *priv;
 
+  g_return_if_fail (GES_IS_TRACK (track));
   g_return_if_fail (GST_IS_CAPS (caps));
 
-  if (track->caps)
-    gst_caps_unref (track->caps);
-  track->caps = gst_caps_copy (caps);
+  GST_DEBUG ("track:%p, caps:%" GST_PTR_FORMAT, track, caps);
+
+  priv = track->priv;
+
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+  priv->caps = gst_caps_copy (caps);
 
-  g_object_set (track->composition, "caps", caps, NULL);
+  g_object_set (priv->composition, "caps", caps, NULL);
   /* FIXME : update all trackobjects ? */
 }
 
@@ -282,6 +301,9 @@ ges_track_set_caps (GESTrack * track, const GstCaps * caps)
 gboolean
 ges_track_add_object (GESTrack * track, GESTrackObject * object)
 {
+  g_return_val_if_fail (GES_IS_TRACK (track), FALSE);
+  g_return_val_if_fail (GES_IS_TRACK_OBJECT (object), FALSE);
+
   GST_DEBUG ("track:%p, object:%p", track, object);
 
   if (G_UNLIKELY (object->track != NULL)) {
@@ -302,13 +324,13 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object)
   GST_DEBUG ("Adding object to ourself");
 
   /* make sure the object has a valid gnlobject ! */
-  if (G_UNLIKELY (!gst_bin_add (GST_BIN (track->composition),
+  if (G_UNLIKELY (!gst_bin_add (GST_BIN (track->priv->composition),
               object->gnlobject))) {
     GST_WARNING ("Couldn't add object to the GnlComposition");
     return FALSE;
   }
 
-  track->trackobjects = g_list_append (track->trackobjects, object);
+  track->priv->trackobjects = g_list_append (track->priv->trackobjects, object);
 
   return TRUE;
 }
@@ -326,8 +348,15 @@ ges_track_add_object (GESTrack * track, GESTrackObject * object)
 gboolean
 ges_track_remove_object (GESTrack * track, GESTrackObject * object)
 {
+  GESTrackPrivate *priv;
+
+  g_return_val_if_fail (GES_IS_TRACK (track), FALSE);
+  g_return_val_if_fail (GES_IS_TRACK_OBJECT (object), FALSE);
+
   GST_DEBUG ("track:%p, object:%p", track, object);
 
+  priv = track->priv;
+
   if (G_UNLIKELY (object->track != track)) {
     GST_WARNING ("Object belongs to another track");
     return FALSE;
@@ -335,14 +364,14 @@ ges_track_remove_object (GESTrack * track, GESTrackObject * object)
 
   if (G_LIKELY (object->gnlobject != NULL)) {
     GST_DEBUG ("Removing GnlObject from composition");
-    if (!gst_bin_remove (GST_BIN (track->composition), object->gnlobject)) {
+    if (!gst_bin_remove (GST_BIN (priv->composition), object->gnlobject)) {
       GST_WARNING ("Failed to remove gnlobject from composition");
       return FALSE;
     }
   }
 
   ges_track_object_set_track (object, NULL);
-  track->trackobjects = g_list_remove (track->trackobjects, object);
+  priv->trackobjects = g_list_remove (priv->trackobjects, object);
 
   return TRUE;
 }
@@ -350,14 +379,16 @@ ges_track_remove_object (GESTrack * track, GESTrackObject * object)
 static void
 pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track)
 {
+  GESTrackPrivate *priv = track->priv;
+
   GST_DEBUG ("track:%p, pad %s:%s", track, GST_DEBUG_PAD_NAME (pad));
 
   /* ghost the pad */
-  track->srcpad = gst_ghost_pad_new ("src", pad);
+  priv->srcpad = gst_ghost_pad_new ("src", pad);
 
-  gst_pad_set_active (track->srcpad, TRUE);
+  gst_pad_set_active (priv->srcpad, TRUE);
 
-  gst_element_add_pad (GST_ELEMENT (track), track->srcpad);
+  gst_element_add_pad (GST_ELEMENT (track), priv->srcpad);
 
   GST_DEBUG ("done");
 }
@@ -365,13 +396,43 @@ pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track)
 static void
 pad_removed_cb (GstElement * element, GstPad * pad, GESTrack * track)
 {
+  GESTrackPrivate *priv = track->priv;
+
   GST_DEBUG ("track:%p, pad %s:%s", track, GST_DEBUG_PAD_NAME (pad));
 
-  if (G_LIKELY (track->srcpad)) {
-    gst_pad_set_active (track->srcpad, FALSE);
-    gst_element_remove_pad (GST_ELEMENT (track), track->srcpad);
-    track->srcpad = NULL;
+  if (G_LIKELY (priv->srcpad)) {
+    gst_pad_set_active (priv->srcpad, FALSE);
+    gst_element_remove_pad (GST_ELEMENT (track), priv->srcpad);
+    priv->srcpad = NULL;
   }
 
   GST_DEBUG ("done");
 }
+
+/**
+ * ges_track_get_caps:
+ * @track: a #GESTrack
+ *
+ * Returns: The #GstCaps this track is configured to output.
+ */
+const GstCaps *
+ges_track_get_caps (GESTrack * track)
+{
+  g_return_val_if_fail (GES_IS_TRACK (track), NULL);
+
+  return track->priv->caps;
+}
+
+/**
+ * ges_track_get_timeline:
+ * @track: a #GESTrack
+ *
+ * Returns: The #GESTimeline this track belongs to. Can be %NULL.
+ */
+const GESTimeline *
+ges_track_get_timeline (GESTrack * track)
+{
+  g_return_val_if_fail (GES_IS_TRACK (track), NULL);
+
+  return track->priv->timeline;
+}
index 3ad09ba5c3d7dd36680d0eadea7afba9d853e86f..9778173f3fb8e6fbd465c86a7586f08d94a08ee7 100644 (file)
@@ -60,15 +60,6 @@ struct _GESTrack {
   /* READ-ONLY */
   GESTrackType type;
 
-  /*< private >*/
-  GESTimeline * timeline;
-  GList * trackobjects;
-
-  GstCaps * caps;
-
-  GstElement * composition;    /* The composition associated with this track */
-  GstPad * srcpad;             /* The source GhostPad */
-
   GESTrackPrivate * priv;
 
   /* Padding for API extension */
@@ -91,11 +82,17 @@ GType ges_track_get_type (void);
 
 GESTrack* ges_track_new (GESTrackType type, GstCaps * caps);
 
-void ges_track_set_timeline (GESTrack * track, GESTimeline *timeline);
-void ges_track_set_caps (GESTrack * track, const GstCaps * caps);
-
-gboolean ges_track_add_object (GESTrack * track, GESTrackObject * object);
-gboolean ges_track_remove_object (GESTrack * track, GESTrackObject * object);
+void           ges_track_set_timeline (GESTrack * track,
+                                       GESTimeline *timeline);
+void           ges_track_set_caps     (GESTrack * track,
+                                       const GstCaps * caps);
+const GstCaps * ges_track_get_caps     (GESTrack *track);
+const GESTimeline *ges_track_get_timeline (GESTrack *track);
+
+gboolean ges_track_add_object    (GESTrack * track,
+                                 GESTrackObject * object);
+gboolean ges_track_remove_object (GESTrack * track,
+                                 GESTrackObject * object);
 
 GESTrack *ges_track_video_raw_new (void);
 GESTrack *ges_track_audio_raw_new (void);
index 1fcfbf4ece02767b00093e3c31e9560bd91d1b5b..b44ab58bd86946f823a37c947ff5ac6e8277ebbc 100644 (file)
@@ -82,9 +82,10 @@ GST_START_TEST (test_ges_scenario)
 
   GST_DEBUG ("Add the track to the timeline");
   fail_unless (ges_timeline_add_track (timeline, track));
+
   /* The timeline steals the reference to the track */
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
-  fail_unless (track->timeline == timeline);
+  fail_unless (ges_track_get_timeline (track) == timeline);
   fail_unless ((gpointer) GST_ELEMENT_PARENT (track) == (gpointer) timeline);
 
   /* Create a source and add it to the Layer */
@@ -132,7 +133,7 @@ GST_START_TEST (test_ges_scenario)
   /* Remove the track from the timeline */
   g_object_ref (track);
   fail_unless (ges_timeline_remove_track (timeline, track));
-  fail_unless (track->timeline == NULL);
+  fail_unless (ges_track_get_timeline (track) == NULL);
   fail_unless (timeline->tracks == NULL);
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
   g_object_unref (track);
@@ -185,7 +186,7 @@ GST_START_TEST (test_ges_timeline_add_layer)
   fail_unless (ges_timeline_add_track (timeline, track));
   /* The timeline steals the reference to the track */
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
-  fail_unless (track->timeline == timeline);
+  fail_unless (ges_track_get_timeline (track) == timeline);
   fail_unless ((gpointer) GST_ELEMENT_PARENT (track) == (gpointer) timeline);
 
   /* Create a source and add it to the Layer */
@@ -321,7 +322,7 @@ GST_START_TEST (test_ges_timeline_add_layer_first)
   GST_DEBUG ("Add the track to the timeline");
   fail_unless (ges_timeline_add_track (timeline, track));
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
-  fail_unless (track->timeline == timeline);
+  fail_unless (ges_track_get_timeline (track) == timeline);
   fail_unless ((gpointer) GST_ELEMENT_PARENT (track) == (gpointer) timeline);
 
   /* Make sure the associated TrackObjects are in the Track */
@@ -417,7 +418,7 @@ GST_START_TEST (test_ges_timeline_remove_track)
   GST_DEBUG ("Add the track to the timeline");
   fail_unless (ges_timeline_add_track (timeline, track));
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
-  fail_unless (track->timeline == timeline);
+  fail_unless (ges_track_get_timeline (track) == timeline);
   fail_unless ((gpointer) GST_ELEMENT_PARENT (track) == (gpointer) timeline);
 
   /* Make sure the associated TrackObjects are in the Track */
index 5fded15bb794ff5e47431ef5f2f0852dc6db39db..5725d3522061f4f5591877c20f6d3a940c3e2cad 100644 (file)
@@ -201,7 +201,7 @@ GST_START_TEST (test_keyfile_save)
   GST_DEBUG ("Removing track from the timeline");
   g_object_ref (track);
   fail_unless (ges_timeline_remove_track (timeline, track));
-  fail_unless (track->timeline == NULL);
+  fail_unless (ges_track_get_timeline (track) == NULL);
   ASSERT_OBJECT_REFCOUNT (track, "track", 1);
   g_object_unref (track);