- Remove annoying \n from cothread INFO/DEBUG messages

Original commit message from CVS:
- Remove annoying \n from cothread INFO/DEBUG messages
- only set an element to PAUSED when it gave an error during PLAYING
- ensure internal consistency of opt scheduler structures
- Added mex_recursion to opt scheduler
This commit is contained in:
Wim Taymans 2003-01-01 04:28:33 +00:00
parent eb6c33fb23
commit 6653167f11
3 changed files with 62 additions and 14 deletions

View file

@ -221,7 +221,7 @@ cothread_create (cothread_context *ctx)
if (ctx->ncothreads == COTHREAD_MAXTHREADS) {
/* this is pretty fatal */
g_warning ("cothread_create: attempt to create > COTHREAD_MAXTHREADS\n");
g_warning ("cothread_create: attempt to create > COTHREAD_MAXTHREADS");
return NULL;
}
/* find a free spot in the stack, note slot 0 has the main thread */
@ -448,7 +448,7 @@ cothread_stub (void)
GST_DEBUG_ENTER ("");
GST_DEBUG (GST_CAT_COTHREADS, "stack addr %p\n", &ctx);
GST_DEBUG (GST_CAT_COTHREADS, "stack addr %p", &ctx);
cothread->flags |= COTHREAD_STARTED;
@ -647,17 +647,17 @@ cothread_switch (cothread_state *cothread)
#ifdef COTHREAD_PARANOID
nothread:
g_warning ("cothread: can't switch to NULL cothread!\n");
g_warning ("cothread: can't switch to NULL cothread!");
return;
nocontext:
g_warning ("cothread: there's no context, help!\n");
g_warning ("cothread: there's no context, help!");
exit (2);
nocurrent:
g_warning ("cothread: there's no current thread, help!\n");
g_warning ("cothread: there's no current thread, help!");
exit (2);
#endif /* COTHREAD_PARANOID */
selfswitch:
g_warning ("cothread: trying to switch to same thread, legal but not necessary\n");
g_warning ("cothread: trying to switch to same thread, legal but not necessary");
return;
}

View file

@ -2036,7 +2036,8 @@ gst_element_error (GstElement *element, const gchar *error, ...)
gst_scheduler_error (element->sched, element);
}
gst_element_set_state (element, GST_STATE_PAUSED);
if (GST_STATE (element) == GST_STATE_PLAYING)
gst_element_set_state (element, GST_STATE_PAUSED);
/* cleanup */
gst_object_unref (GST_OBJECT (element));

View file

@ -77,6 +77,8 @@ struct _GstOptScheduler {
GList *runqueue;
gint recursion;
gint max_recursion;
};
struct _GstOptSchedulerClass {
@ -176,6 +178,7 @@ enum
{
ARG_0,
ARG_ITERATIONS,
ARG_MAX_RECURSION,
};
@ -254,8 +257,15 @@ gst_opt_scheduler_class_init (GstOptSchedulerClass *klass)
gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_opt_scheduler_dispose);
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ITERATIONS,
g_param_spec_int ("iterations", "Iterations", "Number of groups to schedule in one iteration (-1 == until EOS/error)",
g_param_spec_int ("iterations", "Iterations",
"Number of groups to schedule in one iteration (-1 == until EOS/error)",
-1, G_MAXINT, 1, G_PARAM_READWRITE));
#ifndef USE_COTHREADS
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MAX_RECURSION,
g_param_spec_int ("max_recursion", "Max recursion",
"Maximum number of recursions",
1, G_MAXINT, 100, G_PARAM_READWRITE));
#endif
gstscheduler_class->setup = GST_DEBUG_FUNCPTR (gst_opt_scheduler_setup);
gstscheduler_class->reset = GST_DEBUG_FUNCPTR (gst_opt_scheduler_reset);
@ -281,6 +291,7 @@ gst_opt_scheduler_init (GstOptScheduler *scheduler)
{
scheduler->elements = NULL;
scheduler->iterations = 1;
scheduler->max_recursion = 100;
}
static void
@ -430,19 +441,33 @@ chain_group_set_enabled (GstOptSchedulerChain *chain, GstOptSchedulerGroup *grou
g_assert (chain != NULL);
g_assert (group != NULL);
GST_INFO (GST_CAT_SCHEDULING, "request to %d group %p in chain %p, have %d groups enabled out of %d",
enabled, group, chain, chain->num_enabled, chain->num_groups);
if (enabled)
GST_OPT_SCHEDULER_GROUP_ENABLE (group);
else
GST_OPT_SCHEDULER_GROUP_DISABLE (group);
if (enabled) {
chain->num_enabled++;
if (chain->num_enabled < chain->num_groups)
chain->num_enabled++;
GST_INFO (GST_CAT_SCHEDULING, "enable group %p in chain %p, now %d groups enabled out of %d", group, chain,
chain->num_enabled, chain->num_groups);
if (chain->num_enabled == chain->num_groups) {
GST_INFO (GST_CAT_SCHEDULING, "enable chain %p", chain);
GST_OPT_SCHEDULER_CHAIN_ENABLE (chain);
}
}
else {
chain->num_enabled--;
if (chain->num_enabled > 0)
chain->num_enabled--;
GST_INFO (GST_CAT_SCHEDULING, "disable group %p in chain %p, now %d groups enabled out of %d", group, chain,
chain->num_enabled, chain->num_groups);
if (chain->num_enabled == 0) {
GST_INFO (GST_CAT_SCHEDULING, "disable chain %p", chain);
GST_OPT_SCHEDULER_CHAIN_DISABLE (chain);
@ -594,23 +619,30 @@ group_element_set_enabled (GstOptSchedulerGroup *group, GstElement *element, gbo
g_assert (group != NULL);
g_assert (element != NULL);
GST_INFO (GST_CAT_SCHEDULING, "request to %d element %s in group %p, have %d elements enabled out of %d",
enabled, GST_ELEMENT_NAME (element), group, group->num_enabled, group->num_elements);
if (enabled) {
group->num_enabled++;
if (group->num_enabled < group->num_elements)
group->num_enabled++;
GST_INFO (GST_CAT_SCHEDULING, "enable element %s in group %p, now %d elements enabled out of %d",
GST_ELEMENT_NAME (element), group, group->num_enabled, group->num_elements);
if (group->num_enabled == group->num_elements) {
GST_INFO (GST_CAT_SCHEDULING, "enable group %p", group);
GST_OPT_SCHEDULER_GROUP_ENABLE (group);
chain_group_set_enabled (group->chain, group, TRUE);
}
}
else {
group->num_enabled--;
if (group->num_enabled > 0)
group->num_enabled--;
GST_INFO (GST_CAT_SCHEDULING, "disable element %s in group %p, now %d elements enabled out of %d",
GST_ELEMENT_NAME (element), group, group->num_enabled, group->num_elements);
if (group->num_enabled == 0) {
GST_INFO (GST_CAT_SCHEDULING, "disable group %p", group);
GST_OPT_SCHEDULER_GROUP_DISABLE (group);
chain_group_set_enabled (group->chain, group, FALSE);
}
}
@ -644,6 +676,12 @@ gst_opt_scheduler_schedule_run_queue (GstOptScheduler *osched)
{
GST_INFO (GST_CAT_SCHEDULING, "entering scheduler run queue recursion %d", osched->recursion);
/* make sure we don't exceed max_recursion */
if (osched->recursion > osched->max_recursion) {
osched->state = GST_OPT_SCHEDULER_STATE_ERROR;
return;
}
osched->recursion++;
while (osched->runqueue) {
@ -1558,6 +1596,9 @@ gst_opt_scheduler_show (GstScheduler *sched)
GstOptScheduler *osched = GST_OPT_SCHEDULER_CAST (sched);
GSList *chains;
g_print ("iterations: %d\n", osched->iterations);
g_print ("max recursion: %d\n", osched->max_recursion);
chains = osched->chains;
while (chains) {
GstOptSchedulerChain *chain = (GstOptSchedulerChain *) chains->data;
@ -1600,6 +1641,9 @@ gst_opt_scheduler_get_property (GObject *object, guint prop_id,
case ARG_ITERATIONS:
g_value_set_int (value, osched->iterations);
break;
case ARG_MAX_RECURSION:
g_value_set_int (value, osched->max_recursion);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -1620,6 +1664,9 @@ gst_opt_scheduler_set_property (GObject *object, guint prop_id,
case ARG_ITERATIONS:
osched->iterations = g_value_get_int (value);
break;
case ARG_MAX_RECURSION:
osched->max_recursion = g_value_get_int (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;