Small cleanups

Original commit message from CVS:
Small cleanups
Added a bound to the number of switches, also fix a small bug
This commit is contained in:
Wim Taymans 2002-01-01 13:51:04 +00:00
parent 03391373ef
commit a4e4bb5795
5 changed files with 70 additions and 111 deletions

View file

@ -199,6 +199,16 @@ load_plugin_func (gpointer data, gpointer user_data)
g_free (data); g_free (data);
} }
static void
parse_number (gchar *number, guint32 *val)
{
/* handle either 0xHEX or dec */
if (*(number+1) == 'x') {
sscanf (number+2, "%08x", val);
} else {
sscanf (number, "%d", val);
}
}
/* returns FALSE if the program can be aborted */ /* returns FALSE if the program can be aborted */
static gboolean static gboolean
@ -219,13 +229,7 @@ gst_init_check (int *argc,
if (!strncmp ("--gst-info-mask=", (*argv)[i], 16)) { if (!strncmp ("--gst-info-mask=", (*argv)[i], 16)) {
guint32 val; guint32 val;
/* handle either 0xHEX or dec */ parse_number ((*argv)[i]+16, &val);
if (*((*argv)[i]+17) == 'x') {
sscanf ((*argv)[i]+18, "%08x", &val);
} else {
sscanf ((*argv)[i]+16, "%d", &val);
}
gst_info_set_categories (val); gst_info_set_categories (val);
(*argv)[i] = NULL; (*argv)[i] = NULL;
@ -233,13 +237,7 @@ gst_init_check (int *argc,
else if (!strncmp ("--gst-debug-mask=", (*argv)[i], 17)) { else if (!strncmp ("--gst-debug-mask=", (*argv)[i], 17)) {
guint32 val; guint32 val;
/* handle either 0xHEX or dec */ parse_number ((*argv)[i]+17, &val);
if (*((*argv)[i]+18) == 'x') {
sscanf ((*argv)[i]+19, "%08x", &val);
} else {
sscanf ((*argv)[i]+17, "%d", &val);
}
gst_debug_set_categories (val); gst_debug_set_categories (val);
(*argv)[i] = NULL; (*argv)[i] = NULL;
@ -247,13 +245,7 @@ gst_init_check (int *argc,
else if (!strncmp ("--gst-mask=", (*argv)[i], 11)) { else if (!strncmp ("--gst-mask=", (*argv)[i], 11)) {
guint32 val; guint32 val;
/* handle either 0xHEX or dec */ parse_number ((*argv)[i]+11, &val);
if (*((*argv)[i]+12) == 'x') {
sscanf ((*argv)[i]+13, "%08x", &val);
} else {
sscanf ((*argv)[i]+11, "%d", &val);
}
gst_debug_set_categories (val); gst_debug_set_categories (val);
gst_info_set_categories (val); gst_info_set_categories (val);

View file

@ -381,10 +381,11 @@ gst_bin_child_state_change (GstBin *bin, GstElementState old, GstElementState ne
for (i = GST_NUM_STATES - 1; i >= 0; i--) { for (i = GST_NUM_STATES - 1; i >= 0; i--) {
if (bin->child_states[i] != 0) { if (bin->child_states[i] != 0) {
if (GST_STATE (bin) != (1 << i)) { gint state = (1 << i);
if (GST_STATE (bin) != state) {
GST_INFO (GST_CAT_STATES, "bin %s need state change to %s", GST_INFO (GST_CAT_STATES, "bin %s need state change to %s",
GST_ELEMENT_NAME (bin), gst_element_statename (1 << i)); GST_ELEMENT_NAME (bin), gst_element_statename (state));
GST_STATE_PENDING (bin) = (1 << i); GST_STATE_PENDING (bin) = state;
gst_bin_change_state_norecurse (bin); gst_bin_change_state_norecurse (bin);
} }
break; break;

View file

@ -102,20 +102,20 @@ 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);
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",
NULL, G_PARAM_READWRITE)); NULL, G_PARAM_READWRITE));
gst_object_signals[PARENT_SET] = gst_object_signals[PARENT_SET] =
g_signal_new("parent_set", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, g_signal_new ("parent_set", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
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);
#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,
G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL, G_STRUCT_OFFSET (GstObjectClass, object_saved), NULL, NULL,
g_cclosure_marshal_VOID__POINTER,G_TYPE_NONE,1, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
G_TYPE_POINTER); G_TYPE_POINTER);
#endif #endif

View file

@ -590,7 +590,28 @@ gst_props_copy_on_write (GstProps *props)
gst_props_unref (props); gst_props_unref (props);
} }
return props; return new;
}
static GstPropsEntry*
gst_props_get_entry_func (GstProps *props, const gchar *name)
{
GList *lentry;
GQuark quark;
g_return_val_if_fail (props != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
quark = g_quark_from_string (name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
return thisentry;
}
return NULL;
} }
/** /**
@ -605,24 +626,13 @@ gst_props_copy_on_write (GstProps *props)
gint gint
gst_props_get_int (GstProps *props, const gchar *name) gst_props_get_int (GstProps *props, const gchar *name)
{ {
GList *lentry; GstPropsEntry *thisentry;
GQuark quark;
g_return_val_if_fail (props != NULL, 0);
g_return_val_if_fail (name != NULL, 0);
quark = g_quark_from_string (name); thisentry = gst_props_get_entry_func (props, name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
if (thisentry) {
return thisentry->data.int_data; return thisentry->data.int_data;
} }
return 0; return 0;
} }
@ -638,21 +648,13 @@ gst_props_get_int (GstProps *props, const gchar *name)
gfloat gfloat
gst_props_get_float (GstProps *props, const gchar *name) gst_props_get_float (GstProps *props, const gchar *name)
{ {
GList *lentry; GstPropsEntry *thisentry;
GQuark quark;
quark = g_quark_from_string (name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func); thisentry = gst_props_get_entry_func (props, name);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
if (thisentry) {
return thisentry->data.float_data; return thisentry->data.float_data;
} }
return 0.0F; return 0.0F;
} }
@ -668,24 +670,13 @@ gst_props_get_float (GstProps *props, const gchar *name)
gulong gulong
gst_props_get_fourcc_int (GstProps *props, const gchar *name) gst_props_get_fourcc_int (GstProps *props, const gchar *name)
{ {
GList *lentry; GstPropsEntry *thisentry;
GQuark quark;
g_return_val_if_fail (props != NULL, 0);
g_return_val_if_fail (name != NULL, 0);
quark = g_quark_from_string (name); thisentry = gst_props_get_entry_func (props, name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
if (thisentry) {
return thisentry->data.fourcc_data; return thisentry->data.fourcc_data;
} }
return 0; return 0;
} }
@ -701,24 +692,13 @@ gst_props_get_fourcc_int (GstProps *props, const gchar *name)
gboolean gboolean
gst_props_get_boolean (GstProps *props, const gchar *name) gst_props_get_boolean (GstProps *props, const gchar *name)
{ {
GList *lentry; GstPropsEntry *thisentry;
GQuark quark;
g_return_val_if_fail (props != NULL, FALSE);
g_return_val_if_fail (name != NULL, FALSE);
quark = g_quark_from_string (name); thisentry = gst_props_get_entry_func (props, name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
if (thisentry) {
return thisentry->data.bool_data; return thisentry->data.bool_data;
} }
return 0; return 0;
} }
@ -734,24 +714,13 @@ gst_props_get_boolean (GstProps *props, const gchar *name)
const gchar* const gchar*
gst_props_get_string (GstProps *props, const gchar *name) gst_props_get_string (GstProps *props, const gchar *name)
{ {
GList *lentry; GstPropsEntry *thisentry;
GQuark quark;
g_return_val_if_fail (props != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
quark = g_quark_from_string (name); thisentry = gst_props_get_entry_func (props, name);
lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
if (lentry) {
GstPropsEntry *thisentry;
thisentry = (GstPropsEntry *)lentry->data;
if (thisentry) {
return thisentry->data.string_data.string; return thisentry->data.string_data.string;
} }
return NULL; return NULL;
} }
@ -973,7 +942,7 @@ gst_props_check_compatibility (GstProps *fromprops, GstProps *toprops)
} }
if (!gst_props_entry_check_compatibility (entry1, entry2)) { if (!gst_props_entry_check_compatibility (entry1, entry2)) {
compatible = FALSE; compatible = FALSE;
GST_DEBUG (GST_CAT_PROPERTIES, "%s are not compatible: \n", GST_DEBUG (GST_CAT_PROPERTIES, "%s are not compatible: \n",
g_quark_to_string (entry1->propid)); g_quark_to_string (entry1->propid));
gst_props_debug_entry (entry1); gst_props_debug_entry (entry1);

View file

@ -341,17 +341,18 @@ static void
gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf) gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf)
{ {
GstRealPad *peer = GST_RPAD_PEER (pad); GstRealPad *peer = GST_RPAD_PEER (pad);
gint loop_count = 100;
GST_DEBUG_ENTER ("(%s:%s)", GST_DEBUG_PAD_NAME (pad)); GST_DEBUG_ENTER ("(%s:%s)", GST_DEBUG_PAD_NAME (pad));
GST_DEBUG (GST_CAT_DATAFLOW, "putting buffer %p in peer \"%s:%s\"'s pen\n", buf, GST_DEBUG (GST_CAT_DATAFLOW, "putting buffer %p in peer \"%s:%s\"'s pen\n", buf,
GST_DEBUG_PAD_NAME (peer)); GST_DEBUG_PAD_NAME (peer));
/* FIXME this should be bounded /*
* loop until the bufferpen is empty so we can fill it up again * loop until the bufferpen is empty so we can fill it up again
*/ */
while (GST_RPAD_BUFPEN (pad) != NULL) { while (GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) != NULL && --loop_count) {
GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p to empty bufpen\n", GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p to empty bufpen %d\n",
GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad))); GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)), loop_count);
cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad))); cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
/* we may no longer be the same pad, check. */ /* we may no longer be the same pad, check. */
@ -361,6 +362,11 @@ gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf)
} }
} }
if (loop_count == 0) {
gst_element_error (GST_PAD_PARENT (pad),
"(internal error) maximum number of switches exceeded");
return;
}
g_assert (GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) == NULL); g_assert (GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) == NULL);
/* now fill the bufferpen and switch so it can be consumed */ /* now fill the bufferpen and switch so it can be consumed */
GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) = buf; GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) = buf;
@ -374,8 +380,6 @@ gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf)
static void static void
gst_basic_scheduler_select_proxy (GstPad * pad, GstBuffer * buf) gst_basic_scheduler_select_proxy (GstPad * pad, GstBuffer * buf)
{ {
g_print ("select proxy (%s:%s)\n", GST_DEBUG_PAD_NAME (pad));
GST_DEBUG_ENTER ("(%s:%s)", GST_DEBUG_PAD_NAME (pad)); GST_DEBUG_ENTER ("(%s:%s)", GST_DEBUG_PAD_NAME (pad));
GST_DEBUG (GST_CAT_DATAFLOW, "putting buffer %p in peer's pen\n", buf); GST_DEBUG (GST_CAT_DATAFLOW, "putting buffer %p in peer's pen\n", buf);
@ -385,13 +389,10 @@ gst_basic_scheduler_select_proxy (GstPad * pad, GstBuffer * buf)
GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) = buf; GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) = buf;
GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p\n", GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p\n",
GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad))); GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
g_print ("%p %s\n", GST_ELEMENT (GST_PAD_PARENT (pad)),
gst_element_get_name (GST_ELEMENT (GST_PAD_PARENT (pad))));
GST_ELEMENT (GST_PAD_PARENT (pad))->select_pad = pad; GST_ELEMENT (GST_PAD_PARENT (pad))->select_pad = pad;
cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad))); cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
g_print ("done switching\n");
GST_DEBUG (GST_CAT_DATAFLOW, "done switching\n"); GST_DEBUG (GST_CAT_DATAFLOW, "done switching\n");
} }
@ -1165,7 +1166,6 @@ gst_basic_scheduler_pad_select (GstScheduler * sched, GList * padlist)
pad = GST_PAD (padlist2->data); pad = GST_PAD (padlist2->data);
if (gst_pad_peek (pad)) { if (gst_pad_peek (pad)) {
g_print ("found something in pad %s:%s\n", GST_DEBUG_PAD_NAME (pad));
return pad; return pad;
} }
@ -1185,12 +1185,9 @@ gst_basic_scheduler_pad_select (GstScheduler * sched, GList * padlist)
cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (peer))); cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (peer)));
g_print ("%p %s\n", GST_ELEMENT (GST_PAD_PARENT (pad)),
gst_element_get_name (GST_ELEMENT (GST_PAD_PARENT (pad))));
pad = GST_ELEMENT (GST_PAD_PARENT (pad))->select_pad; pad = GST_ELEMENT (GST_PAD_PARENT (pad))->select_pad;
g_assert (pad != NULL); g_assert (pad != NULL);
g_print ("back from select (%s:%s)\n", GST_DEBUG_PAD_NAME (pad));
} }
return pad; return pad;
} }