a86b3ffbeb4824bff26b13a0f3d73df49e3207f2
[platform/upstream/gstreamer.git] / examples / queue4 / queue4.c
1 #include <gst/gst.h>
2
3 gboolean playing;
4
5 /* eos will be called when the src element has an end of stream */
6 void eos(GstSrc *src, gpointer data) 
7 {
8   g_print("have eos, quitting\n");
9
10   playing = FALSE;
11 }
12
13 int main(int argc,char *argv[]) 
14 {
15   GstElement *disksrc, *audiosink, *queue, *queue2, *parse, *decode;
16   GstElement *bin;
17   GstElement *thread, *thread2;
18
19   if (argc != 2) {
20     g_print("usage: %s <filename>\n", argv[0]);
21     exit(-1);
22   }
23
24   gst_init(&argc,&argv);
25
26   /* create a new thread to hold the elements */
27   thread = gst_thread_new("thread");
28   g_assert(thread != NULL);
29   thread2 = gst_thread_new("thread2");
30   g_assert(thread2 != NULL);
31
32   /* create a new bin to hold the elements */
33   bin = gst_bin_new("bin");
34   g_assert(bin != NULL);
35
36   /* create a disk reader */
37   disksrc = gst_elementfactory_make("disksrc", "disk_source");
38   g_assert(disksrc != NULL);
39   gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
40   gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
41                      GTK_SIGNAL_FUNC(eos), thread);
42
43   queue = gst_elementfactory_make("queue", "queue");
44   queue2 = gst_elementfactory_make("queue", "queue2");
45
46   /* and an audio sink */
47   audiosink = gst_elementfactory_make("audiosink", "play_audio");
48   g_assert(audiosink != NULL);
49
50   parse = gst_elementfactory_make("mp3parse", "parse");
51   decode = gst_elementfactory_make("mpg123", "decode");
52
53   /* add objects to the main bin */
54   gst_bin_add(GST_BIN(bin), disksrc);
55   gst_bin_add(GST_BIN(bin), queue);
56
57   gst_bin_add(GST_BIN(thread), parse);
58   gst_bin_add(GST_BIN(thread), decode);
59   gst_bin_add(GST_BIN(thread), queue2);
60
61   gst_bin_add(GST_BIN(thread2), audiosink);
62   
63   gst_pad_connect(gst_element_get_pad(disksrc,"src"),
64                   gst_element_get_pad(queue,"sink"));
65
66   gst_pad_connect(gst_element_get_pad(queue,"src"),
67                   gst_element_get_pad(parse,"sink"));
68   gst_pad_connect(gst_element_get_pad(parse,"src"),
69                   gst_element_get_pad(decode,"sink"));
70   gst_pad_connect(gst_element_get_pad(decode,"src"),
71                   gst_element_get_pad(queue2,"sink"));
72
73   gst_pad_connect(gst_element_get_pad(queue2,"src"),
74                   gst_element_get_pad(audiosink,"sink"));
75
76   gst_bin_add(GST_BIN(bin), thread);
77   gst_bin_add(GST_BIN(bin), thread2);
78
79   /* make it ready */
80   gst_element_set_state(GST_ELEMENT(bin), GST_STATE_READY);
81   /* start playing */
82   gst_element_set_state(GST_ELEMENT(bin), GST_STATE_PLAYING);
83
84   playing = TRUE;
85
86   while (playing) {
87     gst_bin_iterate(GST_BIN(bin));
88   }
89
90   gst_element_set_state(GST_ELEMENT(bin), GST_STATE_NULL);
91
92   exit(0);
93 }
94