[vlc-devel] [PATCH 08/14] input: merge input_ControlSync and input_ControlPush

Thomas Guillem thomas at gllm.fr
Mon Feb 24 10:21:47 CET 2020



On Sat, Feb 22, 2020, at 08:52, Rémi Denis-Courmont wrote:
> Le perjantaina 21. helmikuuta 2020, 17.59.39 EET Thomas Guillem a écrit :
> > Some controls could be send synchronously (when the input is not started) or
> > asynchronously (when the input is started). It's better to let the
> > input_thread_t decice.
> 
> *decide*
> 
> And I don't see the point in using generic "controls" for synchronous calls. 
> Controls are just a mean to pass messages between threads.
> 
> Might just as well have a proper function call if it's synchronous.

Indeed, a proper function that will call the control directly or asynchronously depending on the input state.

> 
> > ---
> >  src/input/input.c          | 27 ++++++++++++++++++++-------
> >  src/input/input_internal.h |  5 -----
> >  src/player/medialib.c      |  6 +++---
> >  3 files changed, 23 insertions(+), 15 deletions(-)
> > 
> > diff --git a/src/input/input.c b/src/input/input.c
> > index 18024ea6e06..0ca2c4d92b9 100644
> > --- a/src/input/input.c
> > +++ b/src/input/input.c
> > @@ -1463,11 +1463,31 @@ static size_t ControlGetReducedIndexLocked(
> > input_thread_t *p_input,
> > /**************************************************************************
> > *** * Control
> >  
> > ***************************************************************************
> > **/ +static int input_ControlSync(input_thread_t *p_input, int i_type, +    
> >                         const input_control_param_t* param ) +{
> > +    switch( i_type )
> > +    {
> > +        /* Not all controls can be handled when the input is not started.
> > There +         * are possibly more sync controls, add them here when
> > needed. +         * Synchronous controls need to be NON-BLOCKING. */
> > +        case INPUT_CONTROL_SET_ES_AUTOSELECT:
> > +            Control( p_input, i_type, *param );
> > +            return VLC_SUCCESS;
> > +        default:
> > +            return VLC_EGENERIC;
> > +    }
> > +}
> > +
> >  int input_ControlPush( input_thread_t *p_input,
> >                         int i_type, const input_control_param_t *p_param )
> >  {
> >      input_thread_private_t *sys = input_priv(p_input);
> > 
> > +    if( !sys->is_running && !sys->is_stopped
> > +     && input_ControlSync( p_input, i_type, p_param ) == VLC_SUCCESS )
> > +        return VLC_SUCCESS;
> > +
> >      vlc_mutex_lock( &sys->lock_control );
> >      input_control_t c = {
> >          .i_type = i_type,
> > @@ -1801,13 +1821,6 @@ static void ControlInsertDemuxFilter( input_thread_t*
> > p_input, const char* psz_d msg_Dbg(p_input, "Failed to create demux filter
> > %s", psz_demux_chain); }
> > 
> > -void input_ControlSync(input_thread_t *p_input, int i_type,
> > -                       const input_control_param_t* param )
> > -{
> > -    assert( !input_priv(p_input)->is_running );
> > -    Control( p_input, i_type, *param );
> > -}
> > -
> >  static bool Control( input_thread_t *p_input,
> >                       int i_type, input_control_param_t param )
> >  {
> > diff --git a/src/input/input_internal.h b/src/input/input_internal.h
> > index 91a02b392d5..3cc86c294f2 100644
> > --- a/src/input/input_internal.h
> > +++ b/src/input/input_internal.h
> > @@ -635,11 +635,6 @@ static inline int input_ControlPushEsHelper(
> > input_thread_t *p_input, int i_type } );
> >  }
> > 
> > -/** Synchronously execute a control sequence. This MUST only be used before
> > the - * input is started
> > - */
> > -void input_ControlSync(input_thread_t *, int, const input_control_param_t
> > *); -
> >  bool input_Stopped( input_thread_t * );
> > 
> >  int input_GetAttachments(input_thread_t *input, input_attachment_t
> > ***attachments); diff --git a/src/player/medialib.c b/src/player/medialib.c
> > index 02249f41ea5..ef0e4bf7d0d 100644
> > --- a/src/player/medialib.c
> > +++ b/src/player/medialib.c
> > @@ -79,7 +79,7 @@ vlc_player_input_RestoreMlStates(struct vlc_player_input*
> > input, bool force_pos) if (input->ml.states.current_video_track == -1)
> >      {
> >          input->ml.default_video_track = -1;
> > -        input_ControlSync(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> > +        input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> >                            &(input_control_param_t) {
> >                                .es_autoselect.cat = VIDEO_ES,
> >                                .es_autoselect.enabled = false,
> > @@ -88,7 +88,7 @@ vlc_player_input_RestoreMlStates(struct vlc_player_input*
> > input, bool force_pos) if (input->ml.states.current_audio_track == -1)
> >      {
> >          input->ml.default_audio_track = -1;
> > -        input_ControlSync(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> > +        input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> >                            &(input_control_param_t) {
> >                                .es_autoselect.cat = AUDIO_ES,
> >                                .es_autoselect.enabled = false,
> > @@ -97,7 +97,7 @@ vlc_player_input_RestoreMlStates(struct vlc_player_input*
> > input, bool force_pos) if (input->ml.states.current_subtitle_track == -1)
> >      {
> >          input->ml.default_subtitle_track = -1;
> > -        input_ControlSync(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> > +        input_ControlPush(input->thread, INPUT_CONTROL_SET_ES_AUTOSELECT,
> >                            &(input_control_param_t) {
> >                                .es_autoselect.cat = SPU_ES,
> >                                .es_autoselect.enabled = false,
> 
> 
> -- 
> レミ・デニ-クールモン
> http://www.remlab.net/
> 
> 
> 
> _______________________________________________
> 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