mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-28 23:09:59 +02:00
Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH.
It allows a finer control on what to update (for gui).
This commit is contained in:
parent
6701b274cd
commit
768bd8a4d8
@ -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) */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -2445,6 +2445,10 @@ 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 );
|
||||
|
||||
input_SendEventLength( p_sys->p_input, i_length );
|
||||
|
||||
if( !p_sys->b_buffering )
|
||||
{
|
||||
/* Fix for buffering delay */
|
||||
const mtime_t i_delay = EsOutGetBuffering( out );
|
||||
|
||||
@ -2457,8 +2461,8 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args )
|
||||
if( f_position < 0 )
|
||||
f_position = 0;
|
||||
|
||||
if( !p_sys->b_buffering )
|
||||
input_SendEventTimes( p_sys->p_input, f_position, i_time, i_length );
|
||||
input_SendEventPosition( p_sys->p_input, f_position, i_time );
|
||||
}
|
||||
return VLC_SUCCESS;
|
||||
}
|
||||
case ES_OUT_SET_JITTER:
|
||||
|
@ -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 )
|
||||
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 )
|
||||
{
|
||||
|
@ -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 );
|
||||
|
@ -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 )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user