gst-indent
[platform/upstream/gst-plugins-good.git] / tests / examples / spectrum / demo-osssrc.c
1 #include <gnome.h>
2 #include <gst/gst.h>
3
4 extern gboolean _gst_plugin_spew;
5
6 void spectrum_chain (GstPad * pad, GstData * _data);
7 gboolean idle_func (gpointer data);
8
9 GtkWidget *drawingarea;
10
11 int
12 main (int argc, char *argv[])
13 {
14   GstElement *bin;
15   GstElementFactory *srcfactory;
16   GstElement *src;
17   GstElementFactory *spectrumfactory;
18   GstElement *spectrum;
19   GstPad *spectrumpad;
20
21   GtkWidget *appwindow;
22
23   _gst_plugin_spew = TRUE;
24
25   gst_init (&argc, &argv);
26   gnome_init ("Spectrum", "0.0.1", argc, argv);
27
28   bin = gst_bin_new ("bin");
29
30   srcfactory = gst_element_factory_find ("osssrc");
31   spectrumfactory = gst_element_factory_find ("gstspectrum");
32
33   src = gst_element_factory_create (srcfactory, "src");
34   gtk_object_set (GTK_OBJECT (src), "bytes_per_read", (gulong) 1024, NULL);
35   spectrum = gst_element_factory_create (spectrumfactory, "spectrum");
36   gtk_object_set (GTK_OBJECT (spectrum), "width", 256, NULL);
37
38
39   gst_bin_add (GST_BIN (bin), GST_ELEMENT (src));
40   gst_bin_add (GST_BIN (bin), GST_ELEMENT (spectrum));
41
42   gst_pad_link (gst_element_get_pad (src, "src"),
43       gst_element_get_pad (spectrum, "sink"));
44
45   spectrumpad = gst_pad_new ("sink", GST_PAD_SINK);
46   gst_pad_set_chain_function (spectrumpad, spectrum_chain);
47
48   gst_pad_link (gst_element_get_pad (spectrum, "src"), spectrumpad);
49
50   appwindow = gnome_app_new ("spectrum", "Spectrum");
51   drawingarea = gtk_drawing_area_new ();
52   gtk_drawing_area_size (GTK_DRAWING_AREA (drawingarea), 256, 32);
53   gnome_app_set_contents (GNOME_APP (appwindow), drawingarea);
54   gtk_widget_show_all (appwindow);
55
56   gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY);
57   gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING);
58
59   g_idle_add (idle_func, src);
60
61   gtk_main ();
62
63   return 0;
64 }
65
66
67 void
68 spectrum_chain (GstPad * pad, GstData * _data)
69 {
70   GstBuffer *buf = GST_BUFFER (_data);
71   gint i;
72   guchar *data = buf->data;
73
74   gdk_draw_rectangle (drawingarea->window, drawingarea->style->black_gc,
75       TRUE, 0, 0, GST_BUFFER_SIZE (buf), 25);
76   for (i = 0; i < GST_BUFFER_SIZE (buf); i++) {
77     gdk_draw_rectangle (drawingarea->window, drawingarea->style->white_gc,
78         TRUE, i, 32 - data[i], 1, data[i]);
79   }
80   gst_buffer_unref (buf);
81 }
82
83 gboolean
84 idle_func (gpointer data)
85 {
86   /*gst_src_push(GST_SRC(data)); */
87   return TRUE;
88 }