[vlc-devel] [PATCH 2/2] Deinterlace: Add hotkey to cycle through deinterlace modes.

Zoran Turalija zoran.turalija at gmail.com
Thu Aug 23 15:03:36 CEST 2012


Allow easier cycling through available deinterlace modes
instead of painfully going through menus.
---
 include/vlc_keys.h        |    1 +
 modules/control/hotkeys.c |   36 ++++++++++++++++++++++++++++++++++++
 src/config/keys.c         |    1 +
 src/libvlc-module.c       |    6 ++++++
 4 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/include/vlc_keys.h b/include/vlc_keys.h
index a04847c..5451793 100644
--- a/include/vlc_keys.h
+++ b/include/vlc_keys.h
@@ -164,6 +164,7 @@ typedef enum vlc_action {
     ACTIONID_ASPECT_RATIO,
     ACTIONID_CROP,
     ACTIONID_DEINTERLACE,
+    ACTIONID_DEINTERLACE_MODE,
     ACTIONID_ZOOM,
     ACTIONID_UNZOOM,
     ACTIONID_CROP_TOP,
diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c
index 25af282..9d39a8a 100644
--- a/modules/control/hotkeys.c
+++ b/modules/control/hotkeys.c
@@ -670,6 +670,42 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
                     free( psz_mode );
                 }
             }
+            else if( i_action == ACTIONID_DEINTERLACE_MODE && p_vout )
+            {
+                char *psz_mode = var_GetString( p_vout, "deinterlace-mode" );
+                vlc_value_t vlist, tlist;
+                if( psz_mode && !var_Change( p_vout, "deinterlace-mode", VLC_VAR_GETCHOICES, &vlist, &tlist ) >= 0 )
+                {
+                    const char *psz_text = NULL;
+                    int i;
+                    for( i = 0; i < vlist.p_list->i_count; i++ )
+                    {
+                        if( !strcmp( vlist.p_list->p_values[i].psz_string, psz_mode ) )
+                        {
+                            i++;
+                            break;
+                        }
+                    }
+                    if( i == vlist.p_list->i_count ) i = 0;
+                    psz_text = tlist.p_list->p_values[i].psz_string;
+                    var_SetString( p_vout, "deinterlace-mode", vlist.p_list->p_values[i].psz_string );
+
+                    int i_deinterlace = var_GetInteger( p_vout, "deinterlace" );
+                    if( i_deinterlace != 0 )
+                    {
+                      DisplayMessage( p_vout, SPU_DEFAULT_CHANNEL,
+                                      "%s (%s)", _("Deinterlace on"), psz_text ? psz_text : psz_mode );
+                    }
+                    else
+                    {
+                      DisplayMessage( p_vout, SPU_DEFAULT_CHANNEL,
+                                      "%s (%s)", _("Deinterlace off"), psz_text ? psz_text : psz_mode );
+                    }
+
+                    var_FreeList( &vlist, &tlist );
+                }
+                free( psz_mode );
+            }
             else if( ( i_action == ACTIONID_ZOOM ||
                        i_action == ACTIONID_UNZOOM ) && p_vout )
             {
diff --git a/src/config/keys.c b/src/config/keys.c
index 2588295..453ee4a 100644
--- a/src/config/keys.c
+++ b/src/config/keys.c
@@ -263,6 +263,7 @@ static const struct action actions[] =
     { "crop-top", ACTIONID_CROP_TOP, },
     { "decr-scalefactor", ACTIONID_SCALE_DOWN, },
     { "deinterlace", ACTIONID_DEINTERLACE, },
+    { "deinterlace-mode", ACTIONID_DEINTERLACE_MODE, },
     { "disc-menu", ACTIONID_DISC_MENU, },
     { "faster", ACTIONID_FASTER, },
     { "frame-next", ACTIONID_FRAME_NEXT, },
diff --git a/src/libvlc-module.c b/src/libvlc-module.c
index 3746274..2d86f1a 100644
--- a/src/libvlc-module.c
+++ b/src/libvlc-module.c
@@ -1379,6 +1379,8 @@ static const char *const ppsz_albumart_descriptions[] =
 #define SCALE_DOWN_KEY_LONGTEXT N_("Decrease scale factor.")
 #define DEINTERLACE_KEY_TEXT N_("Toggle deinterlacing")
 #define DEINTERLACE_KEY_LONGTEXT N_("Activate or deactivate deinterlacing.")
+#define DEINTERLACE_MODE_KEY_TEXT N_("Cycle deinterlace modes")
+#define DEINTERLACE_MODE_KEY_LONGTEXT N_("Cycle through available deinterlace modes.")
 #define INTF_TOGGLE_FSC_KEY_TEXT N_("Show controller in fullscreen")
 #define INTF_SHOW_KEY_TEXT N_("Show interface")
 #define INTF_SHOW_KEY_LONGTEXT N_("Raise the interface above all other windows.")
@@ -2211,6 +2213,7 @@ vlc_module_begin ()
 #   define KEY_SCALE_UP           "Alt+o"
 #   define KEY_SCALE_DOWN         "Shift+Alt+o"
 #   define KEY_DEINTERLACE        "d"
+#   define KEY_DEINTERLACE_MODE   "Shift+d"
 #   define KEY_INTF_TOGGLE_FSC    "i"
 #   define KEY_INTF_BOSS          NULL
 #   define KEY_DISC_MENU          "Ctrl+m"
@@ -2329,6 +2332,7 @@ vlc_module_begin ()
 #   define KEY_SCALE_UP           "Alt+o"
 #   define KEY_SCALE_DOWN         "Alt+Shift+o"
 #   define KEY_DEINTERLACE        "d"
+#   define KEY_DEINTERLACE_MODE   "Shift+d"
 #   define KEY_INTF_TOGGLE_FSC    "i"
 #   define KEY_INTF_BOSS          NULL
 #   define KEY_DISC_MENU          "Shift+m"
@@ -2501,6 +2505,8 @@ vlc_module_begin ()
              SCALE_DOWN_KEY_TEXT, SCALE_DOWN_KEY_LONGTEXT, false )
     add_key( "key-deinterlace", KEY_DEINTERLACE,
              DEINTERLACE_KEY_TEXT, DEINTERLACE_KEY_LONGTEXT, false )
+    add_key( "key-deinterlace-mode", KEY_DEINTERLACE_MODE,
+             DEINTERLACE_MODE_KEY_TEXT, DEINTERLACE_MODE_KEY_LONGTEXT, false )
     add_key( "key-intf-show", KEY_INTF_TOGGLE_FSC,
              INTF_TOGGLE_FSC_KEY_TEXT, INTF_TOGGLE_FSC_KEY_TEXT, false )
     add_obsolete_inner( "key-intf-hide", CONFIG_ITEM_KEY )
-- 
1.7.5.4


-- 
Kind regards,
Zoran Turalija



More information about the vlc-devel mailing list