1 ! Copyright (C) 2010 Anton Gorenko.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.strings fry byte-arrays classes.struct
4 io.encodings.utf8 kernel locals math prettyprint
5 gstreamer.ffi glib.ffi gobject.ffi gtk.ffi ;
6 IN: gir.samples.lowlevel.gstreamer
8 ! CONSTANT: uri "http://www.xiph.org/vorbis/listen/compilation-ogg-q4.ogg"
9 CONSTANT: uri "http://tinyvid.tv/file/3gocxnjott7wr.ogg"
11 :: gstreamer-win ( -- window )
13 "playbin" "player" [ utf8 string>alien ] bi@ gst_element_factory_make :> pipeline
15 GValue <struct> :> value
16 value G_TYPE_STRING g_value_init drop
17 value uri utf8 string>alien g_value_set_string
19 pipeline "uri" utf8 string>alien value g_object_set_property
21 ! pipeline GST_STATE_PLAYING gst_element_set_state drop
23 GTK_WINDOW_TOPLEVEL gtk_window_new :> window
26 [ "GStreamer" utf8 string>alien gtk_window_set_title ]
27 [ 300 200 gtk_window_set_default_size ]
28 [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
30 gtk_fixed_new :> frame
31 window frame gtk_container_add
33 "Start" utf8 string>alien gtk_button_new_with_label :> button
34 button 140 30 gtk_widget_set_size_request
35 frame button 80 60 gtk_fixed_put
37 button "clicked" utf8 string>alien
38 [ nip GST_STATE_PLAYING gst_element_set_state drop ] GtkButton:clicked
39 pipeline f 0 g_signal_connect_data drop
41 window "destroy" utf8 string>alien
43 nip [ GST_STATE_NULL gst_element_set_state drop ]
44 [ gst_object_unref ] bi
46 pipeline f 0 g_signal_connect_data drop
50 :: gstreamer-main ( -- )
52 gstreamer-win :> window
54 window "destroy" utf8 string>alien
55 [ 2drop gtk_main_quit ] GtkObject:destroy
56 f f 0 g_signal_connect_data drop
58 window gtk_widget_show_all