gst_spider_identity_plug (GstSpiderIdentity *ident)
{
GstSpider *spider;
- GList *padlist;
+ const GList *padlist;
GstPadDirection dir;
GstSpiderConnection *conn;
static gboolean
gst_autoplug_pads_autoplug_func (GstElement *src, GstPad *pad, GstElement *sink)
{
- GList *sinkpads;
+ const GList *sinkpads;
gboolean connected = FALSE;
GST_DEBUG (0,"gstpipeline: autoplug pad connect function for \"%s\" to \"%s\"",
autoplug_dynamic_pad (GstElement *element, GstPad *pad, gpointer data)
{
dynamic_pad_struct *info = (dynamic_pad_struct *)data;
- GList *pads = gst_element_get_pad_list (element);
+ const GList *pads = gst_element_get_pad_list (element);
GST_DEBUG (0,"attempting to dynamically create a ghostpad for %s=%s", GST_ELEMENT_NAME (element),
GST_PAD_NAME (pad));
static void
gst_autoplug_pads_autoplug (GstElement *src, GstElement *sink)
{
- GList *srcpads;
+ const GList *srcpads;
gboolean connected = FALSE;
srcpads = gst_element_get_pad_list(src);
}
/* this is the first element, find a good ghostpad */
else {
- GList *pads;
+ const GList *pads;
pads = gst_element_get_pad_list (element);
*/
{
GstCaps *endcap = (GstCaps *)(endcaps->data);
- GList *pads = gst_element_get_pad_list (thesrcelement);
+ const GList *pads = gst_element_get_pad_list (thesrcelement);
gboolean have_pad = FALSE;
endcaps = g_list_next (endcaps);
static gboolean
gst_autoplug_pads_autoplug_func (GstElement *src, GstPad *pad, GstElement *sink)
{
- GList *sinkpads;
+ const GList *sinkpads;
gboolean connected = FALSE;
GstElementState state = GST_STATE (gst_element_get_parent (src));
static void
gst_autoplug_pads_autoplug (GstElement *src, GstElement *sink)
{
- GList *srcpads;
+ const GList *srcpads;
gboolean connected = FALSE;
srcpads = gst_element_get_pad_list(src);
}
/* this is the first element, find a good ghostpad */
else {
- GList *pads;
+ const GList *pads;
pads = gst_element_get_pad_list (element);
static GType aggregator_sched_type = 0;
static GEnumValue aggregator_sched[] = {
{ AGGREGATOR_LOOP, "1", "Loop Based"},
- { AGGREGATOR_LOOP_PEEK, "2", "Loop Based Peek"},
{ AGGREGATOR_LOOP_SELECT, "3", "Loop Based Select"},
{ AGGREGATOR_CHAIN, "4", "Chain Based"},
{0, NULL, NULL},
aggregator = GST_AGGREGATOR (element);
- if (aggregator->sched == AGGREGATOR_LOOP ||
- aggregator->sched == AGGREGATOR_LOOP_PEEK) {
+ if (aggregator->sched == AGGREGATOR_LOOP) {
GList *pads = aggregator->sinkpads;
while (pads) {
GstPad *pad = GST_PAD (pads->data);
pads = g_list_next (pads);
- if (aggregator->sched == AGGREGATOR_LOOP_PEEK) {
- buf = gst_pad_peek (pad);
- if (buf == NULL)
- continue;
-
- g_assert (buf == gst_pad_pull (pad));
- debug = "loop_peek";
- }
- else {
- buf = gst_pad_pull (pad);
- debug = "loop";
- }
+ buf = gst_pad_pull (pad);
+ debug = "loop";
+
gst_aggregator_push (aggregator, pad, buf, debug);
}
}
typedef enum {
AGGREGATOR_LOOP = 1,
- AGGREGATOR_LOOP_PEEK,
AGGREGATOR_LOOP_SELECT,
AGGREGATOR_CHAIN,
} GstAggregatorSchedType;
srcpad = gst_pad_new_from_template (templ, name);
gst_element_add_pad (GST_ELEMENT (fakesrc), srcpad);
+ gst_fakesrc_update_functions (fakesrc);
g_free (name);
gst_fakesrc_loop(GstElement *element)
{
GstFakeSrc *src;
- GList *pads;
+ const GList *pads;
g_return_if_fail(element != NULL);
g_return_if_fail(GST_IS_FAKESRC(element));
gst_tee_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstTee *tee;
- GList *pads;
+ const GList *pads;
GstPadConnectReturn set_retval;
tee = GST_TEE (gst_pad_get_parent (pad));
gchar *name;
GstPad *srcpad;
GstTee *tee;
- int i = 0;
- GList *pads;
+ gint i = 0;
+ const GList *pads;
g_return_val_if_fail (GST_IS_TEE (element), NULL);
while (!name)
{
name = g_strdup_printf ("src%d", i);
- if (g_list_find_custom (pads, (gconstpointer) name, name_pad_compare) != NULL)
+ if (g_list_find_custom ((GList *)pads, (gconstpointer) name, name_pad_compare) != NULL)
{
/* this name is taken, use the next one */
++i;
gst_tee_chain (GstPad *pad, GstBuffer *buf)
{
GstTee *tee;
- GList *pads;
+ const GList *pads;
g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_PAD (pad));
*
* Returns: the #GList of pads.
*/
-GList*
+const GList*
gst_element_get_pad_list (GstElement *element)
{
g_return_val_if_fail (element != NULL, NULL);
gst_element_get_compatible_pad_filtered (GstElement *element, GstPad *pad,
GstCaps *filtercaps)
{
- GList *pads;
+ const GList *pads;
GstPadTemplate *templ;
GstCaps *templcaps;
GstPad *foundpad = NULL;
gst_element_connect_filtered (GstElement *src, GstElement *dest,
GstCaps *filtercaps)
{
- GList *srcpads, *destpads, *srctempls, *desttempls, *l;
+ const GList *srcpads, *destpads, *srctempls, *desttempls, *l;
GstPad *srcpad, *destpad;
GstPadTemplate *srctempl, *desttempl;
void
gst_element_disconnect (GstElement *src, GstElement *dest)
{
- GList *srcpads;
+ const GList *srcpads;
GstPad *pad;
g_return_if_fail (GST_IS_ELEMENT (src));
GstPad* gst_element_get_request_pad (GstElement *element, const gchar *name);
void gst_element_release_request_pad (GstElement *element, GstPad *pad);
-GList* gst_element_get_pad_list (GstElement *element);
+const GList* gst_element_get_pad_list (GstElement *element);
GstPad* gst_element_get_compatible_pad (GstElement *element, GstPad *pad);
GstPad* gst_element_get_compatible_pad_filtered (GstElement *element, GstPad *pad,
GstCaps *filtercaps);
pad->direction = GST_PAD_UNKNOWN;
pad->peer = NULL;
- pad->sched = NULL;
- pad->sched_private = NULL;
-
pad->chainfunc = NULL;
pad->getfunc = NULL;
gst_pad_set_active (GST_PAD (object), g_value_get_boolean (value));
break;
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
gst_real_pad_get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- /* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_PAD (object));
switch (prop_id) {
g_value_set_boolean (value, !GST_FLAG_IS_SET (object, GST_PAD_DISABLED));
break;
default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
GstPad *sinkpad)
{
GstRealPad *realsrc, *realsink;
+ GstScheduler *src_sched, *sink_sched;
/* generic checks */
g_return_if_fail (srcpad != NULL);
g_return_if_fail ((GST_RPAD_DIRECTION (realsrc) == GST_PAD_SRC) &&
(GST_RPAD_DIRECTION (realsink) == GST_PAD_SINK));
+ /* get the schedulers before we disconnect */
+ src_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsrc));
+ sink_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsink));
+
/* first clear peers */
GST_RPAD_PEER (realsrc) = NULL;
GST_RPAD_PEER (realsink) = NULL;
GST_RPAD_FILTER (realsrc) = NULL;
}
- /* now tell the scheduler */
- if (GST_PAD_PARENT (realsrc)->sched)
- gst_scheduler_pad_disconnect (GST_PAD_PARENT (realsrc)->sched,
- (GstPad *) realsrc, (GstPad *) realsink);
- else if (GST_PAD_PARENT (realsink)->sched)
- gst_scheduler_pad_disconnect (GST_PAD_PARENT (realsink)->sched,
- (GstPad *) realsrc, (GstPad *) realsink);
+ /* 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)
+ gst_scheduler_pad_disconnect (src_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));
gst_object_unref (GST_OBJECT (realsink));
}
+static gboolean
+gst_pad_check_schedulers (GstRealPad *realsrc, GstRealPad *realsink)
+{
+ GstScheduler *src_sched, *sink_sched;
+ gint num_decoupled = 0;
+
+ src_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsrc));
+ sink_sched = gst_pad_get_scheduler (GST_PAD_CAST (realsink));
+
+ if (src_sched && sink_sched) {
+ if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsrc), GST_ELEMENT_DECOUPLED))
+ num_decoupled++;
+ if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsink), GST_ELEMENT_DECOUPLED))
+ num_decoupled++;
+
+ if (src_sched != sink_sched && num_decoupled != 1) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
/**
* gst_pad_can_connect_filtered:
* @srcpad: the source #GstPad to connect.
gst_pad_can_connect_filtered (GstPad *srcpad, GstPad *sinkpad,
GstCaps *filtercaps)
{
- gint num_decoupled = 0;
GstRealPad *realsrc, *realsink;
/* generic checks */
g_return_val_if_fail (GST_PAD_PARENT (realsrc) != NULL, FALSE);
g_return_val_if_fail (GST_PAD_PARENT (realsink) != NULL, FALSE);
- if (realsrc->sched && realsink->sched) {
- if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsrc), GST_ELEMENT_DECOUPLED))
- num_decoupled++;
- if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsink), GST_ELEMENT_DECOUPLED))
- num_decoupled++;
-
- if (realsrc->sched != realsink->sched && num_decoupled != 1) {
- g_warning ("connecting pads with different scheds requires "
- "exactly one decoupled element (queue)");
- return FALSE;
- }
+ if (!gst_pad_check_schedulers (realsrc, realsink)) {
+ g_warning ("connecting pads with different scheds requires "
+ "exactly one decoupled element (queue)");
+ return FALSE;
}
/* check if the directions are compatible */
gst_pad_connect_filtered (GstPad *srcpad, GstPad *sinkpad, GstCaps *filtercaps)
{
GstRealPad *realsrc, *realsink;
- gint num_decoupled = 0;
+ GstScheduler *src_sched, *sink_sched;
/* generic checks */
g_return_val_if_fail (srcpad != NULL, FALSE);
g_return_val_if_fail (GST_PAD_PARENT (realsrc) != NULL, FALSE);
g_return_val_if_fail (GST_PAD_PARENT (realsink) != NULL, FALSE);
- if (realsrc->sched && realsink->sched) {
- if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsrc), GST_ELEMENT_DECOUPLED))
- num_decoupled++;
- if (GST_FLAG_IS_SET (GST_PAD_PARENT (realsink), GST_ELEMENT_DECOUPLED))
- num_decoupled++;
-
- if (realsrc->sched != realsink->sched && num_decoupled != 1) {
- g_warning ("connecting pads with different scheds "
- "requires exactly one decoupled element (queue)\n");
- return FALSE;
- }
+ if (!gst_pad_check_schedulers (realsrc, realsink)) {
+ g_warning ("connecting pads with different scheds requires "
+ "exactly one decoupled element (such as queue)");
+ return FALSE;
}
-
+
/* check for reversed directions and swap if necessary */
if ((GST_RPAD_DIRECTION (realsrc) == GST_PAD_SINK) &&
(GST_RPAD_DIRECTION (realsink) == GST_PAD_SRC)) {
g_signal_emit (G_OBJECT (realsink), gst_real_pad_signals[REAL_CONNECTED],
0, realsrc);
- /* now tell the scheduler(s) */
- if (realsrc->sched)
- gst_scheduler_pad_connect (realsrc->sched,
- (GstPad *) realsrc, (GstPad *) realsink);
- else if (realsink->sched)
- gst_scheduler_pad_connect (realsink->sched,
- (GstPad *) realsrc, (GstPad *) realsink);
+ 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 */
+ if (src_sched && src_sched == sink_sched)
+ gst_scheduler_pad_connect (src_sched,
+ GST_PAD_CAST (realsrc), GST_PAD_CAST (realsink));
GST_INFO (GST_CAT_PADS, "connected %s:%s and %s:%s",
GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
/**
- * gst_pad_set_scheduler:
- * @pad: a #GstPad to set the scheduler of.
- * @sched: the #GstScheduler to set.
- *
- * Sets the scheduler on the pad.
- */
-void
-gst_pad_set_scheduler (GstPad *pad, GstScheduler *sched)
-{
- g_return_if_fail (pad != NULL);
- g_return_if_fail (GST_IS_PAD (pad));
-
- GST_RPAD_SCHED(pad) = sched;
-}
-
-/**
* gst_pad_get_scheduler:
* @pad: a #GstPad to get the scheduler of.
*
GstScheduler*
gst_pad_get_scheduler (GstPad *pad)
{
+ GstScheduler *scheduler = NULL;
+ GstElement *parent;
+
g_return_val_if_fail (pad != NULL, NULL);
g_return_val_if_fail (GST_IS_PAD (pad), NULL);
-
- return GST_RPAD_SCHED (pad);
-}
+
+ parent = gst_pad_get_parent (pad);
+ if (parent) {
+ if (GST_FLAG_IS_SET (parent, GST_ELEMENT_DECOUPLED)) {
+ GstRealPad *peer = GST_RPAD_PEER (pad);
-/**
- * gst_pad_unset_scheduler:
- * @pad: a #GstPad to unset the scheduler for.
- *
- * Unsets the scheduler for the pad.
- */
-void
-gst_pad_unset_scheduler (GstPad *pad)
-{
- g_return_if_fail (pad != NULL);
- g_return_if_fail (GST_IS_PAD (pad));
+ if (peer) {
+ scheduler = gst_element_get_scheduler (gst_pad_get_parent (GST_PAD_CAST (peer)));
+ }
+ }
+ else {
+ scheduler = gst_element_get_scheduler (parent);
+ }
+ }
- GST_RPAD_SCHED (pad) = NULL;
+ return scheduler;
}
-
+
/**
* gst_pad_get_real_parent:
* @pad: a #GstPad to get the real parent of.
}
/**
- * gst_pad_peek:
- * @pad: the #GstPad to peek at.
- *
- * Peeks for the presence of a buffer on the peer pad.
- *
- * Returns: a #GstBuffer waiting on the the peer pad,
- * or NULL if the peer has no waiting buffer.
- */
-GstBuffer*
-gst_pad_peek (GstPad *pad)
-{
- g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SINK, NULL);
-
- return GST_RPAD_BUFPEN (GST_RPAD_PEER (pad));
-}
-
-/**
* gst_pad_select:
* @padlist: a #GList of pads.
*
GstPadDirection direction;
- GstScheduler *sched;
- gpointer sched_private;
-
GstPadConnectFunction connectfunc;
GstRealPad *peer;
- GstBuffer *bufpen;
+ gpointer sched_private;
/* data transport functions */
GstPadChainFunction chainfunc;
#define GST_RPAD_FILTER(pad) (((GstRealPad *)(pad))->filter)
#define GST_RPAD_APPFILTER(pad) (((GstRealPad *)(pad))->appfilter)
#define GST_RPAD_PEER(pad) (((GstRealPad *)(pad))->peer)
-#define GST_RPAD_BUFPEN(pad) (((GstRealPad *)(pad))->bufpen)
-#define GST_RPAD_SCHED(pad) (((GstRealPad *)(pad))->sched)
#define GST_RPAD_CHAINFUNC(pad) (((GstRealPad *)(pad))->chainfunc)
#define GST_RPAD_CHAINHANDLER(pad) (((GstRealPad *)(pad))->chainhandler)
#define GST_RPAD_GETFUNC(pad) (((GstRealPad *)(pad))->getfunc)
GstElement* gst_pad_get_parent (GstPad *pad);
GstElement* gst_pad_get_real_parent (GstPad *pad);
-void gst_pad_set_scheduler (GstPad *pad, GstScheduler *sched);
GstScheduler* gst_pad_get_scheduler (GstPad *pad);
-void gst_pad_unset_scheduler (GstPad *pad);
void gst_pad_add_ghost_pad (GstPad *pad, GstPad *ghostpad);
void gst_pad_remove_ghost_pad (GstPad *pad, GstPad *ghostpad);
GstBuffer* gst_pad_pull (GstPad *pad);
gboolean gst_pad_send_event (GstPad *pad, GstEvent *event);
gboolean gst_pad_event_default (GstPad *pad, GstEvent *event);
-GstBuffer* gst_pad_peek (GstPad *pad);
GstPad* gst_pad_select (GList *padlist);
GstPad* gst_pad_selectv (GstPad *pad, ...);
if (queue->interrupt) {
GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "interrupted!!");
g_mutex_unlock (queue->qlock);
- if (gst_scheduler_interrupt (GST_RPAD_SCHED (queue->sinkpad), GST_ELEMENT (queue)))
+ if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->sinkpad), GST_ELEMENT (queue)))
return;
/* if we got here bacause we were unlocked after a flush, we don't need
* to add the buffer to the queue again */
if (queue->interrupt) {
GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "interrupted!!");
g_mutex_unlock (queue->qlock);
- if (gst_scheduler_interrupt (GST_RPAD_SCHED (queue->srcpad), GST_ELEMENT (queue)))
+ if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->srcpad), GST_ELEMENT (queue)))
return NULL;
goto restart;
}
GST_DEBUG (GST_CAT_CLOCK, "added clock receiver %s", GST_ELEMENT_NAME (element));
}
+ gst_element_set_scheduler (element, sched);
+
if (CLASS (sched)->add_element)
CLASS (sched)->add_element (sched, element);
}
void
gst_scheduler_remove_element (GstScheduler *sched, GstElement *element)
{
- GList *pads;
-
g_return_if_fail (GST_IS_SCHEDULER (sched));
g_return_if_fail (GST_IS_ELEMENT (element));
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);
-
- for (pads = element->pads; pads; pads = pads->next) {
- GstPad *pad = GST_PAD (pads->data);
-
- if (GST_IS_REAL_PAD (pad)) {
- gst_pad_unset_scheduler (GST_PAD (pads->data));
- }
- }
}
/**
typedef struct _GstSchedulerChain GstSchedulerChain;
-#define GST_PAD_THREADSTATE(pad) (cothread*) (GST_PAD_CAST (pad)->sched_private)
#define GST_ELEMENT_THREADSTATE(elem) (cothread*) (GST_ELEMENT_CAST (elem)->sched_private)
+#define GST_RPAD_BUFPEN(pad) (GstBuffer*) (GST_REAL_PAD_CAST(pad)->sched_private)
#define GST_ELEMENT_COTHREAD_STOPPING GST_ELEMENT_SCHEDULER_PRIVATE1
#define GST_ELEMENT_IS_COTHREAD_STOPPING(element) GST_FLAG_IS_SET((element), GST_ELEMENT_COTHREAD_STOPPING)
GList *elements;
GstElement *element;
cothread_func wrapper_function;
- GList *pads;
+ const GList *pads;
GstPad *pad;
GST_DEBUG (GST_CAT_SCHEDULING, "chain is using COTHREADS");
GST_DEBUG_PAD_NAME (peerpad));
GST_RPAD_GETHANDLER (peerpad) = GST_RPAD_GETFUNC (peerpad);
}
- gst_pad_set_scheduler (peerpad, GST_SCHEDULER (chain->sched));
}
}
}
if (!GST_IS_REAL_PAD (pad))
continue;
- /* set the pad's sched pointer */
- gst_pad_set_scheduler (pad, sched);
-
/* if the peer element exists and is a candidate */
if (GST_PAD_PEER (pad)) {
peerelement = GST_PAD_PARENT (GST_PAD_PEER (pad));
while (padlist2) {
pad = GST_PAD (padlist2->data);
- if (gst_pad_peek (pad)) {
- return pad;
- }
padlist2 = g_list_next (padlist2);
}
typedef struct _GstSchedulerChain GstSchedulerChain;
-#define GST_PAD_THREADSTATE(pad) (cothread*) (GST_PAD_CAST (pad)->sched_private)
#define GST_ELEMENT_THREADSTATE(elem) (cothread*) (GST_ELEMENT_CAST (elem)->sched_private)
+#define GST_RPAD_BUFPEN(pad) (GstBuffer*) (GST_REAL_PAD_CAST(pad)->sched_private)
#define GST_ELEMENT_COTHREAD_STOPPING GST_ELEMENT_SCHEDULER_PRIVATE1
#define GST_ELEMENT_IS_COTHREAD_STOPPING(element) GST_FLAG_IS_SET((element), GST_ELEMENT_COTHREAD_STOPPING)
gst_fast_scheduler_cothreaded_element (GstBin * bin, GstElement *element)
{
cothread_func wrapper_function;
- GList *pads;
+ const GList *pads;
GstFastScheduler *sched;
GST_DEBUG (GST_CAT_SCHEDULING, "element is using COTHREADS");
static gboolean
gst_fast_scheduler_chained_element (GstBin *bin, GstElement *element) {
- GList *pads;
+ const GList *pads;
GstPad *pad;
GST_DEBUG (GST_CAT_SCHEDULING,"chain entered");
if (!GST_IS_REAL_PAD (pad))
continue;
- /* set the pad's sched pointer */
- gst_pad_set_scheduler (pad, sched);
-
/* if the peer element exists and is a candidate */
if (GST_PAD_PEER (pad)) {
peerelement = GST_PAD_PARENT (GST_PAD_PEER (pad));
else {
GstElement *entry = chain->entry;
if (entry) {
- GList *pads = gst_element_get_pad_list (entry);
+ const GList *pads = gst_element_get_pad_list (entry);
GST_DEBUG (GST_CAT_DATAFLOW, "starting chained iteration");
static GType aggregator_sched_type = 0;
static GEnumValue aggregator_sched[] = {
{ AGGREGATOR_LOOP, "1", "Loop Based"},
- { AGGREGATOR_LOOP_PEEK, "2", "Loop Based Peek"},
{ AGGREGATOR_LOOP_SELECT, "3", "Loop Based Select"},
{ AGGREGATOR_CHAIN, "4", "Chain Based"},
{0, NULL, NULL},
aggregator = GST_AGGREGATOR (element);
- if (aggregator->sched == AGGREGATOR_LOOP ||
- aggregator->sched == AGGREGATOR_LOOP_PEEK) {
+ if (aggregator->sched == AGGREGATOR_LOOP) {
GList *pads = aggregator->sinkpads;
while (pads) {
GstPad *pad = GST_PAD (pads->data);
pads = g_list_next (pads);
- if (aggregator->sched == AGGREGATOR_LOOP_PEEK) {
- buf = gst_pad_peek (pad);
- if (buf == NULL)
- continue;
-
- g_assert (buf == gst_pad_pull (pad));
- debug = "loop_peek";
- }
- else {
- buf = gst_pad_pull (pad);
- debug = "loop";
- }
+ buf = gst_pad_pull (pad);
+ debug = "loop";
+
gst_aggregator_push (aggregator, pad, buf, debug);
}
}
typedef enum {
AGGREGATOR_LOOP = 1,
- AGGREGATOR_LOOP_PEEK,
AGGREGATOR_LOOP_SELECT,
AGGREGATOR_CHAIN,
} GstAggregatorSchedType;
srcpad = gst_pad_new_from_template (templ, name);
gst_element_add_pad (GST_ELEMENT (fakesrc), srcpad);
+ gst_fakesrc_update_functions (fakesrc);
g_free (name);
gst_fakesrc_loop(GstElement *element)
{
GstFakeSrc *src;
- GList *pads;
+ const GList *pads;
g_return_if_fail(element != NULL);
g_return_if_fail(GST_IS_FAKESRC(element));
if (queue->interrupt) {
GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "interrupted!!");
g_mutex_unlock (queue->qlock);
- if (gst_scheduler_interrupt (GST_RPAD_SCHED (queue->sinkpad), GST_ELEMENT (queue)))
+ if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->sinkpad), GST_ELEMENT (queue)))
return;
/* if we got here bacause we were unlocked after a flush, we don't need
* to add the buffer to the queue again */
if (queue->interrupt) {
GST_DEBUG_ELEMENT (GST_CAT_DATAFLOW, queue, "interrupted!!");
g_mutex_unlock (queue->qlock);
- if (gst_scheduler_interrupt (GST_RPAD_SCHED (queue->srcpad), GST_ELEMENT (queue)))
+ if (gst_scheduler_interrupt (gst_pad_get_scheduler (queue->srcpad), GST_ELEMENT (queue)))
return NULL;
goto restart;
}
gst_tee_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstTee *tee;
- GList *pads;
+ const GList *pads;
GstPadConnectReturn set_retval;
tee = GST_TEE (gst_pad_get_parent (pad));
gchar *name;
GstPad *srcpad;
GstTee *tee;
- int i = 0;
- GList *pads;
+ gint i = 0;
+ const GList *pads;
g_return_val_if_fail (GST_IS_TEE (element), NULL);
while (!name)
{
name = g_strdup_printf ("src%d", i);
- if (g_list_find_custom (pads, (gconstpointer) name, name_pad_compare) != NULL)
+ if (g_list_find_custom ((GList *)pads, (gconstpointer) name, name_pad_compare) != NULL)
{
/* this name is taken, use the next one */
++i;
gst_tee_chain (GstPad *pad, GstBuffer *buf)
{
GstTee *tee;
- GList *pads;
+ const GList *pads;
g_return_if_fail (pad != NULL);
g_return_if_fail (GST_IS_PAD (pad));
int main(int argc,char *argv[]) {
xmlDocPtr doc;
xmlNodePtr factorynode, padnode, argnode, optionnode;
- GList *plugins, *features, *padtemplates, *pads;
+ GList *plugins, *features, *padtemplates;
+ const GList *pads;
GstElement *element;
GstPad *pad;
GstPadTemplate *padtemplate;