Commit 768bd8a4 authored by Laurent Aimar's avatar Laurent Aimar

Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH.

It allows a finer control on what to update (for gui).
parent 6701b274
...@@ -383,8 +383,11 @@ typedef enum input_event_type_e ...@@ -383,8 +383,11 @@ typedef enum input_event_type_e
/* "rate" has changed */ /* "rate" has changed */
INPUT_EVENT_RATE, INPUT_EVENT_RATE,
/* At least one of "position" or "time" or "length" has changed */ /* At least one of "position" or "time" */
INPUT_EVENT_TIMES, INPUT_EVENT_POSITION,
/* "length" has changed */
INPUT_EVENT_LENGTH,
/* A title has been added or removed or selected. /* A title has been added or removed or selected.
* It imply that chapter has changed (not chapter event is sent) */ * It imply that chapter has changed (not chapter event is sent) */
......
...@@ -275,7 +275,8 @@ static int InputEvent( vlc_object_t *p_this, const char *, ...@@ -275,7 +275,8 @@ static int InputEvent( vlc_object_t *p_this, const char *,
case INPUT_EVENT_RATE: case INPUT_EVENT_RATE:
event = new IMEvent( ItemRateChanged_Type, 0 ); event = new IMEvent( ItemRateChanged_Type, 0 );
break; break;
case INPUT_EVENT_TIMES: case INPUT_EVENT_POSITION:
//case INPUT_EVENT_LENGTH:
event = new IMEvent( PositionUpdate_Type, 0 ); event = new IMEvent( PositionUpdate_Type, 0 );
break; break;
......
...@@ -219,7 +219,7 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd, ...@@ -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_media_set_state( p_mi->p_md, libvlc_state, NULL );
libvlc_event_send( p_mi->p_event_manager, &event ); 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 ) if( var_GetInteger( p_input, "state" ) != PLAYING_S )
return VLC_SUCCESS; /* Don't send the position while stopped */ return VLC_SUCCESS; /* Don't send the position while stopped */
......
...@@ -2445,20 +2445,24 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) ...@@ -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_time = (mtime_t)va_arg( args, mtime_t );
mtime_t i_length = (mtime_t)va_arg( args, mtime_t ); mtime_t i_length = (mtime_t)va_arg( args, mtime_t );
/* Fix for buffering delay */ input_SendEventLength( p_sys->p_input, i_length );
const mtime_t i_delay = EsOutGetBuffering( out );
i_time -= i_delay; if( !p_sys->b_buffering )
if( i_time < 0 ) {
i_time = 0; /* Fix for buffering delay */
const mtime_t i_delay = EsOutGetBuffering( out );
if( i_length > 0 ) i_time -= i_delay;
f_position -= (double)i_delay / i_length; if( i_time < 0 )
if( f_position < 0 ) i_time = 0;
f_position = 0;
if( !p_sys->b_buffering ) if( i_length > 0 )
input_SendEventTimes( p_sys->p_input, f_position, i_time, i_length ); 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; return VLC_SUCCESS;
} }
case ES_OUT_SET_JITTER: case ES_OUT_SET_JITTER:
......
...@@ -60,8 +60,7 @@ void input_SendEventAbort( input_thread_t *p_input ) ...@@ -60,8 +60,7 @@ void input_SendEventAbort( input_thread_t *p_input )
Trigger( p_input, INPUT_EVENT_ABORT ); Trigger( p_input, INPUT_EVENT_ABORT );
} }
void input_SendEventTimes( input_thread_t *p_input, void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time )
double f_position, mtime_t i_time, mtime_t i_length )
{ {
vlc_value_t val; vlc_value_t val;
...@@ -73,13 +72,22 @@ void input_SendEventTimes( input_thread_t *p_input, ...@@ -73,13 +72,22 @@ void input_SendEventTimes( input_thread_t *p_input,
val.i_time = i_time; val.i_time = i_time;
var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); 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 ? */ /* FIXME ugly + what about meta change event ? */
if( var_GetTime( p_input, "length" ) != i_length ) if( var_GetTime( p_input, "length" ) == i_length )
input_item_SetDuration( p_input->p->p_item, i_length ); return;
input_item_SetDuration( p_input->p->p_item, i_length );
val.i_time = i_length; val.i_time = i_length;
var_Change( p_input, "length", VLC_VAR_SETVALUE, &val, NULL ); 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 ) void input_SendEventStatistics( input_thread_t *p_input )
{ {
......
...@@ -35,7 +35,8 @@ ...@@ -35,7 +35,8 @@
*****************************************************************************/ *****************************************************************************/
void input_SendEventDead( input_thread_t *p_input ); void input_SendEventDead( input_thread_t *p_input );
void input_SendEventAbort( 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_SendEventStatistics( input_thread_t *p_input );
void input_SendEventRate( input_thread_t *p_input, int i_rate ); void input_SendEventRate( input_thread_t *p_input, int i_rate );
void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay ); void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay );
......
...@@ -1205,7 +1205,9 @@ static int Init( input_thread_t * p_input ) ...@@ -1205,7 +1205,9 @@ static int Init( input_thread_t * p_input )
i_length = 0; i_length = 0;
if( i_length <= 0 ) if( i_length <= 0 )
i_length = input_item_GetDuration( p_input->p->p_item ); 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 ) if( !p_input->b_preparsing )
{ {
......
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