From 60a842695c2a896fabc16dac503210a0f36f7a36 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 22 Feb 2009 11:54:23 +0200 Subject: [PATCH] Add media and player state support --- bindings/cil/src/libvlc.cs | 9 ++++----- bindings/cil/src/media.cs | 31 +++++++++++++++++++++++++++++++ bindings/cil/src/player.cs | 13 +++++++++++++ bindings/cil/tests/testvlc.cs | 5 +++-- include/vlc/libvlc_structures.h | 3 ++- 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/bindings/cil/src/libvlc.cs b/bindings/cil/src/libvlc.cs index 3fcfe59f06..df676e1c04 100644 --- a/bindings/cil/src/libvlc.cs +++ b/bindings/cil/src/libvlc.cs @@ -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")] diff --git a/bindings/cil/src/media.cs b/bindings/cil/src/media.cs index a6ed833c7c..5c3b0cf24a 100644 --- a/bindings/cil/src/media.cs +++ b/bindings/cil/src/media.cs @@ -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 diff --git a/bindings/cil/src/player.cs b/bindings/cil/src/player.cs index 2e3d54b65d..431b9dedf5 100644 --- a/bindings/cil/src/player.cs +++ b/bindings/cil/src/player.cs @@ -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. */ diff --git a/bindings/cil/tests/testvlc.cs b/bindings/cil/tests/testvlc.cs index 3868cadee0..91c27ac539 100644 --- a/bindings/cil/tests/testvlc.cs +++ b/bindings/cil/tests/testvlc.cs @@ -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) diff --git a/include/vlc/libvlc_structures.h b/include/vlc/libvlc_structures.h index bede67cad2..7ad8378dc4 100644 --- a/include/vlc/libvlc_structures.h +++ b/include/vlc/libvlc_structures.h @@ -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, -- 2.39.2