initial checkin for the deep_notify signal which replaces INFO events in the long run.

Original commit message from CVS:
initial checkin for the deep_notify signal which replaces INFO events in the long run.
PLEASE do not use gst_element_[info,message,error] anymore. Use g_object_notify instead.
Thank you.
This commit is contained in:
Benjamin Otte 2002-02-05 21:11:43 +00:00
parent 7ec0610594
commit 5efa475181
8 changed files with 103 additions and 7 deletions

View file

@ -247,21 +247,28 @@ gst_filesrc_set_property (GObject *object, guint prop_id, const GValue *value, G
} else { } else {
src->filename = g_strdup (g_value_get_string (value)); src->filename = g_strdup (g_value_get_string (value));
} }
g_object_notify (G_OBJECT (src), "location");
break; break;
case ARG_BLOCKSIZE: case ARG_BLOCKSIZE:
src->block_size = g_value_get_ulong (value); src->block_size = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "blocksize");
break; break;
case ARG_OFFSET: case ARG_OFFSET:
src->curoffset = g_value_get_int64 (value); src->curoffset = g_value_get_int64 (value);
g_object_notify (G_OBJECT (src), "offset");
break; break;
case ARG_MAPSIZE: case ARG_MAPSIZE:
if ((src->mapsize % src->pagesize) == 0) if ((src->mapsize % src->pagesize) == 0)
{
src->mapsize = g_value_get_ulong (value); src->mapsize = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "mmapsize");
}
else else
GST_INFO(0, "invalid mapsize, must a multiple of pagesize, which is %d\n",src->pagesize); GST_INFO(0, "invalid mapsize, must a multiple of pagesize, which is %d\n",src->pagesize);
break; break;
case ARG_TOUCH: case ARG_TOUCH:
src->touch = g_value_get_boolean (value); src->touch = g_value_get_boolean (value);
g_object_notify (G_OBJECT (src), "touch");
break; break;
default: default:
break; break;
@ -542,6 +549,7 @@ gst_filesrc_get (GstPad *pad)
/* we're done, return the buffer */ /* we're done, return the buffer */
src->curoffset += GST_BUFFER_SIZE(buf); src->curoffset += GST_BUFFER_SIZE(buf);
g_object_notify (G_OBJECT (src), "offset");
return buf; return buf;
} }
@ -579,6 +587,12 @@ gst_filesrc_open_file (GstFileSrc *src)
src->curoffset = 0; src->curoffset = 0;
/* now notify of the changes */
g_object_freeze_notify (G_OBJECT (src));
g_object_notify (G_OBJECT (src), "filesize");
g_object_notify (G_OBJECT (src), "offset");
g_object_thaw_notify (G_OBJECT (src));
GST_FLAG_SET (src, GST_FILESRC_OPEN); GST_FLAG_SET (src, GST_FILESRC_OPEN);
} }
return TRUE; return TRUE;
@ -597,6 +611,12 @@ gst_filesrc_close_file (GstFileSrc *src)
src->fd = 0; src->fd = 0;
src->filelen = 0; src->filelen = 0;
src->curoffset = 0; src->curoffset = 0;
/* and notify that things changed */
g_object_freeze_notify (G_OBJECT (src));
g_object_notify (G_OBJECT (src), "filesize");
g_object_notify (G_OBJECT (src), "offset");
g_object_thaw_notify (G_OBJECT (src));
if (src->mapbuf) if (src->mapbuf)
gst_buffer_unref (src->mapbuf); gst_buffer_unref (src->mapbuf);
@ -654,6 +674,7 @@ gst_filesrc_srcpad_event (GstPad *pad, GstEvent *event)
return FALSE; return FALSE;
break; break;
} }
g_object_notify (G_OBJECT (src), "offset");
src->seek_happened = TRUE; src->seek_happened = TRUE;
src->need_flush = GST_EVENT_SEEK_FLUSH(event); src->need_flush = GST_EVENT_SEEK_FLUSH(event);
gst_event_free (event); gst_event_free (event);

View file

@ -422,15 +422,17 @@ gst_md5sink_change_state (GstElement *element)
/* element check */ /* element check */
sink = GST_MD5SINK (element); sink = GST_MD5SINK (element);
g_return_val_if_fail (sink != NULL, GST_PAD_CONNECT_REFUSED);
g_return_val_if_fail (GST_IS_MD5SINK (sink), GST_PAD_CONNECT_REFUSED); g_return_val_if_fail (GST_IS_MD5SINK (sink), GST_STATE_FAILURE);
switch (GST_STATE_TRANSITION (element)) { switch (GST_STATE_TRANSITION (element)) {
case GST_STATE_READY_TO_PAUSED: case GST_STATE_READY_TO_PAUSED:
md5_init_ctx (sink); md5_init_ctx (sink);
g_object_notify (G_OBJECT (element), "md5");
break; break;
case GST_STATE_PAUSED_TO_READY: case GST_STATE_PAUSED_TO_READY:
md5_finish_ctx (sink, sink->md5); md5_finish_ctx (sink, sink->md5);
g_object_notify (G_OBJECT (element), "md5");
break; break;
default: default:
break; break;
@ -454,7 +456,8 @@ gst_md5sink_get_property (GObject *object, guint prop_id, GValue *value, GParamS
switch (prop_id) { switch (prop_id) {
case ARG_MD5: case ARG_MD5:
md5_read_ctx (sink, sink->md5); /* you could actually get a value for the current md5. This is currently disabled.
* md5_read_ctx (sink, sink->md5); */
g_value_set_pointer (value, sink->md5); g_value_set_pointer (value, sink->md5);
break; break;
default: default:

View file

@ -42,6 +42,11 @@ typedef struct _GObjectClass GObjectClass;
#define g_object_ref(obj) gtk_object_ref((GtkObject *)(obj)) #define g_object_ref(obj) gtk_object_ref((GtkObject *)(obj))
#define g_object_unref(obj) gtk_object_unref((GtkObject *)(obj)) #define g_object_unref(obj) gtk_object_unref((GtkObject *)(obj))
/* notification - just disable it */
#define g_object_freeze_notify(obj)
#define g_object_notify(obj,name)
#define g_object_thaw_notify(obj)
/* the helper macros for type checking */ /* the helper macros for type checking */
#define G_TYPE_CHECK_INSTANCE_CAST GTK_CHECK_CAST #define G_TYPE_CHECK_INSTANCE_CAST GTK_CHECK_CAST
#define G_TYPE_CHECK_INSTANCE_TYPE GTK_CHECK_TYPE #define G_TYPE_CHECK_INSTANCE_TYPE GTK_CHECK_TYPE
@ -70,7 +75,7 @@ typedef struct _GObjectClass GObjectClass;
#define G_TYPE_STRING GTK_TYPE_STRING #define G_TYPE_STRING GTK_TYPE_STRING
#define G_TYPE_POINTER GTK_TYPE_POINTER #define G_TYPE_POINTER GTK_TYPE_POINTER
#define G_TYPE_BOXED GTK_TYPE_BOXED #define G_TYPE_BOXED GTK_TYPE_BOXED
#define G_TYPE_PARAM GTK_TYPE_PARAM #define G_TYPE_PARAM GTK_TYPE_POINTER
/* marshallers */ /* marshallers */
#define g_cclosure_marshal_VOID__VOID gtk_marshal_NONE__NONE #define g_cclosure_marshal_VOID__VOID gtk_marshal_NONE__NONE
@ -100,6 +105,7 @@ typedef struct _GObjectClass GObjectClass;
#define gst_marshal_VOID__STRING gtk_marshal_NONE__STRING #define gst_marshal_VOID__STRING gtk_marshal_NONE__STRING
#define gst_marshal_VOID__POINTER gtk_marshal_NONE__POINTER #define gst_marshal_VOID__POINTER gtk_marshal_NONE__POINTER
#define gst_marshal_VOID__OBJECT gtk_marshal_NONE__POINTER #define gst_marshal_VOID__OBJECT gtk_marshal_NONE__POINTER
#define gst_marshal_VOID__OBJECT_PARAM gtk_marshal_NONE__POINTER_POINTER
#define gst_marshal_VOID__OBJECT_POINTER gtk_marshal_NONE__POINTER_POINTER #define gst_marshal_VOID__OBJECT_POINTER gtk_marshal_NONE__POINTER_POINTER
#define gst_marshal_VOID__INT_INT gtk_marshal_NONE__INT_INT #define gst_marshal_VOID__INT_INT gtk_marshal_NONE__INT_INT
@ -197,6 +203,7 @@ void g2g_object_run_dispose (GObject *object);
#define G_SIGNAL_RUN_CLEANUP 0 #define G_SIGNAL_RUN_CLEANUP 0
#define G_SIGNAL_NO_RECURSE GTK_RUN_NO_RECURSE #define G_SIGNAL_NO_RECURSE GTK_RUN_NO_RECURSE
#define G_SIGNAL_NO_HOOKS GTK_RUN_NO_HOOKS #define G_SIGNAL_NO_HOOKS GTK_RUN_NO_HOOKS
#define G_SIGNAL_DETAILED 0
#define GCallback gpointer /* FIXME?*/ #define GCallback gpointer /* FIXME?*/
#define G_CALLBACK(f) ((gpointer)(f)) #define G_CALLBACK(f) ((gpointer)(f))
@ -431,6 +438,10 @@ struct _GObjectClass {
const GValue *value, GParamSpec *pspec); const GValue *value, GParamSpec *pspec);
void (*get_property) (GObject *object, guint prop_id, void (*get_property) (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec); GValue *value, GParamSpec *pspec);
void (*dispatch_properties_changed) (GObject *object, guint n_pspecs,
GParamSpec **pspecs);
}; };
GType g_object_get_type (void); GType g_object_get_type (void);

View file

@ -4,5 +4,6 @@ VOID:INT
VOID:STRING VOID:STRING
VOID:POINTER VOID:POINTER
VOID:OBJECT VOID:OBJECT
VOID:OBJECT,PARAM
VOID:OBJECT,POINTER VOID:OBJECT,POINTER
VOID:INT,INT VOID:INT,INT

View file

@ -27,6 +27,7 @@
/* Object signals and args */ /* Object signals and args */
enum { enum {
PARENT_SET, PARENT_SET,
DEEP_NOTIFY,
#ifndef GST_DISABLE_LOADSAVE_REGISTRY #ifndef GST_DISABLE_LOADSAVE_REGISTRY
OBJECT_SAVED, OBJECT_SAVED,
#endif #endif
@ -62,6 +63,7 @@ static void gst_object_set_property (GObject * object, guint prop_id, const G
GParamSpec * pspec); GParamSpec * pspec);
static void gst_object_get_property (GObject * object, guint prop_id, GValue * value, static void gst_object_get_property (GObject * object, guint prop_id, GValue * value,
GParamSpec * pspec); GParamSpec * pspec);
static void gst_object_dispatch_properties_changed (GObject * object, guint n_pspecs, GParamSpec **pspecs);
static void gst_object_dispose (GObject *object); static void gst_object_dispose (GObject *object);
static void gst_object_finalize (GObject *object); static void gst_object_finalize (GObject *object);
@ -105,6 +107,7 @@ gst_object_class_init (GstObjectClass *klass)
gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_object_set_property); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_object_set_property);
gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_object_get_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_object_get_property);
gobject_class->dispatch_properties_changed = GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_NAME, g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_NAME,
g_param_spec_string ("name", "Name", "The name of the object", g_param_spec_string ("name", "Name", "The name of the object",
@ -115,6 +118,12 @@ gst_object_class_init (GstObjectClass *klass)
G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL, G_STRUCT_OFFSET (GstObjectClass, parent_set), NULL, NULL,
g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
G_TYPE_OBJECT); G_TYPE_OBJECT);
gst_object_signals[DEEP_NOTIFY] =
g_signal_new ("deep_notify", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED | G_SIGNAL_NO_HOOKS,
G_STRUCT_OFFSET (GstObjectClass, deep_notify), NULL, NULL,
gst_marshal_VOID__OBJECT_PARAM, G_TYPE_NONE,
2, G_TYPE_OBJECT, G_TYPE_PARAM);
#ifndef GST_DISABLE_LOADSAVE_REGISTRY #ifndef GST_DISABLE_LOADSAVE_REGISTRY
gst_object_signals[OBJECT_SAVED] = gst_object_signals[OBJECT_SAVED] =
g_signal_new ("object_saved", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, g_signal_new ("object_saved", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
@ -574,6 +583,32 @@ gst_object_get_property (GObject* object, guint prop_id,
break; break;
} }
} }
static void
gst_object_dispatch_properties_changed (GObject *object,
guint n_pspecs,
GParamSpec **pspecs)
{
#ifdef USE_GLIB2
GstObject *gst_object;
guint i;
/* do the standard dispatching */
parent_class->dispatch_properties_changed (object, n_pspecs, pspecs);
/* now let the parent dispatch those, too */
gst_object = GST_OBJECT (object);
while (gst_object)
{
/* need own category? */
GST_DEBUG (GST_CAT_EVENT, "deep notification from %s to %s\n", GST_OBJECT_NAME (object), GST_OBJECT_NAME (gst_object));
for (i = 0; i < n_pspecs; i++)
g_signal_emit (gst_object, gst_object_signals[DEEP_NOTIFY], g_quark_from_string (pspecs[i]->name), (GstObject *) object, pspecs[i]);
gst_object = GST_OBJECT_PARENT (gst_object);
}
#endif /* USE_GLIB2 */
}
/** /**
* gst_object_get_path_string: * gst_object_get_path_string:
* @object: GstObject to get the path from * @object: GstObject to get the path from

View file

@ -102,6 +102,7 @@ struct _GstObjectClass {
/* signals */ /* signals */
void (*parent_set) (GstObject *object, GstObject *parent); void (*parent_set) (GstObject *object, GstObject *parent);
void (*deep_notify) (GstObject *object, GstObject *orig, GParamSpec *pspec);
#ifndef GST_DISABLE_LOADSAVE_REGISTRY #ifndef GST_DISABLE_LOADSAVE_REGISTRY
void (*object_saved) (GstObject *object, xmlNodePtr parent); void (*object_saved) (GstObject *object, xmlNodePtr parent);
#endif #endif

View file

@ -247,21 +247,28 @@ gst_filesrc_set_property (GObject *object, guint prop_id, const GValue *value, G
} else { } else {
src->filename = g_strdup (g_value_get_string (value)); src->filename = g_strdup (g_value_get_string (value));
} }
g_object_notify (G_OBJECT (src), "location");
break; break;
case ARG_BLOCKSIZE: case ARG_BLOCKSIZE:
src->block_size = g_value_get_ulong (value); src->block_size = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "blocksize");
break; break;
case ARG_OFFSET: case ARG_OFFSET:
src->curoffset = g_value_get_int64 (value); src->curoffset = g_value_get_int64 (value);
g_object_notify (G_OBJECT (src), "offset");
break; break;
case ARG_MAPSIZE: case ARG_MAPSIZE:
if ((src->mapsize % src->pagesize) == 0) if ((src->mapsize % src->pagesize) == 0)
{
src->mapsize = g_value_get_ulong (value); src->mapsize = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "mmapsize");
}
else else
GST_INFO(0, "invalid mapsize, must a multiple of pagesize, which is %d\n",src->pagesize); GST_INFO(0, "invalid mapsize, must a multiple of pagesize, which is %d\n",src->pagesize);
break; break;
case ARG_TOUCH: case ARG_TOUCH:
src->touch = g_value_get_boolean (value); src->touch = g_value_get_boolean (value);
g_object_notify (G_OBJECT (src), "touch");
break; break;
default: default:
break; break;
@ -542,6 +549,7 @@ gst_filesrc_get (GstPad *pad)
/* we're done, return the buffer */ /* we're done, return the buffer */
src->curoffset += GST_BUFFER_SIZE(buf); src->curoffset += GST_BUFFER_SIZE(buf);
g_object_notify (G_OBJECT (src), "offset");
return buf; return buf;
} }
@ -579,6 +587,12 @@ gst_filesrc_open_file (GstFileSrc *src)
src->curoffset = 0; src->curoffset = 0;
/* now notify of the changes */
g_object_freeze_notify (G_OBJECT (src));
g_object_notify (G_OBJECT (src), "filesize");
g_object_notify (G_OBJECT (src), "offset");
g_object_thaw_notify (G_OBJECT (src));
GST_FLAG_SET (src, GST_FILESRC_OPEN); GST_FLAG_SET (src, GST_FILESRC_OPEN);
} }
return TRUE; return TRUE;
@ -597,6 +611,12 @@ gst_filesrc_close_file (GstFileSrc *src)
src->fd = 0; src->fd = 0;
src->filelen = 0; src->filelen = 0;
src->curoffset = 0; src->curoffset = 0;
/* and notify that things changed */
g_object_freeze_notify (G_OBJECT (src));
g_object_notify (G_OBJECT (src), "filesize");
g_object_notify (G_OBJECT (src), "offset");
g_object_thaw_notify (G_OBJECT (src));
if (src->mapbuf) if (src->mapbuf)
gst_buffer_unref (src->mapbuf); gst_buffer_unref (src->mapbuf);
@ -654,6 +674,7 @@ gst_filesrc_srcpad_event (GstPad *pad, GstEvent *event)
return FALSE; return FALSE;
break; break;
} }
g_object_notify (G_OBJECT (src), "offset");
src->seek_happened = TRUE; src->seek_happened = TRUE;
src->need_flush = GST_EVENT_SEEK_FLUSH(event); src->need_flush = GST_EVENT_SEEK_FLUSH(event);
gst_event_free (event); gst_event_free (event);

View file

@ -422,15 +422,17 @@ gst_md5sink_change_state (GstElement *element)
/* element check */ /* element check */
sink = GST_MD5SINK (element); sink = GST_MD5SINK (element);
g_return_val_if_fail (sink != NULL, GST_PAD_CONNECT_REFUSED);
g_return_val_if_fail (GST_IS_MD5SINK (sink), GST_PAD_CONNECT_REFUSED); g_return_val_if_fail (GST_IS_MD5SINK (sink), GST_STATE_FAILURE);
switch (GST_STATE_TRANSITION (element)) { switch (GST_STATE_TRANSITION (element)) {
case GST_STATE_READY_TO_PAUSED: case GST_STATE_READY_TO_PAUSED:
md5_init_ctx (sink); md5_init_ctx (sink);
g_object_notify (G_OBJECT (element), "md5");
break; break;
case GST_STATE_PAUSED_TO_READY: case GST_STATE_PAUSED_TO_READY:
md5_finish_ctx (sink, sink->md5); md5_finish_ctx (sink, sink->md5);
g_object_notify (G_OBJECT (element), "md5");
break; break;
default: default:
break; break;
@ -454,7 +456,8 @@ gst_md5sink_get_property (GObject *object, guint prop_id, GValue *value, GParamS
switch (prop_id) { switch (prop_id) {
case ARG_MD5: case ARG_MD5:
md5_read_ctx (sink, sink->md5); /* you could actually get a value for the current md5. This is currently disabled.
* md5_read_ctx (sink, sink->md5); */
g_value_set_pointer (value, sink->md5); g_value_set_pointer (value, sink->md5);
break; break;
default: default: