Commit 60a84269 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Add media and player state support

parent 97bda2d0
......@@ -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")]
......
......@@ -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
......
......@@ -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.
*/
......
......@@ -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)
......
......@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment