From: Wim Taymans Date: Fri, 22 Jul 2005 11:47:10 +0000 (+0000) Subject: docs/design/part-events.txt: Small update. X-Git-Tag: RELEASE-0_9_2~194 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9f06376babb57b7dba0adb66d3c6e6ae4e5e2a68;p=platform%2Fupstream%2Fgstreamer.git docs/design/part-events.txt: Small update. Original commit message from CVS: * docs/design/part-events.txt: Small update. * gst/base/gstbasesink.c: (gst_base_sink_handle_object), (gst_base_sink_do_sync), (gst_base_sink_activate_push), (gst_base_sink_activate_pull): Some more comments. * gst/elements/gstfakesrc.c: (gst_fake_src_class_init), (gst_fake_src_create): Fix handoff marshall. * gst/elements/gstidentity.c: (gst_identity_class_init), (gst_identity_transform_ip): We're a real inplace element. * gst/gstbus.c: (gst_bus_post): Added some comments. * tests/lat.c: (fakesrc), (fakesink), (simple), (queue), (main): * tests/muxing/case1.c: (main): * tests/sched/dynamic-pipeline.c: (main): * tests/sched/interrupt1.c: (main): * tests/sched/interrupt2.c: (main): * tests/sched/interrupt3.c: (main): * tests/sched/runxml.c: (main): * tests/sched/sched-stress.c: (main): * tests/seeking/seeking1.c: (event_received), (main): * tests/threadstate/threadstate2.c: (bus_handler), (timeout_func), (main): * tests/threadstate/threadstate3.c: (main): * tests/threadstate/threadstate4.c: (main): * tests/threadstate/threadstate5.c: (main): Fix the tests. --- diff --git a/ChangeLog b/ChangeLog index 465226d..ad3eb4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,40 @@ +2005-07-22 Wim Taymans + + * docs/design/part-events.txt: + Small update. + + * gst/base/gstbasesink.c: (gst_base_sink_handle_object), + (gst_base_sink_do_sync), (gst_base_sink_activate_push), + (gst_base_sink_activate_pull): + Some more comments. + + * gst/elements/gstfakesrc.c: (gst_fake_src_class_init), + (gst_fake_src_create): + Fix handoff marshall. + + * gst/elements/gstidentity.c: (gst_identity_class_init), + (gst_identity_transform_ip): + We're a real inplace element. + + * gst/gstbus.c: (gst_bus_post): + Added some comments. + + * tests/lat.c: (fakesrc), (fakesink), (simple), (queue), (main): + * tests/muxing/case1.c: (main): + * tests/sched/dynamic-pipeline.c: (main): + * tests/sched/interrupt1.c: (main): + * tests/sched/interrupt2.c: (main): + * tests/sched/interrupt3.c: (main): + * tests/sched/runxml.c: (main): + * tests/sched/sched-stress.c: (main): + * tests/seeking/seeking1.c: (event_received), (main): + * tests/threadstate/threadstate2.c: (bus_handler), (timeout_func), + (main): + * tests/threadstate/threadstate3.c: (main): + * tests/threadstate/threadstate4.c: (main): + * tests/threadstate/threadstate5.c: (main): + Fix the tests. + 2005-07-21 Wim Taymans * docs/design/part-seeking.txt: diff --git a/docs/design/part-events.txt b/docs/design/part-events.txt index e471ede..32f995e 100644 --- a/docs/design/part-events.txt +++ b/docs/design/part-events.txt @@ -28,6 +28,8 @@ The EOS event can only be sent on a sinkpad. It is typically emited by the source element when it has finished sending data. This event is mainly sent in the streaming thread but can also be sent from the application thread. +An EOS event sent on a srcpad returns GST_FLOW_UNEXPECTED. + The downstream element should forward the EOS event to its downstream peer elements. This way the event will eventually reach the renderers which should then post an EOS message on the bus. @@ -126,7 +128,9 @@ travels upstream. The seek event contains the new start and end position of playback after the seek is performed. Optionally the end position can be left -at -1 to continue playback to the end of the stream. +at -1 to continue playback to the end of the stream. The seek event +also contains the new playback rate of the stream, 1.0 is normal playback, +2.0 double speed and negative values mean backwards playback. A seek usually flushes the graph to minimize latency after the seek this behaviour is triggered by using the SEEK_FLUSH flag. diff --git a/gst/base/gstbasesink.c b/gst/base/gstbasesink.c index 3d2197d..91063b7 100644 --- a/gst/base/gstbasesink.c +++ b/gst/base/gstbasesink.c @@ -473,6 +473,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad, * stream time */ if (!gst_event_discont_get_value (event, GST_FORMAT_TIME, &basesink->discont_start, &basesink->discont_stop)) { + /* this means this sink will not be able to sync to the clock */ basesink->discont_start = 0; basesink->discont_stop = 0; } diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c index 50f2451..2894dbf 100644 --- a/gst/elements/gstfakesrc.c +++ b/gst/elements/gstfakesrc.c @@ -290,7 +290,8 @@ gst_fake_src_class_init (GstFakeSrcClass * klass) gst_fake_src_signals[SIGNAL_HANDOFF] = g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstFakeSrcClass, handoff), NULL, NULL, - gst_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); + gst_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GST_TYPE_BUFFER, + GST_TYPE_PAD); /*gstbase_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_fake_src_is_seekable); */ gstbase_src_class->start = GST_DEBUG_FUNCPTR (gst_fake_src_start); @@ -689,7 +690,7 @@ gst_fake_src_create (GstBaseSrc * basesrc, guint64 offset, guint length, if (src->signal_handoffs) { GST_LOG_OBJECT (src, "pre handoff emit"); g_signal_emit (G_OBJECT (src), gst_fake_src_signals[SIGNAL_HANDOFF], 0, - buf); + buf, basesrc->srcpad); GST_LOG_OBJECT (src, "post handoff emit"); } diff --git a/gst/elements/gstidentity.c b/gst/elements/gstidentity.c index 090f651..f99e884 100644 --- a/gst/elements/gstidentity.c +++ b/gst/elements/gstidentity.c @@ -97,8 +97,8 @@ static void gst_identity_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static gboolean gst_identity_event (GstBaseTransform * trans, GstEvent * event); -static GstFlowReturn gst_identity_transform (GstBaseTransform * trans, - GstBuffer * inbuf, GstBuffer * outbuf); +static GstFlowReturn gst_identity_transform_ip (GstBaseTransform * trans, + GstBuffer * buf); static gboolean gst_identity_start (GstBaseTransform * trans); static gboolean gst_identity_stop (GstBaseTransform * trans); @@ -210,7 +210,8 @@ gst_identity_class_init (GstIdentityClass * klass) gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_identity_finalize); gstbasetrans_class->event = GST_DEBUG_FUNCPTR (gst_identity_event); - gstbasetrans_class->transform = GST_DEBUG_FUNCPTR (gst_identity_transform); + gstbasetrans_class->transform_ip = + GST_DEBUG_FUNCPTR (gst_identity_transform_ip); gstbasetrans_class->start = GST_DEBUG_FUNCPTR (gst_identity_start); gstbasetrans_class->stop = GST_DEBUG_FUNCPTR (gst_identity_stop); } @@ -290,14 +291,13 @@ gst_identity_check_perfect (GstIdentity * identity, GstBuffer * buf) } static GstFlowReturn -gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, - GstBuffer * outbuf) +gst_identity_transform_ip (GstBaseTransform * trans, GstBuffer * buf) { GstFlowReturn ret = GST_FLOW_OK; GstIdentity *identity = GST_IDENTITY (trans); if (identity->check_perfect) - gst_identity_check_perfect (identity, inbuf); + gst_identity_check_perfect (identity, buf); if (identity->error_after >= 0) { identity->error_after--; @@ -316,11 +316,11 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, g_strdup_printf ("dropping ******* (%s:%s)i (%d bytes, timestamp: %" GST_TIME_FORMAT ", duration: %" GST_TIME_FORMAT ", offset: %" G_GINT64_FORMAT ", offset_end: % " G_GINT64_FORMAT ", flags: %d) %p", - GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (inbuf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), - GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), - GST_BUFFER_FLAGS (inbuf), inbuf); + GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (buf), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), + GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), + GST_BUFFER_FLAGS (buf), buf); GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); return GST_FLOW_OK; @@ -328,7 +328,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, } if (identity->dump) { - gst_util_dump_mem (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf)); + gst_util_dump_mem (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); } if (!identity->silent) { @@ -338,11 +338,11 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, g_strdup_printf ("chain ******* (%s:%s)i (%d bytes, timestamp: %" GST_TIME_FORMAT ", duration: %" GST_TIME_FORMAT ", offset: %" G_GINT64_FORMAT ", offset_end: % " G_GINT64_FORMAT ", flags: %d) %p", - GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (inbuf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), - GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), - GST_BUFFER_FLAGS (inbuf), inbuf); + GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (buf), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), + GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), + GST_BUFFER_FLAGS (buf), buf); GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); } @@ -350,13 +350,13 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, if (identity->datarate > 0) { GstClockTime time = identity->offset * GST_SECOND / identity->datarate; - GST_BUFFER_TIMESTAMP (outbuf) = time; - GST_BUFFER_DURATION (outbuf) = - GST_BUFFER_SIZE (outbuf) * GST_SECOND / identity->datarate; + GST_BUFFER_TIMESTAMP (buf) = time; + GST_BUFFER_DURATION (buf) = + GST_BUFFER_SIZE (buf) * GST_SECOND / identity->datarate; } g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0, - outbuf); + buf); if (identity->sync) { GstClock *clock; @@ -368,7 +368,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, /* save id if we need to unlock */ /* FIXME: actually unlock this somewhere in the state changes */ identity->clock_id = gst_clock_new_single_shot_id (clock, - GST_BUFFER_TIMESTAMP (outbuf) + GST_ELEMENT (identity)->base_time); + GST_BUFFER_TIMESTAMP (buf) + GST_ELEMENT (identity)->base_time); GST_UNLOCK (identity); cret = gst_clock_id_wait (identity->clock_id, NULL); @@ -384,7 +384,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_UNLOCK (identity); } - identity->offset += GST_BUFFER_SIZE (outbuf); + identity->offset += GST_BUFFER_SIZE (buf); if (identity->sleep_time && ret == GST_FLOW_OK) g_usleep (identity->sleep_time); diff --git a/gst/gstbus.c b/gst/gstbus.c index 1b4dbee..3966416 100644 --- a/gst/gstbus.c +++ b/gst/gstbus.c @@ -166,7 +166,8 @@ gst_bus_new (void) * @bus: a #GstBus to post on * @message: The #GstMessage to post * - * Post a message on the given bus. + * Post a message on the given bus. Ownership of the message + * is taken by the bus. * * Returns: TRUE if the message could be posted. * @@ -210,7 +211,7 @@ gst_bus_post (GstBus * bus, GstMessage * message) GST_DEBUG_OBJECT (bus, "[msg %p] dropped", message); break; case GST_BUS_PASS: - /* pass the message to the async queue */ + /* pass the message to the async queue, refcount passed in the queue */ GST_DEBUG_OBJECT (bus, "[msg %p] pushing on async queue", message); g_mutex_lock (bus->queue_lock); g_queue_push_tail (bus->queue, message); @@ -354,6 +355,8 @@ gst_bus_pop (GstBus * bus) * * MT safe. */ +/* FIXME, dangerous as the bus could be set to flushing while the app holds + * a ref to the message */ GstMessage * gst_bus_peek (GstBus * bus) { diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 3d2197d..91063b7 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -473,6 +473,7 @@ gst_base_sink_handle_object (GstBaseSink * basesink, GstPad * pad, * stream time */ if (!gst_event_discont_get_value (event, GST_FORMAT_TIME, &basesink->discont_start, &basesink->discont_stop)) { + /* this means this sink will not be able to sync to the clock */ basesink->discont_start = 0; basesink->discont_stop = 0; } diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index 50f2451..2894dbf 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -290,7 +290,8 @@ gst_fake_src_class_init (GstFakeSrcClass * klass) gst_fake_src_signals[SIGNAL_HANDOFF] = g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstFakeSrcClass, handoff), NULL, NULL, - gst_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); + gst_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, GST_TYPE_BUFFER, + GST_TYPE_PAD); /*gstbase_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_fake_src_is_seekable); */ gstbase_src_class->start = GST_DEBUG_FUNCPTR (gst_fake_src_start); @@ -689,7 +690,7 @@ gst_fake_src_create (GstBaseSrc * basesrc, guint64 offset, guint length, if (src->signal_handoffs) { GST_LOG_OBJECT (src, "pre handoff emit"); g_signal_emit (G_OBJECT (src), gst_fake_src_signals[SIGNAL_HANDOFF], 0, - buf); + buf, basesrc->srcpad); GST_LOG_OBJECT (src, "post handoff emit"); } diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c index 090f651..f99e884 100644 --- a/plugins/elements/gstidentity.c +++ b/plugins/elements/gstidentity.c @@ -97,8 +97,8 @@ static void gst_identity_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static gboolean gst_identity_event (GstBaseTransform * trans, GstEvent * event); -static GstFlowReturn gst_identity_transform (GstBaseTransform * trans, - GstBuffer * inbuf, GstBuffer * outbuf); +static GstFlowReturn gst_identity_transform_ip (GstBaseTransform * trans, + GstBuffer * buf); static gboolean gst_identity_start (GstBaseTransform * trans); static gboolean gst_identity_stop (GstBaseTransform * trans); @@ -210,7 +210,8 @@ gst_identity_class_init (GstIdentityClass * klass) gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_identity_finalize); gstbasetrans_class->event = GST_DEBUG_FUNCPTR (gst_identity_event); - gstbasetrans_class->transform = GST_DEBUG_FUNCPTR (gst_identity_transform); + gstbasetrans_class->transform_ip = + GST_DEBUG_FUNCPTR (gst_identity_transform_ip); gstbasetrans_class->start = GST_DEBUG_FUNCPTR (gst_identity_start); gstbasetrans_class->stop = GST_DEBUG_FUNCPTR (gst_identity_stop); } @@ -290,14 +291,13 @@ gst_identity_check_perfect (GstIdentity * identity, GstBuffer * buf) } static GstFlowReturn -gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, - GstBuffer * outbuf) +gst_identity_transform_ip (GstBaseTransform * trans, GstBuffer * buf) { GstFlowReturn ret = GST_FLOW_OK; GstIdentity *identity = GST_IDENTITY (trans); if (identity->check_perfect) - gst_identity_check_perfect (identity, inbuf); + gst_identity_check_perfect (identity, buf); if (identity->error_after >= 0) { identity->error_after--; @@ -316,11 +316,11 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, g_strdup_printf ("dropping ******* (%s:%s)i (%d bytes, timestamp: %" GST_TIME_FORMAT ", duration: %" GST_TIME_FORMAT ", offset: %" G_GINT64_FORMAT ", offset_end: % " G_GINT64_FORMAT ", flags: %d) %p", - GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (inbuf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), - GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), - GST_BUFFER_FLAGS (inbuf), inbuf); + GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (buf), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), + GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), + GST_BUFFER_FLAGS (buf), buf); GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); return GST_FLOW_OK; @@ -328,7 +328,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, } if (identity->dump) { - gst_util_dump_mem (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf)); + gst_util_dump_mem (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); } if (!identity->silent) { @@ -338,11 +338,11 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, g_strdup_printf ("chain ******* (%s:%s)i (%d bytes, timestamp: %" GST_TIME_FORMAT ", duration: %" GST_TIME_FORMAT ", offset: %" G_GINT64_FORMAT ", offset_end: % " G_GINT64_FORMAT ", flags: %d) %p", - GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (inbuf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), - GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf), - GST_BUFFER_FLAGS (inbuf), inbuf); + GST_DEBUG_PAD_NAME (trans->sinkpad), GST_BUFFER_SIZE (buf), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), + GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), + GST_BUFFER_FLAGS (buf), buf); GST_UNLOCK (identity); g_object_notify (G_OBJECT (identity), "last-message"); } @@ -350,13 +350,13 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, if (identity->datarate > 0) { GstClockTime time = identity->offset * GST_SECOND / identity->datarate; - GST_BUFFER_TIMESTAMP (outbuf) = time; - GST_BUFFER_DURATION (outbuf) = - GST_BUFFER_SIZE (outbuf) * GST_SECOND / identity->datarate; + GST_BUFFER_TIMESTAMP (buf) = time; + GST_BUFFER_DURATION (buf) = + GST_BUFFER_SIZE (buf) * GST_SECOND / identity->datarate; } g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0, - outbuf); + buf); if (identity->sync) { GstClock *clock; @@ -368,7 +368,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, /* save id if we need to unlock */ /* FIXME: actually unlock this somewhere in the state changes */ identity->clock_id = gst_clock_new_single_shot_id (clock, - GST_BUFFER_TIMESTAMP (outbuf) + GST_ELEMENT (identity)->base_time); + GST_BUFFER_TIMESTAMP (buf) + GST_ELEMENT (identity)->base_time); GST_UNLOCK (identity); cret = gst_clock_id_wait (identity->clock_id, NULL); @@ -384,7 +384,7 @@ gst_identity_transform (GstBaseTransform * trans, GstBuffer * inbuf, GST_UNLOCK (identity); } - identity->offset += GST_BUFFER_SIZE (outbuf); + identity->offset += GST_BUFFER_SIZE (buf); if (identity->sleep_time && ret == GST_FLOW_OK) g_usleep (identity->sleep_time); diff --git a/tests/lat.c b/tests/lat.c index c542b6e..197d74a 100644 --- a/tests/lat.c +++ b/tests/lat.c @@ -72,6 +72,7 @@ fakesrc (void) g_return_val_if_fail (src != NULL, NULL); g_object_set (G_OBJECT (src), "silent", TRUE, NULL); g_object_set (G_OBJECT (src), "num_buffers", iterations, NULL); + g_object_set (G_OBJECT (src), "signal-handoffs", TRUE, NULL); g_signal_connect (G_OBJECT (src), "handoff", G_CALLBACK (handoff_src), NULL); return src; @@ -85,6 +86,7 @@ fakesink (void) sink = gst_element_factory_make ("fakesink", "fakesink"); g_return_val_if_fail (sink != NULL, NULL); g_object_set (G_OBJECT (sink), "silent", TRUE, NULL); + g_object_set (G_OBJECT (sink), "signal-handoffs", TRUE, NULL); g_signal_connect (G_OBJECT (sink), "handoff", G_CALLBACK (handoff_sink), NULL); @@ -103,9 +105,6 @@ simple (int argc, int argi, char *argv[]) return NULL; } idents = atoi (argv[argi]); - if ((argc - argi) == 2) { - gst_scheduler_factory_set_default_name (argv[argi + 1]); - } pipeline = GST_PIPELINE (gst_pipeline_new ("pipeline")); g_return_val_if_fail (pipeline != NULL, NULL); @@ -125,7 +124,7 @@ GstPipeline * queue (int argc, int argi, char *argv[]) { GstPipeline *pipeline; - GstElement *last, *src, *sink, *src_thr, *src_q, *sink_q, *sink_thr; + GstElement *last, *src, *sink, *src_q, *sink_q; int idents; if ((argc - argi) < 1) { @@ -134,28 +133,19 @@ queue (int argc, int argi, char *argv[]) } idents = atoi (argv[argi]); - if ((argc - argi) == 2) { - gst_scheduler_factory_set_default_name (argv[argi + 1]); - } - pipeline = GST_PIPELINE (gst_pipeline_new ("pipeline")); g_return_val_if_fail (pipeline != NULL, NULL); - src_thr = GST_ELEMENT (gst_thread_new ("src_thread")); - g_return_val_if_fail (src_thr != NULL, NULL); - src = fakesrc (); g_return_val_if_fail (src != NULL, NULL); - gst_bin_add (GST_BIN (src_thr), GST_ELEMENT (src)); + gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (src)); src_q = gst_element_factory_make ("queue", "src_q"); g_return_val_if_fail (src_q != NULL, NULL); - gst_bin_add (GST_BIN (src_thr), GST_ELEMENT (src_q)); + gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (src_q)); gst_pad_link (gst_element_get_pad (src, "src"), gst_element_get_pad (src_q, "sink")); - gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (src_thr)); - last = identity_add (pipeline, src_q, idents); sink_q = gst_element_factory_make ("queue", "sink_q"); @@ -164,14 +154,9 @@ queue (int argc, int argi, char *argv[]) gst_pad_link (gst_element_get_pad (last, "src"), gst_element_get_pad (sink_q, "sink")); - sink_thr = GST_ELEMENT (gst_thread_new ("sink_thread")); - g_return_val_if_fail (sink_thr != NULL, NULL); - sink = fakesink (); g_return_val_if_fail (sink != NULL, NULL); - gst_bin_add (GST_BIN (sink_thr), GST_ELEMENT (sink)); - - gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (sink_thr)); + gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (sink)); gst_pad_link (gst_element_get_pad (sink_q, "src"), gst_element_get_pad (sink, "sink")); @@ -187,8 +172,8 @@ struct test }; static struct test tests[] = { - {"simple", "ident_count [scheduler_name]", simple}, - {"queue", "ident_count [scheduler_name]", queue}, + {"simple", "ident_count", simple}, + {"queue", "ident_count", queue}, {NULL, NULL, NULL} }; @@ -229,7 +214,7 @@ main (int argc, char *argv[]) gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); while (count < iterations) { - gst_bin_iterate (GST_BIN (pipeline)); + g_usleep (G_USEC_PER_SEC); } g_print ("\n"); diff --git a/tests/muxing/case1.c b/tests/muxing/case1.c index 27e940e..8779cc4 100644 --- a/tests/muxing/case1.c +++ b/tests/muxing/case1.c @@ -66,7 +66,7 @@ main (int argc, char *argv[]) gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); - while (gst_bin_iterate (pipeline)); + g_usleep (2 * G_USEC_PER_SEC); gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL); diff --git a/tests/sched/dynamic-pipeline.c b/tests/sched/dynamic-pipeline.c index 70c793d..a20a3f9 100644 --- a/tests/sched/dynamic-pipeline.c +++ b/tests/sched/dynamic-pipeline.c @@ -33,13 +33,14 @@ main (int argc, char *argv[]) /* initialize cothreads */ gst_element_set_state (pipe1, GST_STATE_PLAYING); - gst_bin_iterate (GST_BIN (pipe1)); + gst_element_set_state (pipe1, GST_STATE_READY); /* destroy the fakesink, but keep fakesrc (its state is GST_STATE_READY) */ gst_element_unlink_pads (fakesrc, "src", fakesink1, "sink"); gst_object_ref (fakesrc); gst_bin_remove (GST_BIN (pipe1), fakesrc); + g_usleep (2 * G_USEC_PER_SEC); gst_bin_remove (GST_BIN (pipe1), fakesink1); gst_object_unref (pipe1); @@ -56,7 +57,7 @@ main (int argc, char *argv[]) /* try to iterate the pipeline */ gst_element_set_state (pipe2, GST_STATE_PLAYING); - gst_bin_iterate (GST_BIN (pipe2)); + g_usleep (2 * G_USEC_PER_SEC); gst_element_set_state (pipe2, GST_STATE_NULL); return 0; diff --git a/tests/sched/interrupt1.c b/tests/sched/interrupt1.c index 66d6d68..b75aa16 100644 --- a/tests/sched/interrupt1.c +++ b/tests/sched/interrupt1.c @@ -3,7 +3,7 @@ int main (int argc, char *argv[]) { - GstElement *pipeline, *thread, *queue, *src, *sink; + GstElement *pipeline, *queue, *src, *sink; gst_init (&argc, &argv); @@ -13,15 +13,12 @@ main (int argc, char *argv[]) src = gst_element_factory_make ("fakesrc", "src"); - thread = gst_thread_new ("thread"); - queue = gst_element_factory_make ("queue", "queue"); sink = gst_element_factory_make ("fakesink", "sink"); - gst_bin_add (GST_BIN (thread), queue); - gst_bin_add (GST_BIN (thread), sink); - gst_bin_add (GST_BIN (pipeline), thread); gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), sink); gst_element_link_pads (src, "src", queue, "sink"); gst_element_link_pads (queue, "src", sink, "sink"); diff --git a/tests/sched/interrupt2.c b/tests/sched/interrupt2.c index 3907e29..8d9667d 100644 --- a/tests/sched/interrupt2.c +++ b/tests/sched/interrupt2.c @@ -3,7 +3,7 @@ int main (int argc, char *argv[]) { - GstElement *pipeline, *thread, *queue, *src, *identity, *sink; + GstElement *pipeline, *queue, *src, *identity, *sink; gst_init (&argc, &argv); @@ -13,18 +13,14 @@ main (int argc, char *argv[]) src = gst_element_factory_make ("fakesrc", "src"); - thread = gst_thread_new ("thread"); - queue = gst_element_factory_make ("queue", "queue"); identity = gst_element_factory_make ("identity", "identity"); - g_object_set (G_OBJECT (identity), "loop_based", TRUE, NULL); sink = gst_element_factory_make ("fakesink", "sink"); - gst_bin_add (GST_BIN (thread), queue); - gst_bin_add (GST_BIN (thread), identity); - gst_bin_add (GST_BIN (thread), sink); - gst_bin_add (GST_BIN (pipeline), thread); gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), identity); + gst_bin_add (GST_BIN (pipeline), sink); gst_element_link_pads (src, "src", queue, "sink"); gst_element_link_pads (queue, "src", identity, "sink"); diff --git a/tests/sched/interrupt3.c b/tests/sched/interrupt3.c index 6b05434..c4f9525 100644 --- a/tests/sched/interrupt3.c +++ b/tests/sched/interrupt3.c @@ -3,7 +3,7 @@ int main (int argc, char *argv[]) { - GstElement *pipeline, *thread, *queue, *src, *adder, *sink; + GstElement *pipeline, *queue, *src, *adder, *sink; GstPad *sinkpad; gst_init (&argc, &argv); @@ -15,17 +15,14 @@ main (int argc, char *argv[]) src = gst_element_factory_make ("fakesrc", "src"); g_object_set (G_OBJECT (src), "sizetype", 2, NULL); - thread = gst_thread_new ("thread"); - queue = gst_element_factory_make ("queue", "queue"); adder = gst_element_factory_make ("adder", "adder"); sink = gst_element_factory_make ("fakesink", "sink"); - gst_bin_add (GST_BIN (thread), queue); - gst_bin_add (GST_BIN (thread), adder); - gst_bin_add (GST_BIN (thread), sink); - gst_bin_add (GST_BIN (pipeline), thread); gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), adder); + gst_bin_add (GST_BIN (pipeline), sink); sinkpad = gst_element_get_request_pad (adder, "sink%d"); diff --git a/tests/sched/runxml.c b/tests/sched/runxml.c index ef3db5a..db2094e 100644 --- a/tests/sched/runxml.c +++ b/tests/sched/runxml.c @@ -78,12 +78,6 @@ main (int argc, char *argv[]) /* gst_element_set_state(bin, GST_STATE_READY); */ gst_element_set_state (bin, GST_STATE_PLAYING); - if (GST_IS_THREAD (bin)) { - g_usleep (G_USEC_PER_SEC); - } else { - gst_bin_iterate (GST_BIN (bin)); - } - if (outcount != 1 && incount != 1) { g_print ("test failed\n"); exit (-1); diff --git a/tests/sched/sched-stress.c b/tests/sched/sched-stress.c index b058a41..cd8ca53 100644 --- a/tests/sched/sched-stress.c +++ b/tests/sched/sched-stress.c @@ -6,7 +6,7 @@ int main (int argc, char *argv[]) { GstElement *bin, *src, *dec, *sink; - int i, j; + int i; gst_init (&argc, &argv); @@ -20,8 +20,6 @@ main (int argc, char *argv[]) gst_bin_add_many (GST_BIN (bin), src, dec, sink, NULL); gst_element_link_many (src, dec, sink, NULL); gst_element_set_state (bin, GST_STATE_PLAYING); - for (j = 0; j < 30; j++) - gst_bin_iterate (GST_BIN (bin)); gst_element_set_state (bin, GST_STATE_PAUSED); } diff --git a/tests/seeking/seeking1.c b/tests/seeking/seeking1.c index c7495b6..d128080 100644 --- a/tests/seeking/seeking1.c +++ b/tests/seeking/seeking1.c @@ -7,6 +7,7 @@ static GstPad *pad; static void event_received (GObject * object, GstEvent * event, GstElement * pipeline) { +#if 0 if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT_DONE) { g_print ("segment done\n"); if (--looping == 1) { @@ -19,6 +20,7 @@ event_received (GObject * object, GstEvent * event, GstElement * pipeline) } gst_pad_send_event (pad, event); } +#endif } gint @@ -27,7 +29,8 @@ main (gint argc, gchar * argv[]) GstElement *pipeline; GstElement *fakesrc; GstElement *fakesink; - guint64 value; + + /* guint64 value; */ GstFormat format; gst_init (&argc, &argv); @@ -55,18 +58,20 @@ main (gint argc, gchar * argv[]) format = GST_FORMAT_DEFAULT; +#if 0 gst_pad_query (pad, GST_QUERY_START, &format, &value); g_print ("configured for start %" G_GINT64_FORMAT "\n", value); gst_pad_query (pad, GST_QUERY_SEGMENT_END, &format, &value); g_print ("configured segment end %" G_GINT64_FORMAT "\n", value); +#endif gst_element_set_state (pipeline, GST_STATE_PLAYING); g_signal_connect (G_OBJECT (pipeline), "deep_notify", - G_CALLBACK (gst_element_default_deep_notify), NULL); + G_CALLBACK (gst_object_default_deep_notify), NULL); - while (gst_bin_iterate (GST_BIN (pipeline))); + g_usleep (2 * G_USEC_PER_SEC); g_print ("doing segment seek from 50 to 55 with looping (2 times), then 20 to 25 without looping\n"); @@ -80,14 +85,16 @@ main (gint argc, gchar * argv[]) g_signal_connect (G_OBJECT (gst_element_get_pad (fakesink, "sink")), "event_received", G_CALLBACK (event_received), event); +#if 0 gst_pad_query (pad, GST_QUERY_START, &format, &value); g_print ("configured for start %" G_GINT64_FORMAT "\n", value); gst_pad_query (pad, GST_QUERY_SEGMENT_END, &format, &value); g_print ("configured segment end %" G_GINT64_FORMAT "\n", value); +#endif gst_element_set_state (pipeline, GST_STATE_PLAYING); - while (gst_bin_iterate (GST_BIN (pipeline))); + g_usleep (2 * G_USEC_PER_SEC); gst_element_set_state (pipeline, GST_STATE_NULL); diff --git a/tests/threadstate/threadstate2.c b/tests/threadstate/threadstate2.c index 9123a58..862fc45 100644 --- a/tests/threadstate/threadstate2.c +++ b/tests/threadstate/threadstate2.c @@ -1,29 +1,45 @@ #include #include +static GMainLoop *loop; +static gboolean EOS = FALSE; + /* this pipeline is: * { filesrc ! mad ! osssink } */ -/* eos will be called when the src element has an end of stream */ -void -eos (GstElement * element, gpointer data) +static gboolean +bus_handler (GstBus * bus, GstMessage * message, gpointer data) { - GstThread *thread = GST_THREAD (data); + switch (GST_MESSAGE_TYPE (message)) { + case GST_MESSAGE_EOS: + g_print ("have eos, quitting\n"); + EOS = TRUE; + if (g_main_loop_is_running (loop)) + g_main_loop_quit (loop); + break; + default: + break; + } + return TRUE; +} - g_print ("have eos, quitting\n"); +static gboolean +timeout_func (GMainLoop * loop) +{ + g_main_loop_quit (loop); - /* stop the bin */ - gst_element_set_state (GST_ELEMENT (thread), GST_STATE_NULL); + return TRUE; } int main (int argc, char *argv[]) { GstElement *filesrc, *osssink; - GstElement *thread; + GstElement *pipeline; GstElement *mad; gint x; + GstBus *bus; gst_init (&argc, &argv); @@ -32,15 +48,14 @@ main (int argc, char *argv[]) exit (-1); } - /* create a new thread to hold the elements */ - thread = gst_thread_new ("thread"); - g_assert (thread != NULL); + /* create a new pipeline to hold the elements */ + pipeline = gst_pipeline_new ("pipeline"); + g_assert (pipeline != NULL); /* create a disk reader */ filesrc = gst_element_factory_make ("filesrc", "disk_source"); g_assert (filesrc != NULL); g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); - g_signal_connect (G_OBJECT (filesrc), "eos", G_CALLBACK (eos), thread); /* and an audio sink */ osssink = gst_element_factory_make ("osssink", "play_audio"); @@ -50,17 +65,25 @@ main (int argc, char *argv[]) mad = gst_element_factory_make ("mad", "mp3_decoder"); g_assert (mad != NULL); - gst_bin_add_many (GST_BIN (thread), filesrc, mad, osssink, NULL); + gst_bin_add_many (GST_BIN (pipeline), filesrc, mad, osssink, NULL); gst_element_link_many (filesrc, mad, osssink, NULL); + loop = g_main_loop_new (NULL, FALSE); + g_timeout_add (2 * 1000, (GSourceFunc) timeout_func, loop); + + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + gst_bus_add_watch (bus, (GstBusHandler) bus_handler, pipeline); + for (x = 0; x < 10; x++) { g_print ("playing %d\n", x); - gst_element_set_state (GST_ELEMENT (thread), GST_STATE_PLAYING); - g_usleep (G_USEC_PER_SEC * 2); + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); + g_main_loop_run (loop); + if (EOS) + break; g_print ("pausing %d\n", x); - gst_element_set_state (GST_ELEMENT (thread), GST_STATE_PAUSED); - g_usleep (G_USEC_PER_SEC * 2); + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED); + g_main_loop_run (loop); } exit (0); diff --git a/tests/threadstate/threadstate3.c b/tests/threadstate/threadstate3.c index cfabbb3..c0acfdf 100644 --- a/tests/threadstate/threadstate3.c +++ b/tests/threadstate/threadstate3.c @@ -9,18 +9,18 @@ int main (int argc, char *argv[]) { GstElement *fakesrc, *fakesink; - GstElement *thread, *thread2; + GstElement *pipeline, *pipeline2; gint x; gst_init (&argc, &argv); - thread = gst_thread_new ("thread"); - g_assert (thread != NULL); + pipeline = gst_pipeline_new ("pipeline"); + g_assert (pipeline != NULL); - thread2 = gst_thread_new ("thread2"); - g_assert (thread2 != NULL); + pipeline2 = gst_pipeline_new ("pipeline2"); + g_assert (pipeline2 != NULL); - gst_bin_add (GST_BIN (thread), GST_ELEMENT (thread2)); + gst_bin_add (GST_BIN (pipeline), GST_ELEMENT (pipeline2)); fakesrc = gst_element_factory_make ("fakesrc", "fake_source"); g_assert (fakesrc != NULL); @@ -28,16 +28,16 @@ main (int argc, char *argv[]) fakesink = gst_element_factory_make ("fakesink", "fake_sink"); g_assert (fakesink != NULL); - gst_bin_add_many (GST_BIN (thread2), fakesrc, fakesink, NULL); + gst_bin_add_many (GST_BIN (pipeline2), fakesrc, fakesink, NULL); gst_element_link (fakesrc, fakesink); for (x = 0; x < 10; x++) { g_print ("playing %d\n", x); - gst_element_set_state (GST_ELEMENT (thread), GST_STATE_PLAYING); + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); g_usleep (G_USEC_PER_SEC); g_print ("nulling %d\n", x); - gst_element_set_state (GST_ELEMENT (thread), GST_STATE_NULL); + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL); g_usleep (G_USEC_PER_SEC); } exit (0); diff --git a/tests/threadstate/threadstate4.c b/tests/threadstate/threadstate4.c index f96f90b..4163a90 100644 --- a/tests/threadstate/threadstate4.c +++ b/tests/threadstate/threadstate4.c @@ -9,17 +9,17 @@ int main (int argc, char *argv[]) { GstElement *fakesrc, *fakesink; - GstElement *thread, *thread2; + GstElement *pipeline, *pipeline2; GstElement *queue; gint x; gst_init (&argc, &argv); - thread = gst_thread_new ("thread"); - g_assert (thread != NULL); + pipeline = gst_pipeline_new ("pipeline"); + g_assert (pipeline != NULL); - thread2 = gst_thread_new ("thread"); - g_assert (thread2 != NULL); + pipeline2 = gst_pipeline_new ("pipeline"); + g_assert (pipeline2 != NULL); queue = gst_element_factory_make ("queue", "the_queue"); g_assert (queue != NULL); @@ -31,20 +31,20 @@ main (int argc, char *argv[]) fakesink = gst_element_factory_make ("fakesink", "fake_sink"); g_assert (fakesink != NULL); - gst_bin_add_many (GST_BIN (thread), thread2, queue, fakesink, NULL); + gst_bin_add_many (GST_BIN (pipeline), pipeline2, queue, fakesink, NULL); - gst_bin_add (GST_BIN (thread2), fakesrc); - gst_element_add_ghost_pad (thread2, gst_element_get_pad (fakesrc, "src"), - "src"); - gst_element_link_many (thread2, queue, fakesink, NULL); + gst_bin_add (GST_BIN (pipeline2), fakesrc); + gst_element_add_pad (pipeline2, gst_ghost_pad_new ("src", + gst_element_get_pad (fakesrc, "src"))); + gst_element_link_many (pipeline2, queue, fakesink, NULL); for (x = 0; x < 10; x++) { g_print ("playing %d\n", x); - gst_element_set_state (thread, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_PLAYING); g_usleep (G_USEC_PER_SEC); g_print ("nulling %d\n", x); - gst_element_set_state (thread, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_NULL); g_usleep (G_USEC_PER_SEC); } diff --git a/tests/threadstate/threadstate5.c b/tests/threadstate/threadstate5.c index e544d07..4e58561 100644 --- a/tests/threadstate/threadstate5.c +++ b/tests/threadstate/threadstate5.c @@ -9,17 +9,17 @@ int main (int argc, char *argv[]) { GstElement *fakesrc, *fakesink; - GstElement *thread, *thread2; + GstElement *pipeline, *pipeline2; GstElement *queue; gint x; gst_init (&argc, &argv); - thread = gst_thread_new ("thread"); - g_assert (thread != NULL); + pipeline = gst_pipeline_new ("pipeline"); + g_assert (pipeline != NULL); - thread2 = gst_thread_new ("thread"); - g_assert (thread2 != NULL); + pipeline2 = gst_pipeline_new ("pipeline"); + g_assert (pipeline2 != NULL); queue = gst_element_factory_make ("queue", "the_queue"); g_assert (queue != NULL); @@ -30,21 +30,21 @@ main (int argc, char *argv[]) fakesink = gst_element_factory_make ("fakesink", "fake_sink"); g_assert (fakesink != NULL); - gst_bin_add_many (GST_BIN (thread), fakesrc, thread2, NULL); - gst_bin_add_many (GST_BIN (thread2), queue, fakesink, NULL); + gst_bin_add_many (GST_BIN (pipeline), fakesrc, pipeline2, NULL); + gst_bin_add_many (GST_BIN (pipeline2), queue, fakesink, NULL); - gst_element_add_ghost_pad (thread2, gst_element_get_pad (queue, "sink"), - "sink"); + gst_element_add_pad (pipeline2, gst_ghost_pad_new ("sink", + gst_element_get_pad (queue, "sink"))); gst_element_link_many (queue, fakesink, NULL); - gst_element_link_many (fakesrc, thread2, NULL); + gst_element_link_many (fakesrc, pipeline2, NULL); for (x = 0; x < 10; x++) { g_print ("playing %d\n", x); - gst_element_set_state (thread, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_PLAYING); g_usleep (G_USEC_PER_SEC); g_print ("nulling %d\n", x); - gst_element_set_state (thread, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_NULL); g_usleep (G_USEC_PER_SEC); }