Small cleanups
authorWim Taymans <wim.taymans@gmail.com>
Tue, 1 Jan 2002 13:51:04 +0000 (13:51 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Tue, 1 Jan 2002 13:51:04 +0000 (13:51 +0000)
Original commit message from CVS:
Small cleanups
Added a bound to the number of switches, also fix a small bug

gst/gst.c
gst/gstbin.c
gst/gstobject.c
gst/gstprops.c
gst/schedulers/gstbasicscheduler.c

index 9b86764..09b198a 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -199,6 +199,16 @@ load_plugin_func (gpointer data, gpointer user_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 */
 static gboolean
@@ -219,13 +229,7 @@ gst_init_check (int     *argc,
       if (!strncmp ("--gst-info-mask=", (*argv)[i], 16)) {
        guint32 val;
 
-        /* handle either 0xHEX or dec */
-        if (*((*argv)[i]+17) == 'x') {
-          sscanf ((*argv)[i]+18, "%08x", &val);
-        } else {
-          sscanf ((*argv)[i]+16, "%d", &val);
-        }
-
+       parse_number ((*argv)[i]+16, &val);
        gst_info_set_categories (val);
 
        (*argv)[i] = NULL;
@@ -233,13 +237,7 @@ gst_init_check (int     *argc,
       else if (!strncmp ("--gst-debug-mask=", (*argv)[i], 17)) {
        guint32 val;
 
-        /* handle either 0xHEX or dec */
-        if (*((*argv)[i]+18) == 'x') {
-          sscanf ((*argv)[i]+19, "%08x", &val);
-        } else {
-          sscanf ((*argv)[i]+17, "%d", &val);
-        }
-
+       parse_number ((*argv)[i]+17, &val);
        gst_debug_set_categories (val);
 
        (*argv)[i] = NULL;
@@ -247,13 +245,7 @@ gst_init_check (int     *argc,
       else if (!strncmp ("--gst-mask=", (*argv)[i], 11)) {
        guint32 val;
 
-        /* handle either 0xHEX or dec */
-        if (*((*argv)[i]+12) == 'x') {
-          sscanf ((*argv)[i]+13, "%08x", &val);
-        } else {
-          sscanf ((*argv)[i]+11, "%d", &val);
-        }
-
+       parse_number ((*argv)[i]+11, &val);
        gst_debug_set_categories (val);
        gst_info_set_categories (val);
 
index cda319a..1bac784 100644 (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--) {
     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_ELEMENT_NAME (bin), gst_element_statename (1 << i));
-       GST_STATE_PENDING (bin) = (1 << i);
+                 GST_ELEMENT_NAME (bin), gst_element_statename (state));
+       GST_STATE_PENDING (bin) = state;
        gst_bin_change_state_norecurse (bin);
       }
       break;
index f7a34a0..081fd1c 100644 (file)
@@ -102,20 +102,20 @@ gst_object_class_init (GstObjectClass *klass)
   gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_object_set_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",
                          NULL, G_PARAM_READWRITE));
 
   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_cclosure_marshal_VOID__OBJECT,G_TYPE_NONE,1,
+                  g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
                   G_TYPE_OBJECT);
 #ifndef GST_DISABLE_LOADSAVE_REGISTRY
   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_cclosure_marshal_VOID__POINTER,G_TYPE_NONE,1,
+                  g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
                   G_TYPE_POINTER);
 #endif
 
index 3524be3..4d4cb3b 100644 (file)
@@ -590,7 +590,28 @@ gst_props_copy_on_write (GstProps *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
 gst_props_get_int (GstProps *props, const gchar *name)
 {
-  GList *lentry;
-  GQuark quark;
-  
-  g_return_val_if_fail (props != NULL, 0);
-  g_return_val_if_fail (name != NULL, 0);
-
-  quark = g_quark_from_string (name);
-
-  lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
-
-  if (lentry) {
-    GstPropsEntry *thisentry;
+  GstPropsEntry *thisentry;
 
-    thisentry = (GstPropsEntry *)lentry->data;
+  thisentry = gst_props_get_entry_func (props, name);
 
+  if (thisentry) {
     return thisentry->data.int_data;
   }
-  
   return 0;
 }
 
@@ -638,21 +648,13 @@ gst_props_get_int (GstProps *props, const gchar *name)
 gfloat
 gst_props_get_float (GstProps *props, const gchar *name)
 {
-  GList *lentry;
-  GQuark quark;
-  
-  quark = g_quark_from_string (name);
-
-  lentry = g_list_find_custom (props->properties, GINT_TO_POINTER (quark), props_find_func);
-
-  if (lentry) {
-    GstPropsEntry *thisentry;
+  GstPropsEntry *thisentry;
 
-    thisentry = (GstPropsEntry *)lentry->data;
+  thisentry = gst_props_get_entry_func (props, name);
 
+  if (thisentry) {
     return thisentry->data.float_data;
   }
-  
   return 0.0F;
 }
 
@@ -668,24 +670,13 @@ gst_props_get_float (GstProps *props, const gchar *name)
 gulong
 gst_props_get_fourcc_int (GstProps *props, const gchar *name)
 {
-  GList *lentry;
-  GQuark quark;
-  
-  g_return_val_if_fail (props != NULL, 0);
-  g_return_val_if_fail (name != NULL, 0);
+  GstPropsEntry *thisentry;
 
-  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;
+  thisentry = gst_props_get_entry_func (props, name);
 
+  if (thisentry) {
     return thisentry->data.fourcc_data;
   }
-  
   return 0;
 }
 
@@ -701,24 +692,13 @@ gst_props_get_fourcc_int (GstProps *props, const gchar *name)
 gboolean
 gst_props_get_boolean (GstProps *props, const gchar *name)
 {
-  GList *lentry;
-  GQuark quark;
-  
-  g_return_val_if_fail (props != NULL, FALSE);
-  g_return_val_if_fail (name != NULL, FALSE);
+  GstPropsEntry *thisentry;
 
-  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;
+  thisentry = gst_props_get_entry_func (props, name);
 
+  if (thisentry) {
     return thisentry->data.bool_data;
   }
-  
   return 0;
 }
 
@@ -734,24 +714,13 @@ gst_props_get_boolean (GstProps *props, const gchar *name)
 const gchar*
 gst_props_get_string (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);
+  GstPropsEntry *thisentry;
 
-  if (lentry) {
-    GstPropsEntry *thisentry;
-
-    thisentry = (GstPropsEntry *)lentry->data;
+  thisentry = gst_props_get_entry_func (props, name);
 
+  if (thisentry) {
     return thisentry->data.string_data.string;
   }
-  
   return NULL;
 }
 
@@ -973,7 +942,7 @@ gst_props_check_compatibility (GstProps *fromprops, GstProps *toprops)
     }
 
     if (!gst_props_entry_check_compatibility (entry1, entry2)) {
-       compatible = FALSE;
+       compatible = FALSE; 
        GST_DEBUG (GST_CAT_PROPERTIES, "%s are not compatible: \n",
                   g_quark_to_string (entry1->propid));
        gst_props_debug_entry (entry1);
index 0fc128b..3027380 100644 (file)
@@ -341,17 +341,18 @@ static void
 gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf)
 {
   GstRealPad *peer = GST_RPAD_PEER (pad);
+  gint loop_count = 100;
 
   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_PAD_NAME (peer));
 
-  /* FIXME this should be bounded
+  /* 
    * loop until the bufferpen is empty so we can fill it up again
    */
-  while (GST_RPAD_BUFPEN (pad) != NULL) {
-    GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p to empty bufpen\n",
-              GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
+  while (GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) != NULL && --loop_count) {
+    GST_DEBUG (GST_CAT_DATAFLOW, "switching to %p to empty bufpen %d\n",
+              GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)), loop_count);
     cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
 
     /* 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);
   /* now fill the bufferpen and switch so it can be consumed */
   GST_RPAD_BUFPEN (GST_RPAD_PEER (pad)) = buf;
@@ -374,8 +380,6 @@ gst_basic_scheduler_chainhandler_proxy (GstPad * pad, GstBuffer * buf)
 static void
 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 (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_DEBUG (GST_CAT_DATAFLOW, "switching to %p\n",
             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;
 
   cothread_switch (GST_ELEMENT_THREADSTATE (GST_PAD_PARENT (pad)));
 
-  g_print ("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);
 
     if (gst_pad_peek (pad)) {
-      g_print ("found something in pad %s:%s\n", GST_DEBUG_PAD_NAME (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)));
 
-    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;
 
     g_assert (pad != NULL);
-    g_print ("back from select (%s:%s)\n", GST_DEBUG_PAD_NAME (pad));
   }
   return pad;
 }