g_return_if_fail (buf != NULL);
fakesink = GST_FAKESINK (pad->parent);
- g_print("(%s:%s)< ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesink: ******* (%s:%s)< \n",GST_DEBUG_PAD_NAME(pad));
gst_buffer_unref (buf);
"Source",
"Push empty (no data) buffers around",
VERSION,
- "Erik Walthinsen <omega@cse.ogi.edu>",
+ "Erik Walthinsen <omega@cse.ogi.edu>\n"
+ "Wim Taymans <wim.taymans@chello.be>"
"(C) 1999",
};
ARG_NUM_SOURCES,
ARG_LOOP_BASED,
ARG_OUTPUT,
- ARG_PATERN,
+ ARG_PATTERN,
ARG_NUM_BUFFERS,
};
{ FAKESRC_PING_PONG, "3", "Ping-Pong"},
{ FAKESRC_ORDERED_RANDOM, "4", "Ordered Random"},
{ FAKESRC_RANDOM, "5", "Random"},
- { FAKESRC_PATERN_LOOP, "6", "Patern loop"},
- { FAKESRC_PING_PONG_PATERN, "7", "Ping-Pong Patern"},
+ { FAKESRC_PATTERN_LOOP, "6", "Patttern loop"},
+ { FAKESRC_PING_PONG_PATTERN, "7", "Ping-Pong Pattern"},
{ FAKESRC_GET_ALWAYS_SUCEEDS, "8", "'_get' Always succeeds"},
{0, NULL, NULL},
};
GTK_ARG_READWRITE, ARG_LOOP_BASED);
gtk_object_add_arg_type ("GstFakeSrc::output", GST_TYPE_FAKESRC_OUTPUT,
GTK_ARG_READWRITE, ARG_OUTPUT);
- gtk_object_add_arg_type ("GstFakeSrc::patern", GTK_TYPE_STRING,
- GTK_ARG_READWRITE, ARG_PATERN);
+ gtk_object_add_arg_type ("GstFakeSrc::pattern", GTK_TYPE_STRING,
+ GTK_ARG_READWRITE, ARG_PATTERN);
gtk_object_add_arg_type ("GstFakeSrc::num_buffers", GTK_TYPE_INT,
GTK_ARG_READWRITE, ARG_NUM_BUFFERS);
// create our first output pad
pad = gst_pad_new("src",GST_PAD_SRC);
- gst_pad_set_get_function(pad,gst_fakesrc_get);
gst_element_add_pad(GST_ELEMENT(fakesrc),pad);
fakesrc->srcpads = g_slist_append(NULL,pad);
- fakesrc->loop_based = FALSE;
+ fakesrc->loop_based = TRUE;
+
+ if (fakesrc->loop_based)
+ gst_element_set_loop_function (GST_ELEMENT (fakesrc), gst_fakesrc_loop);
+ else
+ gst_pad_set_get_function(pad,gst_fakesrc_get);
+
fakesrc->num_buffers = -1;
// we're ready right away, since we don't have any args...
// gst_element_set_state(GST_ELEMENT(fakesrc),GST_STATE_READY);
break;
case ARG_OUTPUT:
break;
- case ARG_PATERN:
+ case ARG_PATTERN:
break;
case ARG_NUM_BUFFERS:
src->num_buffers = GTK_VALUE_INT (*arg);
case ARG_OUTPUT:
GTK_VALUE_INT (*arg) = src->output;
break;
- case ARG_PATERN:
- GTK_VALUE_STRING (*arg) = src->patern;
+ case ARG_PATTERN:
+ GTK_VALUE_STRING (*arg) = src->pattern;
break;
case ARG_NUM_BUFFERS:
GTK_VALUE_INT (*arg) = src->num_buffers;
src->num_buffers--;
}
- g_print("(%s:%s)> ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
buf = gst_buffer_new();
gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
GstPad *pad = GST_PAD (pads->data);
GstBuffer *buf;
+ if (src->num_buffers == 0) {
+ gst_pad_set_eos (pad);
+ return NULL;
+ }
+ else {
+ if (src->num_buffers > 0)
+ src->num_buffers--;
+ }
+
buf = gst_buffer_new();
- g_print("(%s:%s)> ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
src);
gst_pad_push (pad, buf);
- if (!GST_ELEMENT_IS_COTHREAD_STOPPING (element)) break;
-
+ pads = g_slist_next (pads);
}
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
}
FAKESRC_PING_PONG,
FAKESRC_ORDERED_RANDOM,
FAKESRC_RANDOM,
- FAKESRC_PATERN_LOOP,
- FAKESRC_PING_PONG_PATERN,
+ FAKESRC_PATTERN_LOOP,
+ FAKESRC_PING_PONG_PATTERN,
FAKESRC_GET_ALWAYS_SUCEEDS,
} GstFakeSrcOutputType;
gint numsrcpads;
GSList *srcpads;
GstFakeSrcOutputType output;
- gchar *patern;
- GList *paternlist;
+ gchar *pattern;
+ GList *patternlist;
gint num_buffers;
};
g_return_if_fail (buf != NULL);
identity = GST_IDENTITY (pad->parent);
- g_print("(%s:%s)i ",GST_DEBUG_PAD_NAME(pad));
+ g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
gst_pad_push (identity->srcpad, buf);
do {
buf = gst_pad_pull (identity->sinkpad);
- g_print("(%s:%s)i ",GST_DEBUG_PAD_NAME(identity->sinkpad));
+ g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(identity->sinkpad));
gst_pad_push (identity->srcpad, buf);
GST_DEBUG (0,"queue: %s waiting %d\n", name, queue->level_buffers);
STATUS("%s: O\n");
//g_cond_timed_wait (queue->fullcond, queue->fulllock, queue->timeval);
+ //FIXME need to signal other thread in case signals got lost?
+ g_cond_signal (queue->emptycond);
g_cond_wait (queue->fullcond, GST_OBJECT(queue)->lock);
STATUS("%s: O+\n");
GST_DEBUG (0,"queue: %s waiting done %d\n", name, queue->level_buffers);
while (!queue->level_buffers) {
STATUS("queue: %s U released lock\n");
//g_cond_timed_wait (queue->emptycond, queue->emptylock, queue->timeval);
+ //FIXME need to signal other thread in case signals got lost?
+ g_cond_signal (queue->fullcond);
g_cond_wait (queue->emptycond, GST_OBJECT(queue)->lock);
// STATUS("queue: %s U- getting lock\n");
}
g_return_if_fail (buf != NULL);
fakesink = GST_FAKESINK (pad->parent);
- g_print("(%s:%s)< ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesink: ******* (%s:%s)< \n",GST_DEBUG_PAD_NAME(pad));
gst_buffer_unref (buf);
"Source",
"Push empty (no data) buffers around",
VERSION,
- "Erik Walthinsen <omega@cse.ogi.edu>",
+ "Erik Walthinsen <omega@cse.ogi.edu>\n"
+ "Wim Taymans <wim.taymans@chello.be>"
"(C) 1999",
};
ARG_NUM_SOURCES,
ARG_LOOP_BASED,
ARG_OUTPUT,
- ARG_PATERN,
+ ARG_PATTERN,
ARG_NUM_BUFFERS,
};
{ FAKESRC_PING_PONG, "3", "Ping-Pong"},
{ FAKESRC_ORDERED_RANDOM, "4", "Ordered Random"},
{ FAKESRC_RANDOM, "5", "Random"},
- { FAKESRC_PATERN_LOOP, "6", "Patern loop"},
- { FAKESRC_PING_PONG_PATERN, "7", "Ping-Pong Patern"},
+ { FAKESRC_PATTERN_LOOP, "6", "Patttern loop"},
+ { FAKESRC_PING_PONG_PATTERN, "7", "Ping-Pong Pattern"},
{ FAKESRC_GET_ALWAYS_SUCEEDS, "8", "'_get' Always succeeds"},
{0, NULL, NULL},
};
GTK_ARG_READWRITE, ARG_LOOP_BASED);
gtk_object_add_arg_type ("GstFakeSrc::output", GST_TYPE_FAKESRC_OUTPUT,
GTK_ARG_READWRITE, ARG_OUTPUT);
- gtk_object_add_arg_type ("GstFakeSrc::patern", GTK_TYPE_STRING,
- GTK_ARG_READWRITE, ARG_PATERN);
+ gtk_object_add_arg_type ("GstFakeSrc::pattern", GTK_TYPE_STRING,
+ GTK_ARG_READWRITE, ARG_PATTERN);
gtk_object_add_arg_type ("GstFakeSrc::num_buffers", GTK_TYPE_INT,
GTK_ARG_READWRITE, ARG_NUM_BUFFERS);
// create our first output pad
pad = gst_pad_new("src",GST_PAD_SRC);
- gst_pad_set_get_function(pad,gst_fakesrc_get);
gst_element_add_pad(GST_ELEMENT(fakesrc),pad);
fakesrc->srcpads = g_slist_append(NULL,pad);
- fakesrc->loop_based = FALSE;
+ fakesrc->loop_based = TRUE;
+
+ if (fakesrc->loop_based)
+ gst_element_set_loop_function (GST_ELEMENT (fakesrc), gst_fakesrc_loop);
+ else
+ gst_pad_set_get_function(pad,gst_fakesrc_get);
+
fakesrc->num_buffers = -1;
// we're ready right away, since we don't have any args...
// gst_element_set_state(GST_ELEMENT(fakesrc),GST_STATE_READY);
break;
case ARG_OUTPUT:
break;
- case ARG_PATERN:
+ case ARG_PATTERN:
break;
case ARG_NUM_BUFFERS:
src->num_buffers = GTK_VALUE_INT (*arg);
case ARG_OUTPUT:
GTK_VALUE_INT (*arg) = src->output;
break;
- case ARG_PATERN:
- GTK_VALUE_STRING (*arg) = src->patern;
+ case ARG_PATTERN:
+ GTK_VALUE_STRING (*arg) = src->pattern;
break;
case ARG_NUM_BUFFERS:
GTK_VALUE_INT (*arg) = src->num_buffers;
src->num_buffers--;
}
- g_print("(%s:%s)> ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
buf = gst_buffer_new();
gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
GstPad *pad = GST_PAD (pads->data);
GstBuffer *buf;
+ if (src->num_buffers == 0) {
+ gst_pad_set_eos (pad);
+ return NULL;
+ }
+ else {
+ if (src->num_buffers > 0)
+ src->num_buffers--;
+ }
+
buf = gst_buffer_new();
- g_print("(%s:%s)> ",GST_DEBUG_PAD_NAME(pad));
+ g_print("fakesrc: ******* (%s:%s)> \n",GST_DEBUG_PAD_NAME(pad));
gtk_signal_emit (GTK_OBJECT (src), gst_fakesrc_signals[SIGNAL_HANDOFF],
src);
gst_pad_push (pad, buf);
- if (!GST_ELEMENT_IS_COTHREAD_STOPPING (element)) break;
-
+ pads = g_slist_next (pads);
}
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
}
FAKESRC_PING_PONG,
FAKESRC_ORDERED_RANDOM,
FAKESRC_RANDOM,
- FAKESRC_PATERN_LOOP,
- FAKESRC_PING_PONG_PATERN,
+ FAKESRC_PATTERN_LOOP,
+ FAKESRC_PING_PONG_PATTERN,
FAKESRC_GET_ALWAYS_SUCEEDS,
} GstFakeSrcOutputType;
gint numsrcpads;
GSList *srcpads;
GstFakeSrcOutputType output;
- gchar *patern;
- GList *paternlist;
+ gchar *pattern;
+ GList *patternlist;
gint num_buffers;
};
g_return_if_fail (buf != NULL);
identity = GST_IDENTITY (pad->parent);
- g_print("(%s:%s)i ",GST_DEBUG_PAD_NAME(pad));
+ g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
gst_pad_push (identity->srcpad, buf);
do {
buf = gst_pad_pull (identity->sinkpad);
- g_print("(%s:%s)i ",GST_DEBUG_PAD_NAME(identity->sinkpad));
+ g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(identity->sinkpad));
gst_pad_push (identity->srcpad, buf);
GST_DEBUG (0,"queue: %s waiting %d\n", name, queue->level_buffers);
STATUS("%s: O\n");
//g_cond_timed_wait (queue->fullcond, queue->fulllock, queue->timeval);
+ //FIXME need to signal other thread in case signals got lost?
+ g_cond_signal (queue->emptycond);
g_cond_wait (queue->fullcond, GST_OBJECT(queue)->lock);
STATUS("%s: O+\n");
GST_DEBUG (0,"queue: %s waiting done %d\n", name, queue->level_buffers);
while (!queue->level_buffers) {
STATUS("queue: %s U released lock\n");
//g_cond_timed_wait (queue->emptycond, queue->emptylock, queue->timeval);
+ //FIXME need to signal other thread in case signals got lost?
+ g_cond_signal (queue->fullcond);
g_cond_wait (queue->emptycond, GST_OBJECT(queue)->lock);
// STATUS("queue: %s U- getting lock\n");
}