vlc | branch: master | Thomas Guillem <[email protected]> | Tue Aug 13 17:57:39 2019 +0200| [44a3c5dce8ece982cb0916e9a5df9103673a0a6f] | committer: Thomas Guillem
input: send pause/playing date via events In order to get the pause and play date from the player. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=44a3c5dce8ece982cb0916e9a5df9103673a0a6f --- src/input/event.h | 5 +++-- src/input/input.c | 25 +++++++++++++------------ src/input/input_internal.h | 9 ++++++++- src/input/item.c | 2 +- src/input/thumbnailer.c | 4 ++-- src/player/input.c | 22 ++++++++++++++-------- src/player/player.c | 6 ++++-- src/player/player.h | 3 ++- 8 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/input/event.h b/src/input/event.h index 6810d4a0c2..3899563889 100644 --- a/src/input/event.h +++ b/src/input/event.h @@ -131,11 +131,12 @@ static inline void input_SendEventSignal(input_thread_t *p_input, }); } -static inline void input_SendEventState(input_thread_t *p_input, int i_state) +static inline void input_SendEventState(input_thread_t *p_input, int i_state, + vlc_tick_t state_date) { input_SendEvent(p_input, &(struct vlc_input_event) { .type = INPUT_EVENT_STATE, - .state = i_state + .state = { i_state, state_date, }, }); } diff --git a/src/input/input.c b/src/input/input.c index 193e47d676..ebb1af8817 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -116,7 +116,7 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta static int input_SlaveSourceAdd( input_thread_t *, enum slave_type, const char *, unsigned ); static char *input_SubtitleFile2Uri( input_thread_t *, const char * ); -static void input_ChangeState( input_thread_t *p_input, int i_state ); /* TODO fix name */ +static void input_ChangeState( input_thread_t *p_input, int i_state, vlc_tick_t ); /* TODO fix name */ #undef input_Create /** @@ -560,7 +560,7 @@ static void MainLoopDemux( input_thread_t *p_input, bool *pb_changed ) } else if( i_ret == VLC_DEMUXER_EGENERIC ) { - input_ChangeState( p_input, ERROR_S ); + input_ChangeState( p_input, ERROR_S, VLC_TICK_INVALID ); } else if( p_priv->i_slave > 0 ) SlaveDemux( p_input ); @@ -796,7 +796,7 @@ static int InitSout( input_thread_t * p_input ) priv->p_sout = input_resource_RequestSout( priv->p_resource, NULL, psz ); if( priv->p_sout == NULL ) { - input_ChangeState( p_input, ERROR_S ); + input_ChangeState( p_input, ERROR_S, VLC_TICK_INVALID ); msg_Err( p_input, "cannot start stream output instance, " \ "aborting" ); free( psz ); @@ -1232,7 +1232,7 @@ static int Init( input_thread_t * p_input ) input_source_t *master; /* */ - input_ChangeState( p_input, OPENING_S ); + input_ChangeState( p_input, OPENING_S, VLC_TICK_INVALID ); input_SendEventCache( p_input, 0.0 ); if( var_Type( vlc_object_parent(p_input), "meta-file" ) ) @@ -1318,12 +1318,12 @@ static int Init( input_thread_t * p_input ) input_priv(p_input)->p_item->psz_uri ); /* initialization is complete */ - input_ChangeState( p_input, PLAYING_S ); + input_ChangeState( p_input, PLAYING_S, vlc_tick_now() ); return VLC_SUCCESS; error: - input_ChangeState( p_input, ERROR_S ); + input_ChangeState( p_input, ERROR_S, VLC_TICK_INVALID ); if( input_priv(p_input)->p_es_out ) es_out_Delete( input_priv(p_input)->p_es_out ); @@ -1356,7 +1356,7 @@ static void End( input_thread_t * p_input ) input_thread_private_t *priv = input_priv(p_input); /* We are at the end */ - input_ChangeState( p_input, END_S ); + input_ChangeState( p_input, END_S, VLC_TICK_INVALID ); /* Stop es out activity */ es_out_SetMode( priv->p_es_out, ES_OUT_MODE_NONE ); @@ -1618,7 +1618,7 @@ static void ControlPause( input_thread_t *p_input, vlc_tick_t i_control_date ) } /* Switch to new state */ - input_ChangeState( p_input, i_state ); + input_ChangeState( p_input, i_state, i_control_date ); } static void ControlUnpause( input_thread_t *p_input, vlc_tick_t i_control_date ) @@ -1630,13 +1630,13 @@ static void ControlUnpause( input_thread_t *p_input, vlc_tick_t i_control_date ) if( demux_Control( p_demux, DEMUX_SET_PAUSE_STATE, false ) ) { msg_Err( p_input, "cannot resume" ); - input_ChangeState( p_input, ERROR_S ); + input_ChangeState( p_input, ERROR_S, i_control_date ); return; } } /* Switch to play */ - input_ChangeState( p_input, PLAYING_S ); + input_ChangeState( p_input, PLAYING_S, i_control_date ); es_out_SetPauseState( input_priv(p_input)->p_es_out, false, false, i_control_date ); } @@ -3078,7 +3078,8 @@ static void InputGetExtraFiles( input_thread_t *p_input, } /* */ -static void input_ChangeState( input_thread_t *p_input, int i_state ) +static void input_ChangeState( input_thread_t *p_input, int i_state, + vlc_tick_t state_date ) { if( input_priv(p_input)->i_state == i_state ) return; @@ -3086,7 +3087,7 @@ static void input_ChangeState( input_thread_t *p_input, int i_state ) input_priv(p_input)->i_state = i_state; if( i_state == ERROR_S ) input_item_SetErrorWhenReading( input_priv(p_input)->p_item, true ); - input_SendEventState( p_input, i_state ); + input_SendEventState( p_input, i_state, state_date ); } diff --git a/src/input/input_internal.h b/src/input/input_internal.h index fd8778dcdc..12613bafc6 100644 --- a/src/input/input_internal.h +++ b/src/input/input_internal.h @@ -150,6 +150,13 @@ typedef enum input_event_type_e #define VLC_INPUT_CAPABILITIES_REWINDABLE (1<<3) #define VLC_INPUT_CAPABILITIES_RECORDABLE (1<<4) +struct vlc_input_event_state +{ + input_state_e value; + /* Only valid for PAUSE_S and PLAYING_S states */ + vlc_tick_t date; +}; + struct vlc_input_event_times { float percentage; @@ -250,7 +257,7 @@ struct vlc_input_event union { /* INPUT_EVENT_STATE */ - input_state_e state; + struct vlc_input_event_state state; /* INPUT_EVENT_RATE */ float rate; /* INPUT_EVENT_CAPABILITIES */ diff --git a/src/input/item.c b/src/input/item.c index b1b92cdf9b..0fa056513a 100644 --- a/src/input/item.c +++ b/src/input/item.c @@ -1362,7 +1362,7 @@ input_item_parser_InputEvent(input_thread_t *input, switch (event->type) { case INPUT_EVENT_STATE: - parser->state = event->state; + parser->state = event->state.value; break; case INPUT_EVENT_DEAD: { diff --git a/src/input/thumbnailer.c b/src/input/thumbnailer.c index 524651364d..dbf23b5115 100644 --- a/src/input/thumbnailer.c +++ b/src/input/thumbnailer.c @@ -74,8 +74,8 @@ on_thumbnailer_input_event( input_thread_t *input, { VLC_UNUSED(input); if ( event->type != INPUT_EVENT_THUMBNAIL_READY && - ( event->type != INPUT_EVENT_STATE || ( event->state != ERROR_S && - event->state != END_S ) ) ) + ( event->type != INPUT_EVENT_STATE || ( event->state.value != ERROR_S && + event->state.value != END_S ) ) ) return; vlc_thumbnailer_request_t* request = userdata; diff --git a/src/player/input.c b/src/player/input.c index 74cfd3272d..d63b2ff59c 100644 --- a/src/player/input.c +++ b/src/player/input.c @@ -112,7 +112,7 @@ vlc_player_WaitRetryDelay(vlc_player_t *player) void vlc_player_input_HandleState(struct vlc_player_input *input, - enum vlc_player_state state) + enum vlc_player_state state, vlc_tick_t state_date) { vlc_player_t *player = input->player; @@ -206,21 +206,25 @@ vlc_player_input_HandleState(struct vlc_player_input *input, static void vlc_player_input_HandleStateEvent(struct vlc_player_input *input, - input_state_e state) + input_state_e state, vlc_tick_t state_date) { switch (state) { case OPENING_S: - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STARTED); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STARTED, + VLC_TICK_INVALID); break; case PLAYING_S: - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_PLAYING); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_PLAYING, + state_date); break; case PAUSE_S: - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_PAUSED); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_PAUSED, + state_date); break; case END_S: - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING, + VLC_TICK_INVALID); vlc_player_destructor_AddStoppingInput(input->player, input); break; case ERROR_S: @@ -574,7 +578,8 @@ input_thread_Events(input_thread_t *input_thread, switch (event->type) { case INPUT_EVENT_STATE: - vlc_player_input_HandleStateEvent(input, event->state); + vlc_player_input_HandleStateEvent(input, event->state.value, + event->state.date); break; case INPUT_EVENT_RATE: input->rate = event->rate; @@ -653,7 +658,8 @@ input_thread_Events(input_thread_t *input_thread, break; case INPUT_EVENT_DEAD: if (input->started) /* Can happen with early input_thread fails */ - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING, + VLC_TICK_INVALID); vlc_player_destructor_AddJoinableInput(player, input); break; case INPUT_EVENT_VBI_PAGE: diff --git a/src/player/player.c b/src/player/player.c index 839fd0eea7..5a1ccc7d03 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -203,7 +203,8 @@ vlc_player_destructor_Thread(void *data) struct vlc_player_input *input; vlc_list_foreach(input, &player->destructor.inputs, node) { - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPING, + VLC_TICK_INVALID); vlc_player_destructor_AddStoppingInput(player, input); input_Stop(input->thread); @@ -217,7 +218,8 @@ vlc_player_destructor_Thread(void *data) keep_sout = var_GetBool(input->thread, "sout-keep"); if (input->state == VLC_PLAYER_STATE_STOPPING) - vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPED); + vlc_player_input_HandleState(input, VLC_PLAYER_STATE_STOPPED, + VLC_TICK_INVALID); vlc_list_remove(&input->node); vlc_player_input_Delete(input); diff --git a/src/player/player.h b/src/player/player.h index c75eb9e97a..024b425ba2 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -313,7 +313,8 @@ int vlc_player_input_Start(struct vlc_player_input *input); void -vlc_player_input_HandleState(struct vlc_player_input *, enum vlc_player_state); +vlc_player_input_HandleState(struct vlc_player_input *, enum vlc_player_state, + vlc_tick_t state_date); /* * player_vout.c _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
