[vlc-devel] commit: Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH. ( Laurent Aimar )
git version control
git at videolan.org
Mon May 11 22:19:13 CEST 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Mon May 11 22:17:54 2009 +0200| [768bd8a4d8b88a8f44934b172541b14ffd546111] | committer: Laurent Aimar
Split INPUT_EVENT_TIMES into INPUT_EVENT_POSITION/LENGTH.
It allows a finer control on what to update (for gui).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=768bd8a4d8b88a8f44934b172541b14ffd546111
---
include/vlc_input.h | 7 +++++--
modules/gui/qt4/input_manager.cpp | 3 ++-
src/control/media_player.c | 2 +-
src/input/es_out.c | 26 +++++++++++++++-----------
src/input/event.c | 18 +++++++++++++-----
src/input/event.h | 3 ++-
src/input/input.c | 4 +++-
7 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/include/vlc_input.h b/include/vlc_input.h
index 06f6fc2..561a753 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 94b08b4..8064fac 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 19dd794..8c98a4e 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 22d4026..86cf9e4 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 242bf1f..6703dfe 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 b6ed2bf..6fc9d99 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 396994b..bf5373e 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 )
{
More information about the vlc-devel
mailing list