[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