From: Laurent Aimar Date: Mon, 11 May 2009 20:17:54 +0000 (+0200) Subject: Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH. X-Git-Tag: 1.1.0-ff~6033 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=768bd8a4d8b88a8f44934b172541b14ffd546111;p=vlc Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH. It allows a finer control on what to update (for gui). --- diff --git a/include/vlc_input.h b/include/vlc_input.h index 06f6fc2bf3..561a753964 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -383,8 +383,11 @@ typedef enum input_event_type_e /* "rate" has changed */ INPUT_EVENT_RATE, - /* At least one of "position" or "time" or "length" has changed */ - INPUT_EVENT_TIMES, + /* At least one of "position" or "time" */ + INPUT_EVENT_POSITION, + + /* "length" has changed */ + INPUT_EVENT_LENGTH, /* A title has been added or removed or selected. * It imply that chapter has changed (not chapter event is sent) */ diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp index 94b08b4b95..8064fac0e4 100644 --- a/modules/gui/qt4/input_manager.cpp +++ b/modules/gui/qt4/input_manager.cpp @@ -275,7 +275,8 @@ static int InputEvent( vlc_object_t *p_this, const char *, case INPUT_EVENT_RATE: event = new IMEvent( ItemRateChanged_Type, 0 ); break; - case INPUT_EVENT_TIMES: + case INPUT_EVENT_POSITION: + //case INPUT_EVENT_LENGTH: event = new IMEvent( PositionUpdate_Type, 0 ); break; diff --git a/src/control/media_player.c b/src/control/media_player.c index 19dd794043..8c98a4eb2b 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -219,7 +219,7 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd, libvlc_media_set_state( p_mi->p_md, libvlc_state, NULL ); libvlc_event_send( p_mi->p_event_manager, &event ); } - else if( newval.i_int == INPUT_EVENT_TIMES ) + else if( newval.i_int == INPUT_EVENT_POSITION ) { if( var_GetInteger( p_input, "state" ) != PLAYING_S ) return VLC_SUCCESS; /* Don't send the position while stopped */ diff --git a/src/input/es_out.c b/src/input/es_out.c index 22d4026130..86cf9e4c6d 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -2445,20 +2445,24 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) mtime_t i_time = (mtime_t)va_arg( args, mtime_t ); mtime_t i_length = (mtime_t)va_arg( args, mtime_t ); - /* Fix for buffering delay */ - const mtime_t i_delay = EsOutGetBuffering( out ); + input_SendEventLength( p_sys->p_input, i_length ); - i_time -= i_delay; - if( i_time < 0 ) - i_time = 0; + if( !p_sys->b_buffering ) + { + /* Fix for buffering delay */ + const mtime_t i_delay = EsOutGetBuffering( out ); - if( i_length > 0 ) - f_position -= (double)i_delay / i_length; - if( f_position < 0 ) - f_position = 0; + i_time -= i_delay; + if( i_time < 0 ) + i_time = 0; - if( !p_sys->b_buffering ) - input_SendEventTimes( p_sys->p_input, f_position, i_time, i_length ); + if( i_length > 0 ) + f_position -= (double)i_delay / i_length; + if( f_position < 0 ) + f_position = 0; + + input_SendEventPosition( p_sys->p_input, f_position, i_time ); + } return VLC_SUCCESS; } case ES_OUT_SET_JITTER: diff --git a/src/input/event.c b/src/input/event.c index 242bf1fd01..6703dfed39 100644 --- a/src/input/event.c +++ b/src/input/event.c @@ -60,8 +60,7 @@ void input_SendEventAbort( input_thread_t *p_input ) Trigger( p_input, INPUT_EVENT_ABORT ); } -void input_SendEventTimes( input_thread_t *p_input, - double f_position, mtime_t i_time, mtime_t i_length ) +void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time ) { vlc_value_t val; @@ -73,13 +72,22 @@ void input_SendEventTimes( input_thread_t *p_input, val.i_time = i_time; var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); + Trigger( p_input, INPUT_EVENT_POSITION ); +} +void input_SendEventLength( input_thread_t *p_input, mtime_t i_length ) +{ + vlc_value_t val; + /* FIXME ugly + what about meta change event ? */ - if( var_GetTime( p_input, "length" ) != i_length ) - input_item_SetDuration( p_input->p->p_item, i_length ); + if( var_GetTime( p_input, "length" ) == i_length ) + return; + + input_item_SetDuration( p_input->p->p_item, i_length ); + val.i_time = i_length; var_Change( p_input, "length", VLC_VAR_SETVALUE, &val, NULL ); - Trigger( p_input, INPUT_EVENT_TIMES ); + Trigger( p_input, INPUT_EVENT_LENGTH ); } void input_SendEventStatistics( input_thread_t *p_input ) { diff --git a/src/input/event.h b/src/input/event.h index b6ed2bfc60..6fc9d99352 100644 --- a/src/input/event.h +++ b/src/input/event.h @@ -35,7 +35,8 @@ *****************************************************************************/ void input_SendEventDead( input_thread_t *p_input ); void input_SendEventAbort( input_thread_t *p_input ); -void input_SendEventTimes( input_thread_t *p_input, double f_position, mtime_t i_time, mtime_t i_length ); +void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time ); +void input_SendEventLength( input_thread_t *p_input, mtime_t i_length ); void input_SendEventStatistics( input_thread_t *p_input ); void input_SendEventRate( input_thread_t *p_input, int i_rate ); void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay ); diff --git a/src/input/input.c b/src/input/input.c index 396994b267..bf5373eeea 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -1205,7 +1205,9 @@ static int Init( input_thread_t * p_input ) i_length = 0; if( i_length <= 0 ) i_length = input_item_GetDuration( p_input->p->p_item ); - input_SendEventTimes( p_input, 0.0, 0, i_length ); + input_SendEventLength( p_input, i_length ); + + input_SendEventPosition( p_input, 0.0, 0 ); if( !p_input->b_preparsing ) {