]> git.sesse.net Git - vlc/blob - bindings/python-ctypes/footer.py
libvlcpp: getSomething => something
[vlc] / bindings / python-ctypes / footer.py
1 ### Start of footer.py ###
2
3 class MediaEvent(ctypes.Structure):
4     _fields_ = [
5         ('media_name', ctypes.c_char_p),
6         ('instance_name', ctypes.c_char_p),
7         ]
8
9 class EventUnion(ctypes.Union):
10     _fields_ = [
11         ('meta_type', ctypes.c_uint),
12         ('new_child', ctypes.c_uint),
13         ('new_duration', ctypes.c_longlong),
14         ('new_status', ctypes.c_int),
15         ('media', ctypes.c_void_p),
16         ('new_state', ctypes.c_uint),
17         # Media instance
18         ('new_position', ctypes.c_float),
19         ('new_time', ctypes.c_longlong),
20         ('new_title', ctypes.c_int),
21         ('new_seekable', ctypes.c_longlong),
22         ('new_pausable', ctypes.c_longlong),
23         # FIXME: Skipped MediaList and MediaListView...
24         ('filename', ctypes.c_char_p),
25         ('new_length', ctypes.c_longlong),
26         ('media_event', MediaEvent),
27         ]
28
29 class Event(ctypes.Structure):
30     _fields_ = [
31         ('type', EventType),
32         ('object', ctypes.c_void_p),
33         ('u', EventUnion),
34         ]
35
36 # Decorator for callback methods
37 callbackmethod=ctypes.CFUNCTYPE(None, Event, ctypes.c_void_p)
38
39 # Example callback method
40 @callbackmethod
41 def debug_callback(event, data):
42     print "Debug callback method"
43     print "Event:", event.type
44     print "Data", data
45
46 if __name__ == '__main__':
47     try:
48         from msvcrt import getch
49     except ImportError:
50         def getch():
51             import tty
52             import termios
53             fd=sys.stdin.fileno()
54             old_settings=termios.tcgetattr(fd)
55             try:
56                 tty.setraw(fd)
57                 ch=sys.stdin.read(1)
58             finally:
59                 termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
60             return ch
61
62     @callbackmethod
63     def end_callback(event, data):
64         print "End of stream"
65         sys.exit(0)
66
67     if sys.argv[1:]:
68         instance=Instance()
69         media=instance.media_new(sys.argv[1])
70         player=instance.media_player_new()
71         player.set_media(media)
72         player.play()
73
74         event_manager=player.event_manager()
75         event_manager.event_attach(EventType.MediaPlayerEndReached, end_callback, None)
76
77         def print_info():
78             """Print information about the media."""
79             media=player.get_media()
80             print "State:", player.get_state()
81             print "Media:", media.get_mrl()
82             try:
83                 print "Current time:", player.get_time(), "/", media.get_duration()
84                 print "Position:", player.get_position()
85                 print "FPS:", player.get_fps()
86                 print "Rate:", player.get_rate()
87                 print "Video size: (%d, %d)" % (player.video_get_width(), player.video_get_height())
88             except Exception:
89                 pass
90
91         def forward():
92             """Go forward 1s"""
93             player.set_time(player.get_time() + 1000)
94
95         def one_frame_forward():
96             """Go forward one frame"""
97             player.set_time(player.get_time() + long(1000 / (player.get_fps() or 25)))
98
99         def one_frame_backward():
100             """Go backward one frame"""
101             player.set_time(player.get_time() - long(1000 / (player.get_fps() or 25)))
102
103         def backward():
104             """Go backward 1s"""
105             player.set_time(player.get_time() - 1000)
106
107         def print_help():
108             """Print help
109             """
110             print "Commands:"
111             for k, m in keybindings.iteritems():
112                 print "  %s: %s" % (k, (m.__doc__ or m.__name__).splitlines()[0])
113             print " 1-9: go to the given fraction of the movie"
114
115         def quit_app():
116             """Exit."""
117             sys.exit(0)
118
119         keybindings={
120             'f': player.toggle_fullscreen,
121             ' ': player.pause,
122             '+': forward,
123             '-': backward,
124             '.': one_frame_forward,
125             ',': one_frame_backward,
126             '?': print_help,
127             'i': print_info,
128             'q': quit_app,
129             }
130
131         print "Press q to quit, ? to get help."
132         while True:
133             k=getch()
134             o=ord(k)
135             method=keybindings.get(k, None)
136             if method is not None:
137                 method()
138             elif o >= 49 and o <= 57:
139                 # Numeric value. Jump to a fraction of the movie.
140                 v=0.1*(o-48)
141                 player.set_position(v)
142
143