enum
{
ARG_0,
- ARG_CAPS
+ ARG_CAPS,
+ ARG_TYPE
};
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)
+static void
+register_ges_track_type_select_result (GType * id)
+{
+ static const GEnumValue values[] = {
+ {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"},
+ {C_ENUM (GES_TRACK_TYPE_CUSTOM), "GES_TRACK_TYPE_CUSTOM", "custom"},
+ {0, NULL, NULL}
+ };
+
+ *id = g_enum_register_static ("GESTrackType", values);
+}
+
+GType
+ges_track_type_get_type (void)
+{
+ static GType id;
+ static GOnce once = G_ONCE_INIT;
+
+ g_once (&once, (GThreadFunc) register_ges_track_type_select_result, &id);
+ return id;
+}
+
static void
ges_track_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
case ARG_CAPS:
gst_value_set_caps (value, track->caps);
break;
+ case ARG_TYPE:
+ g_value_set_enum (value, track->type);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
case ARG_CAPS:
ges_track_set_caps (track, gst_value_get_caps (value));
break;
+ case ARG_TYPE:
+ track->type = g_value_get_enum (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
g_param_spec_boxed ("caps", "Caps",
"Caps used to filter/choose the output stream",
GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class, ARG_TYPE,
+ g_param_spec_enum ("track-type", "TrackType",
+ "Type of stream the track outputs",
+ GES_TYPE_TRACK_TYPE, GES_TRACK_TYPE_CUSTOM,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
}
static void
}
GESTrack *
-ges_track_new (GstCaps * caps)
+ges_track_new (GESTrackType type, GstCaps * caps)
{
- return g_object_new (GES_TYPE_TRACK, "caps", caps, NULL);
+ return g_object_new (GES_TYPE_TRACK, "caps", caps, "track-type", type, NULL);
}
GESTrack *
GESTrack *track;
GstCaps *caps = gst_caps_from_string ("video/x-raw-yuv;video/x-raw-rgb");
- track = ges_track_new (caps);
+ track = ges_track_new (GES_TRACK_TYPE_VIDEO, caps);
gst_caps_unref (caps);
return track;
GESTrack *track;
GstCaps *caps = gst_caps_from_string ("audio/x-raw-int;audio/x-raw-float");
- track = ges_track_new (caps);
+ track = ges_track_new (GES_TRACK_TYPE_AUDIO, caps);
gst_caps_unref (caps);
return track;
#define GES_TRACK_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GES_TYPE_TRACK, GESTrackClass))
+
+#define GES_TYPE_TRACK_TYPE (ges_track_type_get_type ())
+GType ges_track_type_get_type (void);
+
+/**
+ * GESTrackType:
+ * @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.
+ */
+
+typedef enum {
+ GES_TRACK_TYPE_AUDIO = 0,
+ GES_TRACK_TYPE_VIDEO = 1,
+ GES_TRACK_TYPE_TEXT = 2,
+ GES_TRACK_TYPE_CUSTOM = 3
+} GESTrackType;
+
struct _GESTrack {
GstBin parent;
GESTimeline * timeline;
+ GESTrackType type;
GstCaps * caps;
GType ges_track_get_type (void);
-GESTrack* ges_track_new (GstCaps * caps);
+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);