From f6d86c4a98bcbbf7cfdbfd4242a62752682bb3ee Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 5 Dec 2001 18:39:20 +0000 Subject: [PATCH] Added a thread test case. Original commit message from CVS: Added a thread test case. --- tests/old/testsuite/threads/Makefile.am | 9 +++ tests/old/testsuite/threads/thread.c | 112 ++++++++++++++++++++++++++++++++ testsuite/threads/Makefile.am | 9 +++ testsuite/threads/thread.c | 112 ++++++++++++++++++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100644 tests/old/testsuite/threads/Makefile.am create mode 100644 tests/old/testsuite/threads/thread.c create mode 100644 testsuite/threads/Makefile.am create mode 100644 testsuite/threads/thread.c diff --git a/tests/old/testsuite/threads/Makefile.am b/tests/old/testsuite/threads/Makefile.am new file mode 100644 index 0000000..276a239 --- /dev/null +++ b/tests/old/testsuite/threads/Makefile.am @@ -0,0 +1,9 @@ +testprogs = thread + +TESTS = $(testprogs) + +check_PROGRAMS = $(testprogs) + +# we have nothing but apps here, we can do this safely +thread_LDADD = $(GST_LIBS) +thread_CFLAGS = $(GST_CFLAGS) $(GNOME_CFLAGS) $(XML_CFLAGS) diff --git a/tests/old/testsuite/threads/thread.c b/tests/old/testsuite/threads/thread.c new file mode 100644 index 0000000..9ef9fc2 --- /dev/null +++ b/tests/old/testsuite/threads/thread.c @@ -0,0 +1,112 @@ +#include + +void +usage (void) +{ + g_print ("usage: thread \n" + " available testnums: \n" + " 1: stress test state change \n" + " 2: iterate once \n" + " 3: iterate twice \n" + " 4: state change while running \n" + " 5: state change in thread context\n"); +} + +static void +construct_pipeline (GstElement *pipeline) +{ + GstElement *src, *sink, *queue, *thread; + + src = gst_elementfactory_make ("fakesrc", "src"); + sink = gst_elementfactory_make ("fakesink", "sink"); + queue = gst_elementfactory_make ("queue", "queue"); + thread = gst_elementfactory_make ("thread", "thread"); + + gst_element_connect (src, "src", queue, "sink"); + gst_element_connect (queue, "src", sink, "sink"); + + gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), thread); + + gst_bin_add (GST_BIN (thread), sink); + + g_object_set (G_OBJECT (src), "num_buffers", 5, NULL); +} + +void +change_state (GstElement *element, GstBuffer *buf, GstElement *pipeline) +{ + gst_element_set_state (pipeline, GST_STATE_NULL); +} + +gint +main (gint argc, gchar *argv[]) +{ + GstElement *pipeline; + gint testnum; + + gst_init (&argc, &argv); + + if (argc < 2) { + usage(); + return 0; + } + + testnum = atoi (argv[1]); + + pipeline = gst_pipeline_new ("main_pipeline"); + construct_pipeline (pipeline); + + if (testnum == 1) { + g_print ("stress test state changes...\n"); + + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + + if (testnum == 2 || testnum == 3) { + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 3) { + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running2 ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 4) { + gint run; + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running3 ...\n"); + for (run = 0; run < 3; run++) { + gst_bin_iterate (GST_BIN (pipeline)); + } + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 5) { + GstElement *sink; + + sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink"); + + g_signal_connect (G_OBJECT (sink), "handoff", change_state, pipeline); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running3 ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + + return 0; +} diff --git a/testsuite/threads/Makefile.am b/testsuite/threads/Makefile.am new file mode 100644 index 0000000..276a239 --- /dev/null +++ b/testsuite/threads/Makefile.am @@ -0,0 +1,9 @@ +testprogs = thread + +TESTS = $(testprogs) + +check_PROGRAMS = $(testprogs) + +# we have nothing but apps here, we can do this safely +thread_LDADD = $(GST_LIBS) +thread_CFLAGS = $(GST_CFLAGS) $(GNOME_CFLAGS) $(XML_CFLAGS) diff --git a/testsuite/threads/thread.c b/testsuite/threads/thread.c new file mode 100644 index 0000000..9ef9fc2 --- /dev/null +++ b/testsuite/threads/thread.c @@ -0,0 +1,112 @@ +#include + +void +usage (void) +{ + g_print ("usage: thread \n" + " available testnums: \n" + " 1: stress test state change \n" + " 2: iterate once \n" + " 3: iterate twice \n" + " 4: state change while running \n" + " 5: state change in thread context\n"); +} + +static void +construct_pipeline (GstElement *pipeline) +{ + GstElement *src, *sink, *queue, *thread; + + src = gst_elementfactory_make ("fakesrc", "src"); + sink = gst_elementfactory_make ("fakesink", "sink"); + queue = gst_elementfactory_make ("queue", "queue"); + thread = gst_elementfactory_make ("thread", "thread"); + + gst_element_connect (src, "src", queue, "sink"); + gst_element_connect (queue, "src", sink, "sink"); + + gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), thread); + + gst_bin_add (GST_BIN (thread), sink); + + g_object_set (G_OBJECT (src), "num_buffers", 5, NULL); +} + +void +change_state (GstElement *element, GstBuffer *buf, GstElement *pipeline) +{ + gst_element_set_state (pipeline, GST_STATE_NULL); +} + +gint +main (gint argc, gchar *argv[]) +{ + GstElement *pipeline; + gint testnum; + + gst_init (&argc, &argv); + + if (argc < 2) { + usage(); + return 0; + } + + testnum = atoi (argv[1]); + + pipeline = gst_pipeline_new ("main_pipeline"); + construct_pipeline (pipeline); + + if (testnum == 1) { + g_print ("stress test state changes...\n"); + + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + gst_element_set_state (pipeline, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + + if (testnum == 2 || testnum == 3) { + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 3) { + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running2 ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 4) { + gint run; + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running3 ...\n"); + for (run = 0; run < 3; run++) { + gst_bin_iterate (GST_BIN (pipeline)); + } + gst_element_set_state (pipeline, GST_STATE_NULL); + } + if (testnum == 5) { + GstElement *sink; + + sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink"); + + g_signal_connect (G_OBJECT (sink), "handoff", change_state, pipeline); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_print ("running3 ...\n"); + while (gst_bin_iterate (GST_BIN (pipeline))); + gst_element_set_state (pipeline, GST_STATE_NULL); + } + + return 0; +} -- 2.7.4