]> git.sesse.net Git - vlc/commitdiff
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 3fcfe59f068e6ffaecc7321d93877cb164c2dc55..df676e1c046a2ea54a7f90430d0b2e9300969bd5 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 a6ed833c7cd8ea5a7edc256e3d300bd9bb8ff64b..5c3b0cf24a5d4c2ef666b32624a8ed59b054b737 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 2e3d54b65d1676ec8a49fc9ba2fe7e38ebaa7b62..431b9dedf56724fc6c8bf4f35a0aac1e887176cf 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 3868cadee0da57c21cd600258185590a2b503503..91c27ac539ba3208e61c620b48a90c13c2048ea2 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 bede67cad241277be79d2765cfd3fed8da84397b..7ad8378dc45578779f51adef701f91a59106c07f 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,