GESTrack: Make GESTrackType a flag, and add GES_TRACK_TYPE_UNKNOWN
authorEdward Hervey <edward.hervey@collabora.co.uk>
Tue, 18 May 2010 15:43:28 +0000 (17:43 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Tue, 18 May 2010 15:43:28 +0000 (17:43 +0200)
Also add a bit more documentation about it.

ges/ges-track.c
ges/ges-track.h

index fda90563b6fa8d4adeb7280d194b679a376403cb..a32cb00a008cdae5bb3e11ecde637e65bd1a7365 100644 (file)
@@ -47,11 +47,12 @@ static void pad_added_cb (GstElement * element, GstPad * pad, GESTrack * track);
 static void
 pad_removed_cb (GstElement * element, GstPad * pad, GESTrack * track);
 
-#define C_ENUM(v) ((gint) v)
+#define C_ENUM(v) ((guint) v)
 static void
 register_ges_track_type_select_result (GType * id)
 {
-  static const GEnumValue values[] = {
+  static const GFlagsValue values[] = {
+    {C_ENUM (GES_TRACK_TYPE_UNKNOWN), "GES_TRACK_TYPE_UNKNOWN", "unknown"},
     {C_ENUM (GES_TRACK_TYPE_AUDIO), "GES_TRACK_TYPE_AUDIO", "audio"},
     {C_ENUM (GES_TRACK_TYPE_VIDEO), "GES_TRACK_TYPE_VIDEO", "video"},
     {C_ENUM (GES_TRACK_TYPE_TEXT), "GES_TRACK_TYPE_TEXT", "text"},
@@ -59,7 +60,7 @@ register_ges_track_type_select_result (GType * id)
     {0, NULL, NULL}
   };
 
-  *id = g_enum_register_static ("GESTrackType", values);
+  *id = g_flags_register_static ("GESTrackType", values);
 }
 
 GType
@@ -83,7 +84,7 @@ ges_track_get_property (GObject * object, guint property_id,
       gst_value_set_caps (value, track->caps);
       break;
     case ARG_TYPE:
-      g_value_set_enum (value, track->type);
+      g_value_set_flags (value, track->type);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -101,7 +102,7 @@ ges_track_set_property (GObject * object, guint property_id,
       ges_track_set_caps (track, gst_value_get_caps (value));
       break;
     case ARG_TYPE:
-      track->type = g_value_get_enum (value);
+      track->type = g_value_get_flags (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -168,7 +169,7 @@ ges_track_class_init (GESTrackClass * klass)
    * property.
    */
   g_object_class_install_property (object_class, ARG_TYPE,
-      g_param_spec_enum ("track-type", "TrackType",
+      g_param_spec_flags ("track-type", "TrackType",
           "Type of stream the track outputs",
           GES_TYPE_TRACK_TYPE, GES_TRACK_TYPE_CUSTOM,
           G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
index 08c8ef84adae34d327ce93c8e43241e69571ae57..ab83ca8230edf05ad21bd3699fd8792229271d5e 100644 (file)
@@ -50,21 +50,26 @@ GType ges_track_type_get_type (void);
 
 /**
  * GESTrackType:
+ * @GES_TRACK_TYPE_UNKNOWN: A track of unknown type (i.e. invalid)
  * @GES_TRACK_TYPE_AUDIO: An audio track
  * @GES_TRACK_TYPE_VIDEO: A video track
  * @GES_TRACK_TYPE_TEXT: A text (subtitle) track
  * @GES_TRACK_TYPE_CUSTOM: A custom-content track
  *
  * Types of content handled by a track. If the content is not one of
- * @GEST_TRACK_TYPE_AUDIO, @GES_TRACK_TYPE_VIDEO or @GES_TRACK_TYPE_TEXT,
+ * @GES_TRACK_TYPE_AUDIO, @GES_TRACK_TYPE_VIDEO or @GES_TRACK_TYPE_TEXT,
  * the user of the #GESTrack must set the type to @GES_TRACK_TYPE_CUSTOM.
+ *
+ * @GES_TRACK_TYPE_UNKNOWN is for internal purposes and should not be used
+ * by users
  */
 
 typedef enum {
-  GES_TRACK_TYPE_AUDIO = 0,
-  GES_TRACK_TYPE_VIDEO = 1,
-  GES_TRACK_TYPE_TEXT  = 2,
-  GES_TRACK_TYPE_CUSTOM        = 3
+  GES_TRACK_TYPE_UNKNOWN = 1 << 0,
+  GES_TRACK_TYPE_AUDIO   = 1 << 1,
+  GES_TRACK_TYPE_VIDEO   = 1 << 2,
+  GES_TRACK_TYPE_TEXT    = 1 << 3,
+  GES_TRACK_TYPE_CUSTOM  = 1 << 4,
 } GESTrackType;
 
 struct _GESTrack {