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