mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 02:01:12 +00:00
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:
parent
03391373ef
commit
a4e4bb5795
5 changed files with 70 additions and 111 deletions
34
gst/gst.c
34
gst/gst.c
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
107
gst/gstprops.c
107
gst/gstprops.c
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue