[vlc-devel] [PATCH] input: merge position and length events
Thomas Guillem
thomas at gllm.fr
Mon Aug 5 11:46:50 CEST 2019
On Mon, Aug 5, 2019, at 07:37, Steve Lhomme wrote:
> On 2019-08-02 10:01, Thomas Guillem wrote:
> > From the es_out, times are a triplet: pos, time, length. So they should be
> > sent via a single event and atomically.
>
> Maybe document the default values to use when only one value changes.
It always used with valid values, cf. MainLoopStatistics() in input.c
>
> > This also suppress one player lock when times are updated.
> > ---
> > src/input/es_out.c | 5 ++---
> > src/input/event.h | 20 +++++---------------
> > src/input/input.c | 3 +--
> > src/input/input_internal.h | 16 ++++++----------
> > src/input/player.c | 16 +++++++---------
> > 5 files changed, 21 insertions(+), 39 deletions(-)
> >
> > diff --git a/src/input/es_out.c b/src/input/es_out.c
> > index 07e33647af..c839218991 100644
> > --- a/src/input/es_out.c
> > +++ b/src/input/es_out.c
> > @@ -3279,8 +3279,6 @@ static int EsOutVaControlLocked( es_out_t *out, int i_query, va_list args )
> > vlc_tick_t i_time = va_arg( args, vlc_tick_t );
> > vlc_tick_t i_length = va_arg( args, vlc_tick_t );
> >
> > - input_SendEventLength( p_sys->p_input, i_length );
> > -
> > if( !p_sys->b_buffering )
> > {
> > vlc_tick_t i_delay;
> > @@ -3301,7 +3299,8 @@ static int EsOutVaControlLocked( es_out_t *out, int i_query, va_list args )
> > if( f_position < 0 )
> > f_position = 0;
> >
> > - input_SendEventPosition( p_sys->p_input, f_position, i_time );
> > + input_SendEventTimes( p_sys->p_input, f_position, i_time,
> > + i_length );
>
> If b_buffering is true the length is never sent, it was sent before.
Good catch.
>
> > }
> > return VLC_SUCCESS;
> > }
> > diff --git a/src/input/event.h b/src/input/event.h
> > index 01163c479a..2d77461451 100644
> > --- a/src/input/event.h
> > +++ b/src/input/event.h
> > @@ -54,23 +54,13 @@ static inline void input_SendEventCapabilities(input_thread_t *p_input,
> > });
> > }
> >
> > -static inline void input_SendEventPosition(input_thread_t *p_input,
> > - double f_position,
> > - vlc_tick_t i_time)
> > +static inline void input_SendEventTimes(input_thread_t *p_input,
> > + double f_position, vlc_tick_t i_time,
> > + vlc_tick_t i_length)
> > {
> > input_SendEvent(p_input, &(struct vlc_input_event) {
> > - .type = INPUT_EVENT_POSITION,
> > - .position = { f_position, i_time }
> > - });
> > -}
> > -
> > -static inline void input_SendEventLength(input_thread_t *p_input,
> > - vlc_tick_t i_length)
> > -{
> > - input_item_SetDuration(input_priv(p_input)->p_item, i_length);
> > - input_SendEvent(p_input, &(struct vlc_input_event) {
> > - .type = INPUT_EVENT_LENGTH,
> > - .length = i_length,
> > + .type = INPUT_EVENT_TIMES,
> > + .times = { f_position, i_time, i_length }
> > });
> > }
> >
> > diff --git a/src/input/input.c b/src/input/input.c
> > index 9d0bc94e78..a15ce6cab9 100644
> > --- a/src/input/input.c
> > +++ b/src/input/input.c
> > @@ -1272,9 +1272,8 @@ static int Init( input_thread_t * p_input )
> > i_length = 0;
> > if( i_length <= 0 )
> > i_length = input_item_GetDuration( priv->p_item );
> > - input_SendEventLength( p_input, i_length );
> >
> > - input_SendEventPosition( p_input, 0.0, 0 );
> > + input_SendEventTimes( p_input, 0.0, 0, i_length );
> >
> > if( !priv->b_preparsing )
> > {
> > diff --git a/src/input/input_internal.h b/src/input/input_internal.h
> > index b0bc7b6d16..8e837a8c61 100644
> > --- a/src/input/input_internal.h
> > +++ b/src/input/input_internal.h
> > @@ -87,11 +87,8 @@ typedef enum input_event_type_e
> > /* "capabilities" has changed */
> > INPUT_EVENT_CAPABILITIES,
> >
> > - /* At least one of "position" or "time" */
> > - INPUT_EVENT_POSITION,
> > -
> > - /* "length" has changed */
> > - INPUT_EVENT_LENGTH,
> > + /* At least one of "position", "time" "length" has changed */
> > + INPUT_EVENT_TIMES,
> >
> > /* A title has been added or removed or selected.
> > * It implies that the chapter has changed (no chapter event is sent) */
> > @@ -150,10 +147,11 @@ typedef enum input_event_type_e
> > #define VLC_INPUT_CAPABILITIES_REWINDABLE (1<<3)
> > #define VLC_INPUT_CAPABILITIES_RECORDABLE (1<<4)
> >
> > -struct vlc_input_event_position
> > +struct vlc_input_event_times
> > {
> > float percentage;
> > vlc_tick_t ms;
> > + vlc_tick_t length;
> > };
> >
> > struct vlc_input_event_title
> > @@ -243,10 +241,8 @@ struct vlc_input_event
> > float rate;
> > /* INPUT_EVENT_CAPABILITIES */
> > int capabilities; /**< cf. VLC_INPUT_CAPABILITIES_* bitwise flags */
> > - /* INPUT_EVENT_POSITION */
> > - struct vlc_input_event_position position;
> > - /* INPUT_EVENT_LENGTH */
> > - vlc_tick_t length;
> > + /* INPUT_EVENT_TIMES */
> > + struct vlc_input_event_times times;
> > /* INPUT_EVENT_TITLE */
> > struct vlc_input_event_title title;
> > /* INPUT_EVENT_CHAPTER */
> > diff --git a/src/input/player.c b/src/input/player.c
> > index 4d0e13c668..8b84aa5c0b 100644
> > --- a/src/input/player.c
> > +++ b/src/input/player.c
> > @@ -2198,12 +2198,12 @@ input_thread_Events(input_thread_t *input_thread,
> > old_caps, input->capabilities);
> > break;
> > }
> > - case INPUT_EVENT_POSITION:
> > - if (input->time != event->position.ms ||
> > - input->position != event->position.percentage)
> > + case INPUT_EVENT_TIMES:
> > + if (input->time != event->times.ms ||
> > + input->position != event->times.percentage)
> > {
> > - input->time = event->position.ms;
> > - input->position = event->position.percentage;
> > + input->time = event->times.ms;
> > + input->position = event->times.percentage;
> > vlc_player_SendEvent(player, on_position_changed,
> > input->time,
> > input->position);
> > @@ -2212,11 +2212,9 @@ input_thread_Events(input_thread_t *input_thread,
> > && input == player->input)
> > vlc_player_HandleAtoBLoop(player);
> > }
> > - break;
> > - case INPUT_EVENT_LENGTH:
> > - if (input->length != event->length)
> > + if (input->length != event->times.length)
> > {
> > - input->length = event->length;
> > + input->length = event->times.length;
> > vlc_player_SendEvent(player, on_length_changed, input->length);
> > }
> > break;
> > --
> > 2.20.1
> >
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> >
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list