]> gitweb.factorcode.org Git - factor-unmaintained.git/blobdiff - gir/samples/lowlevel/gstreamer/gstreamer.factor
unmaintained: New home for misfit Factor vocabularies.
[factor-unmaintained.git] / gir / samples / lowlevel / gstreamer / gstreamer.factor
diff --git a/gir/samples/lowlevel/gstreamer/gstreamer.factor b/gir/samples/lowlevel/gstreamer/gstreamer.factor
new file mode 100644 (file)
index 0000000..7508386
--- /dev/null
@@ -0,0 +1,63 @@
+! Copyright (C) 2010 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types alien.strings fry byte-arrays classes.struct
+io.encodings.utf8 kernel locals math prettyprint 
+gstreamer.ffi glib.ffi gobject.ffi gtk.ffi ;
+IN: gir.samples.lowlevel.gstreamer
+
+! CONSTANT: uri "http://www.xiph.org/vorbis/listen/compilation-ogg-q4.ogg"
+CONSTANT: uri "http://tinyvid.tv/file/3gocxnjott7wr.ogg"
+
+:: gstreamer-win ( -- window )
+    f f gst_init
+    "playbin" "player" [ utf8 string>alien ] bi@ gst_element_factory_make :> pipeline
+
+    GValue <struct> :> value
+    value G_TYPE_STRING g_value_init drop
+    value uri utf8 string>alien g_value_set_string
+    
+    pipeline "uri" utf8 string>alien value g_object_set_property
+        
+    ! pipeline GST_STATE_PLAYING gst_element_set_state drop
+
+    GTK_WINDOW_TOPLEVEL gtk_window_new :> window
+
+    window
+    [ "GStreamer" utf8 string>alien gtk_window_set_title ]
+    [ 300 200 gtk_window_set_default_size ]
+    [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
+
+    gtk_fixed_new :> frame
+    window frame gtk_container_add
+    
+    "Start" utf8 string>alien gtk_button_new_with_label :> button
+    button 140 30 gtk_widget_set_size_request
+    frame button 80 60 gtk_fixed_put
+
+    button "clicked" utf8 string>alien
+    [ nip GST_STATE_PLAYING gst_element_set_state drop ] GtkButton:clicked
+    pipeline f 0 g_signal_connect_data drop
+
+    window "destroy" utf8 string>alien
+    [ 
+        nip [ GST_STATE_NULL gst_element_set_state drop ]
+        [ gst_object_unref ] bi
+    ] GtkObject:destroy
+    pipeline f 0 g_signal_connect_data drop
+    
+    window ;
+
+:: gstreamer-main ( -- )
+    f f gtk_init
+    gstreamer-win :> window
+
+    window "destroy" utf8 string>alien
+    [ 2drop gtk_main_quit ] GtkObject:destroy
+    f f 0 g_signal_connect_data drop
+
+    window gtk_widget_show_all
+    
+    gtk_main ;
+
+MAIN: gstreamer-main
+