Author: dmeyer
Date: Fri Feb 24 20:04:22 2006
New Revision: 1224

Added:
   trunk/xine/test/play.py

Log:
add small test app to test displays

Added: trunk/xine/test/play.py
==============================================================================
--- (empty file)
+++ trunk/xine/test/play.py     Fri Feb 24 20:04:22 2006
@@ -0,0 +1,128 @@
+#!/usr/bin/python
+
+import sys, math, threading, os, time, gc
+
+import kaa, kaa.input
+from kaa import xine, display, metadata, notifier
+
+
+#
+# some debug code
+#
+
+def say(line):
+    if line[0] != "\n":
+        sys.stdout.write(" " * 60 + "\r")
+    sys.stdout.write(line + "\r")
+    sys.stdout.flush()
+
+
+def seconds_to_human_readable(secs):
+    hrs = secs / 3600
+    mins = (secs % 3600) / 60
+    secs = (secs % 3600 % 60)
+    if hrs:
+        return "%02d:%02d:%02d" % (hrs, mins, secs)
+    else:
+        return "%02d:%02d" % (mins, secs)
+
+
+def output_status_line(stream):
+    if stream.get_parameter(xine.PARAM_SPEED) == xine.SPEED_PAUSE:
+        return
+    pos, time, length = stream.get_pos_length()
+    if length:
+        percent = (time/length)*100
+    else:
+        percent = 0
+    time = seconds_to_human_readable(time)
+    length = seconds_to_human_readable(length)
+    say("Position: %s / %s (%.1f%%)" % (time, length, percent))
+
+
+
+
+#
+# event handling
+#
+
+
+def handle_xine_event(event):
+    stream = event.get_stream()
+    #print "EVENT", stream, event.type, event.data
+
+    if event.type == xine.EVENT_UI_SET_TITLE:
+        say("New title: %s\n" % event.data["str"])
+    elif event.type == xine.EVENT_UI_NUM_BUTTONS:
+        stream.is_in_menu = event.data["num_buttons"] > 0
+    elif event.type == xine.EVENT_UI_PLAYBACK_FINISHED:
+        stream.stop()
+        sys.exit(0)
+
+
+def handle_keypress_event(key, stream):
+    title = stream.get_info(xine.STREAM_INFO_DVD_TITLE_NUMBER)
+    if key == "q":
+        stream.stop()
+        raise SystemExit
+
+
+
+#
+# test code
+#
+
+if len(sys.argv) <= 1:
+    print "Usage: %s [mrl]" % sys.argv[0]
+    sys.exit(1)
+
+# create xine object
+x = xine.Xine()
+
+# configure me! x11, fb or dfb
+DISPLAY_TYPE = 'x11'
+
+
+# create display and vo
+if DISPLAY_TYPE == 'x11':
+    win = display.X11Window(size = (50, 50), title = "Kaa Player")
+    win.set_cursor_hide_timeout(0.5)
+    win._aspect = -1
+
+    vo = x.open_video_driver(
+        "xv", wid = win.get_id(),
+        frame_output_cb = notifier.WeakCallback(x._default_frame_output_cb, 
win), 
+        dest_size_cb = notifier.WeakCallback(x._default_dest_size_cb, win))
+
+    # Hook the first resize event so we can show the window once we're resized
+    # to the proper movie size.
+    def handle_resize(old, new, window):
+        window.show()
+        vo.send_gui_data(xine.GUI_SEND_VIDEOWIN_VISIBLE, 1)
+
+    def configure_event(pos, size, window):
+        vo.send_gui_data(xine.GUI_SEND_DRAWABLE_CHANGED, window.get_id())
+
+    win.signals["resize_event"].connect_once(handle_resize, win)
+    win.signals["configure_event"].connect_weak(configure_event, win)
+
+elif DISPLAY_TYPE == 'fb':
+    win = display.Framebuffer()
+    vo = x.open_video_driver("vidixfb")
+
+# create auido
+ao = x.open_audio_driver()
+
+# create stream
+stream = x.new_stream(ao, vo)
+stream.signals["event"].connect(handle_xine_event)
+
+kaa.signals["idle"].connect_weak(output_status_line, stream)
+kaa.signals["stdin_key_press_event"].connect_weak(handle_keypress_event, 
stream)
+
+stream.open(sys.argv[1])
+stream.play()
+
+kaa.main()
+if DISPLAY_TYPE == 'x11':
+    win.hide()


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to