[vlc-devel] [PATCH 1/5] add a new hotkey

Jean-Baptiste Kempf jb at videolan.org
Tue Oct 6 12:38:03 CEST 2015


This should be the last patch, and this needs de-duplication.

On 23 Sep, Aaron Wang wrote :
> ---
>  include/vlc_keys.h        |   2 +
>  modules/control/hotkeys.c | 196 +++++++++++++++++++++++++---------------------
>  src/config/keys.c         |   2 +
>  src/libvlc-module.c       |  13 +++
>  4 files changed, 125 insertions(+), 88 deletions(-)
> 
> diff --git a/include/vlc_keys.h b/include/vlc_keys.h
> index ea54950..8c058fa 100644
> --- a/include/vlc_keys.h
> +++ b/include/vlc_keys.h
> @@ -176,6 +176,8 @@ typedef enum vlc_action {
>      ACTIONID_SUBTITLE_TEXT_SCALE_NORMAL,
>      ACTIONID_SUBTITLE_TEXT_SCALE_UP,
>      ACTIONID_SUBTITLE_TEXT_SCALE_DOWN,
> +    ACTIONID_SUBTITLE_TRACK2,
> +    ACTIONID_SUBTITLE_TOGGLE2,
>      ACTIONID_INTF_TOGGLE_FSC,
>      ACTIONID_INTF_HIDE,
>      ACTIONID_INTF_BOSS,
> diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c
> index 7c4ee7f..2ffef6e 100644
> --- a/modules/control/hotkeys.c
> +++ b/modules/control/hotkeys.c
> @@ -73,6 +73,8 @@ static void DisplayRate ( vout_thread_t *, float );
>  static float AdjustRateFine( vlc_object_t *, const int );
>  static void ClearChannels  ( intf_thread_t *, vout_thread_t * );
>  
> +static void SubtitleTrack(input_thread_t* , vout_thread_t* , const char*, const char*,const char*);
> +static void SubtitleToggle(input_thread_t*, vout_thread_t*,  const char*, const char*, const char*);
>  #define DisplayMessage(vout, ...) \
>      do { \
>          if (vout) \
> @@ -556,97 +558,17 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
>                  var_FreeList( &list, &list2 );
>              }
>              break;
> +        case ACTIONID_SUBTITLE_TRACK2:
> +            SubtitleTrack(p_input, p_vout, "spu-es2", "spu-choice2","2nd ");
> +            break;
>          case ACTIONID_SUBTITLE_TRACK:
> -            if( p_input )
> -            {
> -                vlc_value_t val, list, list2;
> -                int i_count, i;
> -                var_Get( p_input, "spu-es", &val );
> -
> -                var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,
> -                            &list, &list2 );
> -                i_count = list.p_list->i_count;
> -                if( i_count <= 1 )
> -                {
> -                    DisplayMessage( p_vout, _("Subtitle track: %s"),
> -                                    _("N/A") );
> -                    var_FreeList( &list, &list2 );
> -                    break;
> -                }
> -                for( i = 0; i < i_count; i++ )
> -                {
> -                    if( val.i_int == list.p_list->p_values[i].i_int )
> -                    {
> -                        break;
> -                    }
> -                }
> -                /* value of spu-es was not in choices list */
> -                if( i == i_count )
> -                {
> -                    msg_Warn( p_input,
> -                              "invalid current subtitle track, selecting 0" );
> -                    i = 0;
> -                }
> -                else if( i == i_count - 1 )
> -                    i = 0;
> -                else
> -                    i++;
> -                var_SetInteger( p_input, "spu-es", list.p_list->p_values[i].i_int );
> -                var_SetInteger( p_input, "spu-choice", list.p_list->p_values[i].i_int );
> -                DisplayMessage( p_vout, _("Subtitle track: %s"),
> -                                list2.p_list->p_values[i].psz_string );
> -                var_FreeList( &list, &list2 );
> -            }
> +            SubtitleTrack(p_input, p_vout, "spu-es", "spu-choice","");
> +            break;
> +        case ACTIONID_SUBTITLE_TOGGLE2:
> +            SubtitleToggle(p_input, p_vout, "spu-es2", "spu-choice2","");
>              break;
>          case ACTIONID_SUBTITLE_TOGGLE:
> -            if( p_input )
> -            {
> -                vlc_value_t list, list2;
> -                int i_count, i_sel_index, i_sel_id, i_old_id, i_new_index;
> -                i_old_id = var_GetInteger( p_input, "spu-es" );
> -                i_sel_id = var_GetInteger( p_input, "spu-choice" );
> -
> -                var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,
> -                            &list, &list2 );
> -                i_count = list.p_list->i_count;
> -                if( i_count <= 1 )
> -                {
> -                    DisplayMessage( p_vout, _("Subtitle track: %s"),
> -                                    _("N/A") );
> -                    var_FreeList( &list, &list2 );
> -                    break;
> -                }
> -                for( i_sel_index = 0; i_sel_index < i_count; i_sel_index++ )
> -                {
> -                    if( i_sel_id == list.p_list->p_values[i_sel_index].i_int )
> -                    {
> -                        break;
> -                    }
> -                }
> -                /* if there is nothing to toggle choose the first track */
> -                if( !i_sel_index ) {
> -                    i_sel_index = 1;
> -                    i_sel_id = list.p_list->p_values[1].i_int;
> -                    var_SetInteger( p_input, "spu-choice", i_sel_id );
> -                }
> -
> -                i_new_index = 0;
> -                if( i_old_id != i_sel_id )
> -                {
> -                    if( i_sel_index >= i_count )
> -                    {
> -                        var_SetInteger( p_input, "spu-choice", list.p_list->p_values[0].i_int );
> -                    }
> -                    else
> -                    {
> -                        i_new_index = i_sel_index;
> -                    }
> -                }
> -                var_SetInteger( p_input, "spu-es", list.p_list->p_values[i_new_index].i_int );
> -                DisplayMessage( p_vout, _("Subtitle track: %s"),
> -                                list2.p_list->p_values[i_new_index].psz_string );
> -                var_FreeList( &list, &list2 );
> -            }
> +            SubtitleToggle(p_input, p_vout, "spu-es", "spu-choice","");
>              break;
>          case ACTIONID_PROGRAM_SID_NEXT:
>          case ACTIONID_PROGRAM_SID_PREV:
> @@ -1276,3 +1198,101 @@ static void ClearChannels( intf_thread_t *p_intf, vout_thread_t *p_vout )
>          vout_FlushSubpictureChannel( p_vout, p_intf->p_sys->slider_chan );
>      }
>  }
> +
> +static void SubtitleTrack(input_thread_t* p_input, vout_thread_t * p_vout,
> +                      const char* spu, const char* spuchoice, const char* prompt  )
> +{
> +    if( p_input == NULL )
> +        return;
> +    vlc_value_t val, list, list2;
> +    int i_count, i;
> +    var_Get( p_input, spu, &val );
> +
> +    var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,
> +                &list, &list2 );
> +    i_count = list.p_list->i_count;
> +    if( i_count <= 1 )
> +    {
> +        DisplayMessage( p_vout, _("%sSubtitle track: %s"),prompt,
> +                        _("N/A") );
> +        var_FreeList( &list, &list2 );
> +        return;
> +    }
> +    for( i = 0; i < i_count; i++ )
> +    {
> +        if( val.i_int == list.p_list->p_values[i].i_int )
> +        {
> +            break;
> +        }
> +    }
> +    /* value of spu-es was not in choices list */
> +    if( i == i_count )
> +    {
> +        msg_Warn( p_input,
> +                  "invalid current subtitle track, selecting 0" );
> +        i = 0;
> +    }
> +    else if( i == i_count - 1 )
> +        i = 0;
> +    else
> +        i++;
> +    var_SetInteger( p_input, spu, list.p_list->p_values[i].i_int );
> +    var_SetInteger( p_input, spuchoice, list.p_list->p_values[i].i_int );
> +    DisplayMessage( p_vout, _("%sSubtitle track: %s"),prompt,
> +                    list2.p_list->p_values[i].psz_string );
> +    var_FreeList( &list, &list2 );
> +}
> +
> +static void SubtitleToggle(input_thread_t* p_input, vout_thread_t * p_vout,
> +                    const char* spues, const char* spuchoice, const char* prompt  )
> +{
> +    if( p_input == NULL )
> +        return;
> +    vlc_value_t list, list2;
> +    int i_count, i_sel_index, i_sel_id, i_old_id, i_new_index;
> +    i_old_id = var_GetInteger( p_input, spues );//id is always changing
> +    i_sel_id = var_GetInteger( p_input, spuchoice );
> +
> +    var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,
> +                &list, &list2 );
> +    i_count = list.p_list->i_count;
> +
> +    if( i_count <= 1 )// o is disable, >=1 are real tracks
> +    {
> +        DisplayMessage( p_vout, _("%sSubtitle track: %s"),prompt,
> +                        _("N/A") );
> +        var_FreeList( &list, &list2 );
> +        return;
> +    }
> +    for( i_sel_index = 0; i_sel_index < i_count; i_sel_index++ )
> +    {
> +        if( i_sel_id == list.p_list->p_values[i_sel_index].i_int )
> +        {
> +            break;
> +        }
> +    }
> +    /* if there is nothing to toggle choose the first track */
> +    if( !i_sel_index )
> +    {
> +        i_sel_index = 1;
> +        i_sel_id = list.p_list->p_values[1].i_int;
> +        var_SetInteger(p_input, spuchoice, i_sel_id);
> +    }
> +
> +    i_new_index = 0;
> +    if( i_old_id != i_sel_id )
> +    {
> +        if( i_sel_index >= i_count )
> +        {
> +             var_SetInteger( p_input, spuchoice, list.p_list->p_values[0].i_int );
> +        }
> +        else
> +        {
> +             i_new_index = i_sel_index;
> +        }
> +    }
> +    var_SetInteger( p_input, spues, list.p_list->p_values[i_new_index].i_int );
> +    DisplayMessage( p_vout, _("%sSubtitle track: %s"), prompt,
> +                            list2.p_list->p_values[i_new_index].psz_string );
> +    var_FreeList( &list, &list2 );
> +}
> diff --git a/src/config/keys.c b/src/config/keys.c
> index 94e5cf5..dfd300f 100644
> --- a/src/config/keys.c
> +++ b/src/config/keys.c
> @@ -358,6 +358,8 @@ static const struct action actions[] =
>      { "subtitle-text-scale-up", ACTIONID_SUBTITLE_TEXT_SCALE_UP, },
>      { "subtitle-toggle", ACTIONID_SUBTITLE_TOGGLE, },
>      { "subtitle-track", ACTIONID_SUBTITLE_TRACK, },
> +    { "subtitle-track2", ACTIONID_SUBTITLE_TRACK2, },
> +    { "subtitle2-toggle", ACTIONID_SUBTITLE_TOGGLE2, },//2 is larger
>      { "title-next", ACTIONID_TITLE_NEXT, },
>      { "title-prev", ACTIONID_TITLE_PREV, },
>      { "toggle-autoscale", ACTIONID_TOGGLE_AUTOSCALE, },
> diff --git a/src/libvlc-module.c b/src/libvlc-module.c
> index a13093d..0d6f5af 100644
> --- a/src/libvlc-module.c
> +++ b/src/libvlc-module.c
> @@ -574,6 +574,7 @@ static const char *const ppsz_clock_descriptions[] =
>      "(from 0 to n).")
>  
>  #define INPUT_SUBTRACK_TEXT N_("Subtitle track")
> +#define INPUT_SUBTRACK2_TEXT N_("2nd Subtitle track")
>  #define INPUT_SUBTRACK_LONGTEXT N_( \
>      "Stream number of the subtitle track to use " \
>      "(from 0 to n).")
> @@ -1336,8 +1337,10 @@ static const char *const mouse_wheel_texts[] = {
>  #define AUDIO_TRACK_KEY_TEXT N_("Cycle audio track")
>  #define AUDIO_TRACK_KEY_LONGTEXT N_("Cycle through the available audio tracks(languages).")
>  #define SUBTITLE_TRACK_KEY_TEXT N_("Cycle subtitle track")
> +#define SUBTITLE_TRACK2_KEY_TEXT N_("Cycle 2nd subtitle track")
>  #define SUBTITLE_TRACK_KEY_LONGTEXT N_("Cycle through the available subtitle tracks.")
>  #define SUBTITLE_TOGGLE_KEY_TEXT N_("Toggle subtitles")
> +#define SUBTITLE2_TOGGLE_KEY_TEXT N_("Toggle 2nd subtitles")
>  #define SUBTITLE_TOGGLE_KEY_LONGTEXT N_("Toggle subtitle track visibility.")
>  #define PROGRAM_SID_NEXT_KEY_TEXT N_("Cycle next program Service ID")
>  #define PROGRAM_SID_NEXT_KEY_LONGTEXT N_("Cycle through the available next program Service IDs (SIDs).")
> @@ -1658,6 +1661,9 @@ vlc_module_begin ()
>      add_integer( "sub-track", -1,
>                   INPUT_SUBTRACK_TEXT, INPUT_SUBTRACK_LONGTEXT, true )
>          change_safe ()
> +    add_integer( "sub-track2", -1,
> +                 INPUT_SUBTRACK2_TEXT, INPUT_SUBTRACK_LONGTEXT, true )
> +        change_safe ()
>      add_string( "audio-language", "",
>                   INPUT_AUDIOTRACK_LANG_TEXT, INPUT_AUDIOTRACK_LANG_LONGTEXT,
>                    false )
> @@ -2298,6 +2304,8 @@ vlc_module_begin ()
>  #   define KEY_AUDIO_TRACK        "b"
>  #   define KEY_SUBTITLE_TRACK     "v"
>  #   define KEY_SUBTITLE_TOGGLE    "Shift+v"
> +#   define KEY_SUBTITLE_TRACK2    "Ctrl+v"
> +#   define KEY_SUBTITLE_TOGGLE2   NULL
>  #   define KEY_PROGRAM_SID_NEXT   "x"
>  #   define KEY_PROGRAM_SID_PREV   "Shift+x"
>  #   define KEY_ASPECT_RATIO       "a"
> @@ -2470,6 +2478,11 @@ vlc_module_begin ()
>               SUBTITLE_TRACK_KEY_TEXT, SUBTITLE_TRACK_KEY_LONGTEXT, false )
>      add_key( "key-subtitle-toggle", KEY_SUBTITLE_TOGGLE,
>               SUBTITLE_TOGGLE_KEY_TEXT, SUBTITLE_TOGGLE_KEY_LONGTEXT, false )
> +    add_key( "key-subtitle-track2", KEY_SUBTITLE_TRACK2,
> +             SUBTITLE_TRACK2_KEY_TEXT, SUBTITLE_TRACK_KEY_LONGTEXT, false )
> +    add_key( "key-subtitle2-toggle", KEY_SUBTITLE_TOGGLE2,
> +             SUBTITLE2_TOGGLE_KEY_TEXT, SUBTITLE_TOGGLE_KEY_LONGTEXT, false )
> +
>      add_key( "key-program-sid-next", KEY_PROGRAM_SID_NEXT,
>               PROGRAM_SID_NEXT_KEY_TEXT, PROGRAM_SID_NEXT_KEY_LONGTEXT, false )
>      add_key( "key-program-sid-prev", KEY_PROGRAM_SID_PREV,
> -- 
> 1.9.1
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel

-- 
With my kindest regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device


More information about the vlc-devel mailing list