From b772f81d4aede4c64bcfddc9f6f9eba9caec3a63 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 8 Oct 2000 22:23:12 +0000 Subject: [PATCH] Added an autoplug example. This little program (30 relevant lines) is able to play MPEG1(system)/MPEG2(system)/AVI(DI... Original commit message from CVS: Added an autoplug example. This little program (30 relevant lines) is able to play MPEG1(system)/MPEG2(system)/AVI(DIVX)/Vorbis/AC3 and whatever codec you write. Separated the mp3 and mpeg1 types for better reuse. --- examples/autoplug/.gitignore | 2 + examples/autoplug/Makefile | 10 +++ examples/autoplug/autoplug.c | 85 ++++++++++++++++++++++++++ tests/old/examples/autoplug/.gitignore | 2 + tests/old/examples/autoplug/Makefile | 10 +++ tests/old/examples/autoplug/autoplug.c | 85 ++++++++++++++++++++++++++ 6 files changed, 194 insertions(+) create mode 100644 examples/autoplug/.gitignore create mode 100644 examples/autoplug/Makefile create mode 100644 examples/autoplug/autoplug.c create mode 100644 tests/old/examples/autoplug/.gitignore create mode 100644 tests/old/examples/autoplug/Makefile create mode 100644 tests/old/examples/autoplug/autoplug.c diff --git a/examples/autoplug/.gitignore b/examples/autoplug/.gitignore new file mode 100644 index 0000000000..72aa0dd0f8 --- /dev/null +++ b/examples/autoplug/.gitignore @@ -0,0 +1,2 @@ +Makefile +autoplug diff --git a/examples/autoplug/Makefile b/examples/autoplug/Makefile new file mode 100644 index 0000000000..c8feaad2cb --- /dev/null +++ b/examples/autoplug/Makefile @@ -0,0 +1,10 @@ + +CC = gcc + +autoplug: autoplug.c + $(CC) -Wall `gstreamer-config --cflags --libs` `gnome-config --cflags --libs gnomeui` autoplug.c -o autoplug + +clean: + rm -f *.o autoplug + + diff --git a/examples/autoplug/autoplug.c b/examples/autoplug/autoplug.c new file mode 100644 index 0000000000..17edcf2a3d --- /dev/null +++ b/examples/autoplug/autoplug.c @@ -0,0 +1,85 @@ +#include +#include + +static gboolean playing; + +/* eos will be called when the src element has an end of stream */ +void eos(GstSrc *src) +{ + g_print("have eos, quitting\n"); + + playing = FALSE; +} + +int main(int argc,char *argv[]) +{ + GstElement *disksrc, *audiosink, *videosink; + GstElement *pipeline; + GtkWidget *appwindow; + + if (argc != 2) { + g_print("usage: %s \n", argv[0]); + exit(-1); + } + + gst_init(&argc,&argv); + gnome_init("autoplug","0.0.1", argc,argv); + + + /* 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),NULL); + + /* and an audio sink */ + audiosink = gst_elementfactory_make("audiosink", "play_audio"); + g_assert(audiosink != NULL); + + /* and an video sink */ + videosink = gst_elementfactory_make("videosink", "play_video"); + g_assert(videosink != NULL); + gtk_object_set(GTK_OBJECT(videosink),"xv_enabled", FALSE,NULL); + + appwindow = gnome_app_new("autoplug demo","autoplug demo"); + gnome_app_set_contents(GNOME_APP(appwindow), + gst_util_get_widget_arg(GTK_OBJECT(videosink),"widget")); + gtk_widget_show_all(appwindow); + + /* add objects to the main pipeline */ + gst_pipeline_add_src(GST_PIPELINE(pipeline), disksrc); + gst_pipeline_add_sink(GST_PIPELINE(pipeline), audiosink); + gst_pipeline_add_sink(GST_PIPELINE(pipeline), videosink); + + if (!gst_pipeline_autoplug(GST_PIPELINE(pipeline))) { + g_print("unable to handle stream\n"); + exit(-1); + } + + /* make it ready */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_READY); + /* start playing */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING); + + playing = TRUE; + + while (playing) { + gst_bin_iterate(GST_BIN(pipeline)); + gdk_threads_enter(); + while (gtk_events_pending()) gtk_main_iteration(); + gdk_threads_leave(); + } + + /* stop the bin */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); + + gst_pipeline_destroy(pipeline); + + exit(0); +} + diff --git a/tests/old/examples/autoplug/.gitignore b/tests/old/examples/autoplug/.gitignore new file mode 100644 index 0000000000..72aa0dd0f8 --- /dev/null +++ b/tests/old/examples/autoplug/.gitignore @@ -0,0 +1,2 @@ +Makefile +autoplug diff --git a/tests/old/examples/autoplug/Makefile b/tests/old/examples/autoplug/Makefile new file mode 100644 index 0000000000..c8feaad2cb --- /dev/null +++ b/tests/old/examples/autoplug/Makefile @@ -0,0 +1,10 @@ + +CC = gcc + +autoplug: autoplug.c + $(CC) -Wall `gstreamer-config --cflags --libs` `gnome-config --cflags --libs gnomeui` autoplug.c -o autoplug + +clean: + rm -f *.o autoplug + + diff --git a/tests/old/examples/autoplug/autoplug.c b/tests/old/examples/autoplug/autoplug.c new file mode 100644 index 0000000000..17edcf2a3d --- /dev/null +++ b/tests/old/examples/autoplug/autoplug.c @@ -0,0 +1,85 @@ +#include +#include + +static gboolean playing; + +/* eos will be called when the src element has an end of stream */ +void eos(GstSrc *src) +{ + g_print("have eos, quitting\n"); + + playing = FALSE; +} + +int main(int argc,char *argv[]) +{ + GstElement *disksrc, *audiosink, *videosink; + GstElement *pipeline; + GtkWidget *appwindow; + + if (argc != 2) { + g_print("usage: %s \n", argv[0]); + exit(-1); + } + + gst_init(&argc,&argv); + gnome_init("autoplug","0.0.1", argc,argv); + + + /* 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),NULL); + + /* and an audio sink */ + audiosink = gst_elementfactory_make("audiosink", "play_audio"); + g_assert(audiosink != NULL); + + /* and an video sink */ + videosink = gst_elementfactory_make("videosink", "play_video"); + g_assert(videosink != NULL); + gtk_object_set(GTK_OBJECT(videosink),"xv_enabled", FALSE,NULL); + + appwindow = gnome_app_new("autoplug demo","autoplug demo"); + gnome_app_set_contents(GNOME_APP(appwindow), + gst_util_get_widget_arg(GTK_OBJECT(videosink),"widget")); + gtk_widget_show_all(appwindow); + + /* add objects to the main pipeline */ + gst_pipeline_add_src(GST_PIPELINE(pipeline), disksrc); + gst_pipeline_add_sink(GST_PIPELINE(pipeline), audiosink); + gst_pipeline_add_sink(GST_PIPELINE(pipeline), videosink); + + if (!gst_pipeline_autoplug(GST_PIPELINE(pipeline))) { + g_print("unable to handle stream\n"); + exit(-1); + } + + /* make it ready */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_READY); + /* start playing */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING); + + playing = TRUE; + + while (playing) { + gst_bin_iterate(GST_BIN(pipeline)); + gdk_threads_enter(); + while (gtk_events_pending()) gtk_main_iteration(); + gdk_threads_leave(); + } + + /* stop the bin */ + gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); + + gst_pipeline_destroy(pipeline); + + exit(0); +} +