vlc | branch: master | Thomas Guillem <[email protected]> | Thu Feb 20 15:33:54 2020 +0100| [e39882dc2b85b84632a2877484d7d984eac6e990] | committer: Thomas Guillem
input: add a function to change str ids > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e39882dc2b85b84632a2877484d7d984eac6e990 --- src/input/input.c | 27 +++++++++++++++++++++++++++ src/input/input_internal.h | 15 +++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/input/input.c b/src/input/input.c index 7f2f211fee..84cfee5a9a 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -1619,6 +1619,9 @@ static void ControlRelease( int i_type, const input_control_param_t *p_param ) free(p_param->list.ids); break; } + case INPUT_CONTROL_SET_ES_CAT_IDS: + free( p_param->cat_ids.str_ids ); + break; default: break; @@ -1825,6 +1828,26 @@ void input_ControlSync(input_thread_t *p_input, int i_type, Control( p_input, i_type, *param ); } +void input_SetEsCatIds(input_thread_t *input, enum es_format_category_e cat, + const char *str_ids) +{ + input_thread_private_t *sys = input_priv(input); + + if (!sys->is_running && !sys->is_stopped) + { + /* Not running, send the control synchronously since we are sure that + * it won't block */ + es_out_SetEsCatIds(sys->p_es_out_display, cat, str_ids); + } + else + { + const input_control_param_t param = { + .cat_ids = { cat, str_ids ? strdup(str_ids) : NULL } + }; + input_ControlPush(input, INPUT_CONTROL_SET_ES_CAT_IDS, ¶m); + } +} + static bool Control( input_thread_t *p_input, int i_type, input_control_param_t param ) { @@ -2062,6 +2085,10 @@ static bool Control( input_thread_t *p_input, case INPUT_CONTROL_RESTART_ES: es_out_RestartEs( priv->p_es_out_display, param.id ); break; + case INPUT_CONTROL_SET_ES_CAT_IDS: + es_out_SetEsCatIds( priv->p_es_out_display, param.cat_ids.cat, + param.cat_ids.str_ids ); + break; case INPUT_CONTROL_SET_VIEWPOINT: case INPUT_CONTROL_SET_INITIAL_VIEWPOINT: diff --git a/src/input/input_internal.h b/src/input/input_internal.h index 3b36f8c8a3..2cc672f6ed 100644 --- a/src/input/input_internal.h +++ b/src/input/input_internal.h @@ -430,6 +430,11 @@ typedef union vlc_tick_t delay; } cat_delay; struct + { + enum es_format_category_e cat; + char *str_ids; + } cat_ids; + struct { vlc_es_id_t *id; vlc_tick_t delay; @@ -578,6 +583,7 @@ enum input_control_e INPUT_CONTROL_SET_ES_LIST, // select a list of ES atomically INPUT_CONTROL_UNSET_ES, INPUT_CONTROL_RESTART_ES, + INPUT_CONTROL_SET_ES_CAT_IDS, INPUT_CONTROL_SET_VIEWPOINT, // new absolute viewpoint INPUT_CONTROL_SET_INITIAL_VIEWPOINT, // set initial viewpoint (generally from video) @@ -636,6 +642,15 @@ static inline int input_ControlPushEsHelper( input_thread_t *p_input, int i_type */ void input_ControlSync(input_thread_t *, int, const input_control_param_t *); +/** + * Set the list of string ids to enable for a category + * + * cf. ES_OUT_SET_ES_CAT_IDS + * This function can be called before start or while started. + */ +void input_SetEsCatIds(input_thread_t *, enum es_format_category_e cat, + const char *str_ids); + bool input_Stopped( input_thread_t * ); int input_GetAttachments(input_thread_t *input, input_attachment_t ***attachments); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
