diff --git a/gst/elements/gstfakesink.c b/gst/elements/gstfakesink.c index 62d2f7947c..1db7b2e5bc 100644 --- a/gst/elements/gstfakesink.c +++ b/gst/elements/gstfakesink.c @@ -181,7 +181,7 @@ gst_fakesink_chain (GstPad *pad, GstBuffer *buf) 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); diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c index 9525cbf98b..3189b8ecf9 100644 --- a/gst/elements/gstfakesrc.c +++ b/gst/elements/gstfakesrc.c @@ -29,7 +29,8 @@ GstElementDetails gst_fakesrc_details = { "Source", "Push empty (no data) buffers around", VERSION, - "Erik Walthinsen ", + "Erik Walthinsen \n" + "Wim Taymans " "(C) 1999", }; @@ -46,7 +47,7 @@ enum { ARG_NUM_SOURCES, ARG_LOOP_BASED, ARG_OUTPUT, - ARG_PATERN, + ARG_PATTERN, ARG_NUM_BUFFERS, }; @@ -60,8 +61,8 @@ gst_fakesrc_output_get_type(void) { { 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}, }; @@ -119,8 +120,8 @@ gst_fakesrc_class_init (GstFakeSrcClass *klass) 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); @@ -146,11 +147,16 @@ gst_fakesrc_init (GstFakeSrc *fakesrc) // 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); @@ -206,7 +212,7 @@ gst_fakesrc_set_arg (GtkObject *object, GtkArg *arg, guint id) break; case ARG_OUTPUT: break; - case ARG_PATERN: + case ARG_PATTERN: break; case ARG_NUM_BUFFERS: src->num_buffers = GTK_VALUE_INT (*arg); @@ -236,8 +242,8 @@ gst_fakesrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 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; @@ -276,7 +282,7 @@ gst_fakesrc_get(GstPad *pad) 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], @@ -310,15 +316,23 @@ gst_fakesrc_loop(GstElement *element) 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)); } diff --git a/gst/elements/gstfakesrc.h b/gst/elements/gstfakesrc.h index a25d0f28c4..f03a0fdca9 100644 --- a/gst/elements/gstfakesrc.h +++ b/gst/elements/gstfakesrc.h @@ -42,8 +42,8 @@ typedef enum { 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; @@ -68,8 +68,8 @@ struct _GstFakeSrc { gint numsrcpads; GSList *srcpads; GstFakeSrcOutputType output; - gchar *patern; - GList *paternlist; + gchar *pattern; + GList *patternlist; gint num_buffers; }; diff --git a/gst/elements/gstidentity.c b/gst/elements/gstidentity.c index b64f584361..361e75ba60 100644 --- a/gst/elements/gstidentity.c +++ b/gst/elements/gstidentity.c @@ -121,7 +121,7 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf) 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); @@ -141,7 +141,7 @@ gst_identity_loop (GstElement *element) 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); diff --git a/gst/elements/gstqueue.c b/gst/elements/gstqueue.c index a68aeed849..b3512e2e88 100644 --- a/gst/elements/gstqueue.c +++ b/gst/elements/gstqueue.c @@ -197,6 +197,8 @@ gst_queue_chain (GstPad *pad, GstBuffer *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); @@ -247,6 +249,8 @@ gst_queue_get (GstPad *pad) 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"); } diff --git a/plugins/elements/gstfakesink.c b/plugins/elements/gstfakesink.c index 62d2f7947c..1db7b2e5bc 100644 --- a/plugins/elements/gstfakesink.c +++ b/plugins/elements/gstfakesink.c @@ -181,7 +181,7 @@ gst_fakesink_chain (GstPad *pad, GstBuffer *buf) 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); diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index 9525cbf98b..3189b8ecf9 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -29,7 +29,8 @@ GstElementDetails gst_fakesrc_details = { "Source", "Push empty (no data) buffers around", VERSION, - "Erik Walthinsen ", + "Erik Walthinsen \n" + "Wim Taymans " "(C) 1999", }; @@ -46,7 +47,7 @@ enum { ARG_NUM_SOURCES, ARG_LOOP_BASED, ARG_OUTPUT, - ARG_PATERN, + ARG_PATTERN, ARG_NUM_BUFFERS, }; @@ -60,8 +61,8 @@ gst_fakesrc_output_get_type(void) { { 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}, }; @@ -119,8 +120,8 @@ gst_fakesrc_class_init (GstFakeSrcClass *klass) 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); @@ -146,11 +147,16 @@ gst_fakesrc_init (GstFakeSrc *fakesrc) // 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); @@ -206,7 +212,7 @@ gst_fakesrc_set_arg (GtkObject *object, GtkArg *arg, guint id) break; case ARG_OUTPUT: break; - case ARG_PATERN: + case ARG_PATTERN: break; case ARG_NUM_BUFFERS: src->num_buffers = GTK_VALUE_INT (*arg); @@ -236,8 +242,8 @@ gst_fakesrc_get_arg (GtkObject *object, GtkArg *arg, guint id) 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; @@ -276,7 +282,7 @@ gst_fakesrc_get(GstPad *pad) 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], @@ -310,15 +316,23 @@ gst_fakesrc_loop(GstElement *element) 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)); } diff --git a/plugins/elements/gstfakesrc.h b/plugins/elements/gstfakesrc.h index a25d0f28c4..f03a0fdca9 100644 --- a/plugins/elements/gstfakesrc.h +++ b/plugins/elements/gstfakesrc.h @@ -42,8 +42,8 @@ typedef enum { 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; @@ -68,8 +68,8 @@ struct _GstFakeSrc { gint numsrcpads; GSList *srcpads; GstFakeSrcOutputType output; - gchar *patern; - GList *paternlist; + gchar *pattern; + GList *patternlist; gint num_buffers; }; diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c index b64f584361..361e75ba60 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -121,7 +121,7 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf) 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); @@ -141,7 +141,7 @@ gst_identity_loop (GstElement *element) 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); diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c index a68aeed849..b3512e2e88 100644 --- a/plugins/elements/gstqueue.c +++ b/plugins/elements/gstqueue.c @@ -197,6 +197,8 @@ gst_queue_chain (GstPad *pad, GstBuffer *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); @@ -247,6 +249,8 @@ gst_queue_get (GstPad *pad) 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"); }