From: Wim T. <wt...@us...> - 2002-09-13 23:03:08
|
CVS Root: /cvsroot/gstreamer Module: gstreamer Changes by: wtay Date: Fri Sep 13 2002 16:03:07 PDT Log message: - some cleanups - revert a patch that needs more thinking.. - move common code and sanity checks in gstscheduler.c instead of the real schedulers. - remove sanity checks from the schedulers Modified files: gst : gstelement.c gstpad.c gstscheduler.c gst/schedulers : gstbasicscheduler.c gstfastscheduler.c gstoptimalscheduler.c Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstelement.c.diff?r1=1.157&r2=1.158 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstpad.c.diff?r1=1.181&r2=1.182 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/gstscheduler.c.diff?r1=1.74&r2=1.75 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/schedulers/gstbasicscheduler.c.diff?r1=1.54&r2=1.55 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/schedulers/gstfastscheduler.c.diff?r1=1.11&r2=1.12 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gstreamer/gst/schedulers/gstoptimalscheduler.c.diff?r1=1.4&r2=1.5 ====Begin Diffs==== Index: gstelement.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gstelement.c,v retrieving revision 1.157 retrieving revision 1.158 diff -u -d -r1.157 -r1.158 --- gstelement.c 12 Sep 2002 20:52:01 -0000 1.157 +++ gstelement.c 13 Sep 2002 23:02:54 -0000 1.158 @@ -2475,7 +2475,7 @@ GST_INFO_ELEMENT (GST_CAT_PARENTAGE, element, "setting scheduler to %p", sched); - element->sched = sched; + GST_ELEMENT_SCHED (element) = sched; } /** @@ -2491,7 +2491,7 @@ { g_return_val_if_fail (GST_IS_ELEMENT (element), NULL); - return element->sched; + return GST_ELEMENT_SCHED (element); } /** Index: gstpad.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gstpad.c,v retrieving revision 1.181 retrieving revision 1.182 diff -u -d -r1.181 -r1.182 --- gstpad.c 13 Sep 2002 21:41:31 -0000 1.181 +++ gstpad.c 13 Sep 2002 23:02:54 -0000 1.182 @@ -827,11 +827,13 @@ GST_RPAD_FILTER (realsrc) = NULL; } - /* now tell the scheduler, the schedulers on both paths are guaranteed to be the same, - * so we can just take one */ - if (src_sched && src_sched == sink_sched) + /* now tell the scheduler */ + if (src_sched) gst_scheduler_pad_disconnect (src_sched, GST_PAD_CAST (realsrc), GST_PAD_CAST (realsink)); + else if (sink_sched) + gst_scheduler_pad_disconnect (sink_sched, + GST_PAD_CAST (realsrc), GST_PAD_CAST (realsink)); /* hold a reference, as they can go away in the signal handlers */ gst_object_ref (GST_OBJECT (realsrc)); @@ -1018,8 +1020,7 @@ src_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsrc)); sink_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsink)); - /* now tell the scheduler, the schedulers on both paths have to be the same, - * so we can just take one */ + /* now tell the scheduler */ if (src_sched) gst_scheduler_pad_connect (src_sched, GST_PAD_CAST (realsrc), GST_PAD_CAST (realsink)); Index: gstscheduler.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/gstscheduler.c,v retrieving revision 1.74 retrieving revision 1.75 diff -u -d -r1.74 -r1.75 --- gstscheduler.c 13 Sep 2002 21:55:35 -0000 1.74 +++ gstscheduler.c 13 Sep 2002 23:02:54 -0000 1.75 @@ -202,6 +202,13 @@ g_return_if_fail (GST_IS_SCHEDULER (sched)); g_return_if_fail (GST_IS_ELEMENT (element)); + /* if it's already in this scheduler, don't bother doing anything */ + if (GST_ELEMENT_SCHED (element) == sched) + return; + + /* if it's not inside this scheduler, it has to be NULL */ + g_assert (GST_ELEMENT_SCHED (element) == NULL); + if (element->getclockfunc) { sched->clock_providers = g_list_prepend (sched->clock_providers, element); GST_DEBUG (GST_CAT_CLOCK, "added clock provider %s", GST_ELEMENT_NAME (element)); @@ -211,7 +218,7 @@ GST_DEBUG (GST_CAT_CLOCK, "added clock receiver %s", GST_ELEMENT_NAME (element)); } - /* gst_element_set_scheduler (element, sched); */ + gst_element_set_scheduler (element, sched); if (CLASS (sched)->add_element) CLASS (sched)->add_element (sched, element); @@ -233,10 +240,10 @@ sched->clock_providers = g_list_remove (sched->clock_providers, element); sched->clock_receivers = g_list_remove (sched->clock_receivers, element); - /* gst_element_set_scheduler (element, NULL); */ - if (CLASS (sched)->remove_element) CLASS (sched)->remove_element (sched, element); + + gst_element_set_scheduler (element, NULL); } /** Index: gstbasicscheduler.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/schedulers/gstbasicscheduler.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- gstbasicscheduler.c 12 Sep 2002 20:52:03 -0000 1.54 +++ gstbasicscheduler.c 13 Sep 2002 23:02:54 -0000 1.55 @@ -1018,27 +1018,13 @@ GstSchedulerChain *chain; GstBasicScheduler *bsched = GST_BASIC_SCHEDULER (sched); - /* if it's already in this scheduler, don't bother doing anything */ - if (GST_ELEMENT_SCHED (element) == sched) - return; - GST_INFO (GST_CAT_SCHEDULING, "adding element \"%s\" to scheduler", GST_ELEMENT_NAME (element)); - /* if the element already has a scheduler something went wrong */ - if (GST_ELEMENT_SCHED (element)) { - GST_ERROR (element, "grave error"); - return; - } - - /* set the sched pointer in the element itself */ - GST_ELEMENT_SCHED (element) = sched; - /* only deal with elements after this point, not bins */ /* exception is made for Bin's that are schedulable, like the autoplugger */ if (GST_IS_BIN (element) && !GST_FLAG_IS_SET (element, GST_BIN_SELF_SCHEDULABLE)) return; - /* first add it to the list of elements that are to be scheduled */ bsched->elements = g_list_prepend (bsched->elements, element); bsched->num_elements++; @@ -1098,7 +1084,6 @@ /* unset the scheduler pointer in the element */ } - GST_ELEMENT_SCHED (element) = NULL; } static GstElementStateReturn Index: gstfastscheduler.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/schedulers/gstfastscheduler.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- gstfastscheduler.c 12 Sep 2002 20:52:03 -0000 1.11 +++ gstfastscheduler.c 13 Sep 2002 23:02:54 -0000 1.12 @@ -675,20 +675,8 @@ GstSchedulerChain *chain; GstFastScheduler *bsched = GST_FAST_SCHEDULER (sched); - /* if it's already in this scheduler, don't bother doing anything */ - if (GST_ELEMENT_SCHED (element) == sched) - return; - GST_INFO (GST_CAT_SCHEDULING, "adding element \"%s\" to scheduler", GST_ELEMENT_NAME (element)); - /* if the element already has a different scheduler, remove the element from it */ - if (GST_ELEMENT_SCHED (element)) { - gst_fast_scheduler_remove_element (GST_ELEMENT_SCHED (element), element); - } - - /* set the sched pointer in the element itself */ - GST_ELEMENT_SCHED (element) = sched; - /* only deal with elements after this point, not bins */ /* exception is made for Bin's that are schedulable, like the autoplugger */ if (GST_IS_BIN (element) && !GST_FLAG_IS_SET (element, GST_BIN_SELF_SCHEDULABLE)) @@ -743,9 +731,6 @@ /* remove it from the list of elements */ bsched->elements = g_list_remove (bsched->elements, element); bsched->num_elements--; - - /* unset the scheduler pointer in the element */ - GST_ELEMENT_SCHED (element) = NULL; } } Index: gstoptimalscheduler.c =================================================================== RCS file: /cvsroot/gstreamer/gstreamer/gst/schedulers/gstoptimalscheduler.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstoptimalscheduler.c 12 Sep 2002 21:00:57 -0000 1.4 +++ gstoptimalscheduler.c 13 Sep 2002 23:02:54 -0000 1.5 @@ -120,6 +120,7 @@ #define GST_OPT_SCHEDULER_GROUP_DISABLE(group) ((group)->flags |= GST_OPT_SCHEDULER_GROUP_DISABLED) #define GST_OPT_SCHEDULER_GROUP_ENABLE(group) ((group)->flags &= ~GST_OPT_SCHEDULER_GROUP_DISABLED) +#define GST_OPT_SCHEDULER_GROUP_IS_ENABLED(group) (!((group)->flags & GST_OPT_SCHEDULER_GROUP_DISABLED)) #define GST_OPT_SCHEDULER_GROUP_IS_DISABLED(group) ((group)->flags & GST_OPT_SCHEDULER_GROUP_DISABLED) typedef struct _GstOptSchedulerGroup GstOptSchedulerGroup; |