]> git.sesse.net Git - vlc/blobdiff - bindings/python-ctypes/footer.py
TS demux: fix memory leak using ACCESS_SET_PRIVATE_ID_CA
[vlc] / bindings / python-ctypes / footer.py
index 6c0d78815cefccd1e157404d55f806b4dc6c3ee2..e95f36f2c0028f5b25f8fe2f61b0859e04777817 100644 (file)
@@ -40,14 +40,104 @@ callbackmethod=ctypes.CFUNCTYPE(None, Event, ctypes.c_void_p)
 @callbackmethod
 def debug_callback(event, data):
     print "Debug callback method"
-    print "Event:", event
+    print "Event:", event.type
     print "Data", data
 
 if __name__ == '__main__':
-    import sys
+    try:
+        from msvcrt import getch
+    except ImportError:
+        def getch():
+            import tty
+            import termios
+            fd=sys.stdin.fileno()
+            old_settings=termios.tcgetattr(fd)
+            try:
+                tty.setraw(fd)
+                ch=sys.stdin.read(1)
+            finally:
+                termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
+            return ch
+
+    @callbackmethod
+    def end_callback(event, data):
+        print "End of stream"
+        sys.exit(0)
+
     if sys.argv[1:]:
-        i=vlc.Instance()
-        m=i.media_new(sys.argv[1])
-        p=MediaPlayer()
-        p.set_media(m)
-        p.play()
+        instance=Instance()
+        media=instance.media_new(sys.argv[1])
+        player=instance.media_player_new()
+        player.set_media(media)
+        player.play()
+
+        event_manager=player.event_manager()
+        event_manager.event_attach(EventType.MediaPlayerEndReached, end_callback, None)
+
+        def print_info():
+            """Print information about the media."""
+            media=player.get_media()
+            print "State:", player.get_state()
+            print "Media:", media.get_mrl()
+            try:
+                print "Current time:", player.get_time(), "/", media.get_duration()
+                print "Position:", player.get_position()
+                print "FPS:", player.get_fps()
+                print "Rate:", player.get_rate()
+                print "Video size: (%d, %d)" % (player.video_get_width(), player.video_get_height())
+            except Exception:
+                pass
+
+        def forward():
+            """Go forward 1s"""
+            player.set_time(player.get_time() + 1000)
+
+        def one_frame_forward():
+            """Go forward one frame"""
+            player.set_time(player.get_time() + long(1000 / (player.get_fps() or 25)))
+
+        def one_frame_backward():
+            """Go backward one frame"""
+            player.set_time(player.get_time() - long(1000 / (player.get_fps() or 25)))
+
+        def backward():
+            """Go backward 1s"""
+            player.set_time(player.get_time() - 1000)
+
+        def print_help():
+            """Print help
+            """
+            print "Commands:"
+            for k, m in keybindings.iteritems():
+                print "  %s: %s" % (k, (m.__doc__ or m.__name__).splitlines()[0])
+            print " 1-9: go to the given fraction of the movie"
+
+        def quit_app():
+            """Exit."""
+            sys.exit(0)
+
+        keybindings={
+            'f': player.toggle_fullscreen,
+            ' ': player.pause,
+            '+': forward,
+            '-': backward,
+            '.': one_frame_forward,
+            ',': one_frame_backward,
+            '?': print_help,
+            'i': print_info,
+            'q': quit_app,
+            }
+
+        print "Press q to quit, ? to get help."
+        while True:
+            k=getch()
+            o=ord(k)
+            method=keybindings.get(k, None)
+            if method is not None:
+                method()
+            elif o >= 49 and o <= 57:
+                # Numeric value. Jump to a fraction of the movie.
+                v=0.1*(o-48)
+                player.set_position(v)
+
+