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
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;
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;
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);
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;
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
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;
}
/**
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;
}
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;
}
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;
}
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;
}
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;
}
}
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);
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. */
}
}
+ 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;
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);
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");
}
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;
}
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;
}