Added -t option to run the toplevel pipeline as a thread
authorWim Taymans <wim.taymans@gmail.com>
Sun, 9 Jun 2002 10:58:37 +0000 (10:58 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Sun, 9 Jun 2002 10:58:37 +0000 (10:58 +0000)
Original commit message from CVS:
Added -t option to run the toplevel pipeline as a thread

examples/seeking/spider_seek.c
tests/examples/seek/spider_seek.c
tests/old/examples/seek/spider_seek.c

index 04ac4b8..d6e1cf2 100644 (file)
@@ -17,15 +17,19 @@ static guint update_id;
 
 #define UPDATE_INTERVAL 500
 
-#define THREAD
-
 static GstElement*
-make_spider_pipeline (const gchar *location) 
+make_spider_pipeline (const gchar *location, gboolean thread
 {
   GstElement *pipeline;
   GstElement *src, *decoder, *audiosink, *videosink, *a_thread, *v_thread, *a_queue, *v_queue;
   
-  pipeline = gst_pipeline_new ("app");
+  if (thread) {
+    pipeline = gst_thread_new ("app");
+  }
+  else {
+    pipeline = gst_pipeline_new ("app");
+  }
+  
 
   src = gst_element_factory_make (SOURCE, "src");
   decoder = gst_element_factory_make ("spider", "decoder");
@@ -210,7 +214,10 @@ update_scale (gpointer data)
 static gboolean
 iterate (gpointer data)
 {
-  gboolean res;
+  gboolean res = TRUE;
+
+  if (GST_FLAG_IS_SET (data, GST_BIN_SELF_SCHEDULABLE))
+    return TRUE;
 
   res = gst_bin_iterate (GST_BIN (data));
   if (!res) {
@@ -292,8 +299,14 @@ main (int argc, char **argv)
   GtkWidget *window, *hbox, *vbox, 
             *play_button, *pause_button, *stop_button, 
            *hscale;
-
-  gst_init (&argc, &argv);
+  gboolean threaded = FALSE;
+  struct poptOption options[] = {
+    {"threaded",  't',  POPT_ARG_NONE|POPT_ARGFLAG_STRIP,   &threaded,   0,
+         "Run the pipeline in a toplevel thread", NULL},
+     POPT_TABLEEND
+    };
+
+  gst_init_with_popt_table (&argc, &argv, options);
   gtk_init (&argc, &argv);
 
   if (argc != 2) {
@@ -301,7 +314,7 @@ main (int argc, char **argv)
     exit (-1);
   }
 
-  pipeline = make_spider_pipeline (argv[1]);
+  pipeline = make_spider_pipeline (argv[1], threaded);
 
   /* initialize gui elements ... */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
index 04ac4b8..d6e1cf2 100644 (file)
@@ -17,15 +17,19 @@ static guint update_id;
 
 #define UPDATE_INTERVAL 500
 
-#define THREAD
-
 static GstElement*
-make_spider_pipeline (const gchar *location) 
+make_spider_pipeline (const gchar *location, gboolean thread
 {
   GstElement *pipeline;
   GstElement *src, *decoder, *audiosink, *videosink, *a_thread, *v_thread, *a_queue, *v_queue;
   
-  pipeline = gst_pipeline_new ("app");
+  if (thread) {
+    pipeline = gst_thread_new ("app");
+  }
+  else {
+    pipeline = gst_pipeline_new ("app");
+  }
+  
 
   src = gst_element_factory_make (SOURCE, "src");
   decoder = gst_element_factory_make ("spider", "decoder");
@@ -210,7 +214,10 @@ update_scale (gpointer data)
 static gboolean
 iterate (gpointer data)
 {
-  gboolean res;
+  gboolean res = TRUE;
+
+  if (GST_FLAG_IS_SET (data, GST_BIN_SELF_SCHEDULABLE))
+    return TRUE;
 
   res = gst_bin_iterate (GST_BIN (data));
   if (!res) {
@@ -292,8 +299,14 @@ main (int argc, char **argv)
   GtkWidget *window, *hbox, *vbox, 
             *play_button, *pause_button, *stop_button, 
            *hscale;
-
-  gst_init (&argc, &argv);
+  gboolean threaded = FALSE;
+  struct poptOption options[] = {
+    {"threaded",  't',  POPT_ARG_NONE|POPT_ARGFLAG_STRIP,   &threaded,   0,
+         "Run the pipeline in a toplevel thread", NULL},
+     POPT_TABLEEND
+    };
+
+  gst_init_with_popt_table (&argc, &argv, options);
   gtk_init (&argc, &argv);
 
   if (argc != 2) {
@@ -301,7 +314,7 @@ main (int argc, char **argv)
     exit (-1);
   }
 
-  pipeline = make_spider_pipeline (argv[1]);
+  pipeline = make_spider_pipeline (argv[1], threaded);
 
   /* initialize gui elements ... */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
index 04ac4b8..d6e1cf2 100644 (file)
@@ -17,15 +17,19 @@ static guint update_id;
 
 #define UPDATE_INTERVAL 500
 
-#define THREAD
-
 static GstElement*
-make_spider_pipeline (const gchar *location) 
+make_spider_pipeline (const gchar *location, gboolean thread
 {
   GstElement *pipeline;
   GstElement *src, *decoder, *audiosink, *videosink, *a_thread, *v_thread, *a_queue, *v_queue;
   
-  pipeline = gst_pipeline_new ("app");
+  if (thread) {
+    pipeline = gst_thread_new ("app");
+  }
+  else {
+    pipeline = gst_pipeline_new ("app");
+  }
+  
 
   src = gst_element_factory_make (SOURCE, "src");
   decoder = gst_element_factory_make ("spider", "decoder");
@@ -210,7 +214,10 @@ update_scale (gpointer data)
 static gboolean
 iterate (gpointer data)
 {
-  gboolean res;
+  gboolean res = TRUE;
+
+  if (GST_FLAG_IS_SET (data, GST_BIN_SELF_SCHEDULABLE))
+    return TRUE;
 
   res = gst_bin_iterate (GST_BIN (data));
   if (!res) {
@@ -292,8 +299,14 @@ main (int argc, char **argv)
   GtkWidget *window, *hbox, *vbox, 
             *play_button, *pause_button, *stop_button, 
            *hscale;
-
-  gst_init (&argc, &argv);
+  gboolean threaded = FALSE;
+  struct poptOption options[] = {
+    {"threaded",  't',  POPT_ARG_NONE|POPT_ARGFLAG_STRIP,   &threaded,   0,
+         "Run the pipeline in a toplevel thread", NULL},
+     POPT_TABLEEND
+    };
+
+  gst_init_with_popt_table (&argc, &argv, options);
   gtk_init (&argc, &argv);
 
   if (argc != 2) {
@@ -301,7 +314,7 @@ main (int argc, char **argv)
     exit (-1);
   }
 
-  pipeline = make_spider_pipeline (argv[1]);
+  pipeline = make_spider_pipeline (argv[1], threaded);
 
   /* initialize gui elements ... */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);