64 lines
1.9 KiB
Factor
64 lines
1.9 KiB
Factor
! 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
|
|
|