From 1debaf2b59474701c738dcd84aeb638ef0a0318d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Sep 2002 21:23:33 +0000 Subject: [PATCH] Added vmethod for when an element changes scheduling behaviour (like switching from chain based to loop based etc) Original commit message from CVS: Added vmethod for when an element changes scheduling behaviour (like switching from chain based to loop based etc) --- gst/gstscheduler.c | 26 +++++++++++++++++++++++++- gst/gstscheduler.h | 2 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c index ef9ed97..24b2d6f 100644 --- a/gst/gstscheduler.c +++ b/gst/gstscheduler.c @@ -203,8 +203,11 @@ gst_scheduler_add_element (GstScheduler *sched, GstElement *element) 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) + if (GST_ELEMENT_SCHED (element) == sched) { + GST_DEBUG (GST_CAT_SCHEDULING, "element %s already in scheduler %p", + GST_ELEMENT_NAME (element), sched); return; + } /* if it's not inside this scheduler, it has to be NULL */ g_assert (GST_ELEMENT_SCHED (element) == NULL); @@ -313,6 +316,27 @@ gst_scheduler_state_transition (GstScheduler *sched, GstElement *element, gint t } /** + * gst_scheduler_state_transition: + * @sched: the scheduler + * @element: the element with the state transition + * @transition: the state transition + * + * Tell the scheduler that an element changed its state. + * + * Returns: a GstElementStateReturn indicating success or failure + * of the state transition. + */ +void +gst_scheduler_scheduling_change (GstScheduler *sched, GstElement *element) +{ + g_return_if_fail (GST_IS_SCHEDULER (sched)); + g_return_if_fail (GST_IS_ELEMENT (element)); + + if (CLASS (sched)->scheduling_change) + CLASS (sched)->scheduling_change (sched, element); +} + +/** * gst_scheduler_add_scheduler: * @sched: a #GstScheduler to add to * @sched2: the #GstScheduler to add diff --git a/gst/gstscheduler.h b/gst/gstscheduler.h index d800074..e9eedad 100644 --- a/gst/gstscheduler.h +++ b/gst/gstscheduler.h @@ -89,6 +89,7 @@ struct _GstSchedulerClass { void (*add_scheduler) (GstScheduler *sched, GstScheduler *sched2); void (*remove_scheduler) (GstScheduler *sched, GstScheduler *sched2); GstElementStateReturn (*state_transition) (GstScheduler *sched, GstElement *element, gint transition); + void (*scheduling_change) (GstScheduler *sched, GstElement *element); void (*lock_element) (GstScheduler *sched, GstElement *element); void (*unlock_element) (GstScheduler *sched, GstElement *element); void (*yield) (GstScheduler *sched, GstElement *element); @@ -119,6 +120,7 @@ void gst_scheduler_remove_element (GstScheduler *sched, GstElement *element); void gst_scheduler_add_scheduler (GstScheduler *sched, GstScheduler *sched2); void gst_scheduler_remove_scheduler (GstScheduler *sched, GstScheduler *sched2); GstElementStateReturn gst_scheduler_state_transition (GstScheduler *sched, GstElement *element, gint transition); +void gst_scheduler_scheduling_change (GstScheduler *sched, GstElement *element); void gst_scheduler_lock_element (GstScheduler *sched, GstElement *element); void gst_scheduler_unlock_element (GstScheduler *sched, GstElement *element); void gst_scheduler_yield (GstScheduler *sched, GstElement *element); -- 2.7.4