Add media and player state support
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 22 Feb 2009 09:54:23 +0000 (11:54 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 22 Feb 2009 09:54:23 +0000 (11:54 +0200)
bindings/cil/src/libvlc.cs
bindings/cil/src/media.cs
bindings/cil/src/player.cs
bindings/cil/tests/testvlc.cs
include/vlc/libvlc_structures.h

index 3fcfe59..df676e1 100644 (file)
@@ -109,9 +109,9 @@ namespace VideoLAN.LibVLC
         MediaHandle MediaDuplicate (MediaHandle media, int type,
                                     NativeException ex);*/
 
-        /*[DllImport ("libvlc.dll", EntryPoint="libvlc_media_get_state")]
+        [DllImport ("libvlc.dll", EntryPoint="libvlc_media_get_state")]
         public static extern
-        int MediaGetState (MediaHandle media, NativeException ex);*/
+        State MediaGetState (MediaHandle media, NativeException ex);
 
         /*[DllImport ("libvlc.dll", EntryPoint="libvlc_media_subitems")]
         public static extern
@@ -301,11 +301,10 @@ namespace VideoLAN.LibVLC
         void PlayerSetRate (PlayerHandle player, float rate,
                             NativeException ex);
 
-        /*[DllImport ("libvlc.dll",
+        [DllImport ("libvlc.dll",
                     EntryPoint="libvlc_media_player_get_state")]
         public static extern
-        void PlayerSetState (PlayerHandle player, float rate,
-                             NativeException ex); */
+        State PlayerGetState (PlayerHandle player, NativeException ex);
 
         [DllImport ("libvlc.dll",
                     EntryPoint="libvlc_media_player_get_fps")]
index a6ed833..5c3b0cf 100644 (file)
@@ -42,6 +42,24 @@ namespace VideoLAN.LibVLC
         }
     };
 
+    /**
+     * @brief State: media/player state
+     *
+     * Media and Player objects are always in one of these state.
+     * @see Media::State and @see Player::State.
+     */
+    public enum State
+    {
+        NothingSpecial, /**< Nothing going on */
+        Opening, /**< Being opened */
+        Buffering, /**< Buffering before play */
+        Playing, /**< Playing */
+        Paused, /**< Paused */
+        Stopped, /**< Stopped */
+        Ended, /**< Played until the end */
+        Error, /**< Failed */
+    };
+
     /**
      * @brief Media: a source media
      * @ingroup API
@@ -121,6 +139,19 @@ namespace VideoLAN.LibVLC
             return new Media (LibVLC.MediaDuplicate (Handle));
         }
 
+        /**
+         * Current state of the media.
+         */
+        public State State
+        {
+            get
+            {
+                State ret = LibVLC.MediaGetState (Handle, ex);
+                Raise ();
+                return ret;
+            }
+        }
+
         /**
          * Duration of the media in microseconds. The precision of the result
          * depends on the input stram protocol and file format. The value
index 2e3d54b..431b9de 100644 (file)
@@ -363,6 +363,19 @@ namespace VideoLAN.LibVLC
             }
         }
 
+        /**
+         * Current state of the player.
+         */
+        public State State
+        {
+            get
+            {
+                State ret = LibVLC.PlayerGetState (Handle, ex);
+                Raise ();
+                return ret;
+            }
+        }
+
         /**
          * Frame rate in unit/seconds.
          */
index 3868cad..91c27ac 100644 (file)
@@ -33,6 +33,7 @@ namespace VideoLAN.LibVLC.Test
             Console.WriteLine ("Media at    {0}", m.Location);
             Console.WriteLine (" duration:  {0}µs", m.Duration);
             Console.WriteLine (" preparsed: {0}", m.IsPreparsed);
+            Console.WriteLine (" state:     {0}", m.State);
         }
 
         private static void DumpPlayer (Player p)
@@ -41,8 +42,8 @@ namespace VideoLAN.LibVLC.Test
                 return;
 
             int percent = (int)(p.Position * 100);
-            Console.Write ("{0} of {1} ms ({2}%)\r", p.Time, p.Length,
-                           percent);
+            Console.Write ("{0}: {1} of {2} ms ({3}%)\r", p.State,
+                           p.Time, p.Length, percent);
         }
 
         private static void Sleep (int msec)
index bede67c..7ad8378 100644 (file)
@@ -127,7 +127,8 @@ typedef struct libvlc_media_player_t libvlc_media_player_t;
 
 /**
  * Note the order of libvlc_state_t enum must match exactly the order of
- * @see mediacontrol_PlayerStatus and @see input_state_e enums.
+ * @see mediacontrol_PlayerStatus, @see input_state_e enums,
+ * and VideoLAN.LibVLC.State (at bindings/cil/src/media.cs).
  *
  * Expected states by web plugins are:
  * IDLE/CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4,