diff options
Diffstat (limited to 'gst')
-rw-r--r-- | gst/spectrum/Makefile.am | 14 | ||||
-rw-r--r-- | gst/spectrum/demo-osssrc.c | 86 |
2 files changed, 41 insertions, 59 deletions
diff --git a/gst/spectrum/Makefile.am b/gst/spectrum/Makefile.am index 1e9a6c77..f86107d4 100644 --- a/gst/spectrum/Makefile.am +++ b/gst/spectrum/Makefile.am @@ -8,14 +8,12 @@ libgstspectrum_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = gstspectrum.h -## this thing needs gnome too, so unless someone checks for it, let's -## comment it out. -## if HAVE_GTK -## noinst_PROGRAMS = demo-osssrc -## endif +if HAVE_GTK +noinst_PROGRAMS = demo-osssrc +endif -## demo_osssrc_SOURCES = demo-osssrc.c -## demo_osssrc_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) -## demo_osssrc_LDFLAGS = $(GST_LIBS) $(GTK_LIBS) +demo_osssrc_SOURCES = demo-osssrc.c +demo_osssrc_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) +demo_osssrc_LDFLAGS = $(GST_LIBS) $(GTK_LIBS) EXTRA_DIST = README diff --git a/gst/spectrum/demo-osssrc.c b/gst/spectrum/demo-osssrc.c index 1bd2fa11..bba27b3a 100644 --- a/gst/spectrum/demo-osssrc.c +++ b/gst/spectrum/demo-osssrc.c @@ -1,62 +1,63 @@ -#include <gnome.h> #include <gst/gst.h> +#include <gtk/gtk.h> extern gboolean _gst_plugin_spew; -void spectrum_chain (GstPad * pad, GstData * _data); gboolean idle_func (gpointer data); GtkWidget *drawingarea; +void +spectrum_chain (GstElement * sink, GstBuffer * buf, GstPad * pad, + gpointer unused) +{ + gint i; + guchar *data = buf->data; + GdkRectangle rect = { 0, 0, GST_BUFFER_SIZE (buf), 25 }; + + gdk_window_begin_paint_rect (drawingarea->window, &rect); + gdk_draw_rectangle (drawingarea->window, drawingarea->style->black_gc, + TRUE, 0, 0, GST_BUFFER_SIZE (buf), 25); + for (i = 0; i < GST_BUFFER_SIZE (buf); i++) { + gdk_draw_rectangle (drawingarea->window, drawingarea->style->white_gc, + TRUE, i, 32 - data[i], 1, data[i]); + } + gdk_window_end_paint (drawingarea->window); +} + int main (int argc, char *argv[]) { GstElement *bin; - GstElementFactory *srcfactory; - GstElement *src; - GstElementFactory *spectrumfactory; - GstElement *spectrum; - GstPad *spectrumpad; + GstElement *src, *spectrum, *sink; GtkWidget *appwindow; - _gst_plugin_spew = TRUE; - gst_init (&argc, &argv); - gnome_init ("Spectrum", "0.0.1", argc, argv); - - bin = gst_bin_new ("bin"); - - srcfactory = gst_element_factory_find ("osssrc"); - spectrumfactory = gst_element_factory_find ("gstspectrum"); + gtk_init (&argc, &argv); - src = gst_element_factory_create (srcfactory, "src"); - gtk_object_set (GTK_OBJECT (src), "bytes_per_read", (gulong) 1024, NULL); - spectrum = gst_element_factory_create (spectrumfactory, "spectrum"); - gtk_object_set (GTK_OBJECT (spectrum), "width", 256, NULL); + bin = gst_pipeline_new ("bin"); + src = gst_element_factory_make ("osssrc", "src"); + g_object_set (G_OBJECT (src), "buffersize", (gulong) 1024, NULL); + spectrum = gst_element_factory_make ("spectrum", "spectrum"); + g_object_set (G_OBJECT (spectrum), "width", 256, NULL); + sink = gst_element_factory_make ("fakesink", "sink"); + g_object_set (G_OBJECT (sink), "signal-handoffs", TRUE, NULL); + g_signal_connect (sink, "handoff", G_CALLBACK (spectrum_chain), NULL); - gst_bin_add (GST_BIN (bin), GST_ELEMENT (src)); - gst_bin_add (GST_BIN (bin), GST_ELEMENT (spectrum)); + gst_bin_add_many (GST_BIN (bin), src, spectrum, sink, NULL); + gst_element_link_many (src, spectrum, sink, NULL); - gst_pad_link (gst_element_get_pad (src, "src"), - gst_element_get_pad (spectrum, "sink")); - - spectrumpad = gst_pad_new ("sink", GST_PAD_SINK); - gst_pad_set_chain_function (spectrumpad, spectrum_chain); - - gst_pad_link (gst_element_get_pad (spectrum, "src"), spectrumpad); - - appwindow = gnome_app_new ("spectrum", "Spectrum"); + appwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); drawingarea = gtk_drawing_area_new (); gtk_drawing_area_size (GTK_DRAWING_AREA (drawingarea), 256, 32); - gnome_app_set_contents (GNOME_APP (appwindow), drawingarea); + gtk_container_add (GTK_CONTAINER (appwindow), drawingarea); gtk_widget_show_all (appwindow); - gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY); gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING); - g_idle_add (idle_func, src); + g_idle_add (idle_func, bin); gtk_main (); @@ -64,25 +65,8 @@ main (int argc, char *argv[]) } -void -spectrum_chain (GstPad * pad, GstData * _data) -{ - GstBuffer *buf = GST_BUFFER (_data); - gint i; - guchar *data = buf->data; - - gdk_draw_rectangle (drawingarea->window, drawingarea->style->black_gc, - TRUE, 0, 0, GST_BUFFER_SIZE (buf), 25); - for (i = 0; i < GST_BUFFER_SIZE (buf); i++) { - gdk_draw_rectangle (drawingarea->window, drawingarea->style->white_gc, - TRUE, i, 32 - data[i], 1, data[i]); - } - gst_buffer_unref (buf); -} - gboolean idle_func (gpointer data) { - /*gst_src_push(GST_SRC(data)); */ - return TRUE; + return gst_bin_iterate (data); } |