Commit a4bb6352 authored by Jean-Paul Saman's avatar Jean-Paul Saman

Unify libvlc_state_t, input_state_e, mediacontrol_PlayerStatus and libvlc_event_type_t.

parent 0a54676f
...@@ -47,10 +47,14 @@ typedef enum libvlc_event_type_t { ...@@ -47,10 +47,14 @@ typedef enum libvlc_event_type_t {
libvlc_MediaFreed, libvlc_MediaFreed,
libvlc_MediaStateChanged, libvlc_MediaStateChanged,
libvlc_MediaPlayerPlayed, libvlc_MediaPlayerNothingSpecial,
libvlc_MediaPlayerOpening,
libvlc_MediaPlayerBuffering,
libvlc_MediaPlayerPlaying,
libvlc_MediaPlayerPaused, libvlc_MediaPlayerPaused,
libvlc_MediaPlayerEndReached, libvlc_MediaPlayerEndReached,
libvlc_MediaPlayerStopped, libvlc_MediaPlayerForward,
libvlc_MediaPlayerBackward,
libvlc_MediaPlayerEncounteredError, libvlc_MediaPlayerEncounteredError,
libvlc_MediaPlayerTimeChanged, libvlc_MediaPlayerTimeChanged,
libvlc_MediaPlayerPositionChanged, libvlc_MediaPlayerPositionChanged,
......
...@@ -119,16 +119,25 @@ typedef struct libvlc_media_t libvlc_media_t; ...@@ -119,16 +119,25 @@ typedef struct libvlc_media_t libvlc_media_t;
typedef struct libvlc_media_player_t libvlc_media_player_t; 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.
*
* Expected states by web plugins are:
* IDLE/CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4,
* STOPPING=5, FORWARD=6, BACKWARD=7, ERROR=8
*/
typedef enum libvlc_state_t typedef enum libvlc_state_t
{ {
libvlc_NothingSpecial, libvlc_NothingSpecial=0,
libvlc_Stopped,
libvlc_Opening, libvlc_Opening,
libvlc_Buffering, libvlc_Buffering,
libvlc_Ended,
libvlc_Error,
libvlc_Playing, libvlc_Playing,
libvlc_Paused libvlc_Paused,
libvlc_Ended,
libvlc_Forward,
libvlc_Backward,
libvlc_Error
} libvlc_state_t; } libvlc_state_t;
/**@} */ /**@} */
......
...@@ -62,12 +62,15 @@ typedef enum { ...@@ -62,12 +62,15 @@ typedef enum {
/** /**
* Possible player status * Possible player status
* Note the order of these enums must match exactly the order of
* libvlc_state_t and input_state_e enums.
*/ */
typedef enum { typedef enum {
mediacontrol_PlayingStatus, mediacontrol_PauseStatus, mediacontrol_UndefinedStatus=0, mediacontrol_InitStatus,
mediacontrol_BufferingStatus, mediacontrol_PlayingStatus,
mediacontrol_PauseStatus, mediacontrol_EndStatus,
mediacontrol_ForwardStatus, mediacontrol_BackwardStatus, mediacontrol_ForwardStatus, mediacontrol_BackwardStatus,
mediacontrol_InitStatus, mediacontrol_EndStatus, mediacontrol_ErrorStatus,
mediacontrol_UndefinedStatus
} mediacontrol_PlayerStatus; } mediacontrol_PlayerStatus;
/** /**
......
...@@ -527,12 +527,14 @@ static inline void vlc_input_attachment_Delete( input_attachment_t *a ) ...@@ -527,12 +527,14 @@ static inline void vlc_input_attachment_Delete( input_attachment_t *a )
/* "state" value */ /* "state" value */
enum input_state_e enum input_state_e
{ {
INIT_S, INIT_S = 0,
OPENING_S, OPENING_S,
BUFFERING_S, BUFFERING_S,
PLAYING_S, PLAYING_S,
PAUSE_S, PAUSE_S,
END_S, END_S,
FORWARD_S,
BACKWARD_S,
ERROR_S ERROR_S
}; };
......
...@@ -172,7 +172,6 @@ NPError VlcPlugin::init(int argc, char* const argn[], char* const argv[]) ...@@ -172,7 +172,6 @@ NPError VlcPlugin::init(int argc, char* const argn[], char* const argv[])
} }
} }
libvlc_exception_t ex; libvlc_exception_t ex;
libvlc_exception_init(&ex); libvlc_exception_init(&ex);
......
...@@ -239,12 +239,18 @@ static const char event_type_to_name[][35] = ...@@ -239,12 +239,18 @@ static const char event_type_to_name[][35] =
EVENT(libvlc_MediaFreed), EVENT(libvlc_MediaFreed),
EVENT(libvlc_MediaStateChanged), EVENT(libvlc_MediaStateChanged),
EVENT(libvlc_MediaPlayerPlayed), EVENT(libvlc_MediaPlayerNothingSpecial),
EVENT(libvlc_MediaPlayerOpening),
EVENT(libvlc_MediaPlayerBuffering),
EVENT(libvlc_MediaPlayerPlaying),
EVENT(libvlc_MediaPlayerPaused), EVENT(libvlc_MediaPlayerPaused),
EVENT(libvlc_MediaPlayerEndReached), EVENT(libvlc_MediaPlayerEndReached),
EVENT(libvlc_MediaPlayerStopped), EVENT(libvlc_MediaPlayerForward),
EVENT(libvlc_MediaPlayerBackward),
EVENT(libvlc_MediaPlayerTimeChanged), EVENT(libvlc_MediaPlayerTimeChanged),
EVENT(libvlc_MediaPlayerPositionChanged), EVENT(libvlc_MediaPlayerPositionChanged),
EVENT(libvlc_MediaPlayerSeekableChanged),
EVENT(libvlc_MediaPlayerPausableChanged),
EVENT(libvlc_MediaListItemAdded), EVENT(libvlc_MediaListItemAdded),
EVENT(libvlc_MediaListWillAddItem), EVENT(libvlc_MediaListWillAddItem),
......
...@@ -368,6 +368,7 @@ libvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp, ...@@ -368,6 +368,7 @@ libvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp,
{ {
libvlc_state_t state = libvlc_media_player_get_state( p_mlp->p_mi, p_e ); libvlc_state_t state = libvlc_media_player_get_state( p_mlp->p_mi, p_e );
return (state == libvlc_Opening) || (state == libvlc_Buffering) || return (state == libvlc_Opening) || (state == libvlc_Buffering) ||
(state == libvlc_Forward) || (state == libvlc_Backward) ||
(state == libvlc_Playing); (state == libvlc_Playing);
} }
...@@ -379,7 +380,7 @@ libvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp, ...@@ -379,7 +380,7 @@ libvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp,
libvlc_exception_t * p_e ) libvlc_exception_t * p_e )
{ {
if( !p_mlp->p_mi ) if( !p_mlp->p_mi )
return libvlc_Stopped; return libvlc_Ended;
return libvlc_media_player_get_state( p_mlp->p_mi, p_e ); return libvlc_media_player_get_state( p_mlp->p_mi, p_e );
} }
......
...@@ -51,19 +51,21 @@ input_time_changed( vlc_object_t * p_this, char const * psz_cmd, ...@@ -51,19 +51,21 @@ input_time_changed( vlc_object_t * p_this, char const * psz_cmd,
static const libvlc_state_t vlc_to_libvlc_state_array[] = static const libvlc_state_t vlc_to_libvlc_state_array[] =
{ {
[INIT_S] = libvlc_Opening, [INIT_S] = libvlc_NothingSpecial,
[OPENING_S] = libvlc_Opening, [OPENING_S] = libvlc_Opening,
[BUFFERING_S] = libvlc_Buffering, [BUFFERING_S] = libvlc_Buffering,
[PLAYING_S] = libvlc_Playing, [PLAYING_S] = libvlc_Playing,
[PAUSE_S] = libvlc_Paused, [PAUSE_S] = libvlc_Paused,
[END_S] = libvlc_Ended, [END_S] = libvlc_Ended,
[FORWARD_S] = libvlc_Forward,
[BACKWARD_S] = libvlc_Backward,
[ERROR_S] = libvlc_Error, [ERROR_S] = libvlc_Error,
}; };
static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state ) static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state )
{ {
if( vlc_state < 0 || vlc_state > 6 ) if( vlc_state < 0 || vlc_state > 6 )
return libvlc_Stopped; return libvlc_Ended;
return vlc_to_libvlc_state_array[vlc_state]; return vlc_to_libvlc_state_array[vlc_state];
} }
...@@ -144,22 +146,43 @@ input_state_changed( const vlc_event_t * event, void * p_userdata ) ...@@ -144,22 +146,43 @@ input_state_changed( const vlc_event_t * event, void * p_userdata )
switch ( type ) switch ( type )
{ {
case END_S: case INIT_S:
libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL); libvlc_media_set_state( p_mi->p_md, libvlc_NothingSpecial, NULL);
forwarded_event.type = libvlc_MediaPlayerEndReached; forwarded_event.type = libvlc_MediaPlayerNothingSpecial;
break; break;
case PAUSE_S: case OPENING_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL); libvlc_media_set_state( p_mi->p_md, libvlc_Opening, NULL);
forwarded_event.type = libvlc_MediaPlayerPaused; forwarded_event.type = libvlc_MediaPlayerOpening;
break;
case BUFFERING_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Buffering, NULL);
forwarded_event.type = libvlc_MediaPlayerBuffering;
break; break;
case PLAYING_S: case PLAYING_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL); libvlc_media_set_state( p_mi->p_md, libvlc_Playing, NULL);
forwarded_event.type = libvlc_MediaPlayerPlayed; forwarded_event.type = libvlc_MediaPlayerPlayed;
break; break;
case PAUSE_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Paused, NULL);
forwarded_event.type = libvlc_MediaPlayerPaused;
break;
case END_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Ended, NULL);
forwarded_event.type = libvlc_MediaPlayerEndReached;
break;
case FORWARD_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Forward, NULL);
forwarded_event.type = libvlc_MediaPlayerForward;
break;
case BACKWARD_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Backward, NULL);
forwarded_event.type = libvlc_MediaPlayerBackward;
break;
case ERROR_S: case ERROR_S:
libvlc_media_set_state( p_mi->p_md, libvlc_Error, NULL); libvlc_media_set_state( p_mi->p_md, libvlc_Error, NULL);
forwarded_event.type = libvlc_MediaPlayerEncounteredError; forwarded_event.type = libvlc_MediaPlayerEncounteredError;
break; break;
default: default:
return; return;
} }
...@@ -317,15 +340,24 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance, ...@@ -317,15 +340,24 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
} }
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerEndReached, p_e ); libvlc_MediaPlayerNothingSpecial, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerStopped, p_e ); libvlc_MediaPlayerOpening, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerEncounteredError, p_e ); libvlc_MediaPlayerBuffering, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerPlaying, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerPaused, p_e ); libvlc_MediaPlayerPaused, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerPlayed, p_e ); libvlc_MediaPlayerEndReached, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerForward, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerBackward, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerEncounteredError, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerPositionChanged, p_e ); libvlc_MediaPlayerPositionChanged, p_e );
libvlc_event_manager_register_event_type( p_mi->p_event_manager, libvlc_event_manager_register_event_type( p_mi->p_event_manager,
...@@ -636,12 +668,11 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi, ...@@ -636,12 +668,11 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
if( state == libvlc_Playing || state == libvlc_Paused ) if( state == libvlc_Playing || state == libvlc_Paused )
{ {
/* Send a stop notification event only of we are in playing or paused states */ /* Send a stop notification event only of we are in playing or paused states */
libvlc_media_set_state( p_mi->p_md, libvlc_Ended, p_e );
libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, p_e );
/* Construct and send the event */ /* Construct and send the event */
libvlc_event_t event; libvlc_event_t event;
event.type = libvlc_MediaPlayerStopped; event.type = libvlc_MediaPlayerEndReached;
libvlc_event_send( p_mi->p_event_manager, &event ); libvlc_event_send( p_mi->p_event_manager, &event );
} }
...@@ -925,7 +956,7 @@ libvlc_state_t libvlc_media_player_get_state( ...@@ -925,7 +956,7 @@ libvlc_state_t libvlc_media_player_get_state(
/* We do return the right value, no need to throw an exception */ /* We do return the right value, no need to throw an exception */
if( libvlc_exception_raised( p_e ) ) if( libvlc_exception_raised( p_e ) )
libvlc_exception_clear( p_e ); libvlc_exception_clear( p_e );
return libvlc_Stopped; return libvlc_Ended;
} }
var_Get( p_input_thread, "state", &val ); var_Get( p_input_thread, "state", &val );
......
...@@ -357,25 +357,37 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self, ...@@ -357,25 +357,37 @@ mediacontrol_get_stream_information( mediacontrol_Instance *self,
else else
{ {
libvlc_state_t state; libvlc_state_t state;
state = libvlc_media_player_get_state( self->p_media_player, &ex ); state = libvlc_media_player_get_state( self->p_media_player, &ex );
HANDLE_LIBVLC_EXCEPTION_NULL( &ex ); HANDLE_LIBVLC_EXCEPTION_NULL( &ex );
switch( state ) switch( state )
{ {
case libvlc_Playing : case libvlc_NothingSpecial:
retval->streamstatus = mediacontrol_PlayingStatus; retval->streamstatus = mediacontrol_UndefinedStatus;
break;
case libvlc_Paused :
retval->streamstatus = mediacontrol_PauseStatus;
break; break;
case libvlc_Opening : case libvlc_Opening :
case libvlc_Buffering:
retval->streamstatus = mediacontrol_InitStatus; retval->streamstatus = mediacontrol_InitStatus;
break; break;
case libvlc_Stopped: case libvlc_Buffering:
retval->streamstatus = mediacontrol_BufferingStatus;
break;
case libvlc_Playing:
retval->streamstatus = mediacontrol_PlayingStatus;
break;
case libvlc_Paused:
retval->streamstatus = mediacontrol_PauseStatus;
break;
case libvlc_Ended: case libvlc_Ended:
retval->streamstatus = mediacontrol_EndStatus; retval->streamstatus = mediacontrol_EndStatus;
break; break;
case libvlc_Forward:
retval->streamstatus = mediacontrol_ForwardStatus;
break;
case libvlc_Backward:
retval->streamstatus = mediacontrol_BackwardStatus;
break;
case libvlc_Error:
retval->streamstatus = mediacontrol_ErrorStatus;
break;
default : default :
retval->streamstatus = mediacontrol_UndefinedStatus; retval->streamstatus = mediacontrol_UndefinedStatus;
break; break;
......
...@@ -67,7 +67,6 @@ static void test_events (const char ** argv, int argc) ...@@ -67,7 +67,6 @@ static void test_events (const char ** argv, int argc)
libvlc_MediaPlayerPlayed, libvlc_MediaPlayerPlayed,
libvlc_MediaPlayerPaused, libvlc_MediaPlayerPaused,
libvlc_MediaPlayerEndReached, libvlc_MediaPlayerEndReached,
libvlc_MediaPlayerStopped,
libvlc_MediaPlayerEncounteredError, libvlc_MediaPlayerEncounteredError,
libvlc_MediaPlayerTimeChanged, libvlc_MediaPlayerTimeChanged,
libvlc_MediaPlayerPositionChanged, libvlc_MediaPlayerPositionChanged,
......
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