From 1351aba8994a8736c54d24938f2e56a1244881ed Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 9 Sep 2000 16:39:03 +0000 Subject: [PATCH] A thread example. Original commit message from CVS: A thread example. An example of gstreamer-launch: an mp3 player --- examples/launch/.gitignore | 1 + examples/launch/mp3play | 2 + examples/thread/.gitignore | 2 + examples/thread/Makefile | 10 ++++ examples/thread/thread.c | 72 ++++++++++++++++++++++++++++ tests/old/examples/launch/.gitignore | 1 + tests/old/examples/launch/mp3play | 2 + tests/old/examples/thread/.gitignore | 2 + tests/old/examples/thread/Makefile | 10 ++++ tests/old/examples/thread/thread.c | 72 ++++++++++++++++++++++++++++ 10 files changed, 174 insertions(+) create mode 100644 examples/launch/.gitignore create mode 100755 examples/launch/mp3play create mode 100644 examples/thread/.gitignore create mode 100644 examples/thread/Makefile create mode 100644 examples/thread/thread.c create mode 100644 tests/old/examples/launch/.gitignore create mode 100755 tests/old/examples/launch/mp3play create mode 100644 tests/old/examples/thread/.gitignore create mode 100644 tests/old/examples/thread/Makefile create mode 100644 tests/old/examples/thread/thread.c diff --git a/examples/launch/.gitignore b/examples/launch/.gitignore new file mode 100644 index 0000000000..3eb8723e20 --- /dev/null +++ b/examples/launch/.gitignore @@ -0,0 +1 @@ +mp3play diff --git a/examples/launch/mp3play b/examples/launch/mp3play new file mode 100755 index 0000000000..c5e8e5f955 --- /dev/null +++ b/examples/launch/mp3play @@ -0,0 +1,2 @@ +#/usr/bin/sh +gstreamer-launch disksrc $1 ! mp3parse ! mpg123 ! audiosink diff --git a/examples/thread/.gitignore b/examples/thread/.gitignore new file mode 100644 index 0000000000..97ca9711ca --- /dev/null +++ b/examples/thread/.gitignore @@ -0,0 +1,2 @@ +Makefile +thread diff --git a/examples/thread/Makefile b/examples/thread/Makefile new file mode 100644 index 0000000000..408cb6eb07 --- /dev/null +++ b/examples/thread/Makefile @@ -0,0 +1,10 @@ + +CC = gcc + +thread: thread.c + $(CC) -Wall `gstreamer-config --cflags --libs` thread.c -o thread + +clean: + rm -f *.o thread + + diff --git a/examples/thread/thread.c b/examples/thread/thread.c new file mode 100644 index 0000000000..1635219844 --- /dev/null +++ b/examples/thread/thread.c @@ -0,0 +1,72 @@ +#include + +/* eos will be called when the src element has an end of stream */ +void eos(GstSrc *src, gpointer data) +{ + GstThread *thread = GST_THREAD(data); + g_print("have eos, quitting\n"); + + /* stop the bin */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_NULL); + + gst_main_quit(); +} + +int main(int argc,char *argv[]) +{ + GstElement *disksrc, *audiosink; + GstElement *pipeline; + GstElement *thread; + + if (argc != 2) { + g_print("usage: %s \n", argv[0]); + exit(-1); + } + + gst_init(&argc,&argv); + + /* create a new thread to hold the elements */ + thread = gst_thread_new("thread"); + g_assert(thread != NULL); + + /* create a new bin to hold the elements */ + pipeline = gst_pipeline_new("pipeline"); + g_assert(pipeline != NULL); + + /* create a disk reader */ + disksrc = gst_elementfactory_make("disksrc", "disk_source"); + g_assert(disksrc != NULL); + gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL); + gtk_signal_connect(GTK_OBJECT(disksrc),"eos", + GTK_SIGNAL_FUNC(eos), thread); + + /* and an audio sink */ + audiosink = gst_elementfactory_make("audiosink", "play_audio"); + g_assert(audiosink != NULL); + + /* add objects to the main pipeline */ + gst_bin_add(GST_BIN(pipeline), disksrc); + gst_bin_add(GST_BIN(pipeline), audiosink); + + if (!gst_pipeline_autoplug(GST_PIPELINE(pipeline))) { + g_print("unable to handle stream\n"); + exit(-1); + } + + gst_bin_remove(GST_BIN(pipeline), disksrc); + + gst_bin_add(GST_BIN(thread), disksrc); + gst_bin_add(GST_BIN(thread), GST_ELEMENT(pipeline)); + + /* make it ready */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_READY); + /* start playing */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_PLAYING); + + gst_main(); + + gst_pipeline_destroy(thread); + + exit(0); +} + diff --git a/tests/old/examples/launch/.gitignore b/tests/old/examples/launch/.gitignore new file mode 100644 index 0000000000..3eb8723e20 --- /dev/null +++ b/tests/old/examples/launch/.gitignore @@ -0,0 +1 @@ +mp3play diff --git a/tests/old/examples/launch/mp3play b/tests/old/examples/launch/mp3play new file mode 100755 index 0000000000..c5e8e5f955 --- /dev/null +++ b/tests/old/examples/launch/mp3play @@ -0,0 +1,2 @@ +#/usr/bin/sh +gstreamer-launch disksrc $1 ! mp3parse ! mpg123 ! audiosink diff --git a/tests/old/examples/thread/.gitignore b/tests/old/examples/thread/.gitignore new file mode 100644 index 0000000000..97ca9711ca --- /dev/null +++ b/tests/old/examples/thread/.gitignore @@ -0,0 +1,2 @@ +Makefile +thread diff --git a/tests/old/examples/thread/Makefile b/tests/old/examples/thread/Makefile new file mode 100644 index 0000000000..408cb6eb07 --- /dev/null +++ b/tests/old/examples/thread/Makefile @@ -0,0 +1,10 @@ + +CC = gcc + +thread: thread.c + $(CC) -Wall `gstreamer-config --cflags --libs` thread.c -o thread + +clean: + rm -f *.o thread + + diff --git a/tests/old/examples/thread/thread.c b/tests/old/examples/thread/thread.c new file mode 100644 index 0000000000..1635219844 --- /dev/null +++ b/tests/old/examples/thread/thread.c @@ -0,0 +1,72 @@ +#include + +/* eos will be called when the src element has an end of stream */ +void eos(GstSrc *src, gpointer data) +{ + GstThread *thread = GST_THREAD(data); + g_print("have eos, quitting\n"); + + /* stop the bin */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_NULL); + + gst_main_quit(); +} + +int main(int argc,char *argv[]) +{ + GstElement *disksrc, *audiosink; + GstElement *pipeline; + GstElement *thread; + + if (argc != 2) { + g_print("usage: %s \n", argv[0]); + exit(-1); + } + + gst_init(&argc,&argv); + + /* create a new thread to hold the elements */ + thread = gst_thread_new("thread"); + g_assert(thread != NULL); + + /* create a new bin to hold the elements */ + pipeline = gst_pipeline_new("pipeline"); + g_assert(pipeline != NULL); + + /* create a disk reader */ + disksrc = gst_elementfactory_make("disksrc", "disk_source"); + g_assert(disksrc != NULL); + gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL); + gtk_signal_connect(GTK_OBJECT(disksrc),"eos", + GTK_SIGNAL_FUNC(eos), thread); + + /* and an audio sink */ + audiosink = gst_elementfactory_make("audiosink", "play_audio"); + g_assert(audiosink != NULL); + + /* add objects to the main pipeline */ + gst_bin_add(GST_BIN(pipeline), disksrc); + gst_bin_add(GST_BIN(pipeline), audiosink); + + if (!gst_pipeline_autoplug(GST_PIPELINE(pipeline))) { + g_print("unable to handle stream\n"); + exit(-1); + } + + gst_bin_remove(GST_BIN(pipeline), disksrc); + + gst_bin_add(GST_BIN(thread), disksrc); + gst_bin_add(GST_BIN(thread), GST_ELEMENT(pipeline)); + + /* make it ready */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_READY); + /* start playing */ + gst_element_set_state(GST_ELEMENT(thread), GST_STATE_PLAYING); + + gst_main(); + + gst_pipeline_destroy(thread); + + exit(0); +} +