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

Rémi Denis-Courmont remi at remlab.net
Sat Feb 22 08:52:14 CET 2020


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.

> ---
>  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/





More information about the vlc-devel mailing list