[vlc-devel] [PATCH 03/16] Add variable to enable/disable dual subtitles
Thomas Guillem
thomas at gllm.fr
Mon May 27 09:19:43 CEST 2019
Hello,
This should not belong to the player.
I think you should store the internal dual subtitle state in each interfaces.
On Tue, May 21, 2019, at 20:09, Roland Bewick wrote:
> ---
> include/vlc_player.h | 33 +++++++++++++++++++++++
> modules/gui/macosx/playlist/VLCPlayerController.m | 1 +
> modules/gui/qt/components/player_controller.cpp | 1 +
> src/input/player.c | 20 ++++++++++++++
> src/input/var.c | 1 +
> src/libvlccore.sym | 2 ++
> 6 files changed, 58 insertions(+)
>
> diff --git a/include/vlc_player.h b/include/vlc_player.h
> index f2df800797..aa0c736782 100644
> --- a/include/vlc_player.h
> +++ b/include/vlc_player.h
> @@ -697,6 +697,18 @@ struct vlc_player_cbs
> float subs_fps, void *data);
>
> /**
> + * Called when dual subtitles enabled has changed
> + *
> + * @see vlc_player_SetDualSubtitlesEnabled()
> + *
> + * @param player locked player instance
> + * @param enabled true if dual subtitle selection is enabled
> + * @param data opaque pointer set by vlc_player_AddListener()
> + */
> + void (*on_dual_subtitles_enabled_changed)(vlc_player_t *player,
> + bool enabled, void *data);
> +
> + /**
> * Called when a new renderer item is set
> *
> * @see vlc_player_SetRenderer()
> @@ -2286,6 +2298,27 @@ VLC_API float
> vlc_player_GetAssociatedSubsFPS(vlc_player_t *player);
>
> /**
> + * Enable or disable the abiltity to select multiple subtitle tracks.
> + *
> + * @note A successful call will trigger the
> + * vlc_player_cbs.on_dual_subtitles_enabled_changed event.
> + *
> + * @param player locked player instance
> + * @param enabled Enable dual subtitle track selection
> + */
> +VLC_API void
> +vlc_player_SetDualSubtitlesEnabled(vlc_player_t *player, bool enabled);
> +
> +/**
> + * Get whether dual subtitles are enabled or not
> + *
> + * @param player locked player instance
> + * @return enabled
> + */
> +VLC_API bool
> +vlc_player_AreDualSubtitlesEnabled(vlc_player_t *player);
> +
> +/**
> * Set the renderer
> *
> * Valid for the current media and all future ones.
> diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m
> b/modules/gui/macosx/playlist/VLCPlayerController.m
> index 463bee5946..d23770995f 100644
> --- a/modules/gui/macosx/playlist/VLCPlayerController.m
> +++ b/modules/gui/macosx/playlist/VLCPlayerController.m
> @@ -462,6 +462,7 @@ static const struct vlc_player_cbs player_callbacks
> = {
> cb_player_audio_delay_changed,
> cb_player_subtitle_delay_changed,
> cb_player_associated_subs_fps_changed,
> + NULL, //cb_player_dual_subtitles_enabled_changed
> cb_player_renderer_changed,
> cb_player_record_changed,
> NULL, //cb_player_signal_changed,
> diff --git a/modules/gui/qt/components/player_controller.cpp
> b/modules/gui/qt/components/player_controller.cpp
> index e42f7b5b9d..994ba6dae4 100644
> --- a/modules/gui/qt/components/player_controller.cpp
> +++ b/modules/gui/qt/components/player_controller.cpp
> @@ -818,6 +818,7 @@ static const struct vlc_player_cbs player_cbs = {
> on_player_audio_delay_changed,
> on_player_subtitle_delay_changed,
> on_player_associated_subs_fps_changed,
> + NULL, //on_player_dual_subtitles_enabled_changed,
> on_player_renderer_changed,
> on_player_record_changed,
> on_player_signal_changed,
> diff --git a/src/input/player.c b/src/input/player.c
> index 551b9928f1..66842997ac 100644
> --- a/src/input/player.c
> +++ b/src/input/player.c
> @@ -2241,6 +2241,26 @@ vlc_player_GetAssociatedSubsFPS(vlc_player_t
> *player)
> }
>
> void
> +vlc_player_SetDualSubtitlesEnabled(vlc_player_t *player, bool enabled)
> +{
> + struct vlc_player_input *input =
> vlc_player_get_input_locked(player);
> + if (input)
This does nothing if there is no input and the options will be forgotten once you play a next input.
> + {
> + var_SetBool(input->thread, "multiple-spus", enabled);
> + vlc_player_SendEvent(player,
> on_dual_subtitles_enabled_changed, enabled);
> + vlc_player_vout_OSDMessage(player, _("Dual subtitles %s"),
> + enabled ? _("enabled") :
> _("disabled"));
> + }
> +}
> +
> +bool
> +vlc_player_AreDualSubtitlesEnabled(vlc_player_t *player)
> +{
> + struct vlc_player_input *input =
> vlc_player_get_input_locked(player);
> + return input && var_GetBool(input->thread, "multiple-spus");
> +}
> +
> +void
> vlc_player_InvalidateNextMedia(vlc_player_t *player)
> {
> vlc_player_assert_locked(player);
> diff --git a/src/input/var.c b/src/input/var.c
> index 7822d66003..9110624eab 100644
> --- a/src/input/var.c
> +++ b/src/input/var.c
> @@ -726,6 +726,7 @@ void input_ConfigVarInit ( input_thread_t *p_input )
> var_Create( p_input, "video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT
> );
> var_Create( p_input, "audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT
> );
> var_Create( p_input, "spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
> + var_Create( p_input, "multiple-spus", VLC_VAR_BOOL);
>
> var_Create( p_input, "video-track",
> VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
> var_Create( p_input, "audio-track",
> VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 03a503e1ea..887d45301e 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -868,6 +868,8 @@ vlc_player_SetStartPaused
> vlc_player_SetSubtitleDelay
> vlc_player_SetSubtitleSync
> vlc_player_SetSubtitleTextScale
> +vlc_player_SetDualSubtitlesEnabled
> +vlc_player_AreDualSubtitlesEnabled
> vlc_player_SetTeletextEnabled
> vlc_player_SetTeletextTransparency
> vlc_player_SetTrackCategoryEnabled
> --
> 2.11.0
>
> _______________________________________________
> 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