First round of changes to port to GObject. libgst.la compiles, though there are a few things commented out. Specifi...

Original commit message from CVS:
First round of changes to port to GObject.  libgst.la compiles, though
there are a few things commented out.  Specifically object destruction
is probably broken, but wtay gets to fix that because he researched the
problem of glib 2.0 object destruction while doing the first round.
Some of the XML stuff is commented out, but that's an easy fix.

Next is the rest of the gst/ directory, then on to the plugins.
This commit is contained in:
Erik Walthinsen 2001-06-13 21:52:36 +00:00
parent e23469d24f
commit c7f0713077
30 changed files with 845 additions and 802 deletions

View file

@ -44,22 +44,23 @@ static void gst_autoplug_init (GstAutoplug *autoplug);
static GstObjectClass *parent_class = NULL;
static guint gst_autoplug_signals[LAST_SIGNAL] = { 0 };
GtkType gst_autoplug_get_type(void)
GType gst_autoplug_get_type(void)
{
static GtkType autoplug_type = 0;
static GType autoplug_type = 0;
if (!autoplug_type) {
static const GtkTypeInfo autoplug_info = {
"GstAutoplug",
sizeof(GstAutoplug),
static const GTypeInfo autoplug_info = {
sizeof(GstAutoplugClass),
(GtkClassInitFunc)gst_autoplug_class_init,
(GtkObjectInitFunc)gst_autoplug_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_autoplug_class_init,
NULL,
NULL,
sizeof(GstAutoplug),
4,
(GInstanceInitFunc)gst_autoplug_init,
};
autoplug_type = gtk_type_unique (GST_TYPE_OBJECT, &autoplug_info);
autoplug_type = g_type_register_static (GST_TYPE_OBJECT, "GstAutoplug", &autoplug_info, 0);
}
return autoplug_type;
}
@ -67,21 +68,19 @@ GtkType gst_autoplug_get_type(void)
static void
gst_autoplug_class_init(GstAutoplugClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gobject_class = (GObjectClass*) klass;
gstobject_class = (GstObjectClass*) klass;
parent_class = gtk_type_class(GST_TYPE_OBJECT);
parent_class = g_type_class_ref (GST_TYPE_OBJECT);
gst_autoplug_signals[NEW_OBJECT] =
gtk_signal_new ("new_object", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstAutoplugClass, new_object),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("new_object", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstAutoplugClass, new_object), NULL, NULL,
g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
GST_TYPE_OBJECT);
gtk_object_class_add_signals (gtkobject_class, gst_autoplug_signals, LAST_SIGNAL);
}
static void gst_autoplug_init(GstAutoplug *autoplug)
@ -107,7 +106,7 @@ _gst_autoplug_initialize (void)
void
gst_autoplug_signal_new_object (GstAutoplug *autoplug, GstObject *object)
{
gtk_signal_emit (GTK_OBJECT (autoplug), gst_autoplug_signals[NEW_OBJECT], object);
g_signal_emit (G_OBJECT (autoplug), gst_autoplug_signals[NEW_OBJECT], 0, object);
}
@ -132,7 +131,7 @@ gst_autoplug_to_caps (GstAutoplug *autoplug, GstCaps *srccaps, GstCaps *sinkcaps
va_start (args, sinkcaps);
oclass = GST_AUTOPLUG_CLASS (GTK_OBJECT (autoplug)->klass);
oclass = GST_AUTOPLUG_CLASS (G_OBJECT_GET_CLASS(autoplug));
if (oclass->autoplug_to_caps)
element = (oclass->autoplug_to_caps) (autoplug, srccaps, sinkcaps, args);
@ -162,7 +161,7 @@ gst_autoplug_to_renderers (GstAutoplug *autoplug, GstCaps *srccaps, GstElement *
va_start (args, target);
oclass = GST_AUTOPLUG_CLASS (GTK_OBJECT (autoplug)->klass);
oclass = GST_AUTOPLUG_CLASS (G_OBJECT_GET_CLASS(autoplug));
if (oclass->autoplug_to_renderers)
element = (oclass->autoplug_to_renderers) (autoplug, srccaps, target, args);
@ -183,7 +182,7 @@ gst_autoplug_to_renderers (GstAutoplug *autoplug, GstCaps *srccaps, GstElement *
* Returns: a new #GstAutoplugFactory.
*/
GstAutoplugFactory*
gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GtkType type)
gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GType type)
{
GstAutoplugFactory *factory;
@ -280,7 +279,7 @@ gst_autoplugfactory_create (GstAutoplugFactory *factory)
g_return_val_if_fail (factory != NULL, NULL);
g_return_val_if_fail (factory->type != 0, NULL);
new = GST_AUTOPLUG (gtk_type_new (factory->type));
new = GST_AUTOPLUG (g_object_new(factory->type,NULL));
return new;
}

View file

@ -33,13 +33,13 @@ extern "C" {
#define GST_TYPE_AUTOPLUG \
(gst_autoplug_get_type())
#define GST_AUTOPLUG(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_AUTOPLUG,GstAutoplug))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUTOPLUG,GstAutoplug))
#define GST_AUTOPLUG_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUG,GstAutoplugClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUTOPLUG,GstAutoplugClass))
#define GST_IS_AUTOPLUG(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_AUTOPLUG))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUTOPLUG))
#define GST_IS_AUTOPLUG_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUG))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUTOPLUG))
typedef struct _GstAutoplug GstAutoplug;
typedef struct _GstAutoplugClass GstAutoplugClass;
@ -72,10 +72,10 @@ typedef struct _GstAutoplugFactory GstAutoplugFactory;
struct _GstAutoplugFactory {
gchar *name; /* name of autoplugger */
gchar *longdesc; /* long description of the autoplugger (well, don't overdo it..) */
GtkType type; /* unique GtkType of the autoplugger */
GType type; /* unique GType of the autoplugger */
};
GtkType gst_autoplug_get_type (void);
GType gst_autoplug_get_type (void);
void gst_autoplug_signal_new_object (GstAutoplug *autoplug, GstObject *object);
@ -88,7 +88,7 @@ GstElement* gst_autoplug_to_renderers (GstAutoplug *autoplug, GstCaps *srccaps
* creating autopluggers
*
*/
GstAutoplugFactory* gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GtkType type);
GstAutoplugFactory* gst_autoplugfactory_new (const gchar *name, const gchar *longdesc, GType type);
void gst_autoplugfactory_destroy (GstAutoplugFactory *factory);
GstAutoplugFactory* gst_autoplugfactory_find (const gchar *name);

View file

@ -38,13 +38,13 @@ GstElementDetails gst_bin_details = {
};
static void gst_bin_real_destroy (GtkObject *object);
static void gst_bin_real_destroy (GObject *object);
static GstElementStateReturn gst_bin_change_state (GstElement *element);
static GstElementStateReturn gst_bin_change_state_norecurse (GstBin *bin);
static gboolean gst_bin_change_state_type (GstBin *bin,
GstElementState state,
GtkType type);
GType type);
static gboolean gst_bin_iterate_func (GstBin *bin);
@ -70,23 +70,24 @@ static void gst_bin_init (GstBin *bin);
static GstElementClass *parent_class = NULL;
static guint gst_bin_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_bin_get_type (void)
{
static GtkType bin_type = 0;
static GType bin_type = 0;
if (!bin_type) {
static const GtkTypeInfo bin_info = {
"GstBin",
sizeof(GstBin),
static const GTypeInfo bin_info = {
sizeof(GstBinClass),
(GtkClassInitFunc)gst_bin_class_init,
(GtkObjectInitFunc)gst_bin_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_bin_class_init,
NULL,
NULL,
sizeof(GstBin),
8,
(GInstanceInitFunc)gst_bin_init,
};
bin_type = gtk_type_unique (GST_TYPE_ELEMENT, &bin_info);
bin_type = g_type_register_static (GST_TYPE_ELEMENT, "GstBin", &bin_info, 0);
}
return bin_type;
}
@ -94,22 +95,21 @@ gst_bin_get_type (void)
static void
gst_bin_class_init (GstBinClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
GstElementClass *gstelement_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstobject_class = (GstObjectClass*)klass;
gstelement_class = (GstElementClass*)klass;
parent_class = gtk_type_class (GST_TYPE_ELEMENT);
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
gst_bin_signals[OBJECT_ADDED] =
gtk_signal_new ("object_added", GTK_RUN_FIRST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstBinClass, object_added),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("object_added", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GstBinClass, object_added), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_ELEMENT);
gtk_object_class_add_signals (gtkobject_class, gst_bin_signals, LAST_SIGNAL);
klass->change_state_type = gst_bin_change_state_type;
klass->iterate = gst_bin_iterate_func;
@ -119,7 +119,8 @@ gst_bin_class_init (GstBinClass *klass)
gstelement_class->change_state = gst_bin_change_state;
gtkobject_class->destroy = gst_bin_real_destroy;
// FIXME
// gobject_class->destroy = gst_bin_real_destroy;
}
static void
@ -291,7 +292,7 @@ gst_bin_add (GstBin *bin,
GST_INFO_ELEMENT (GST_CAT_PARENTAGE, bin, "added child \"%s\"", GST_ELEMENT_NAME (element));
gtk_signal_emit (GTK_OBJECT (bin), gst_bin_signals[OBJECT_ADDED], element);
g_signal_emit (G_OBJECT (bin), gst_bin_signals[OBJECT_ADDED], 0, element);
}
/**
@ -373,7 +374,7 @@ gst_bin_change_state (GstElement *element)
// GST_DEBUG (GST_CAT_STATES,"setting state on '%s'\n",GST_ELEMENT_NAME (child));
switch (gst_element_set_state (child, GST_STATE_PENDING (element))) {
case GST_STATE_FAILURE:
GST_STATE_PENDING (element) = GST_STATE_NONE_PENDING;
GST_STATE_PENDING (element) = GST_STATE_VOID_PENDING;
GST_DEBUG (GST_CAT_STATES,"child '%s' failed to go to state %d(%s)\n", GST_ELEMENT_NAME (child),
GST_STATE_PENDING (element), gst_element_statename (GST_STATE_PENDING (element)));
return GST_STATE_FAILURE;
@ -409,7 +410,7 @@ gst_bin_change_state_norecurse (GstBin *bin)
static gboolean
gst_bin_change_state_type(GstBin *bin,
GstElementState state,
GtkType type)
GType type)
{
GList *children;
GstElement *child;
@ -427,7 +428,7 @@ gst_bin_change_state_type(GstBin *bin,
if (GST_IS_BIN (child)) {
if (!gst_bin_set_state_type (GST_BIN (child), state,type))
return FALSE;
} else if (GTK_CHECK_TYPE (child,type)) {
} else if (G_TYPE_CHECK_INSTANCE_TYPE (child,type)) {
if (!gst_element_set_state (child,state))
return FALSE;
}
@ -453,7 +454,7 @@ gst_bin_change_state_type(GstBin *bin,
gboolean
gst_bin_set_state_type (GstBin *bin,
GstElementState state,
GtkType type)
GType type)
{
GstBinClass *oclass;
@ -463,7 +464,7 @@ gst_bin_set_state_type (GstBin *bin,
g_return_val_if_fail (bin != NULL, FALSE);
g_return_val_if_fail (GST_IS_BIN (bin), FALSE);
oclass = GST_BIN_CLASS (GTK_OBJECT (bin)->klass);
oclass = GST_BIN_CLASS (G_OBJECT_GET_CLASS(bin));
if (oclass->change_state_type)
(oclass->change_state_type) (bin,state,type);
@ -471,7 +472,7 @@ gst_bin_set_state_type (GstBin *bin,
}
static void
gst_bin_real_destroy (GtkObject *object)
gst_bin_real_destroy (GObject *object)
{
GstBin *bin = GST_BIN (object);
GList *children, *orig;
@ -496,8 +497,9 @@ gst_bin_real_destroy (GtkObject *object)
g_cond_free (bin->eoscond);
if (GTK_OBJECT_CLASS (parent_class)->destroy)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
// FIXME!!!
// if (G_OBJECT_CLASS (parent_class)->destroy)
// G_OBJECT_CLASS (parent_class)->destroy (object);
}
/**
@ -660,7 +662,7 @@ gst_bin_iterate (GstBin *bin)
GST_DEBUG_ENTER("(\"%s\")",GST_ELEMENT_NAME (bin));
oclass = GST_BIN_CLASS (GTK_OBJECT (bin)->klass);
oclass = GST_BIN_CLASS (G_OBJECT_GET_CLASS(bin));
if (oclass->iterate)
eos = (oclass->iterate) (bin);

View file

@ -36,13 +36,13 @@ extern GstElementDetails gst_bin_details;
#define GST_TYPE_BIN \
(gst_bin_get_type())
#define GST_BIN(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_BIN,GstBin))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BIN,GstBin))
#define GST_BIN_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_BIN,GstBinClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BIN,GstBinClass))
#define GST_IS_BIN(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_BIN))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BIN))
#define GST_IS_BIN_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_BIN))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BIN))
typedef enum {
/* this bin is a manager of child elements, i.e. a pipeline or thread */
@ -94,7 +94,7 @@ struct _GstBinClass {
/* change the state of elements of the given type */
gboolean (*change_state_type) (GstBin *bin,
GstElementState state,
GtkType type);
GType type);
/* run a full iteration of operation */
gboolean (*iterate) (GstBin *bin);
};
@ -110,7 +110,7 @@ struct __GstBinChain {
};
GtkType gst_bin_get_type (void);
GType gst_bin_get_type (void);
GstElement* gst_bin_new (const gchar *name);
#define gst_bin_destroy(bin) gst_object_destroy(GST_OBJECT(bin))
@ -129,7 +129,7 @@ GList* gst_bin_get_list (GstBin *bin);
gboolean gst_bin_set_state_type (GstBin *bin,
GstElementState state,
GtkType type);
GType type);
gboolean gst_bin_iterate (GstBin *bin);

View file

@ -51,11 +51,11 @@ static void gst_element_class_init (GstElementClass *klass);
static void gst_element_init (GstElement *element);
static void gst_element_base_class_init (GstElementClass *klass);
static void gst_element_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_element_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_element_get_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_element_shutdown (GtkObject *object);
static void gst_element_real_destroy (GtkObject *object);
static void gst_element_shutdown (GObject *object);
static void gst_element_real_destroy (GObject *object);
static GstElementStateReturn gst_element_change_state (GstElement *element);
@ -65,21 +65,22 @@ static xmlNodePtr gst_element_save_thyself (GstObject *object, xmlNodePtr paren
static GstObjectClass *parent_class = NULL;
static guint gst_element_signals[LAST_SIGNAL] = { 0 };
GtkType gst_element_get_type(void) {
static GtkType element_type = 0;
GType gst_element_get_type(void) {
static GType element_type = 0;
if (!element_type) {
static const GtkTypeInfo element_info = {
"GstElement",
sizeof(GstElement),
static const GTypeInfo element_info = {
sizeof(GstElementClass),
(GtkClassInitFunc)gst_element_class_init,
(GtkObjectInitFunc)gst_element_init,
(GtkArgSetFunc)gst_element_set_arg,
(GtkArgGetFunc)gst_element_get_arg,
(GtkClassInitFunc)gst_element_base_class_init,
(GBaseInitFunc)gst_element_base_class_init,
NULL,
(GClassInitFunc)gst_element_class_init,
NULL,
NULL,
sizeof(GstElement),
0,
(GInstanceInitFunc)gst_element_init,
};
element_type = gtk_type_unique(GST_TYPE_OBJECT,&element_info);
element_type = g_type_register_static(GST_TYPE_OBJECT, "GstElement", &element_info, G_TYPE_FLAG_ABSTRACT);
}
return element_type;
}
@ -87,56 +88,56 @@ GtkType gst_element_get_type(void) {
static void
gst_element_class_init (GstElementClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gobject_class = (GObjectClass*) klass;
gstobject_class = (GstObjectClass*) klass;
parent_class = gtk_type_class(GST_TYPE_OBJECT);
parent_class = g_type_class_ref(GST_TYPE_OBJECT);
gst_element_signals[STATE_CHANGE] =
gtk_signal_new ("state_change", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, state_change),
gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1,
GTK_TYPE_INT);
g_signal_newc ("state_change", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, state_change), NULL, NULL,
g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1,
G_TYPE_INT);
gst_element_signals[NEW_PAD] =
gtk_signal_new ("new_pad", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, new_pad),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("new_pad", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, new_pad), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_PAD);
gst_element_signals[PAD_REMOVED] =
gtk_signal_new ("pad_removed", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, pad_removed),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("pad_removed", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, pad_removed), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_PAD);
gst_element_signals[NEW_GHOST_PAD] =
gtk_signal_new ("new_ghost_pad", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, new_ghost_pad),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("new_ghost_pad", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, new_ghost_pad), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_PAD);
gst_element_signals[GHOST_PAD_REMOVED] =
gtk_signal_new ("ghost_pad_removed", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, ghost_pad_removed),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("ghost_pad_removed", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, ghost_pad_removed), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_PAD);
gst_element_signals[ERROR] =
gtk_signal_new ("error", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass, error),
gtk_marshal_NONE__STRING, GTK_TYPE_NONE,1,
GTK_TYPE_STRING);
g_signal_newc ("error", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, error), NULL, NULL,
g_cclosure_marshal_VOID__STRING, G_TYPE_NONE,1,
G_TYPE_STRING);
gst_element_signals[EOS] =
gtk_signal_new ("eos", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstElementClass,eos),
gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0);
g_signal_newc ("eos", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass,eos), NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
gtk_object_class_add_signals (gtkobject_class, gst_element_signals, LAST_SIGNAL);
gtkobject_class->set_arg = GST_DEBUG_FUNCPTR(gst_element_set_arg);
gtkobject_class->get_arg = GST_DEBUG_FUNCPTR(gst_element_get_arg);
gtkobject_class->shutdown = GST_DEBUG_FUNCPTR(gst_element_shutdown);
gtkobject_class->destroy = GST_DEBUG_FUNCPTR(gst_element_real_destroy);
gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_element_set_property);
gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_element_get_property);
gobject_class->shutdown = GST_DEBUG_FUNCPTR(gst_element_shutdown);
// FIXME!
// gobject_class->destroy = GST_DEBUG_FUNCPTR(gst_element_real_destroy);
gstobject_class->save_thyself = GST_DEBUG_FUNCPTR(gst_element_save_thyself);
gstobject_class->restore_thyself = GST_DEBUG_FUNCPTR(gst_element_restore_thyself);
@ -148,12 +149,12 @@ gst_element_class_init (GstElementClass *klass)
static void
gst_element_base_class_init (GstElementClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gobject_class = (GObjectClass*) klass;
gtkobject_class->set_arg = GST_DEBUG_FUNCPTR(gst_element_set_arg);
gtkobject_class->get_arg = GST_DEBUG_FUNCPTR(gst_element_get_arg);
gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_element_set_property);
gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_element_get_property);
}
static void
@ -172,28 +173,28 @@ gst_element_init (GstElement *element)
static void
gst_element_set_arg (GtkObject *object, GtkArg *arg, guint id)
gst_element_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GstElementClass *oclass = GST_ELEMENT_CLASS (object->klass);
GstElementClass *oclass = (GstElementClass *)G_OBJECT_GET_CLASS(object);
GST_SCHEDULE_LOCK_ELEMENT ( GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
if (oclass->set_arg)
(oclass->set_arg)(object,arg,id);
if (oclass->set_property)
(oclass->set_property)(object,prop_id,value,pspec);
GST_SCHEDULE_UNLOCK_ELEMENT ( GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
}
static void
gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id)
gst_element_get_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GstElementClass *oclass = GST_ELEMENT_CLASS (object->klass);
GstElementClass *oclass = (GstElementClass *)G_OBJECT_GET_CLASS(object);
GST_SCHEDULE_LOCK_ELEMENT (GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
if (oclass->get_arg)
(oclass->get_arg)(object,arg,id);
if (oclass->get_property)
(oclass->get_property)(object,prop_id,value,pspec);
GST_SCHEDULE_UNLOCK_ELEMENT (GST_ELEMENT_SCHED(object), GST_ELEMENT(object) );
}
@ -209,7 +210,7 @@ gst_element_get_arg (GtkObject *object, GtkArg *arg, guint id)
GstElement*
gst_element_new(void)
{
return GST_ELEMENT (gtk_type_new (GST_TYPE_ELEMENT));
return GST_ELEMENT (g_object_new(GST_TYPE_ELEMENT,NULL));
}
/**
@ -261,7 +262,7 @@ gst_element_set_parent (GstElement *element, GstObject *parent)
g_return_if_fail (GST_IS_ELEMENT (element));
g_return_if_fail (GST_OBJECT_PARENT (element) == NULL);
g_return_if_fail (parent != NULL);
g_return_if_fail (GTK_IS_OBJECT (parent));
g_return_if_fail (GST_IS_OBJECT (parent));
g_return_if_fail ((gpointer)element != (gpointer)parent);
gst_object_set_parent (GST_OBJECT (element), parent);
@ -320,7 +321,7 @@ gst_element_add_pad (GstElement *element, GstPad *pad)
element->numsinkpads++;
/* emit the NEW_PAD signal */
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[NEW_PAD], pad);
g_signal_emit (G_OBJECT (element), gst_element_signals[NEW_PAD], 0, pad);
}
/**
@ -348,7 +349,7 @@ gst_element_remove_pad (GstElement *element, GstPad *pad)
else
element->numsinkpads--;
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[PAD_REMOVED], pad);
g_signal_emit (G_OBJECT (element), gst_element_signals[PAD_REMOVED], 0, pad);
gst_object_unparent (GST_OBJECT (pad));
}
@ -390,7 +391,7 @@ gst_element_add_ghost_pad (GstElement *element, GstPad *pad, gchar *name)
GST_DEBUG(GST_CAT_ELEMENT_PADS,"added ghostpad %s:%s\n",GST_DEBUG_PAD_NAME(ghostpad));
/* emit the NEW_GHOST_PAD signal */
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[NEW_GHOST_PAD], ghostpad);
g_signal_emit (G_OBJECT (element), gst_element_signals[NEW_GHOST_PAD], 0, ghostpad);
}
/**
@ -484,7 +485,7 @@ gst_element_get_padtemplate_list (GstElement *element)
g_return_val_if_fail (element != NULL, NULL);
g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
if (oclass->elementfactory == NULL) return NULL;
@ -590,7 +591,7 @@ gst_element_request_pad (GstElement *element, GstPadTemplate *templ)
GstPad *newpad = NULL;
GstElementClass *oclass;
oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
if (oclass->request_new_pad)
newpad = (oclass->request_new_pad)(element, templ);
@ -750,7 +751,7 @@ gst_element_error (GstElement *element, const gchar *error)
/* FIXME: this is not finished!!! */
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[ERROR], error);
g_signal_emit (G_OBJECT (element), gst_element_signals[ERROR], 0, error);
}
@ -799,7 +800,7 @@ gst_element_set_state (GstElement *element, GstElementState state)
gst_element_statename(curpending));
/* call the state change function so it can set the state */
oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
if (oclass->change_state)
return_val = (oclass->change_state)(element);
@ -831,7 +832,7 @@ gst_element_get_factory (GstElement *element)
g_return_val_if_fail (element != NULL, NULL);
g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
return oclass->elementfactory;
}
@ -871,20 +872,20 @@ GST_ELEMENT_NAME(element),GST_ELEMENT_NAME(GST_ELEMENT_PARENT(element)),GST_ELEM
}
GST_STATE (element) = GST_STATE_PENDING (element);
GST_STATE_PENDING (element) = GST_STATE_NONE_PENDING;
GST_STATE_PENDING (element) = GST_STATE_VOID_PENDING;
// note: queues' state_change is a special case because it needs to lock
// for synchronization (from another thread). since this signal may block
// or (worse) make another state change, the queue needs to unlock before
// calling. thus, gstqueue.c::gst_queue_state_change() blocks, unblocks,
// unlocks, then emits this.
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[STATE_CHANGE],
g_signal_emit (G_OBJECT (element), gst_element_signals[STATE_CHANGE], 0,
GST_STATE (element));
return GST_STATE_SUCCESS;
}
static void
gst_element_shutdown (GtkObject *object)
gst_element_shutdown (GObject *object)
{
GstElement *element = GST_ELEMENT (object);
@ -893,12 +894,12 @@ gst_element_shutdown (GtkObject *object)
if (GST_IS_BIN (GST_OBJECT_PARENT (element)))
gst_bin_remove (GST_BIN (GST_OBJECT_PARENT (element)), element);
if (GTK_OBJECT_CLASS (parent_class)->shutdown)
GTK_OBJECT_CLASS (parent_class)->shutdown (object);
if (G_OBJECT_CLASS (parent_class)->shutdown)
G_OBJECT_CLASS (parent_class)->shutdown (object);
}
static void
gst_element_real_destroy (GtkObject *object)
gst_element_real_destroy (GObject *object)
{
GstElement *element = GST_ELEMENT (object);
GList *pads;
@ -925,8 +926,9 @@ gst_element_real_destroy (GtkObject *object)
element->numsrcpads = 0;
element->numsinkpads = 0;
if (GTK_OBJECT_CLASS (parent_class)->destroy)
GTK_OBJECT_CLASS (parent_class)->destroy (object);
// FIXME!
// if (G_OBJECT_CLASS (parent_class)->destroy)
// G_OBJECT_CLASS (parent_class)->destroy (object);
}
/*
@ -961,7 +963,7 @@ gst_element_save_thyself (GstObject *object,
{
GList *pads;
GstElementClass *oclass;
GtkType type;
// GType type;
GstElement *element;
g_return_val_if_fail (object != NULL, parent);
@ -970,7 +972,7 @@ gst_element_save_thyself (GstObject *object,
element = GST_ELEMENT (object);
oclass = GST_ELEMENT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS(element));
xmlNewChild(parent, NULL, "name", GST_ELEMENT_NAME(element));
@ -984,9 +986,10 @@ gst_element_save_thyself (GstObject *object,
// if (element->manager)
// xmlNewChild(parent, NULL, "manager", GST_ELEMENT_NAME(element->manager));
/* FIXME FIXME FIXME!
// output all args to the element
type = GTK_OBJECT_TYPE (element);
while (type != GTK_TYPE_INVALID) {
type = G_OBJECT_TYPE (element);
while (type != G_TYPE_INVALID) {
GtkArg *args;
guint32 *flags;
guint num_args,i;
@ -994,51 +997,51 @@ gst_element_save_thyself (GstObject *object,
args = gtk_object_query_args (type, &flags, &num_args);
for (i=0; i<num_args; i++) {
if ((args[i].type > GTK_TYPE_NONE) &&
if ((args[i].type > G_TYPE_NONE) &&
(flags[i] & GTK_ARG_READABLE)) {
xmlNodePtr arg;
gtk_object_getv (GTK_OBJECT (element), 1, &args[i]);
gtk_object_getv (G_OBJECT (element), 1, &args[i]);
arg = xmlNewChild (parent, NULL, "arg", NULL);
xmlNewChild (arg, NULL, "name", args[i].name);
switch (args[i].type) {
case GTK_TYPE_CHAR:
case G_TYPE_CHAR:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%c", GTK_VALUE_CHAR (args[i])));
g_strdup_printf ("%c", G_VALUE_CHAR (args[i])));
break;
case GTK_TYPE_UCHAR:
case G_TYPE_UCHAR:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%d", GTK_VALUE_UCHAR (args[i])));
g_strdup_printf ("%d", G_VALUE_UCHAR (args[i])));
break;
case GTK_TYPE_BOOL:
case G_TYPE_BOOL:
xmlNewChild (arg, NULL, "value",
GTK_VALUE_BOOL (args[i]) ? "true" : "false");
G_VALUE_BOOL (args[i]) ? "true" : "false");
break;
case GTK_TYPE_INT:
case G_TYPE_INT:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%d", GTK_VALUE_INT (args[i])));
g_strdup_printf ("%d", G_VALUE_INT (args[i])));
break;
case GTK_TYPE_LONG:
case G_TYPE_LONG:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%ld", GTK_VALUE_LONG (args[i])));
g_strdup_printf ("%ld", G_VALUE_LONG (args[i])));
break;
case GTK_TYPE_ULONG:
case G_TYPE_ULONG:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%lu", GTK_VALUE_ULONG (args[i])));
g_strdup_printf ("%lu", G_VALUE_ULONG (args[i])));
break;
case GTK_TYPE_FLOAT:
case G_TYPE_FLOAT:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%f", GTK_VALUE_FLOAT (args[i])));
g_strdup_printf ("%f", G_VALUE_FLOAT (args[i])));
break;
case GTK_TYPE_DOUBLE:
case G_TYPE_DOUBLE:
xmlNewChild (arg, NULL, "value",
g_strdup_printf ("%g", GTK_VALUE_DOUBLE (args[i])));
g_strdup_printf ("%g", G_VALUE_DOUBLE (args[i])));
break;
case GTK_TYPE_STRING:
xmlNewChild (arg, NULL, "value", GTK_VALUE_STRING (args[i]));
case G_TYPE_STRING:
xmlNewChild (arg, NULL, "value", G_VALUE_STRING (args[i]));
break;
default:
if (args[i].type == GST_TYPE_FILENAME) {
xmlNewChild (arg, NULL, "value", GTK_VALUE_STRING (args[i]));
xmlNewChild (arg, NULL, "value", G_VALUE_STRING (args[i]));
}
break;
}
@ -1046,6 +1049,7 @@ gst_element_save_thyself (GstObject *object,
}
type = gtk_type_parent (type);
}
*/
pads = GST_ELEMENT_PADS (element);
@ -1120,7 +1124,7 @@ gst_element_restore_thyself (xmlNodePtr self, GstObject *parent)
}
child = child->next;
}
gst_util_set_object_arg (GTK_OBJECT (element), name, value);
gst_util_set_object_arg (G_OBJECT (element), name, value);
}
children = children->next;
}
@ -1134,7 +1138,7 @@ gst_element_restore_thyself (xmlNodePtr self, GstObject *parent)
children = children->next;
}
oclass = GST_OBJECT_CLASS (GTK_OBJECT (element)->klass);
oclass = GST_OBJECT_CLASS (G_OBJECT_GET_CLASS(element));
if (oclass->restore_thyself)
(oclass->restore_thyself) (GST_OBJECT (element), self);
@ -1212,7 +1216,7 @@ gst_element_signal_eos (GstElement *element)
g_return_if_fail (element != NULL);
g_return_if_fail (GST_IS_ELEMENT (element));
gtk_signal_emit (GTK_OBJECT (element), gst_element_signals[EOS]);
g_signal_emit (G_OBJECT (element), gst_element_signals[EOS], 0);
GST_FLAG_SET(element,GST_ELEMENT_COTHREAD_STOPPING);
}
@ -1220,14 +1224,14 @@ gst_element_signal_eos (GstElement *element)
const gchar *gst_element_statename(int state) {
switch (state) {
#ifdef GST_DEBUG_COLOR
case GST_STATE_NONE_PENDING: return "NONE_PENDING";break;
case GST_STATE_VOID_PENDING: return "NONE_PENDING";break;
case GST_STATE_NULL: return "\033[01;37mNULL\033[00m";break;
case GST_STATE_READY: return "\033[01;31mREADY\033[00m";break;
case GST_STATE_PLAYING: return "\033[01;32mPLAYING\033[00m";break;
case GST_STATE_PAUSED: return "\033[01;33mPAUSED\033[00m";break;
default: return "\033[01;37;41mUNKNOWN!\033[00m";
#else
case GST_STATE_NONE_PENDING: return "NONE_PENDING";break;
case GST_STATE_VOID_PENDING: return "NONE_PENDING";break;
case GST_STATE_NULL: return "NULL";break;
case GST_STATE_READY: return "READY";break;
case GST_STATE_PLAYING: return "PLAYING";break;

View file

@ -43,7 +43,7 @@ extern "C" {
typedef enum {
GST_STATE_NONE_PENDING = 0,
GST_STATE_VOID_PENDING = 0,
GST_STATE_NULL = (1 << 0),
GST_STATE_READY = (1 << 1),
GST_STATE_PAUSED = (1 << 2),
@ -74,13 +74,13 @@ typedef enum {
#define GST_TYPE_ELEMENT \
(gst_element_get_type())
#define GST_ELEMENT(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_ELEMENT,GstElement))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ELEMENT,GstElement))
#define GST_ELEMENT_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass))
#define GST_IS_ELEMENT(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_ELEMENT))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ELEMENT))
#define GST_IS_ELEMENT_CLASS(klass) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT))
typedef enum {
/* element is complex (for some def.) and generally require a cothread */
@ -164,8 +164,8 @@ struct _GstElementClass {
void (*eos) (GstElement *element);
/* local pointers for get/set */
void (*set_arg) (GtkObject *object,GtkArg *arg,guint id);
void (*get_arg) (GtkObject *object,GtkArg *arg,guint id);
void (*set_property) (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
void (*get_property) (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
/* change the element state */
GstElementStateReturn (*change_state) (GstElement *element);
@ -184,7 +184,7 @@ struct _GstElementDetails {
struct _GstElementFactory {
gchar *name; /* name of element */
GtkType type; /* unique GtkType of element */
GType type; /* unique GType of element */
GstElementDetails *details; /* pointer to details struct */
@ -192,7 +192,7 @@ struct _GstElementFactory {
guint16 numpadtemplates;
};
GtkType gst_element_get_type (void);
GType gst_element_get_type (void);
GstElement* gst_element_new (void);
#define gst_element_destroy(element) gst_object_destroy (GST_OBJECT (element))
@ -244,7 +244,7 @@ GstElement* gst_element_restore_thyself (xmlNodePtr self, GstObject *parent);
* factories stuff
*
**/
GstElementFactory* gst_elementfactory_new (const gchar *name,GtkType type,
GstElementFactory* gst_elementfactory_new (const gchar *name,GType type,
GstElementDetails *details);
void gst_elementfactory_destroy (GstElementFactory *elementfactory);

View file

@ -98,7 +98,7 @@ gst_elementfactory_get_list (void)
/**
* gst_elementfactory_new:
* @name: name of new elementfactory
* @type: GtkType of new element
* @type: GType of new element
* @details: #GstElementDetails structure with element details
*
* Create a new elementfactory capable of insantiating objects of the
@ -107,7 +107,7 @@ gst_elementfactory_get_list (void)
* Returns: new elementfactory
*/
GstElementFactory*
gst_elementfactory_new (const gchar *name, GtkType type,
gst_elementfactory_new (const gchar *name, GType type,
GstElementDetails *details)
{
GstElementFactory *factory;
@ -159,11 +159,11 @@ gst_elementfactory_create (GstElementFactory *factory,
g_return_val_if_fail(factory->type != 0, NULL);
// create an instance of the element
element = GST_ELEMENT(gtk_type_new(factory->type));
element = GST_ELEMENT(g_object_new(factory->type,NULL));
g_assert(element != NULL);
// attempt to set the elemenfactory class pointer if necessary
oclass = GST_ELEMENT_CLASS(GTK_OBJECT(element)->klass);
oclass = GST_ELEMENT_CLASS(G_OBJECT_GET_CLASS(element));
if (oclass->elementfactory == NULL) {
GST_DEBUG (GST_CAT_ELEMENTFACTORY,"class %s\n", factory->name);
oclass->elementfactory = factory;

View file

@ -2,7 +2,7 @@
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
* gstextratypes.c: Extra GtkTypes: filename type, etc.
* gstextratypes.c: Extra GTypes: filename type, etc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@ -24,23 +24,24 @@
#include "gstextratypes.h"
GtkType
GType
gst_extra_get_filename_type (void)
{
static GtkType filename_type = 0;
static GType filename_type = 0;
if (!filename_type) {
static const GtkTypeInfo filename_info = {
"GstFilename",
0, //sizeof(GstElement),
static const GTypeInfo filename_info = {
0, //sizeof(GstElementClass),
(GtkClassInitFunc)NULL,
(GtkObjectInitFunc)NULL,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
0, //sizeof(GstElement),
0,
NULL,
};
filename_type = gtk_type_unique (GTK_TYPE_STRING, &filename_info);
filename_type = g_type_register_static (G_TYPE_STRING, "GstFilename", &filename_info, 0);
}
return filename_type;
}

View file

@ -2,7 +2,7 @@
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
* gstextratypes.h: Header for extra GtkTypes
* gstextratypes.h: Header for extra GTypes
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@ -24,7 +24,7 @@
#ifndef __GST_EXTRA_TYPES_H__
#define __GST_EXTRA_TYPES_H__
#include <gtk/gtk.h>
#include <glib-object.h>
#ifdef __cplusplus
@ -33,7 +33,7 @@ extern "C" {
#define GST_TYPE_FILENAME (gst_extra_get_filename_type())
GtkType gst_extra_get_filename_type(void);
GType gst_extra_get_filename_type(void);
#ifdef __cplusplus
}

View file

@ -44,7 +44,7 @@ enum {
typedef struct _GstSignalObject GstSignalObject;
typedef struct _GstSignalObjectClass GstSignalObjectClass;
static GtkType gst_signal_object_get_type (void);
static GType gst_signal_object_get_type (void);
static void gst_signal_object_class_init (GstSignalObjectClass *klass);
static void gst_signal_object_init (GstSignalObject *object);
@ -53,35 +53,31 @@ static guint gst_signal_object_signals[SO_LAST_SIGNAL] = { 0 };
static void gst_object_class_init (GstObjectClass *klass);
static void gst_object_init (GstObject *object);
static void gst_object_real_destroy (GtkObject *gtk_object);
static void gst_object_shutdown (GtkObject *gtk_object);
static void gst_object_finalize (GtkObject *gtk_object);
static void gst_object_real_destroy (GObject *gtk_object);
static void gst_object_shutdown (GObject *gtk_object);
static void gst_object_finalize (GObject *gtk_object);
static GtkObjectClass *parent_class = NULL;
static GObjectClass *parent_class = NULL;
static guint gst_object_signals[LAST_SIGNAL] = { 0 };
void
gst_object_inititialize (void)
{
}
GtkType
GType
gst_object_get_type (void)
{
static GtkType object_type = 0;
static GType object_type = 0;
if (!object_type) {
static const GtkTypeInfo object_info = {
"GstObject",
sizeof(GstObject),
sizeof(GstObjectClass),
(GtkClassInitFunc)gst_object_class_init,
(GtkObjectInitFunc)gst_object_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
static const GTypeInfo object_info = {
sizeof (GstObjectClass),
NULL,
NULL,
(GClassInitFunc) gst_object_class_init,
NULL,
NULL,
sizeof (GstObject),
32,
(GInstanceInitFunc) gst_object_init,
};
object_type = gtk_type_unique(gtk_object_get_type(),&object_info);
object_type = g_type_register_static (G_TYPE_OBJECT, "GstObject", &object_info, G_TYPE_FLAG_ABSTRACT);
}
return object_type;
}
@ -89,45 +85,49 @@ gst_object_get_type (void)
static void
gst_object_class_init (GstObjectClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gobject_class = (GObjectClass*) klass;
parent_class = gtk_type_class (gtk_object_get_type ());
parent_class = g_type_class_ref (G_TYPE_OBJECT);
/*
gst_object_signals[PARENT_SET] =
gtk_signal_new ("parent_set", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstObjectClass, parent_set),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("parent_set", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_OBJECT);
gst_object_signals[OBJECT_SAVED] =
gtk_signal_new ("object_saved", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstObjectClass, object_saved),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
gtk_object_class_add_signals (gtkobject_class, gst_object_signals, LAST_SIGNAL);
g_signal_newc ("object_saved", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER);
*/
gst_object_signals[PARENT_SET] =
g_signal_newc("parent_set", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,G_TYPE_NONE,1,
G_TYPE_OBJECT);
gst_object_signals[OBJECT_SAVED] =
g_signal_newc("object_saved", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,G_TYPE_NONE,1,
G_TYPE_OBJECT);
klass->path_string_separator = "/";
klass->signal_object = gtk_type_new (gst_signal_object_get_type ());
// FIXME!!!
// klass->signal_object = g_object_new(gst_signal_object_get_type (,NULL));
gtkobject_class->shutdown = gst_object_shutdown;
gtkobject_class->destroy = gst_object_real_destroy;
gtkobject_class->finalize = gst_object_finalize;
gobject_class->shutdown = gst_object_shutdown;
// gobject_class->destroy = gst_object_real_destroy;
gobject_class->finalize = gst_object_finalize;
}
static void
gst_object_init (GstObject *object)
{
GstObjectClass *oclass;
oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
object->lock = g_mutex_new();
#ifdef HAVE_ATOMIC_H
atomic_set(&(object->refcount),1);
#else
object->refcount = 1;
#endif
object->parent = NULL;
object->flags = 0;
@ -144,7 +144,7 @@ gst_object_init (GstObject *object)
GstObject*
gst_object_new (void)
{
return GST_OBJECT (gtk_type_new (gst_object_get_type ()));
return GST_OBJECT (g_object_new (gst_object_get_type (), NULL));
}
/**
@ -161,9 +161,9 @@ gst_object_ref (GstObject *object)
g_return_val_if_fail (GST_IS_OBJECT (object), NULL);
GST_DEBUG (GST_CAT_REFCOUNTING, "ref '%s' %d->%d\n",GST_OBJECT_NAME(object),
GTK_OBJECT(object)->ref_count,GTK_OBJECT(object)->ref_count+1);
G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count+1);
gtk_object_ref (GTK_OBJECT (object));
g_object_ref (G_OBJECT (object));
return object;
}
@ -182,9 +182,9 @@ gst_object_unref (GstObject *object)
g_return_if_fail (GST_IS_OBJECT (object));
GST_DEBUG (GST_CAT_REFCOUNTING, "unref '%s' %d->%d\n",GST_OBJECT_NAME(object),
GTK_OBJECT(object)->ref_count,GTK_OBJECT(object)->ref_count-1);
G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count-1);
gtk_object_unref (GTK_OBJECT (object));
g_object_unref (G_OBJECT (object));
}
#define gst_object_unref gst_object_unref
@ -223,33 +223,34 @@ gst_object_destroy (GstObject *object)
* invocations.
*/
gst_object_ref (object);
GTK_OBJECT (object)->klass->shutdown (GTK_OBJECT (object));
G_OBJECT_GET_CLASS (object)->shutdown (G_OBJECT (object));
gst_object_unref (object);
}
}
static void
gst_object_shutdown (GtkObject *object)
gst_object_shutdown (GObject *object)
{
GST_DEBUG (GST_CAT_REFCOUNTING, "shutdown '%s'\n",GST_OBJECT_NAME(object));
GST_FLAG_SET (GST_OBJECT (object), GST_DESTROYED);
parent_class->shutdown (GTK_OBJECT (object));
parent_class->shutdown (G_OBJECT (object));
}
/* finilize is called when the object has to free its resources */
static void
gst_object_real_destroy (GtkObject *gtk_object)
gst_object_real_destroy (GObject *g_object)
{
GST_DEBUG (GST_CAT_REFCOUNTING, "destroy '%s'\n",GST_OBJECT_NAME(gtk_object));
GST_DEBUG (GST_CAT_REFCOUNTING, "destroy '%s'\n",GST_OBJECT_NAME(g_object));
GST_OBJECT_PARENT (gtk_object) = NULL;
GST_OBJECT_PARENT (g_object) = NULL;
parent_class->destroy (gtk_object);
// FIXME!!
// parent_class->destroy (g_object);
}
/* finilize is called when the object has to free its resources */
static void
gst_object_finalize (GtkObject *gtk_object)
gst_object_finalize (GObject *gtk_object)
{
GstObject *object;
@ -329,7 +330,7 @@ gst_object_set_parent (GstObject *object, GstObject *parent)
gst_object_sink (object);
object->parent = parent;
gtk_signal_emit (GTK_OBJECT (object), gst_object_signals[PARENT_SET], parent);
g_signal_emit (G_OBJECT (object), gst_object_signals[PARENT_SET], 0, parent);
}
/**
@ -382,15 +383,16 @@ gst_object_ref (GstObject *object)
g_return_if_fail (object != NULL, NULL);
g_return_if_fail (GST_IS_OBJECT (object), NULL);
#ifdef HAVE_ATOMIC_H
g_return_if_fail (atomic_read (&(object->refcount)) > 0);
atomic_inc (&(object->refcount))
#else
//#ifdef HAVE_ATOMIC_H
// g_return_if_fail (atomic_read (&(object->refcount)) > 0);
// atomic_inc (&(object->refcount))
//#else
g_return_if_fail (object->refcount > 0);
GST_LOCK (object);
object->refcount++;
// object->refcount++;
g_object_ref((GObject *)object);
GST_UNLOCK (object);
#endif
//#endif
return object;
}
@ -432,7 +434,7 @@ gst_object_unref (GstObject *object)
object->refcount = 1;
#endif
/* destroy it */
gtk_object_destroy (GTK_OBJECT (object));
gtk_object_destroy (G_OBJECT (object));
/* drop the refcount back to zero */
#ifdef HAVE_ATOMIC_H
atomic_set (&(object->refcount),0);
@ -442,7 +444,7 @@ gst_object_unref (GstObject *object)
/* finalize the object */
// FIXME this is an evil hack that should be killed
// FIXMEFIXMEFIXMEFIXME
// gtk_object_finalize(GTK_OBJECT(object));
// gtk_object_finalize(G_OBJECT(object));
}
}
#endif /* gst_object_unref */
@ -492,12 +494,12 @@ gst_object_save_thyself (GstObject *object, xmlNodePtr parent)
g_return_val_if_fail (GST_IS_OBJECT (object), parent);
g_return_val_if_fail (parent != NULL, parent);
oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(object);
if (oclass->save_thyself)
oclass->save_thyself (object, parent);
gtk_signal_emit (GTK_OBJECT (object), gst_object_signals[OBJECT_SAVED], parent);
g_signal_emit (G_OBJECT (object), gst_object_signals[OBJECT_SAVED], 0, parent);
return parent;
}
@ -546,7 +548,7 @@ gst_object_get_path_string (GstObject *object)
parents = parentage;
while (parents) {
if (GST_IS_OBJECT (parents->data)) {
GstObjectClass *oclass = GST_OBJECT_CLASS (GTK_OBJECT (parents->data)->klass);
GstObjectClass *oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(parents->data);
component = gst_object_get_name (parents->data);
separator = oclass->path_string_separator;
@ -574,33 +576,34 @@ gst_object_get_path_string (GstObject *object)
struct _GstSignalObject {
GtkObject object;
GObject object;
};
struct _GstSignalObjectClass {
GtkObjectClass parent_class;
GObjectClass parent_class;
/* signals */
void (*object_loaded) (GstSignalObject *object, GstObject *new, xmlNodePtr self);
};
static GtkType
static GType
gst_signal_object_get_type (void)
{
static GtkType signal_object_type = 0;
static GType signal_object_type = 0;
if (!signal_object_type) {
static const GtkTypeInfo signal_object_info = {
"GstSignalObject",
sizeof(GstSignalObject),
static const GTypeInfo signal_object_info = {
sizeof(GstSignalObjectClass),
(GtkClassInitFunc)gst_signal_object_class_init,
(GtkObjectInitFunc)gst_signal_object_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_signal_object_class_init,
NULL,
NULL,
sizeof(GstSignalObject),
16,
(GInstanceInitFunc)gst_signal_object_init,
};
signal_object_type = gtk_type_unique(gtk_object_get_type(),&signal_object_info);
signal_object_type = g_type_register_static(G_TYPE_OBJECT, "GstSignalObject", &signal_object_info, 0);
}
return signal_object_type;
}
@ -608,18 +611,18 @@ gst_signal_object_get_type (void)
static void
gst_signal_object_class_init (GstSignalObjectClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass*) klass;
gobject_class = (GObjectClass*) klass;
parent_class = gtk_type_class (gtk_object_get_type ());
parent_class = g_type_class_ref (G_TYPE_OBJECT);
gst_signal_object_signals[SO_OBJECT_LOADED] =
gtk_signal_new ("object_loaded", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstSignalObjectClass, object_loaded),
gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2,
GST_TYPE_OBJECT, GTK_TYPE_POINTER);
gtk_object_class_add_signals (gtkobject_class, gst_signal_object_signals, LAST_SIGNAL);
g_signal_newc("object_loaded", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
NULL, NULL,
gst_marshal_VOID__OBJECT_POINTER,G_TYPE_NONE,2,
G_TYPE_OBJECT,G_TYPE_POINTER);
}
static void
@ -641,10 +644,10 @@ gst_signal_object_init (GstSignalObject *object)
guint
gst_class_signal_connect (GstObjectClass *klass,
const gchar *name,
GtkSignalFunc func,
gpointer func,
gpointer func_data)
{
return gtk_signal_connect (klass->signal_object, name, func, func_data);
return g_signal_connectc (klass->signal_object, name, func, func_data, FALSE);
}
/**
@ -662,7 +665,7 @@ gst_class_signal_emit_by_name (GstObject *object,
{
GstObjectClass *oclass;
oclass = GST_OBJECT_CLASS (GTK_OBJECT (object)->klass);
oclass = (GstObjectClass *)G_OBJECT_GET_CLASS(object);
gtk_signal_emit_by_name (oclass->signal_object, name, object, self);
g_signal_emit_by_name (oclass->signal_object, name, object, self);
}

View file

@ -24,10 +24,12 @@
#ifndef __GST_OBJECT_H__
#define __GST_OBJECT_H__
#include <gtk/gtk.h>
#include <glib-object.h>
#include <gst/gsttrace.h>
#include <parser.h>
#include <gst/gstmarshal.h>
#include <gst/gsttypes.h>
#ifdef HAVE_CONFIG_H
@ -49,13 +51,13 @@ extern "C" {
#define GST_TYPE_OBJECT \
(gst_object_get_type())
#define GST_OBJECT(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_OBJECT,GstObject))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OBJECT,GstObject))
#define GST_OBJECT_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_OBJECT,GstObjectClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OBJECT,GstObjectClass))
#define GST_IS_OBJECT(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_OBJECT))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OBJECT))
#define GST_IS_OBJECT_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_OBJECT))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OBJECT))
//typedef struct _GstObject GstObject;
//typedef struct _GstObjectClass GstObjectClass;
@ -69,7 +71,7 @@ typedef enum
} GstObjectFlags;
struct _GstObject {
GtkObject object;
GObject object;
gchar *name;
/* have to have a refcount for the object */
@ -89,10 +91,10 @@ struct _GstObject {
};
struct _GstObjectClass {
GtkObjectClass parent_class;
GObjectClass parent_class;
gchar *path_string_separator;
GtkObject *signal_object;
GObject *signal_object;
/* signals */
void (*parent_set) (GstObject *object, GstObject *parent);
@ -123,8 +125,8 @@ struct _GstObjectClass {
#define GST_GET_LOCK(obj) (GST_OBJECT(obj)->lock)
/* normal GtkObject stuff */
GtkType gst_object_get_type (void);
/* normal GObject stuff */
GType gst_object_get_type (void);
GstObject* gst_object_new (void);
/* name routines */
@ -153,7 +155,7 @@ gchar * gst_object_get_path_string (GstObject *object);
guint gst_class_signal_connect (GstObjectClass *klass,
const gchar *name,
GtkSignalFunc func,
gpointer func,
gpointer func_data);
void gst_class_signal_emit_by_name (GstObject *object,

View file

@ -38,22 +38,23 @@ static xmlNodePtr gst_pad_save_thyself (GstObject *object, xmlNodePtr parent);
static GstObject *pad_parent_class = NULL;
GtkType
GType
gst_pad_get_type(void) {
static GtkType pad_type = 0;
static GType pad_type = 0;
if (!pad_type) {
static const GtkTypeInfo pad_info = {
"GstPad",
sizeof(GstPad),
static const GTypeInfo pad_info = {
sizeof(GstPadClass),
(GtkClassInitFunc)gst_pad_class_init,
(GtkObjectInitFunc)gst_pad_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_pad_class_init,
NULL,
NULL,
sizeof(GstPad),
32,
(GInstanceInitFunc)gst_pad_init,
};
pad_type = gtk_type_unique(GST_TYPE_OBJECT,&pad_info);
pad_type = g_type_register_static(GST_TYPE_OBJECT, "GstPad", &pad_info, 0);
}
return pad_type;
}
@ -61,7 +62,7 @@ gst_pad_get_type(void) {
static void
gst_pad_class_init (GstPadClass *klass)
{
pad_parent_class = gtk_type_class(GST_TYPE_OBJECT);
pad_parent_class = g_type_class_ref(GST_TYPE_OBJECT);
}
static void
@ -92,36 +93,37 @@ enum {
/* FILL ME */
};
static void gst_real_pad_class_init (GstRealPadClass *klass);
static void gst_real_pad_init (GstRealPad *pad);
static void gst_real_pad_class_init (GstRealPadClass *klass);
static void gst_real_pad_init (GstRealPad *pad);
static void gst_real_pad_set_arg (GtkObject *object,GtkArg *arg,guint id);
static void gst_real_pad_get_arg (GtkObject *object,GtkArg *arg,guint id);
static void gst_real_pad_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_real_pad_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static void gst_real_pad_destroy (GtkObject *object);
static void gst_real_pad_destroy (GObject *object);
static void gst_pad_push_func (GstPad *pad, GstBuffer *buf);
static void gst_pad_push_func (GstPad *pad, GstBuffer *buf);
static GstPad *real_pad_parent_class = NULL;
static guint gst_real_pad_signals[REAL_LAST_SIGNAL] = { 0 };
GtkType
GType
gst_real_pad_get_type(void) {
static GtkType pad_type = 0;
static GType pad_type = 0;
if (!pad_type) {
static const GtkTypeInfo pad_info = {
"GstRealPad",
sizeof(GstRealPad),
static const GTypeInfo pad_info = {
sizeof(GstRealPadClass),
(GtkClassInitFunc)gst_real_pad_class_init,
(GtkObjectInitFunc)gst_real_pad_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_real_pad_class_init,
NULL,
NULL,
sizeof(GstRealPad),
32,
(GInstanceInitFunc)gst_real_pad_init,
};
pad_type = gtk_type_unique(GST_TYPE_PAD,&pad_info);
pad_type = g_type_register_static(GST_TYPE_PAD, "GstRealPad", &pad_info, 0);
}
return pad_type;
}
@ -129,47 +131,50 @@ gst_real_pad_get_type(void) {
static void
gst_real_pad_class_init (GstRealPadClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstobject_class = (GstObjectClass*)klass;
real_pad_parent_class = gtk_type_class(GST_TYPE_PAD);
real_pad_parent_class = g_type_class_ref(GST_TYPE_PAD);
gst_real_pad_signals[REAL_SET_ACTIVE] =
gtk_signal_new ("set_active", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstRealPadClass, set_active),
gtk_marshal_NONE__BOOL, GTK_TYPE_NONE, 1,
GTK_TYPE_BOOL);
g_signal_newc ("set_active", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRealPadClass, set_active), NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1,
G_TYPE_BOOLEAN);
gst_real_pad_signals[REAL_CAPS_CHANGED] =
gtk_signal_new ("caps_changed", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstRealPadClass, caps_changed),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
g_signal_newc ("caps_changed", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRealPadClass, caps_changed), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER);
gst_real_pad_signals[REAL_CAPS_NEGO_FAILED] =
gtk_signal_new ("caps_nego_failed", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstRealPadClass, caps_nego_failed),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
g_signal_newc ("caps_nego_failed", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRealPadClass, caps_nego_failed), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER);
gst_real_pad_signals[REAL_CONNECTED] =
gtk_signal_new ("connected", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstRealPadClass, connected),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
g_signal_newc ("connected", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRealPadClass, connected), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER);
gst_real_pad_signals[REAL_DISCONNECTED] =
gtk_signal_new ("disconnected", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstRealPadClass, disconnected),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
gtk_object_class_add_signals (gtkobject_class, gst_real_pad_signals, REAL_LAST_SIGNAL);
g_signal_newc ("disconnected", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstRealPadClass, disconnected), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER);
gtk_object_add_arg_type ("GstRealPad::active", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, REAL_ARG_ACTIVE);
// gtk_object_add_arg_type ("GstRealPad::active", G_TYPE_BOOLEAN,
// GTK_ARG_READWRITE, REAL_ARG_ACTIVE);
g_object_class_install_property (G_OBJECT_CLASS(klass), REAL_ARG_ACTIVE,
g_param_spec_boolean("active","Active","Whether the pad is active.",
TRUE,G_PARAM_READWRITE));
gtkobject_class->destroy = GST_DEBUG_FUNCPTR(gst_real_pad_destroy);
gtkobject_class->set_arg = GST_DEBUG_FUNCPTR(gst_real_pad_set_arg);
gtkobject_class->get_arg = GST_DEBUG_FUNCPTR(gst_real_pad_get_arg);
// FIXME!
// gobject_class->destroy = GST_DEBUG_FUNCPTR(gst_real_pad_destroy);
gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_real_pad_set_property);
gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_real_pad_get_property);
gstobject_class->save_thyself = GST_DEBUG_FUNCPTR(gst_pad_save_thyself);
gstobject_class->path_string_separator = ".";
@ -197,20 +202,20 @@ gst_real_pad_init (GstRealPad *pad)
}
static void
gst_real_pad_set_arg (GtkObject *object, GtkArg *arg, guint id)
gst_real_pad_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
g_return_if_fail(GST_IS_PAD(object));
switch (id) {
switch (prop_id) {
case REAL_ARG_ACTIVE:
if (GTK_VALUE_BOOL(*arg)) {
gst_info("gstpad: activating pad\n");
if (g_value_get_boolean(value)) {
GST_DEBUG(GST_CAT_PADS,"activating pad %s:%s\n",GST_DEBUG_PAD_NAME(object));
GST_FLAG_UNSET(object,GST_PAD_DISABLED);
} else {
gst_info("gstpad: de-activating pad\n");
GST_DEBUG(GST_CAT_PADS,"de-activating pad %s:%s\n",GST_DEBUG_PAD_NAME(object));
GST_FLAG_SET(object,GST_PAD_DISABLED);
}
gtk_signal_emit(GTK_OBJECT(object), gst_real_pad_signals[REAL_SET_ACTIVE],
g_signal_emit(G_OBJECT(object), gst_real_pad_signals[REAL_SET_ACTIVE], 0,
! GST_FLAG_IS_SET(object,GST_PAD_DISABLED));
break;
default:
@ -219,14 +224,14 @@ gst_real_pad_set_arg (GtkObject *object, GtkArg *arg, guint id)
}
static void
gst_real_pad_get_arg (GtkObject *object, GtkArg *arg, guint id)
gst_real_pad_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
/* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_PAD (object));
switch (id) {
switch (prop_id) {
case REAL_ARG_ACTIVE:
GTK_VALUE_BOOL (*arg) = ! GST_FLAG_IS_SET (object, GST_PAD_DISABLED);
g_value_set_boolean(value, ! GST_FLAG_IS_SET (object, GST_PAD_DISABLED) );
break;
default:
break;
@ -252,7 +257,7 @@ gst_pad_new (gchar *name,
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (direction != GST_PAD_UNKNOWN, NULL);
pad = gtk_type_new (gst_real_pad_get_type ());
pad = g_object_new (gst_real_pad_get_type (), NULL);
gst_object_set_name (GST_OBJECT (pad), name);
GST_RPAD_DIRECTION(pad) = direction;
@ -581,8 +586,8 @@ gst_pad_disconnect (GstPad *srcpad,
GST_RPAD_PEER(realsink) = NULL;
/* fire off a signal to each of the pads telling them that they've been disconnected */
gtk_signal_emit(GTK_OBJECT(realsrc), gst_real_pad_signals[REAL_DISCONNECTED], realsink);
gtk_signal_emit(GTK_OBJECT(realsink), gst_real_pad_signals[REAL_DISCONNECTED], realsrc);
g_signal_emit(G_OBJECT(realsrc), gst_real_pad_signals[REAL_DISCONNECTED], 0, realsink);
g_signal_emit(G_OBJECT(realsink), gst_real_pad_signals[REAL_DISCONNECTED], 0, realsrc);
// now tell the scheduler
if (realsrc->sched)
@ -668,8 +673,8 @@ gst_pad_connect (GstPad *srcpad,
}
/* fire off a signal to each of the pads telling them that they've been connected */
gtk_signal_emit(GTK_OBJECT(realsrc), gst_real_pad_signals[REAL_CONNECTED], realsink);
gtk_signal_emit(GTK_OBJECT(realsink), gst_real_pad_signals[REAL_CONNECTED], realsrc);
g_signal_emit(G_OBJECT(realsrc), gst_real_pad_signals[REAL_CONNECTED], 0, realsink);
g_signal_emit(G_OBJECT(realsink), gst_real_pad_signals[REAL_CONNECTED], 0, realsrc);
// now tell the scheduler(s)
if (realsrc->sched)
@ -697,7 +702,7 @@ gst_pad_set_parent (GstPad *pad,
g_return_if_fail (GST_IS_PAD (pad));
g_return_if_fail (GST_PAD_PARENT (pad) == NULL);
g_return_if_fail (parent != NULL);
g_return_if_fail (GTK_IS_OBJECT (parent));
g_return_if_fail (GST_IS_OBJECT (parent));
g_return_if_fail ((gpointer)pad != (gpointer)parent);
gst_object_set_parent (GST_OBJECT (pad), parent);
@ -1043,7 +1048,7 @@ gst_pad_get_bufferpool (GstPad *pad)
}
static void
gst_real_pad_destroy (GtkObject *object)
gst_real_pad_destroy (GObject *object)
{
GstPad *pad = GST_PAD (object);
@ -1076,8 +1081,9 @@ gst_real_pad_destroy (GtkObject *object)
g_list_free (GST_REAL_PAD(pad)->ghostpads);
}
if (GTK_OBJECT_CLASS (real_pad_parent_class)->destroy)
GTK_OBJECT_CLASS (real_pad_parent_class)->destroy (object);
// FIXME !!
// if (G_OBJECT_CLASS (real_pad_parent_class)->destroy)
// G_OBJECT_CLASS (real_pad_parent_class)->destroy (object);
}
@ -1292,10 +1298,10 @@ gst_pad_renegotiate (GstPad *pad)
if (!result) {
GST_DEBUG (GST_CAT_NEGOTIATION, "firing caps_nego_failed signal on %s:%s and %s:%s to give it a chance to succeed\n",
GST_DEBUG_PAD_NAME(currentpad),GST_DEBUG_PAD_NAME(otherpad));
gtk_signal_emit (GTK_OBJECT(currentpad),
gst_real_pad_signals[REAL_CAPS_NEGO_FAILED],&result);
gtk_signal_emit (GTK_OBJECT(otherpad),
gst_real_pad_signals[REAL_CAPS_NEGO_FAILED],&result);
g_signal_emit (G_OBJECT(currentpad),
gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, &result);
g_signal_emit (G_OBJECT(otherpad),
gst_real_pad_signals[REAL_CAPS_NEGO_FAILED], 0, &result);
if (result)
GST_DEBUG (GST_CAT_NEGOTIATION, "caps_nego_failed handler claims success at renego, believing\n");
}
@ -1317,10 +1323,10 @@ gst_pad_renegotiate (GstPad *pad)
GST_DEBUG (GST_CAT_NEGOTIATION, "firing caps_changed signal on %s:%s and %s:%s\n",
GST_DEBUG_PAD_NAME(currentpad),GST_DEBUG_PAD_NAME(otherpad));
gtk_signal_emit (GTK_OBJECT(currentpad),
gst_real_pad_signals[REAL_CAPS_CHANGED],GST_PAD_CAPS(currentpad));
gtk_signal_emit (GTK_OBJECT(otherpad),
gst_real_pad_signals[REAL_CAPS_CHANGED],GST_PAD_CAPS(otherpad));
g_signal_emit (G_OBJECT(currentpad),
gst_real_pad_signals[REAL_CAPS_CHANGED], 0, GST_PAD_CAPS(currentpad));
g_signal_emit (G_OBJECT(otherpad),
gst_real_pad_signals[REAL_CAPS_CHANGED], 0, GST_PAD_CAPS(otherpad));
}
return result;
@ -1555,23 +1561,24 @@ enum {
static GstObject *padtemplate_parent_class = NULL;
static guint gst_padtemplate_signals[TEMPL_LAST_SIGNAL] = { 0 };
GtkType
GType
gst_padtemplate_get_type (void)
{
static GtkType padtemplate_type = 0;
static GType padtemplate_type = 0;
if (!padtemplate_type) {
static const GtkTypeInfo padtemplate_info = {
"GstPadTemplate",
sizeof(GstPadTemplate),
static const GTypeInfo padtemplate_info = {
sizeof(GstPadTemplateClass),
(GtkClassInitFunc)gst_padtemplate_class_init,
(GtkObjectInitFunc)gst_padtemplate_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_padtemplate_class_init,
NULL,
NULL,
sizeof(GstPadTemplate),
32,
(GInstanceInitFunc)gst_padtemplate_init,
};
padtemplate_type = gtk_type_unique(GST_TYPE_OBJECT,&padtemplate_info);
padtemplate_type = g_type_register_static(GST_TYPE_OBJECT, "GstPadTemplate", &padtemplate_info, 0);
}
return padtemplate_type;
}
@ -1579,21 +1586,20 @@ gst_padtemplate_get_type (void)
static void
gst_padtemplate_class_init (GstPadTemplateClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstobject_class = (GstObjectClass*)klass;
padtemplate_parent_class = gtk_type_class(GST_TYPE_OBJECT);
padtemplate_parent_class = g_type_class_ref(GST_TYPE_OBJECT);
gst_padtemplate_signals[TEMPL_PAD_CREATED] =
gtk_signal_new ("pad_created", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstPadTemplateClass, pad_created),
gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1,
g_signal_newc ("pad_created", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstPadTemplateClass, pad_created), NULL, NULL,
g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
GST_TYPE_PAD);
gtk_object_class_add_signals (gtkobject_class, gst_padtemplate_signals, TEMPL_LAST_SIGNAL);
gstobject_class->path_string_separator = "*";
}
@ -1626,7 +1632,7 @@ gst_padtemplate_new (gchar *name_template,
g_return_val_if_fail (name_template != NULL, NULL);
new = gtk_type_new (gst_padtemplate_get_type ());
new = g_object_new(gst_padtemplate_get_type () ,NULL);
GST_PADTEMPLATE_NAME_TEMPLATE (new) = name_template;
GST_PADTEMPLATE_DIRECTION (new) = direction;
@ -1872,22 +1878,23 @@ static void gst_ghost_pad_init (GstGhostPad *pad);
static GstPad *ghost_pad_parent_class = NULL;
//static guint gst_ghost_pad_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_ghost_pad_get_type(void) {
static GtkType pad_type = 0;
static GType pad_type = 0;
if (!pad_type) {
static const GtkTypeInfo pad_info = {
"GstGhostPad",
sizeof(GstGhostPad),
static const GTypeInfo pad_info = {
sizeof(GstGhostPadClass),
(GtkClassInitFunc)gst_ghost_pad_class_init,
(GtkObjectInitFunc)gst_ghost_pad_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_ghost_pad_class_init,
NULL,
NULL,
sizeof(GstGhostPad),
8,
(GInstanceInitFunc)gst_ghost_pad_init,
};
pad_type = gtk_type_unique(GST_TYPE_PAD,&pad_info);
pad_type = g_type_register_static(GST_TYPE_PAD, "GstGhostPad", &pad_info, 0);
}
return pad_type;
}
@ -1895,11 +1902,11 @@ gst_ghost_pad_get_type(void) {
static void
gst_ghost_pad_class_init (GstGhostPadClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
ghost_pad_parent_class = gtk_type_class(GST_TYPE_PAD);
ghost_pad_parent_class = g_type_class_ref(GST_TYPE_PAD);
}
static void
@ -1926,7 +1933,7 @@ gst_ghost_pad_new (gchar *name,
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD(pad), NULL);
ghostpad = gtk_type_new (gst_ghost_pad_get_type ());
ghostpad = g_object_new(gst_ghost_pad_get_type () ,NULL);
gst_pad_set_name (GST_PAD (ghostpad), name);
GST_GPAD_REALPAD(ghostpad) = GST_PAD_REALIZE(pad);
GST_PAD_PADTEMPLATE(ghostpad) = GST_PAD_PADTEMPLATE(pad);

View file

@ -45,22 +45,22 @@ extern "C" {
#define GST_TYPE_PAD (gst_pad_get_type ())
#define GST_PAD(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_PAD,GstPad))
#define GST_PAD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD,GstPadClass))
#define GST_IS_PAD(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_PAD))
#define GST_IS_PAD_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD))
#define GST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PAD,GstPad))
#define GST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PAD,GstPadClass))
#define GST_IS_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PAD))
#define GST_IS_PAD_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PAD))
#define GST_TYPE_REAL_PAD (gst_real_pad_get_type ())
#define GST_REAL_PAD(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_REAL_PAD,GstRealPad))
#define GST_REAL_PAD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_REAL_PAD,GstRealPadClass))
#define GST_IS_REAL_PAD(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_REAL_PAD))
#define GST_IS_REAL_PAD_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_REAL_PAD))
#define GST_REAL_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_REAL_PAD,GstRealPad))
#define GST_REAL_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_REAL_PAD,GstRealPadClass))
#define GST_IS_REAL_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_REAL_PAD))
#define GST_IS_REAL_PAD_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_REAL_PAD))
#define GST_TYPE_GHOST_PAD (gst_ghost_pad_get_type ())
#define GST_GHOST_PAD(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_GHOST_PAD,GstGhostPad))
#define GST_GHOST_PAD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD,GstGhostPadClass))
#define GST_IS_GHOST_PAD(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_GHOST_PAD))
#define GST_IS_GHOST_PAD_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD))
#define GST_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GHOST_PAD,GstGhostPad))
#define GST_GHOST_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GHOST_PAD,GstGhostPadClass))
#define GST_IS_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD))
#define GST_IS_GHOST_PAD_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GHOST_PAD))
//typedef struct _GstPad GstPad;
@ -74,7 +74,7 @@ typedef struct _GstGhostPadClass GstGhostPadClass;
typedef enum {
GST_REGION_NONE,
GST_REGION_VOID,
GST_REGION_OFFSET_LEN,
GST_REGION_TIME_LEN,
} GstRegionType;
@ -230,10 +230,10 @@ struct _GstGhostPadClass {
/***** PadTemplate *****/
#define GST_TYPE_PADTEMPLATE (gst_padtemplate_get_type ())
#define GST_PADTEMPLATE(obj) (GTK_CHECK_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPadTemplate))
#define GST_PADTEMPLATE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadTemplateClass))
#define GST_IS_PADTEMPLATE(obj) (GTK_CHECK_TYPE ((obj), GST_TYPE_PADTEMPLATE))
#define GST_IS_PADTEMPLATE_CLASS(obj) (GTK_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE))
#define GST_PADTEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PADTEMPLATE,GstPadTemplate))
#define GST_PADTEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PADTEMPLATE,GstPadTemplateClass))
#define GST_IS_PADTEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PADTEMPLATE))
#define GST_IS_PADTEMPLATE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PADTEMPLATE))
typedef enum {
GST_PAD_ALWAYS,
@ -288,9 +288,9 @@ name (void) \
#define GST_PADTEMPLATE_GET(fact) (fact)()
GtkType gst_pad_get_type (void);
GtkType gst_real_pad_get_type (void);
GtkType gst_ghost_pad_get_type (void);
GType gst_pad_get_type (void);
GType gst_real_pad_get_type (void);
GType gst_ghost_pad_get_type (void);
GstPad* gst_pad_new (gchar *name, GstPadDirection direction);
#define gst_pad_destroy(pad) gst_object_destroy (GST_OBJECT (pad))
@ -378,7 +378,7 @@ GstPad * gst_ghost_pad_new (gchar *name,GstPad *pad);
/* templates and factories */
GtkType gst_padtemplate_get_type (void);
GType gst_padtemplate_get_type (void);
GstPadTemplate* gst_padtemplate_new (gchar *name_template,
GstPadDirection direction, GstPadPresence presence,

View file

@ -201,8 +201,8 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n");
argval = pos+1;
DEBUG("attempting to set argument '%s' to '%s' on element '%s'\n",
argname,argval,GST_ELEMENT_NAME(previous));
//gtk_object_set(GTK_OBJECT(previous),argname,argval,NULL);
gst_util_set_object_arg (GTK_OBJECT(previous), argname, argval);
//gtk_object_set(G_OBJECT(previous),argname,argval,NULL);
gst_util_set_object_arg (G_OBJECT(previous), argname, argval);
g_free(argname);
// element or argument, or beginning of bin or thread
@ -278,8 +278,8 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n");
GST_DEBUG(0,"SETTING UP dynamic connection %s:%s and %s:%s\n",gst_element_get_name (previous),
srcpadname,GST_DEBUG_PAD_NAME(sinkpad));
gtk_signal_connect (GTK_OBJECT (previous), "new_pad", dynamic_connect, connect);
gtk_signal_connect (GTK_OBJECT (previous), "new_ghost_pad", dynamic_connect, connect);
gtk_signal_connect (G_OBJECT (previous), "new_pad", dynamic_connect, connect);
gtk_signal_connect (G_OBJECT (previous), "new_ghost_pad", dynamic_connect, connect);
}
else {
GST_DEBUG(0,"CONNECTING %s:%s and %s:%s\n",GST_DEBUG_PAD_NAME(srcpad),GST_DEBUG_PAD_NAME(sinkpad));
@ -294,7 +294,7 @@ if (GST_IS_GHOST_PAD(srcpad)) GST_DEBUG(0,"it's a ghost pad\n");
// thomas: if we're the first element, connect eos signal
if (elementcount == 1)
{
gtk_signal_connect (GTK_OBJECT (element), "eos",
gtk_signal_connect (G_OBJECT (element), "eos",
GTK_SIGNAL_FUNC (have_eos), NULL);
}

View file

@ -60,22 +60,23 @@ static GstElementStateReturn gst_pipeline_change_state (GstElement *element);
static GstBinClass *parent_class = NULL;
//static guint gst_pipeline_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_pipeline_get_type (void) {
static GtkType pipeline_type = 0;
static GType pipeline_type = 0;
if (!pipeline_type) {
static const GtkTypeInfo pipeline_info = {
"GstPipeline",
sizeof(GstPipeline),
static const GTypeInfo pipeline_info = {
sizeof(GstPipelineClass),
(GtkClassInitFunc)gst_pipeline_class_init,
(GtkObjectInitFunc)gst_pipeline_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_pipeline_class_init,
NULL,
NULL,
sizeof(GstPipeline),
0,
(GInstanceInitFunc)gst_pipeline_init,
};
pipeline_type = gtk_type_unique (gst_bin_get_type (), &pipeline_info);
pipeline_type = g_type_register_static (GST_TYPE_BIN, "GstPipeline", &pipeline_info, 0);
}
return pipeline_type;
}
@ -87,7 +88,7 @@ gst_pipeline_class_init (GstPipelineClass *klass)
gstelement_class = (GstElementClass*)klass;
parent_class = gtk_type_class(gst_bin_get_type());
parent_class = g_type_class_ref(gst_bin_get_type());
gstelement_class->change_state = gst_pipeline_change_state;
}

View file

@ -37,13 +37,13 @@ extern GstElementDetails gst_pipeline_details;
#define GST_TYPE_PIPELINE \
(gst_pipeline_get_type())
#define GST_PIPELINE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_PIPELINE,GstPipeline))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PIPELINE,GstPipeline))
#define GST_PIPELINE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_PIPELINE,GstPipelineClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PIPELINE,GstPipelineClass))
#define GST_IS_PIPELINE(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_PIPELINE))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PIPELINE))
#define GST_IS_PIPELINE_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPELINE))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PIPELINE))
typedef struct _GstPipeline GstPipeline;
typedef struct _GstPipelineClass GstPipelineClass;
@ -56,7 +56,7 @@ struct _GstPipelineClass {
GstBinClass parent_class;
};
GtkType gst_pipeline_get_type (void);
GType gst_pipeline_get_type (void);
GstElement* gst_pipeline_new (const guchar *name);
#define gst_pipeline_destroy(pipeline) gst_object_destroy(GST_OBJECT(pipeline))

View file

@ -70,8 +70,8 @@ enum {
static void gst_queue_class_init (GstQueueClass *klass);
static void gst_queue_init (GstQueue *queue);
static void gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static gboolean gst_queue_handle_eos (GstPad *pad);
static GstPadNegotiateReturn gst_queue_handle_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data);
@ -85,17 +85,17 @@ static void gst_queue_flush (GstQueue *queue);
static GstElementStateReturn gst_queue_change_state (GstElement *element);
static GtkType
static GType
queue_leaky_get_type(void) {
static GtkType queue_leaky_type = 0;
static GtkEnumValue queue_leaky[] = {
static GType queue_leaky_type = 0;
static GEnumValue queue_leaky[] = {
{ GST_QUEUE_NO_LEAK, "0", "Not Leaky" },
{ GST_QUEUE_LEAK_UPSTREAM, "1", "Leaky on Upstream" },
{ GST_QUEUE_LEAK_DOWNSTREAM, "2", "Leaky on Downstream" },
{ 0, NULL, NULL },
};
if (!queue_leaky_type) {
queue_leaky_type = gtk_type_register_enum("GstQueueLeaky", queue_leaky);
queue_leaky_type = g_enum_register_static("GstQueueLeaky", queue_leaky);
}
return queue_leaky_type;
}
@ -105,22 +105,23 @@ queue_leaky_get_type(void) {
static GstElementClass *parent_class = NULL;
//static guint gst_queue_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_queue_get_type(void) {
static GtkType queue_type = 0;
static GType queue_type = 0;
if (!queue_type) {
static const GtkTypeInfo queue_info = {
"GstQueue",
sizeof(GstQueue),
static const GTypeInfo queue_info = {
sizeof(GstQueueClass),
(GtkClassInitFunc)gst_queue_class_init,
(GtkObjectInitFunc)gst_queue_init,
(GtkArgSetFunc)gst_queue_set_arg,
(GtkArgGetFunc)gst_queue_get_arg,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_queue_class_init,
NULL,
NULL,
sizeof(GstQueue),
4,
(GInstanceInitFunc)gst_queue_init,
};
queue_type = gtk_type_unique (GST_TYPE_ELEMENT, &queue_info);
queue_type = g_type_register_static (GST_TYPE_ELEMENT, "GstQueue", &queue_info, 0);
}
return queue_type;
}
@ -128,23 +129,34 @@ gst_queue_get_type(void) {
static void
gst_queue_class_init (GstQueueClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstelement_class = (GstElementClass*)klass;
parent_class = gtk_type_class (GST_TYPE_ELEMENT);
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
/*
gtk_object_add_arg_type ("GstQueue::leaky", GST_TYPE_QUEUE_LEAKY,
GTK_ARG_READWRITE, ARG_LEAKY);
gtk_object_add_arg_type ("GstQueue::level", GTK_TYPE_INT,
gtk_object_add_arg_type ("GstQueue::level", G_TYPE_INT,
GTK_ARG_READABLE, ARG_LEVEL);
gtk_object_add_arg_type ("GstQueue::max_level", GTK_TYPE_INT,
gtk_object_add_arg_type ("GstQueue::max_level", G_TYPE_INT,
GTK_ARG_READWRITE, ARG_MAX_LEVEL);
*/
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEAKY,
g_param_spec_enum("leaky","Leaky","Where the queue leaks, if at all.",
GST_TYPE_QUEUE_LEAKY,GST_QUEUE_NO_LEAK,G_PARAM_READWRITE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEVEL,
g_param_spec_int("level","Level","How many buffers are in the queue.",
0,G_MAXINT,0,G_PARAM_READABLE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MAX_LEVEL,
g_param_spec_int("max_level","Maximum Level","How many buffers the queue holds.",
0,G_MAXINT,100,G_PARAM_READWRITE));
gtkobject_class->set_arg = gst_queue_set_arg;
gtkobject_class->get_arg = gst_queue_get_arg;
gobject_class->set_property = gst_queue_set_property;
gobject_class->get_property = gst_queue_get_property;
gstelement_class->change_state = gst_queue_change_state;
}
@ -306,16 +318,16 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf)
while (queue->level_buffers >= queue->size_buffers) {
// if there's a pending state change for this queue or its manager, switch
// back to iterator so bottom half of state change executes
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->sinkpad))))) !=
GST_STATE_NONE_PENDING)
GST_STATE_VOID_PENDING)
{
GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
GST_UNLOCK(queue);
cothread_switch(cothread_current_main());
}
@ -376,16 +388,16 @@ gst_queue_get (GstPad *pad)
// if there's a pending state change for this queue or its manager, switch
// back to iterator so bottom half of state change executes
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->srcpad))))) !=
GST_STATE_NONE_PENDING)
GST_STATE_VOID_PENDING)
{
GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
GST_UNLOCK(queue);
cothread_switch(cothread_current_main());
}
@ -435,11 +447,12 @@ gst_queue_change_state (GstElement *element)
gst_queue_flush (queue);
}
/* if we haven't failed already, give the parent class a chance to ;-) */
/* FIXME FIXME FIXME FIXME FIXME!!!!
// if we haven't failed already, give the parent class a chance to ;-)
if (GST_ELEMENT_CLASS (parent_class)->change_state)
{
gboolean valid_handler = FALSE;
guint state_change_id = gtk_signal_lookup("state_change", GTK_OBJECT_TYPE(element));
guint state_change_id = gtk_signal_lookup("state_change", G_OBJECT_TYPE(element));
// determine whether we need to block the parent (element) class'
// STATE_CHANGE signal so we can UNLOCK before returning. we block
@ -450,22 +463,23 @@ gst_queue_change_state (GstElement *element)
// if element change_state() emits other signals, they need to be blocked
// as well.
if (state_change_id &&
gtk_signal_handler_pending(GTK_OBJECT(element), state_change_id, FALSE))
gtk_signal_handler_pending(G_OBJECT(element), state_change_id, FALSE))
valid_handler = TRUE;
if (valid_handler)
gtk_signal_handler_block(GTK_OBJECT(element), state_change_id);
gtk_signal_handler_block(G_OBJECT(element), state_change_id);
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
if (valid_handler)
gtk_signal_handler_unblock(GTK_OBJECT(element), state_change_id);
gtk_signal_handler_unblock(G_OBJECT(element), state_change_id);
// UNLOCK, *then* emit signal (if there's one there)
GST_UNLOCK(queue);
if (valid_handler)
gtk_signal_emit(GTK_OBJECT (element), state_change_id, GST_STATE(element));
gtk_signal_emit(G_OBJECT (element), state_change_id, GST_STATE(element));
}
else
*/
{
ret = GST_STATE_SUCCESS;
GST_UNLOCK(queue);
@ -476,7 +490,7 @@ gst_queue_change_state (GstElement *element)
static void
gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GstQueue *queue;
@ -485,20 +499,21 @@ gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
queue = GST_QUEUE (object);
switch(id) {
switch (prop_id) {
case ARG_LEAKY:
queue->leaky = GTK_VALUE_INT (*arg);
queue->leaky = g_value_get_int(value);
break;
case ARG_MAX_LEVEL:
queue->size_buffers = GTK_VALUE_INT (*arg);
queue->size_buffers = g_value_get_int(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GstQueue *queue;
@ -507,18 +522,18 @@ gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
queue = GST_QUEUE (object);
switch (id) {
switch (prop_id) {
case ARG_LEAKY:
GTK_VALUE_INT (*arg) = queue->leaky;
g_value_set_int(value, queue->leaky);
break;
case ARG_LEVEL:
GTK_VALUE_INT (*arg) = queue->level_buffers;
g_value_set_int(value, queue->level_buffers);
break;
case ARG_MAX_LEVEL:
GTK_VALUE_INT (*arg) = queue->size_buffers;
g_value_set_int(value, queue->size_buffers);
break;
default:
arg->type = GTK_TYPE_INVALID;
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}

View file

@ -39,13 +39,13 @@ GstElementDetails gst_queue_details;
#define GST_TYPE_QUEUE \
(gst_queue_get_type())
#define GST_QUEUE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_QUEUE,GstQueue))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QUEUE,GstQueue))
#define GST_QUEUE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
#define GST_IS_QUEUE(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_QUEUE))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QUEUE))
#define GST_IS_QUEUE_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
enum {
GST_QUEUE_NO_LEAK = 0,
@ -90,7 +90,7 @@ struct _GstQueueClass {
void (*high_watermark) (GstQueue *queue, gint level);
};
GtkType gst_queue_get_type (void);
GType gst_queue_get_type (void);
#ifdef __cplusplus
}

View file

@ -100,13 +100,13 @@ gst_schedule_src_wrapper (int argc,char *argv[])
pads = g_list_next(pads);
if (GST_RPAD_DIRECTION(realpad) == GST_PAD_SRC) {
GST_DEBUG (GST_CAT_DATAFLOW,"calling _getfunc for %s:%s\n",GST_DEBUG_PAD_NAME(realpad));
if (realpad->regiontype != GST_REGION_NONE) {
if (realpad->regiontype != GST_REGION_VOID) {
g_return_val_if_fail (GST_RPAD_GETREGIONFUNC(realpad) != NULL, 0);
// if (GST_RPAD_GETREGIONFUNC(realpad) == NULL)
// fprintf(stderr,"error, no getregionfunc in \"%s\"\n", name);
// else
buf = (GST_RPAD_GETREGIONFUNC(realpad))((GstPad*)realpad,realpad->regiontype,realpad->offset,realpad->len);
realpad->regiontype = GST_REGION_NONE;
realpad->regiontype = GST_REGION_VOID;
} else {
g_return_val_if_fail (GST_RPAD_GETFUNC(realpad) != NULL, 0);
// if (GST_RPAD_GETFUNC(realpad) == NULL)
@ -429,7 +429,7 @@ void gst_bin_schedule_func(GstBin *bin) {
GST_DEBUG (GST_CAT_SCHEDULING,"adding '%s' to chain\n",GST_ELEMENT_NAME(element));
chain->elements = g_list_prepend (chain->elements, element);
chain->num_elements++;
gtk_signal_connect (GTK_OBJECT (element), "eos", gst_scheduler_handle_eos, chain);
gtk_signal_connect (G_OBJECT (element), "eos", gst_scheduler_handle_eos, chain);
// set the cothreads flag as appropriate
if (GST_FLAG_IS_SET (element, GST_ELEMENT_USE_COTHREAD))
chain->need_cothreads = TRUE;
@ -479,7 +479,7 @@ void gst_bin_schedule_func(GstBin *bin) {
if ((GST_RPAD_DIRECTION(pad) == GST_PAD_SINK) &&
(GST_FLAG_IS_SET (peerparent, GST_ELEMENT_DECOUPLED))) {
chain->entries = g_list_prepend (chain->entries, peerparent);
gtk_signal_connect (GTK_OBJECT (peerparent), "eos", gst_scheduler_handle_eos, chain);
gtk_signal_connect (G_OBJECT (peerparent), "eos", gst_scheduler_handle_eos, chain);
GST_DEBUG (GST_CAT_SCHEDULING,"added '%s' as DECOUPLED entry into the chain\n",GST_ELEMENT_NAME(peerparent));
}
} else
@ -798,21 +798,22 @@ static void gst_schedule_init (GstSchedule *schedule);
static GstObjectClass *parent_class = NULL;
GtkType gst_schedule_get_type(void) {
static GtkType schedule_type = 0;
GType gst_schedule_get_type(void) {
static GType schedule_type = 0;
if (!schedule_type) {
static const GtkTypeInfo schedule_info = {
"GstSchedule",
sizeof(GstSchedule),
static const GTypeInfo schedule_info = {
sizeof(GstScheduleClass),
(GtkClassInitFunc)gst_schedule_class_init,
(GtkObjectInitFunc)gst_schedule_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_schedule_class_init,
NULL,
NULL,
sizeof(GstSchedule),
0,
(GInstanceInitFunc)gst_schedule_init,
};
schedule_type = gtk_type_unique(GST_TYPE_OBJECT,&schedule_info);
schedule_type = g_type_register_static(GST_TYPE_OBJECT, "GstSchedule", &schedule_info, 0);
}
return schedule_type;
}
@ -820,7 +821,7 @@ GtkType gst_schedule_get_type(void) {
static void
gst_schedule_class_init (GstScheduleClass *klass)
{
parent_class = gtk_type_class(GST_TYPE_OBJECT);
parent_class = g_type_class_ref(GST_TYPE_OBJECT);
}
static void
@ -840,7 +841,7 @@ gst_schedule_init (GstSchedule *schedule)
GstSchedule*
gst_schedule_new(GstElement *parent)
{
GstSchedule *sched = GST_SCHEDULE (gtk_type_new (GST_TYPE_SCHEDULE));
GstSchedule *sched = GST_SCHEDULE (g_object_new(GST_TYPE_SCHEDULE,NULL));
sched->parent = parent;
@ -1339,7 +1340,7 @@ GST_DEBUG(GST_CAT_SCHEDULING,"there are %d elements in this chain\n",chain->num_
// if it was, return to gstthread.c::gst_thread_main_loop() to
// execute the state change.
GST_DEBUG (GST_CAT_DATAFLOW,"cothread switch ended or interrupted\n");
if (GST_STATE_PENDING(GST_SCHEDULE(sched)->parent) != GST_STATE_NONE_PENDING)
if (GST_STATE_PENDING(GST_SCHEDULE(sched)->parent) != GST_STATE_VOID_PENDING)
{
GST_DEBUG (GST_CAT_DATAFLOW,"handle pending state %d\n",
GST_STATE_PENDING(GST_SCHEDULE(sched)->parent));

View file

@ -36,13 +36,13 @@ extern "C" {
#define GST_TYPE_SCHEDULE \
(gst_schedule_get_type())
#define GST_SCHEDULE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_SCHEDULE,GstSchedule))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SCHEDULE,GstSchedule))
#define GST_SCHEDULE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_SCHEDULE,GstScheduleClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SCHEDULE,GstScheduleClass))
#define GST_IS_SCHEDULE(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_SCHEDULE))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SCHEDULE))
#define GST_IS_SCHEDULE_CLASS(klass) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_SCHEDULE))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SCHEDULE))
#define GST_SCHED_PARENT(sched) ((sched)->parent)
@ -126,7 +126,7 @@ struct _GstScheduleChain {
};
GtkType gst_schedule_get_type (void);
GType gst_schedule_get_type (void);
GstSchedule* gst_schedule_new (GstElement *parent);
void gst_schedule_add_element (GstSchedule *sched, GstElement *element);

View file

@ -61,10 +61,10 @@ enum {
static void gst_thread_class_init (GstThreadClass *klass);
static void gst_thread_init (GstThread *thread);
static void gst_thread_real_destroy (GtkObject *gtk_object);
static void gst_thread_real_destroy (GObject *gtk_object);
static void gst_thread_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_thread_get_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_thread_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_thread_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static GstElementStateReturn gst_thread_change_state (GstElement *element);
@ -78,22 +78,23 @@ static void* gst_thread_main_loop (void *arg);
static GstBinClass *parent_class = NULL;
//static guint gst_thread_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_thread_get_type(void) {
static GtkType thread_type = 0;
static GType thread_type = 0;
if (!thread_type) {
static const GtkTypeInfo thread_info = {
"GstThread",
sizeof(GstThread),
static const GTypeInfo thread_info = {
sizeof(GstThreadClass),
(GtkClassInitFunc)gst_thread_class_init,
(GtkObjectInitFunc)gst_thread_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_thread_class_init,
NULL,
NULL,
sizeof(GstThread),
4,
(GInstanceInitFunc)gst_thread_init,
};
thread_type = gtk_type_unique(GST_TYPE_BIN,&thread_info);
thread_type = g_type_register_static(GST_TYPE_BIN, "GstThread", &thread_info, 0);
}
return thread_type;
}
@ -101,22 +102,28 @@ gst_thread_get_type(void) {
static void
gst_thread_class_init (GstThreadClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstObjectClass *gstobject_class;
GstElementClass *gstelement_class;
GstBinClass *gstbin_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstobject_class = (GstObjectClass*)klass;
gstelement_class = (GstElementClass*)klass;
gstbin_class = (GstBinClass*)klass;
parent_class = gtk_type_class (GST_TYPE_BIN);
parent_class = g_type_class_ref (GST_TYPE_BIN);
gtk_object_add_arg_type ("GstThread::create_thread", GTK_TYPE_BOOL,
/*
gtk_object_add_arg_type ("GstThread::create_thread", G_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_CREATE_THREAD);
*/
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CREATE_THREAD,
g_param_spec_boolean("create_thread", "Create Thread", "Whether to create a thread.",
TRUE,G_PARAM_READWRITE));
gtkobject_class->destroy = gst_thread_real_destroy;
// FIXME!
// gobject_class->destroy = gst_thread_real_destroy;
gstobject_class->save_thyself = gst_thread_save_thyself;
gstobject_class->restore_thyself = gst_thread_restore_thyself;
@ -125,8 +132,8 @@ gst_thread_class_init (GstThreadClass *klass)
// gstbin_class->schedule = gst_thread_schedule_dummy;
gtkobject_class->set_arg = gst_thread_set_arg;
gtkobject_class->get_arg = gst_thread_get_arg;
gobject_class->set_property = gst_thread_set_property;
gobject_class->get_property = gst_thread_get_property;
}
@ -154,7 +161,7 @@ gst_thread_init (GstThread *thread)
}
static void
gst_thread_real_destroy (GtkObject *gtk_object)
gst_thread_real_destroy (GObject *gtk_object)
{
GstThread *thread = GST_THREAD (gtk_object);
@ -163,24 +170,23 @@ gst_thread_real_destroy (GtkObject *gtk_object)
g_mutex_free (thread->lock);
g_cond_free (thread->cond);
if (GTK_OBJECT_CLASS (parent_class)->destroy)
GTK_OBJECT_CLASS (parent_class)->destroy (gtk_object);
// FIXME!
// if (G_OBJECT_CLASS (parent_class)->destroy)
// G_OBJECT_CLASS (parent_class)->destroy (gtk_object);
gst_object_destroy (GST_OBJECT (GST_ELEMENT_SCHED (thread)));
gst_object_unref (GST_OBJECT (GST_ELEMENT_SCHED (thread)));
}
static void
gst_thread_set_arg (GtkObject *object,
GtkArg *arg,
guint id)
gst_thread_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
/* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_THREAD (object));
switch(id) {
switch (prop_id) {
case ARG_CREATE_THREAD:
if (GTK_VALUE_BOOL (*arg)) {
if (g_value_get_boolean(value)) {
GST_INFO (GST_CAT_THREAD,"turning ON the creation of the thread");
GST_FLAG_SET (object, GST_THREAD_CREATE);
// GST_DEBUG (GST_CAT_THREAD,"flags are 0x%08x\n", GST_FLAGS (object));
@ -191,23 +197,23 @@ gst_thread_set_arg (GtkObject *object,
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gst_thread_get_arg (GtkObject *object,
GtkArg *arg,
guint id)
gst_thread_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
/* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_THREAD (object));
switch (id) {
switch (prop_id) {
case ARG_CREATE_THREAD:
GTK_VALUE_BOOL (*arg) = GST_FLAG_IS_SET (object, GST_THREAD_CREATE);
g_value_set_boolean(value, GST_FLAG_IS_SET (object, GST_THREAD_CREATE));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
@ -464,7 +470,7 @@ gst_thread_change_state (GstElement *element)
static void gst_thread_update_state (GstThread *thread)
{
// check for state change
if (GST_STATE_PENDING(thread) != GST_STATE_NONE_PENDING) {
if (GST_STATE_PENDING(thread) != GST_STATE_VOID_PENDING) {
// punt and change state on all the children
if (GST_ELEMENT_CLASS (parent_class)->change_state)
GST_ELEMENT_CLASS (parent_class)->change_state (GST_ELEMENT(thread));

View file

@ -53,13 +53,13 @@ typedef enum {
#define GST_TYPE_THREAD \
(gst_thread_get_type())
#define GST_THREAD(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_THREAD,GstThread))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_THREAD,GstThread))
#define GST_THREAD_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_THREAD,GstThreadClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_THREAD,GstThreadClass))
#define GST_IS_THREAD(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_THREAD))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_THREAD))
#define GST_IS_THREAD_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_THREAD))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_THREAD))
typedef struct _GstThread GstThread;
typedef struct _GstThreadClass GstThreadClass;
@ -80,7 +80,7 @@ struct _GstThreadClass {
GstBinClass parent_class;
};
GtkType gst_thread_get_type (void);
GType gst_thread_get_type (void);
GstElement* gst_thread_new (const guchar *name);

View file

@ -55,31 +55,32 @@ enum {
static void gst_typefind_class_init (GstTypeFindClass *klass);
static void gst_typefind_init (GstTypeFind *typefind);
static void gst_typefind_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_typefind_get_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_typefind_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_typefind_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static void gst_typefind_chain (GstPad *pad, GstBuffer *buf);
static GstElementClass *parent_class = NULL;
static guint gst_typefind_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_typefind_get_type (void)
{
static GtkType typefind_type = 0;
static GType typefind_type = 0;
if (!typefind_type) {
static const GtkTypeInfo typefind_info = {
"GstTypeFind",
sizeof(GstTypeFind),
static const GTypeInfo typefind_info = {
sizeof(GstTypeFindClass),
(GtkClassInitFunc)gst_typefind_class_init,
(GtkObjectInitFunc)gst_typefind_init,
(GtkArgSetFunc)gst_typefind_set_arg,
(GtkArgGetFunc)gst_typefind_get_arg,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_typefind_class_init,
NULL,
NULL,
sizeof(GstTypeFind),
0,
(GInstanceInitFunc)gst_typefind_init,
};
typefind_type = gtk_type_unique (GST_TYPE_ELEMENT, &typefind_info);
typefind_type = g_type_register_static (GST_TYPE_ELEMENT, "GstTypeFind", &typefind_info, 0);
}
return typefind_type;
}
@ -87,25 +88,22 @@ gst_typefind_get_type (void)
static void
gst_typefind_class_init (GstTypeFindClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
parent_class = gtk_type_class (GST_TYPE_ELEMENT);
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
gtk_object_add_arg_type("GstTypeFind::caps", GTK_TYPE_POINTER,
GTK_ARG_READABLE, ARG_CAPS);
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_CAPS,
g_param_spec_pointer("caps", "Caps", "Found capabilities", G_PARAM_READABLE));
gst_typefind_signals[HAVE_TYPE] =
gtk_signal_new ("have_type", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstTypeFindClass, have_type),
gtk_marshal_NONE__INT, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
g_signal_newc ("have_type", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindClass, have_type), NULL, NULL,
g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_POINTER);
gtk_object_class_add_signals (gtkobject_class, gst_typefind_signals,
LAST_SIGNAL);
gtkobject_class->set_arg = gst_typefind_set_arg;
gtkobject_class->get_arg = gst_typefind_get_arg;
gobject_class->set_property = gst_typefind_set_property;
gobject_class->get_property = gst_typefind_get_property;
}
static void
@ -117,7 +115,7 @@ gst_typefind_init (GstTypeFind *typefind)
}
static void
gst_typefind_set_arg (GtkObject *object, GtkArg *arg, guint id)
gst_typefind_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GstTypeFind *typefind;
@ -126,14 +124,14 @@ gst_typefind_set_arg (GtkObject *object, GtkArg *arg, guint id)
typefind = GST_TYPEFIND (object);
switch(id) {
switch (prop_id) {
default:
break;
}
}
static void
gst_typefind_get_arg (GtkObject *object, GtkArg *arg, guint id)
gst_typefind_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GstTypeFind *typefind;
@ -142,9 +140,9 @@ gst_typefind_get_arg (GtkObject *object, GtkArg *arg, guint id)
typefind = GST_TYPEFIND (object);
switch(id) {
switch (prop_id) {
case ARG_CAPS:
GTK_VALUE_POINTER (*arg) = typefind->caps;
g_value_set_pointer(value, typefind->caps);
break;
default:
break;
@ -189,7 +187,7 @@ gst_typefind_chain (GstPad *pad, GstBuffer *buf)
{ /* FIXME: this should all be in an _emit() wrapper eventually */
int oldstate = GST_STATE(typefind);
gst_object_ref (GST_OBJECT (typefind));
gtk_signal_emit (GTK_OBJECT (typefind), gst_typefind_signals[HAVE_TYPE],
g_signal_emit (G_OBJECT (typefind), gst_typefind_signals[HAVE_TYPE], 0,
typefind->caps);
if (GST_STATE(typefind) != oldstate) {
gst_object_unref (GST_OBJECT (typefind));

View file

@ -37,13 +37,13 @@ GstElementDetails gst_typefind_details;
#define GST_TYPE_TYPEFIND \
(gst_typefind_get_type())
#define GST_TYPEFIND(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_TYPEFIND,GstTypeFind))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TYPEFIND,GstTypeFind))
#define GST_TYPEFIND_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_TYPEFIND,GstTypeFindClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TYPEFIND,GstTypeFindClass))
#define GST_IS_TYPEFIND(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_TYPEFIND))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TYPEFIND))
#define GST_IS_TYPEFIND_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_TYPEFIND))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TYPEFIND))
typedef struct _GstTypeFind GstTypeFind;
typedef struct _GstTypeFindClass GstTypeFindClass;
@ -63,7 +63,7 @@ struct _GstTypeFindClass {
void (*have_type) (GstElement *element);
};
GtkType gst_typefind_get_type (void);
GType gst_typefind_get_type (void);
#ifdef __cplusplus

View file

@ -2,7 +2,7 @@
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
* gstutils.c: Utility functions: gtk_get_arg stuff, etc.
* gstutils.c: Utility functions: gtk_get_property stuff, etc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@ -37,13 +37,12 @@
* Returns: the property of the object
*/
gint
gst_util_get_int_arg (GtkObject *object,guchar *argname)
gst_util_get_int_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_INT(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_int(&value);
}
/**
@ -56,13 +55,12 @@ gst_util_get_int_arg (GtkObject *object,guchar *argname)
* Returns: the property of the object
*/
gint
gst_util_get_bool_arg (GtkObject *object,guchar *argname)
gst_util_get_bool_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_BOOL(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_boolean(&value);
}
/**
@ -75,13 +73,12 @@ gst_util_get_bool_arg (GtkObject *object,guchar *argname)
* Returns: the property of the object
*/
glong
gst_util_get_long_arg (GtkObject *object,guchar *argname)
gst_util_get_long_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_LONG(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_long(&value);
}
/**
@ -94,13 +91,12 @@ gst_util_get_long_arg (GtkObject *object,guchar *argname)
* Returns: the property of the object
*/
gfloat
gst_util_get_float_arg (GtkObject *object,guchar *argname)
gst_util_get_float_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_FLOAT(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_float(&value);
}
/**
@ -113,13 +109,12 @@ gst_util_get_float_arg (GtkObject *object,guchar *argname)
* Returns: the property of the object
*/
gdouble
gst_util_get_double_arg (GtkObject *object,guchar *argname)
gst_util_get_double_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_DOUBLE(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_double(&value);
}
/**
@ -131,14 +126,13 @@ gst_util_get_double_arg (GtkObject *object,guchar *argname)
*
* Returns: the property of the object
*/
guchar*
gst_util_get_string_arg (GtkObject *object,guchar *argname)
gchar*
gst_util_get_string_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_STRING(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_string(&value);
}
/**
@ -151,18 +145,16 @@ gst_util_get_string_arg (GtkObject *object,guchar *argname)
* Returns: the property of the object
*/
gpointer
gst_util_get_pointer_arg (GtkObject *object,guchar *argname)
gst_util_get_pointer_arg (GObject *object,gchar *argname)
{
GtkArg arg;
GValue value;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
return GTK_VALUE_POINTER(arg);
g_object_get_property(G_OBJECT(object),argname,&value);
return g_value_get_pointer(&value);
}
/**
* gst_util_get_widget_arg:
* gst_util_get_widget_property:
* @object: the object to query
* @argname: the name of the argument
*
@ -170,16 +162,18 @@ gst_util_get_pointer_arg (GtkObject *object,guchar *argname)
*
* Returns: the property of the object
*/
/* COMMENTED OUT BECAUSE WE HAVE NO MORE gtk.h
GtkWidget*
gst_util_get_widget_arg (GtkObject *object,guchar *argname)
gst_util_get_widget_property (GObject *object,gchar *argname)
{
GtkArg arg;
arg.name = argname;
gtk_object_getv(GTK_OBJECT(object),1,&arg);
gtk_object_getv(G_OBJECT(object),1,&arg);
return GTK_WIDGET(GTK_VALUE_OBJECT(arg));
return GTK_WIDGET(G_VALUE_OBJECT(arg));
}
*/
/**
* gst_util_dump_mem:
@ -218,80 +212,75 @@ gst_util_dump_mem (guchar *mem, guint size)
* sets the argument with it.
*/
void
gst_util_set_object_arg (GtkObject *object, guchar *name, gchar *value)
gst_util_set_object_arg (GObject *object, gchar *name, gchar *value)
{
if (name && value) {
GtkType type = GTK_OBJECT_TYPE (object);
GtkArgInfo *info;
gchar *result;
GParamSpec *paramspec;
result = gtk_object_arg_get_info (type, name, &info);
paramspec = g_object_class_find_property(G_OBJECT_GET_CLASS(object),name);
if (result) {
g_print("gstutil: %s\n", result);
}
else if (info->arg_flags & GTK_ARG_WRITABLE) {
switch (info->type) {
case GTK_TYPE_STRING:
gtk_object_set (GTK_OBJECT (object), name, value, NULL);
if (paramspec->flags & G_PARAM_WRITABLE) {
switch (paramspec->value_type) {
case G_TYPE_STRING:
g_object_set (G_OBJECT (object), name, value, NULL);
break;
case GTK_TYPE_ENUM:
case GTK_TYPE_INT: {
case G_TYPE_ENUM:
case G_TYPE_INT: {
gint i;
sscanf (value, "%d", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_LONG: {
case G_TYPE_LONG: {
glong i;
sscanf (value, "%ld", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_ULONG: {
case G_TYPE_ULONG: {
gulong i;
sscanf (value, "%lu", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_BOOL: {
case G_TYPE_BOOLEAN: {
gboolean i = FALSE;
if (!strncmp ("true", value, 4)) i = TRUE;
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_CHAR: {
case G_TYPE_CHAR: {
gchar i;
sscanf (value, "%c", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_UCHAR: {
case G_TYPE_UCHAR: {
guchar i;
sscanf (value, "%c", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_FLOAT: {
case G_TYPE_FLOAT: {
gfloat i;
sscanf (value, "%f", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
break;
}
case GTK_TYPE_DOUBLE: {
case G_TYPE_DOUBLE: {
gfloat i;
sscanf (value, "%g", &i);
gtk_object_set (GTK_OBJECT (object), name, (gdouble)i, NULL);
g_object_set (G_OBJECT (object), name, (gdouble)i, NULL);
break;
}
default:
if (GTK_FUNDAMENTAL_TYPE(info->type) == GTK_TYPE_ENUM) {
if (G_IS_PARAM_SPEC_ENUM(paramspec)) {
gint i;
sscanf (value, "%d", &i);
gtk_object_set (GTK_OBJECT (object), name, i, NULL);
g_object_set (G_OBJECT (object), name, i, NULL);
}
else if (info->type == GST_TYPE_FILENAME) {
gtk_object_set (GTK_OBJECT (object), name, value, NULL);
else if (paramspec->value_type == GST_TYPE_FILENAME) {
g_object_set (G_OBJECT (object), name, value, NULL);
}
break;
}

View file

@ -24,22 +24,22 @@
#ifndef __GST_UTILS_H__
#define __GST_UTILS_H__
#include <gtk/gtk.h>
#include <glib.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
gint gst_util_get_int_arg (GtkObject *object, guchar *argname);
gboolean gst_util_get_bool_arg (GtkObject *object, guchar *argname);
glong gst_util_get_long_arg (GtkObject *object, guchar *argname);
gfloat gst_util_get_float_arg (GtkObject *object, guchar *argname);
gdouble gst_util_get_double_arg (GtkObject *object, guchar *argname);
guchar* gst_util_get_string_arg (GtkObject *object, guchar *argname);
gpointer gst_util_get_pointer_arg (GtkObject *object, guchar *argname);
GtkWidget* gst_util_get_widget_arg (GtkObject *object, guchar *argname);
gint gst_util_get_int_arg (GObject *object, gchar *argname);
gboolean gst_util_get_bool_arg (GObject *object, gchar *argname);
glong gst_util_get_long_arg (GObject *object, gchar *argname);
gfloat gst_util_get_float_arg (GObject *object, gchar *argname);
gdouble gst_util_get_double_arg (GObject *object, gchar *argname);
gchar* gst_util_get_string_arg (GObject *object, gchar *argname);
gpointer gst_util_get_pointer_arg (GObject *object, gchar *argname);
//GtkWidget* gst_util_get_widget_property (GObject *object, gchar *argname);
void gst_util_set_object_arg (GtkObject *object, guchar *name, gchar *value);
void gst_util_set_object_arg (GObject *object, gchar *name, gchar *value);
void gst_util_dump_mem (guchar *mem, guint size);

View file

@ -38,23 +38,24 @@ static void gst_xml_object_loaded (GstObject *private, GstObject *object, xmlNo
static GstObjectClass *parent_class = NULL;
static guint gst_xml_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_xml_get_type(void)
{
static GtkType xml_type = 0;
static GType xml_type = 0;
if (!xml_type) {
static const GtkTypeInfo xml_info = {
"GstXML",
sizeof(GstXML),
static const GTypeInfo xml_info = {
sizeof(GstXMLClass),
(GtkClassInitFunc)gst_xml_class_init,
(GtkObjectInitFunc)gst_xml_init,
(GtkArgSetFunc)NULL,
(GtkArgGetFunc)NULL,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_xml_class_init,
NULL,
NULL,
sizeof(GstXML),
0,
(GInstanceInitFunc)gst_xml_init,
};
xml_type = gtk_type_unique (GST_TYPE_OBJECT, &xml_info);
xml_type = g_type_register_static (GST_TYPE_OBJECT, "GstXml", &xml_info, 0);
}
return xml_type;
}
@ -62,19 +63,18 @@ gst_xml_get_type(void)
static void
gst_xml_class_init (GstXMLClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
gtkobject_class = (GtkObjectClass *)klass;
gobject_class = (GObjectClass *)klass;
parent_class = gtk_type_class (GST_TYPE_OBJECT);
parent_class = g_type_class_ref (GST_TYPE_OBJECT);
gst_xml_signals[OBJECT_LOADED] =
gtk_signal_new ("object_loaded", GTK_RUN_LAST, gtkobject_class->type,
GTK_SIGNAL_OFFSET (GstXMLClass, object_loaded),
gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2,
GST_TYPE_OBJECT, GTK_TYPE_POINTER);
g_signal_newc ("object_loaded", G_OBJECT_TYPE(gobject_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstXMLClass, object_loaded), NULL, NULL,
gst_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
GST_TYPE_OBJECT, G_TYPE_POINTER);
gtk_object_class_add_signals (gtkobject_class, gst_xml_signals, LAST_SIGNAL);
}
static void
@ -93,7 +93,7 @@ gst_xml_init(GstXML *xml)
GstXML*
gst_xml_new (void)
{
return GST_XML (gtk_type_new (GST_TYPE_XML));
return GST_XML (g_object_new(GST_TYPE_XML,NULL));
}
/**
@ -156,7 +156,7 @@ gst_xml_parse_doc (GstXML *xml, xmlDocPtr doc, const guchar *root)
return FALSE;
}
gst_class_signal_connect (GST_OBJECT_CLASS (GTK_OBJECT (xml)->klass),
gst_class_signal_connect (GST_OBJECT_CLASS (G_OBJECT_GET_CLASS(xml)),
"object_loaded", gst_xml_object_loaded, xml);
xml->ns = ns;
@ -240,7 +240,7 @@ gst_xml_object_loaded (GstObject *private, GstObject *object, xmlNodePtr self, g
GstXML *xml = GST_XML (data);
// FIXME check that this element was created from the same xmlDocPtr...
gtk_signal_emit (GTK_OBJECT (xml), gst_xml_signals[OBJECT_LOADED], object, self);
g_signal_emit (G_OBJECT (xml), gst_xml_signals[OBJECT_LOADED], 0, object, self);
}
/**

View file

@ -41,13 +41,13 @@ extern "C" {
#define GST_TYPE_XML \
(gst_xml_get_type())
#define GST_XML(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_XML,GstXML))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XML,GstXML))
#define GST_XML_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_XML,GstXMLClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XML,GstXMLClass))
#define GST_IS_XML(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_XML))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XML))
#define GST_IS_XML_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_XML))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XML))
typedef struct _GstXML GstXML;
typedef struct _GstXMLClass GstXMLClass;
@ -68,7 +68,7 @@ struct _GstXMLClass {
void (*object_saved) (GstXML *xml, GstObject *object, xmlNodePtr self);
};
GtkType gst_xml_get_type (void);
GType gst_xml_get_type (void);
/* create an XML document out of a pipeline */

View file

@ -70,8 +70,8 @@ enum {
static void gst_queue_class_init (GstQueueClass *klass);
static void gst_queue_init (GstQueue *queue);
static void gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id);
static void gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static gboolean gst_queue_handle_eos (GstPad *pad);
static GstPadNegotiateReturn gst_queue_handle_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data);
@ -85,17 +85,17 @@ static void gst_queue_flush (GstQueue *queue);
static GstElementStateReturn gst_queue_change_state (GstElement *element);
static GtkType
static GType
queue_leaky_get_type(void) {
static GtkType queue_leaky_type = 0;
static GtkEnumValue queue_leaky[] = {
static GType queue_leaky_type = 0;
static GEnumValue queue_leaky[] = {
{ GST_QUEUE_NO_LEAK, "0", "Not Leaky" },
{ GST_QUEUE_LEAK_UPSTREAM, "1", "Leaky on Upstream" },
{ GST_QUEUE_LEAK_DOWNSTREAM, "2", "Leaky on Downstream" },
{ 0, NULL, NULL },
};
if (!queue_leaky_type) {
queue_leaky_type = gtk_type_register_enum("GstQueueLeaky", queue_leaky);
queue_leaky_type = g_enum_register_static("GstQueueLeaky", queue_leaky);
}
return queue_leaky_type;
}
@ -105,22 +105,23 @@ queue_leaky_get_type(void) {
static GstElementClass *parent_class = NULL;
//static guint gst_queue_signals[LAST_SIGNAL] = { 0 };
GtkType
GType
gst_queue_get_type(void) {
static GtkType queue_type = 0;
static GType queue_type = 0;
if (!queue_type) {
static const GtkTypeInfo queue_info = {
"GstQueue",
sizeof(GstQueue),
static const GTypeInfo queue_info = {
sizeof(GstQueueClass),
(GtkClassInitFunc)gst_queue_class_init,
(GtkObjectInitFunc)gst_queue_init,
(GtkArgSetFunc)gst_queue_set_arg,
(GtkArgGetFunc)gst_queue_get_arg,
(GtkClassInitFunc)NULL,
NULL,
NULL,
(GClassInitFunc)gst_queue_class_init,
NULL,
NULL,
sizeof(GstQueue),
4,
(GInstanceInitFunc)gst_queue_init,
};
queue_type = gtk_type_unique (GST_TYPE_ELEMENT, &queue_info);
queue_type = g_type_register_static (GST_TYPE_ELEMENT, "GstQueue", &queue_info, 0);
}
return queue_type;
}
@ -128,23 +129,34 @@ gst_queue_get_type(void) {
static void
gst_queue_class_init (GstQueueClass *klass)
{
GtkObjectClass *gtkobject_class;
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
gtkobject_class = (GtkObjectClass*)klass;
gobject_class = (GObjectClass*)klass;
gstelement_class = (GstElementClass*)klass;
parent_class = gtk_type_class (GST_TYPE_ELEMENT);
parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
/*
gtk_object_add_arg_type ("GstQueue::leaky", GST_TYPE_QUEUE_LEAKY,
GTK_ARG_READWRITE, ARG_LEAKY);
gtk_object_add_arg_type ("GstQueue::level", GTK_TYPE_INT,
gtk_object_add_arg_type ("GstQueue::level", G_TYPE_INT,
GTK_ARG_READABLE, ARG_LEVEL);
gtk_object_add_arg_type ("GstQueue::max_level", GTK_TYPE_INT,
gtk_object_add_arg_type ("GstQueue::max_level", G_TYPE_INT,
GTK_ARG_READWRITE, ARG_MAX_LEVEL);
*/
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEAKY,
g_param_spec_enum("leaky","Leaky","Where the queue leaks, if at all.",
GST_TYPE_QUEUE_LEAKY,GST_QUEUE_NO_LEAK,G_PARAM_READWRITE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_LEVEL,
g_param_spec_int("level","Level","How many buffers are in the queue.",
0,G_MAXINT,0,G_PARAM_READABLE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_MAX_LEVEL,
g_param_spec_int("max_level","Maximum Level","How many buffers the queue holds.",
0,G_MAXINT,100,G_PARAM_READWRITE));
gtkobject_class->set_arg = gst_queue_set_arg;
gtkobject_class->get_arg = gst_queue_get_arg;
gobject_class->set_property = gst_queue_set_property;
gobject_class->get_property = gst_queue_get_property;
gstelement_class->change_state = gst_queue_change_state;
}
@ -306,16 +318,16 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf)
while (queue->level_buffers >= queue->size_buffers) {
// if there's a pending state change for this queue or its manager, switch
// back to iterator so bottom half of state change executes
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->sinkpad))))) !=
GST_STATE_NONE_PENDING)
GST_STATE_VOID_PENDING)
{
GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
GST_UNLOCK(queue);
cothread_switch(cothread_current_main());
}
@ -376,16 +388,16 @@ gst_queue_get (GstPad *pad)
// if there's a pending state change for this queue or its manager, switch
// back to iterator so bottom half of state change executes
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING ||
// GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_STATE_PENDING(GST_SCHED_PARENT(GST_ELEMENT_SCHED(GST_PAD_PARENT(GST_PAD_PEER(queue->srcpad))))) !=
GST_STATE_NONE_PENDING)
GST_STATE_VOID_PENDING)
{
GST_DEBUG(GST_CAT_DATAFLOW,"interrupted!!\n");
if (GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_NONE_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_NONE_PENDING\n");
if (GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(queue) != GST_STATE_VOID_PENDING)\n");
if (GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING)
GST_DEBUG(GST_CAT_DATAFLOW,"GST_STATE_PENDING(GST_SCHEDULE(GST_ELEMENT(queue)->sched)->parent) != GST_STATE_VOID_PENDING\n");
GST_UNLOCK(queue);
cothread_switch(cothread_current_main());
}
@ -435,11 +447,12 @@ gst_queue_change_state (GstElement *element)
gst_queue_flush (queue);
}
/* if we haven't failed already, give the parent class a chance to ;-) */
/* FIXME FIXME FIXME FIXME FIXME!!!!
// if we haven't failed already, give the parent class a chance to ;-)
if (GST_ELEMENT_CLASS (parent_class)->change_state)
{
gboolean valid_handler = FALSE;
guint state_change_id = gtk_signal_lookup("state_change", GTK_OBJECT_TYPE(element));
guint state_change_id = gtk_signal_lookup("state_change", G_OBJECT_TYPE(element));
// determine whether we need to block the parent (element) class'
// STATE_CHANGE signal so we can UNLOCK before returning. we block
@ -450,22 +463,23 @@ gst_queue_change_state (GstElement *element)
// if element change_state() emits other signals, they need to be blocked
// as well.
if (state_change_id &&
gtk_signal_handler_pending(GTK_OBJECT(element), state_change_id, FALSE))
gtk_signal_handler_pending(G_OBJECT(element), state_change_id, FALSE))
valid_handler = TRUE;
if (valid_handler)
gtk_signal_handler_block(GTK_OBJECT(element), state_change_id);
gtk_signal_handler_block(G_OBJECT(element), state_change_id);
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
if (valid_handler)
gtk_signal_handler_unblock(GTK_OBJECT(element), state_change_id);
gtk_signal_handler_unblock(G_OBJECT(element), state_change_id);
// UNLOCK, *then* emit signal (if there's one there)
GST_UNLOCK(queue);
if (valid_handler)
gtk_signal_emit(GTK_OBJECT (element), state_change_id, GST_STATE(element));
gtk_signal_emit(G_OBJECT (element), state_change_id, GST_STATE(element));
}
else
*/
{
ret = GST_STATE_SUCCESS;
GST_UNLOCK(queue);
@ -476,7 +490,7 @@ gst_queue_change_state (GstElement *element)
static void
gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
gst_queue_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GstQueue *queue;
@ -485,20 +499,21 @@ gst_queue_set_arg (GtkObject *object, GtkArg *arg, guint id)
queue = GST_QUEUE (object);
switch(id) {
switch (prop_id) {
case ARG_LEAKY:
queue->leaky = GTK_VALUE_INT (*arg);
queue->leaky = g_value_get_int(value);
break;
case ARG_MAX_LEVEL:
queue->size_buffers = GTK_VALUE_INT (*arg);
queue->size_buffers = g_value_get_int(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
gst_queue_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GstQueue *queue;
@ -507,18 +522,18 @@ gst_queue_get_arg (GtkObject *object, GtkArg *arg, guint id)
queue = GST_QUEUE (object);
switch (id) {
switch (prop_id) {
case ARG_LEAKY:
GTK_VALUE_INT (*arg) = queue->leaky;
g_value_set_int(value, queue->leaky);
break;
case ARG_LEVEL:
GTK_VALUE_INT (*arg) = queue->level_buffers;
g_value_set_int(value, queue->level_buffers);
break;
case ARG_MAX_LEVEL:
GTK_VALUE_INT (*arg) = queue->size_buffers;
g_value_set_int(value, queue->size_buffers);
break;
default:
arg->type = GTK_TYPE_INVALID;
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}

View file

@ -39,13 +39,13 @@ GstElementDetails gst_queue_details;
#define GST_TYPE_QUEUE \
(gst_queue_get_type())
#define GST_QUEUE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_QUEUE,GstQueue))
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QUEUE,GstQueue))
#define GST_QUEUE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QUEUE,GstQueueClass))
#define GST_IS_QUEUE(obj) \
(GTK_CHECK_TYPE((obj),GST_TYPE_QUEUE))
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QUEUE))
#define GST_IS_QUEUE_CLASS(obj) \
(GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QUEUE))
enum {
GST_QUEUE_NO_LEAK = 0,
@ -90,7 +90,7 @@ struct _GstQueueClass {
void (*high_watermark) (GstQueue *queue, gint level);
};
GtkType gst_queue_get_type (void);
GType gst_queue_get_type (void);
#ifdef __cplusplus
}