]> git.sesse.net Git - vlc/blobdiff - src/libvlc-module.c
Fix spelling.
[vlc] / src / libvlc-module.c
index 41b841ace53225802b93e9f36b0370e214ba6ba9..80962bee561a8550c00f94a68b83868091c70b29 100644 (file)
@@ -36,6 +36,7 @@
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
+#include <vlc_cpu.h>
 #include "libvlc.h"
 
 //#define Nothing here, this is just to prevent update-po from being stupid
@@ -72,6 +73,7 @@ static const char *const ppsz_language[] =
     "lt",
     "mn",
     "ms",
+    "nn",
     "kk",
     "km",
     "oc",
@@ -82,6 +84,7 @@ static const char *const ppsz_language[] =
     "ro",
     "ru",
     "zh_CN",
+    "si",
     "sr",
     "sk",
     "sl",
@@ -91,6 +94,7 @@ static const char *const ppsz_language[] =
     "tr",
     "uk",
     "vi",
+    "wa",
 };
 
 static const char *const ppsz_language_text[] =
@@ -122,6 +126,7 @@ static const char *const ppsz_language_text[] =
     "lietuvių",
     "Монгол хэл",
     "Melayu",
+    "Nynorsk",
     "Қазақ тілі",
     "ភាសាខ្មែរ",
     "Occitan",
@@ -132,6 +137,7 @@ static const char *const ppsz_language_text[] =
     "Română",
     "Русский",
     "简体中文",
+    "සිංහල",
     "српски",
     "Slovensky",
     "slovenščina",
@@ -141,6 +147,7 @@ static const char *const ppsz_language_text[] =
     "Türkçe",
     "украї́нська мо́ва",
     "tiếng Việt",
+    "Walon",
 };
 #endif
 
@@ -174,7 +181,7 @@ static const char *const ppsz_snap_formats[] =
 #define EXTRAINTF_LONGTEXT N_( \
     "You can select \"additional interfaces\" for VLC. " \
     "They will be launched in the background in addition to the default " \
-    "interface. Use a comma separated list of interface modules. (common " \
+    "interface. Use a colon separated list of interface modules. (common " \
     "values are \"rc\" (remote control), \"http\", \"gestures\" ...)")
 
 #define CONTROL_TEXT N_("Control interfaces")
@@ -192,7 +199,7 @@ static const char *const ppsz_snap_formats[] =
     "This is a ',' separated string, each objects should be prefixed by " \
     "a '+' or a '-' to respectively enable or disable it. The keyword " \
     "'all' refers to all objects. Objects can be refered to by their " \
-    "type or module name. Rules applying to named objects take precendence " \
+    "type or module name. Rules applying to named objects take precedence " \
     "over rules applying to object types. Note that you still need to " \
     "use -vvv to actually display debug message.")
 
@@ -277,14 +284,14 @@ static const char *const ppsz_snap_formats[] =
 #if !defined( __APPLE__ )
 #define AOUT_RESAMP_TEXT N_("High quality audio resampling")
 #define AOUT_RESAMP_LONGTEXT N_( \
-    "This uses a high quality audio resampling algorithm. High quality "\
+    "This uses a high quality audio resampling algorithm. High quality " \
     "audio resampling can be processor intensive so you can " \
     "disable it and a cheaper resampling algorithm will be used instead.")
 #endif
 
 #define DESYNC_TEXT N_("Audio desynchronization compensation")
 #define DESYNC_LONGTEXT N_( \
-    "This delays the audio output. The delay must be given in milliseconds." \
+    "This delays the audio output. The delay must be given in milliseconds. " \
     "This can be handy if you notice a lag between the video and the audio.")
 
 #define MULTICHA_TEXT N_("Audio output channels mode")
@@ -339,9 +346,9 @@ static const char *const ppsz_force_dolby_descriptions[] = {
     "Protect against sound clipping" )
 
 #define AUDIO_TIME_STRETCH_TEXT N_( \
-    "Enable time streching audio" )
+    "Enable time stretching audio" )
 #define AUDIO_TIME_STRETCH_LONGTEXT N_( \
-    "This allows to play audio at lower or higher speed without" \
+    "This allows to play audio at lower or higher speed without " \
     "affecting the audio pitch" )
 
 
@@ -420,6 +427,11 @@ static const char *const ppsz_align_descriptions[] =
 #define EMBEDDED_LONGTEXT N_( \
     "Embed the video output in the main interface." )
 
+#define DISPLAY_TEXT N_("X11 display")
+#define DISPLAY_LONGTEXT N_( \
+    "X11 hardware display to use. By default VLC will " \
+    "use the value of the DISPLAY environment variable.")
+
 #define FULLSCREEN_TEXT N_("Fullscreen video output")
 #define FULLSCREEN_LONGTEXT N_( \
     "Start video in fullscreen mode" )
@@ -433,6 +445,11 @@ static const char *const ppsz_align_descriptions[] =
 #define VIDEO_ON_TOP_LONGTEXT N_( \
     "Always place the video window on top of other windows." )
 
+#define WALLPAPER_TEXT N_("Enable wallpaper mode ")
+#define WALLPAPER_LONGTEXT N_( \
+    "The wallpaper mode allows you to display the video as the desktop " \
+    "background." )
+
 #define VIDEO_TITLE_SHOW_TEXT N_("Show media title on video")
 #define VIDEO_TITLE_SHOW_LONGTEXT N_( \
     "Display the title of the video on top of the movie.")
@@ -497,7 +514,7 @@ static const char *const ppsz_pos_descriptions[] =
 #define VIDEO_FILTER_TEXT N_("Video filter module")
 #define VIDEO_FILTER_LONGTEXT N_( \
     "This adds post-processing filters to enhance the " \
-    "picture quality, for instance deinterlacing, or distort" \
+    "picture quality, for instance deinterlacing, or distort " \
     "the video.")
 
 #define SNAP_PATH_TEXT N_("Video snapshot directory (or filename)")
@@ -594,15 +611,13 @@ static const char *const ppsz_pos_descriptions[] =
     "This avoids flooding the message log with debug output from the " \
     "video output synchronization mechanism.")
 
-#define VOUT_EVENT_TEXT N_("key and mouse event handling at vout level.")
-#define VOUT_EVENT_LONGTEXT N_( \
-    "This parameter accepts values : 1 (full event handling support), " \
-    "2 (event handling only for fullscreen) or 3 (No event handling). "  \
-    "Full event handling support is the default value.")
+#define KEYBOARD_EVENTS_TEXT N_("Key press events")
+#define KEYBOARD_EVENTS_LONGTEXT N_( \
+    "This enables VLC hotkeys from the (non-embedded) video window." )
 
-static const int pi_vout_event_values[] = { 1, 2, 3 };
-static const char *const ppsz_vout_event_descriptions[] =
-     { N_("Full support"), N_("Fullscreen-only"), N_("None") };
+#define MOUSE_EVENTS_TEXT N_("Mouse events")
+#define MOUSE_EVENTS_LONGTEXT N_( \
+    "This enables handling of mouse clicks on the video." )
 
 /*****************************************************************************
  * Input
@@ -625,6 +640,11 @@ static const char *const ppsz_vout_event_descriptions[] =
     "real-time sources. Use this if you experience jerky playback of " \
     "network streams.")
 
+#define CLOCK_JITTER_TEXT N_("Clock jitter")
+#define CLOCK_JITTER_LONGTEXT N_( \
+    "It tells the clock algorithms what is the maximal input jitter that " \
+    "is considered valid and can be compensated (in milliseconds)" )
+
 #define NETSYNC_TEXT N_("Network synchronisation" )
 #define NETSYNC_LONGTEXT N_( "This allows you to remotely " \
         "synchronise clocks for server and client. The detailed settings " \
@@ -692,12 +712,12 @@ static const char *const ppsz_clock_descriptions[] =
 #define INPUT_AUDIOTRACK_LANG_TEXT N_("Audio language")
 #define INPUT_AUDIOTRACK_LANG_LONGTEXT N_( \
     "Language of the audio track you want to use " \
-    "(comma separated, two or three letter country code).")
+    "(comma separated, two or three letter country code, you may use 'none' to avoid a fallback to another language).")
 
 #define INPUT_SUBTRACK_LANG_TEXT N_("Subtitle language")
 #define INPUT_SUBTRACK_LANG_LONGTEXT N_( \
     "Language of the subtitle track you want to use " \
-    "(comma separated, two or three letters country code).")
+    "(comma separated, two or three letters country code, you may use 'any' as a fallback).")
 
 /// \todo Document how to find it
 #define INPUT_AUDIOTRACK_ID_TEXT N_("Audio track ID")
@@ -728,6 +748,10 @@ static const char *const ppsz_clock_descriptions[] =
 #define INPUT_FAST_SEEK_LONGTEXT N_( \
     "Favor speed over precision while seeking" )
 
+#define INPUT_RATE_TEXT N_("Playback speed")
+#define INPUT_RATE_LONGTEXT N_( \
+    "This defines the playback speed (nominal speed is 1.0)." )
+
 #define INPUT_LIST_TEXT N_("Input list")
 #define INPUT_LIST_LONGTEXT N_( \
     "You can give a comma-separated list " \
@@ -751,7 +775,7 @@ static const char *const ppsz_clock_descriptions[] =
 
 #define INPUT_RECORD_NATIVE_TEXT N_("Prefer native stream recording")
 #define INPUT_RECORD_NATIVE_LONGTEXT N_( \
-    "When possible, the input stream will be recorded instead of using" \
+    "When possible, the input stream will be recorded instead of using " \
     "the stream output module" )
 
 #define INPUT_TIMESHIFT_PATH_TEXT N_("Timeshift directory")
@@ -830,24 +854,12 @@ static const char *const ppsz_clock_descriptions[] =
 #endif
 
 #define VCD_DEV_TEXT N_("VCD device")
-#ifdef HAVE_VCDX
-#define VCD_DEV_LONGTEXT N_( \
-    "This is the default VCD device to use. " \
-    "If you don't specify anything, we'll scan for a suitable CD-ROM device." )
-#else
 #define VCD_DEV_LONGTEXT N_( \
     "This is the default VCD device to use." )
-#endif
 
 #define CDAUDIO_DEV_TEXT N_("Audio CD device")
-#ifdef HAVE_CDDAX
-#define CDAUDIO_DEV_LONGTEXT N_( \
-    "This is the default Audio CD device to use. " \
-    "If you don't specify anything, we'll scan for a suitable CD-ROM device." )
-#else
 #define CDAUDIO_DEV_LONGTEXT N_( \
     "This is the default Audio CD device to use." )
-#endif
 
 #define IPV6_TEXT N_("Force IPv6")
 #define IPV6_LONGTEXT N_( \
@@ -941,7 +953,7 @@ static const char *const ppsz_clock_descriptions[] =
 #define SOUT_TEXT N_("Default stream output chain")
 #define SOUT_LONGTEXT N_( \
     "You can enter here a default stream output chain. Refer to "\
-    "the documentation to learn how to build such chains." \
+    "the documentation to learn how to build such chains. " \
     "Warning: this chain will be enabled for all streams." )
 
 #define SOUT_ALL_TEXT N_("Enable streaming of all ES")
@@ -1041,6 +1053,20 @@ static const char *const ppsz_clock_descriptions[] =
     "If your processor supports the SSE3 instructions set, VLC can take " \
     "advantage of them.")
 
+#define SSSE3_TEXT N_("Enable CPU SSSE3 support")
+#define SSSE3_LONGTEXT N_( \
+    "If your processor supports the SSSE3 instructions set, VLC can take " \
+    "advantage of them.")
+
+#define SSE4_1_TEXT N_("Enable CPU SSE4.1 support")
+#define SSE4_1_LONGTEXT N_( \
+    "If your processor supports the SSE4.1 instructions set, VLC can take " \
+    "advantage of them.")
+
+#define SSE4_2_TEXT N_("Enable CPU SSE4.2 support")
+#define SSE4_2_LONGTEXT N_( \
+    "If your processor supports the SSE4.2 instructions set, VLC can take " \
+    "advantage of them.")
 
 #define ALTIVEC_TEXT N_("Enable CPU AltiVec support")
 #define ALTIVEC_LONGTEXT N_( \
@@ -1098,6 +1124,10 @@ static const char *const ppsz_clock_descriptions[] =
     "Additional path for VLC to look for its modules. You can add " \
     "several paths by concatenating them using \" PATH_SEP \" as separator")
 
+#define DATA_PATH_TEXT N_("Data search path")
+#define DATA_PATH_LONGTEXT N_( \
+    "Override the default data/share search path.")
+
 #define VLM_CONF_TEXT N_("VLM configuration file")
 #define VLM_CONF_LONGTEXT N_( \
     "Read a VLM configuration file as soon as VLM is started." )
@@ -1198,7 +1228,7 @@ static const char *const ppsz_albumart_descriptions[] =
 #define SD_TEXT N_( "Services discovery modules")
 #define SD_LONGTEXT N_( \
      "Specifies the services discovery modules to load, separated by " \
-     "semi-colons. Typical values are sap, hal, ..." )
+     "colons. Typical values are sap, hal, ..." )
 
 #define RANDOM_TEXT N_("Play files randomly forever")
 #define RANDOM_LONGTEXT N_( \
@@ -1342,6 +1372,10 @@ static const char *const ppsz_albumart_descriptions[] =
 #define SUBDELAY_UP_KEY_LONGTEXT N_("Select the key to increase the subtitle delay.")
 #define SUBDELAY_DOWN_KEY_TEXT N_("Subtitle delay down")
 #define SUBDELAY_DOWN_KEY_LONGTEXT N_("Select the key to decrease the subtitle delay.")
+#define SUBPOS_UP_KEY_TEXT N_("Subtitle position up")
+#define SUBPOS_UP_KEY_LONGTEXT N_("Select the key to move subtitles higher.")
+#define SUBPOS_DOWN_KEY_TEXT N_("Subtitle position down")
+#define SUBPOS_DOWN_KEY_LONGTEXT N_("Select the key to move subtitles lower.")
 #define AUDIODELAY_UP_KEY_TEXT N_("Audio delay up")
 #define AUDIODELAY_UP_KEY_LONGTEXT N_("Select the key to increase the audio delay.")
 #define AUDIODELAY_DOWN_KEY_TEXT N_("Audio delay down")
@@ -1455,8 +1489,7 @@ static const char *const ppsz_albumart_descriptions[] =
 
 #define WALLPAPER_KEY_TEXT N_("Toggle wallpaper mode in video output")
 #define WALLPAPER_KEY_LONGTEXT N_( \
-    "Toggle wallpaper mode in video output. Only works with the directx " \
-    "video output for the time being." )
+    "Toggle wallpaper mode in video output." )
 
 #define MENU_ON_KEY_TEXT N_("Display OSD menu on top of video output")
 #define MENU_ON_KEY_LONGTEXT N_("Display OSD menu on top of video output")
@@ -1545,7 +1578,7 @@ vlc_module_begin ()
                             VOLUME_STEP_LONGTEXT, true )
     add_integer( "aout-rate", -1, NULL, AOUT_RATE_TEXT,
                  AOUT_RATE_LONGTEXT, true )
-#if !defined( __APPLE__ )
+#if HAVE_FPU && !defined( __APPLE__ )
     add_bool( "hq-resampling", 1, NULL, AOUT_RESAMP_TEXT,
               AOUT_RESAMP_LONGTEXT, true )
 #endif
@@ -1568,7 +1601,7 @@ vlc_module_begin ()
     add_bool( "audio-replay-gain-peak-protection", true, NULL,
               AUDIO_REPLAY_GAIN_PEAK_PROTECTION_TEXT, AUDIO_REPLAY_GAIN_PEAK_PROTECTION_LONGTEXT, true )
 
-    add_bool( "audio-time-stretch", true, NULL,
+    add_bool( "audio-time-stretch", HAVE_FPU, NULL,
               AUDIO_TIME_STRETCH_TEXT, AUDIO_TIME_STRETCH_LONGTEXT, false )
 
     set_subcategory( SUBCAT_AUDIO_AOUT )
@@ -1592,7 +1625,12 @@ vlc_module_begin ()
         change_safe ()
     add_bool( "grayscale", 0, NULL, GRAYSCALE_TEXT,
               GRAYSCALE_LONGTEXT, true )
-    add_bool( "fullscreen", 0, NULL, FULLSCREEN_TEXT,
+#if defined (HAVE_MAEMO)
+# define FULLSCREEN_DEFAULT true
+#else
+# define FULLSCREEN_DEFAULT false
+#endif
+    add_bool( "fullscreen", FULLSCREEN_DEFAULT, NULL, FULLSCREEN_TEXT,
               FULLSCREEN_LONGTEXT, false )
         change_short('f')
         change_safe ()
@@ -1601,6 +1639,12 @@ vlc_module_begin ()
 #ifdef __APPLE__
        add_deprecated_alias( "macosx-embedded" ) /*deprecated since 0.9.0 */
 #endif
+    add_string( "x11-display", NULL, NULL,
+                DISPLAY_TEXT, DISPLAY_LONGTEXT, true )
+        add_deprecated_alias( "xvideo-display" ) /* deprecated since 1.1.0 */
+        add_deprecated_alias( "glx-display" )
+    add_bool( "xlib", true, NULL, "", "", true )
+        change_private ()
     add_bool( "drop-late-frames", 1, NULL, DROP_LATE_FRAMES_TEXT,
               DROP_LATE_FRAMES_LONGTEXT, true )
     /* Used in vout_synchro */
@@ -1608,15 +1652,23 @@ vlc_module_begin ()
               SKIP_FRAMES_LONGTEXT, true )
     add_bool( "quiet-synchro", 0, NULL, QUIET_SYNCHRO_TEXT,
               QUIET_SYNCHRO_LONGTEXT, true )
-    add_integer( "vout-event", 1, NULL, VOUT_EVENT_TEXT, VOUT_EVENT_LONGTEXT, true )
-        change_safe()
-        change_integer_list( pi_vout_event_values, ppsz_vout_event_descriptions, NULL )
-        add_deprecated_alias( "x11-event" ) /* renamed since 1.0.0 */
+    add_bool( "keyboard-events", true, NULL, KEYBOARD_EVENTS_TEXT,
+              KEYBOARD_EVENTS_LONGTEXT, true )
+    add_bool( "mouse-events", true, NULL, MOUSE_EVENTS_TEXT,
+              MOUSE_EVENTS_LONGTEXT, true )
+    add_obsolete_integer( "vout-event" ) /* deprecated since 1.1.0 */
+    add_obsolete_integer( "x11-event" ) /* renamed since 1.0.0 */
 #ifndef __APPLE__
     add_bool( "overlay", 1, NULL, OVERLAY_TEXT, OVERLAY_LONGTEXT, false )
+        change_safe()
 #endif
     add_bool( "video-on-top", 0, NULL, VIDEO_ON_TOP_TEXT,
               VIDEO_ON_TOP_LONGTEXT, false )
+    add_bool( "video-wallpaper", false, NULL, WALLPAPER_TEXT,
+              WALLPAPER_LONGTEXT, false )
+#ifdef WIN32
+        add_deprecated_alias( "directx-wallpaper" )
+#endif
     add_bool( "disable-screensaver", true, NULL, SS_TEXT, SS_LONGTEXT,
               true )
 
@@ -1655,9 +1707,9 @@ vlc_module_begin ()
         change_safe ()
     add_integer( "height", -1, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true )
         change_safe ()
-    add_integer( "video-x", -1, NULL, VIDEOX_TEXT, VIDEOX_LONGTEXT, true )
+    add_integer( "video-x", 0, NULL, VIDEOX_TEXT, VIDEOX_LONGTEXT, true )
         change_safe ()
-    add_integer( "video-y", -1, NULL, VIDEOY_TEXT, VIDEOY_LONGTEXT, true )
+    add_integer( "video-y", 0, NULL, VIDEOY_TEXT, VIDEOY_LONGTEXT, true )
         change_safe ()
     add_string( "crop", NULL, NULL, CROP_TEXT, CROP_LONGTEXT, false )
         change_safe ()
@@ -1692,7 +1744,7 @@ vlc_module_begin ()
         change_safe()
 
     set_subcategory( SUBCAT_VIDEO_VOUT )
-    add_module( "vout", "video output", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT,
+    add_module( "vout", "vout display", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT,
                 true )
         change_short('V')
 
@@ -1720,6 +1772,7 @@ vlc_module_begin ()
     set_section( N_("Subtitles") , NULL )
     add_file( "sub-file", NULL, NULL, SUB_FILE_TEXT,
               SUB_FILE_LONGTEXT, false )
+        change_safe()
     add_bool( "sub-autodetect-file", true, NULL,
                  SUB_AUTO_TEXT, SUB_AUTO_LONGTEXT, false )
     add_integer( "sub-autodetect-fuzzy", 3, NULL,
@@ -1788,6 +1841,8 @@ vlc_module_begin ()
     add_bool( "input-fast-seek", false, NULL,
               INPUT_FAST_SEEK_TEXT, INPUT_FAST_SEEK_LONGTEXT, false )
         change_safe ()
+    add_float( "rate", 1., NULL,
+               INPUT_RATE_TEXT, INPUT_RATE_LONGTEXT, false )
 
     add_string( "input-list", NULL, NULL,
                  INPUT_LIST_TEXT, INPUT_LIST_LONGTEXT, true )
@@ -1860,6 +1915,9 @@ vlc_module_begin ()
     add_integer( "clock-synchro", -1, NULL, CLOCK_SYNCHRO_TEXT,
                  CLOCK_SYNCHRO_LONGTEXT, true )
         change_integer_list( pi_clock_values, ppsz_clock_descriptions, NULL )
+    add_integer( "clock-jitter", 5 * CLOCK_FREQ/1000, NULL, CLOCK_JITTER_TEXT,
+              CLOCK_JITTER_LONGTEXT, true )
+        change_safe()
 
     add_bool( "network-synchronisation", false, NULL, NETSYNC_TEXT,
               NETSYNC_LONGTEXT, true )
@@ -1968,6 +2026,12 @@ vlc_module_begin ()
         change_need_restart ()
     add_bool( "sse3", 1, NULL, SSE3_TEXT, SSE3_LONGTEXT, true )
         change_need_restart ()
+    add_bool( "ssse3", 1, NULL, SSSE3_TEXT, SSSE3_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse41", 1, NULL, SSE4_1_TEXT, SSE4_1_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse42", 1, NULL, SSE4_2_TEXT, SSE4_2_LONGTEXT, true )
+        change_need_restart ()
 #endif
 #if defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
     add_bool( "altivec", 1, NULL, ALTIVEC_TEXT, ALTIVEC_LONGTEXT, true )
@@ -1989,6 +2053,13 @@ vlc_module_begin ()
     add_directory( "plugin-path", NULL, NULL, PLUGIN_PATH_TEXT,
                    PLUGIN_PATH_LONGTEXT, true )
         change_need_restart ()
+    add_directory( "data-path", NULL, NULL, DATA_PATH_TEXT,
+                   DATA_PATH_LONGTEXT, true )
+        change_need_restart ()
+
+    add_string( "user-agent", "(LibVLC "VERSION")", NULL, NULL, NULL, true )
+        change_safe ()
+        change_private ()
 
     set_section( N_("Performance options"), NULL )
     add_obsolete_bool( "minimize-threads" )
@@ -2019,14 +2090,12 @@ vlc_module_begin ()
               ONEINSTANCE_LONGTEXT, true )
     add_bool( "started-from-file", 0, NULL, STARTEDFROMFILE_TEXT,
               STARTEDFROMFILE_LONGTEXT, true )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "one-instance-when-started-from-file", 1, NULL,
               ONEINSTANCEWHENSTARTEDFROMFILE_TEXT,
               ONEINSTANCEWHENSTARTEDFROMFILE_LONGTEXT, true )
     add_bool( "playlist-enqueue", 0, NULL, PLAYLISTENQUEUE_TEXT,
               PLAYLISTENQUEUE_LONGTEXT, true )
-        change_unsaveable ()
 #endif
 
 #if defined(WIN32)
@@ -2209,6 +2278,8 @@ vlc_module_begin ()
 #   define KEY_VOL_MUTE           KEY_MODIFIER_COMMAND|KEY_MODIFIER_ALT|KEY_DOWN
 #   define KEY_SUBDELAY_UP        'j'
 #   define KEY_SUBDELAY_DOWN      'h'
+#   define KEY_SUBPOS_DOWN        KEY_UNSET
+#   define KEY_SUBPOS_UP          KEY_UNSET
 #   define KEY_AUDIODELAY_UP      'g'
 #   define KEY_AUDIODELAY_DOWN    'f'
 #   define KEY_AUDIO_TRACK        'l'
@@ -2324,6 +2395,8 @@ vlc_module_begin ()
 #   define KEY_VOL_MUTE           'm'
 #   define KEY_SUBDELAY_UP        'h'
 #   define KEY_SUBDELAY_DOWN      'g'
+#   define KEY_SUBPOS_DOWN        KEY_UNSET
+#   define KEY_SUBPOS_UP          KEY_UNSET
 #   define KEY_AUDIODELAY_UP      'k'
 #   define KEY_AUDIODELAY_DOWN    'j'
 #   define KEY_RANDOM             'r'
@@ -2368,10 +2441,10 @@ vlc_module_begin ()
 #   define KEY_UNCROP_RIGHT       KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'f'
 
 /* Zooming */
-#   define KEY_ZOOM_QUARTER       KEY_MODIFIER_CTRL|'1'
-#   define KEY_ZOOM_HALF          KEY_MODIFIER_CTRL|'2'
-#   define KEY_ZOOM_ORIGINAL      KEY_MODIFIER_CTRL|'3'
-#   define KEY_ZOOM_DOUBLE        KEY_MODIFIER_CTRL|'4'
+#   define KEY_ZOOM_QUARTER       KEY_MODIFIER_ALT|'1'
+#   define KEY_ZOOM_HALF          KEY_MODIFIER_ALT|'2'
+#   define KEY_ZOOM_ORIGINAL      KEY_MODIFIER_ALT|'3'
+#   define KEY_ZOOM_DOUBLE        KEY_MODIFIER_ALT|'4'
 
 /* Bookmarks */
 #   define KEY_SET_BOOKMARK1      KEY_MODIFIER_CTRL|KEY_F1
@@ -2485,6 +2558,10 @@ vlc_module_begin ()
              SUBDELAY_UP_KEY_TEXT, SUBDELAY_UP_KEY_LONGTEXT, true )
     add_key( "key-subdelay-down", KEY_SUBDELAY_DOWN, NULL,
              SUBDELAY_DOWN_KEY_TEXT, SUBDELAY_DOWN_KEY_LONGTEXT, true )
+    add_key( "key-subpos-up", KEY_SUBPOS_UP, NULL,
+             SUBPOS_UP_KEY_TEXT, SUBPOS_UP_KEY_LONGTEXT, true )
+    add_key( "key-subpos-down", KEY_SUBPOS_DOWN, NULL,
+             SUBPOS_DOWN_KEY_TEXT, SUBPOS_DOWN_KEY_LONGTEXT, true )
     add_key( "key-audiodelay-up", KEY_AUDIODELAY_UP, NULL,
              AUDIODELAY_UP_KEY_TEXT, AUDIODELAY_UP_KEY_LONGTEXT, true )
     add_key( "key-audiodelay-down", KEY_AUDIODELAY_DOWN, NULL,
@@ -2666,12 +2743,10 @@ vlc_module_begin ()
     N_("print a list of available modules with extra detail")
 #define MODULE_TEXT \
     N_("print help on a specific module (can be combined with --advanced " \
-       "and --help-verbose). Prefix the module name with = for strict" \
+       "and --help-verbose). Prefix the module name with = for strict " \
        "matches.")
 #define IGNORE_CONFIG_TEXT \
     N_("no configuration option will be loaded nor saved to config file")
-#define SAVE_CONFIG_TEXT \
-    N_("save the current command line options in the config")
 #define RESET_CONFIG_TEXT \
     N_("reset the current config to the default values")
 #define CONFIG_TEXT \
@@ -2683,54 +2758,36 @@ vlc_module_begin ()
 
     add_bool( "help", false, NULL, HELP_TEXT, "", false )
         change_short( 'h' )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "full-help", false, NULL, FULL_HELP_TEXT, "", false )
         change_short( 'H' )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "longhelp", false, NULL, LONGHELP_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "help-verbose", false, NULL, HELP_VERBOSE_TEXT, "",
               false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "list", false, NULL, LIST_TEXT, "", false )
         change_short( 'l' )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "list-verbose", false, NULL, LIST_VERBOSE_TEXT, "",
               false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_string( "module", NULL, NULL, MODULE_TEXT, "", false )
         change_short( 'p' )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "ignore-config", true, NULL, IGNORE_CONFIG_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
-    add_bool( "save-config", false, NULL, SAVE_CONFIG_TEXT, "",
-              false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
+    add_obsolete_bool( "save-config" )
     add_bool( "reset-config", false, NULL, RESET_CONFIG_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "reset-plugins-cache", false, NULL,
               RESET_PLUGINS_CACHE_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_bool( "version", false, NULL, VERSION_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
     add_string( "config", NULL, NULL, CONFIG_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
-    add_bool( "version", false, NULL, VERSION_TEXT, "", false )
-        change_internal ()
-        change_unsaveable ()
+        change_volatile ()
 
    /* Usage (mainly useful for cmd line stuff) */
     /* add_usage_hint( PLAYLIST_USAGE ) */
@@ -2749,80 +2806,57 @@ vlc_module_end ()
  *****************************************************************************/
 const struct action libvlc_actions[] =
 {
-    { "key-quit", ACTIONID_QUIT, },
-    { "key-play-pause", ACTIONID_PLAY_PAUSE, },
-    { "key-play", ACTIONID_PLAY, },
-    { "key-pause", ACTIONID_PAUSE, },
-    { "key-stop", ACTIONID_STOP, },
-    { "key-position", ACTIONID_POSITION, },
-    { "key-jump-extrashort", ACTIONID_JUMP_BACKWARD_EXTRASHORT, },
-    { "key-jump+extrashort", ACTIONID_JUMP_FORWARD_EXTRASHORT, },
-    { "key-jump-short", ACTIONID_JUMP_BACKWARD_SHORT, },
-    { "key-jump+short", ACTIONID_JUMP_FORWARD_SHORT, },
-    { "key-jump-medium", ACTIONID_JUMP_BACKWARD_MEDIUM, },
-    { "key-jump+medium", ACTIONID_JUMP_FORWARD_MEDIUM, },
-    { "key-jump-long", ACTIONID_JUMP_BACKWARD_LONG, },
-    { "key-jump+long", ACTIONID_JUMP_FORWARD_LONG, },
-    { "key-frame-next", ACTIONID_FRAME_NEXT, },
-    { "key-prev", ACTIONID_PREV, },
-    { "key-next", ACTIONID_NEXT, },
-    { "key-faster", ACTIONID_FASTER, },
-    { "key-slower", ACTIONID_SLOWER, },
-    { "key-rate-normal", ACTIONID_RATE_NORMAL, },
-    { "key-rate-faster-fine", ACTIONID_RATE_FASTER_FINE, },
-    { "key-rate-slower-fine", ACTIONID_RATE_SLOWER_FINE, },
-    { "key-toggle-fullscreen", ACTIONID_TOGGLE_FULLSCREEN, },
-    { "key-leave-fullscreen", ACTIONID_LEAVE_FULLSCREEN, },
-    { "key-vol-up", ACTIONID_VOL_UP, },
-    { "key-vol-down", ACTIONID_VOL_DOWN, },
-    { "key-vol-mute", ACTIONID_VOL_MUTE, },
-    { "key-subdelay-down", ACTIONID_SUBDELAY_DOWN, },
-    { "key-subdelay-up", ACTIONID_SUBDELAY_UP, },
+    /* *MUST* be sorted (ASCII order) */
+    { "key-aspect-ratio", ACTIONID_ASPECT_RATIO, },
+    { "key-audio-track", ACTIONID_AUDIO_TRACK, },
     { "key-audiodelay-down", ACTIONID_AUDIODELAY_DOWN, },
     { "key-audiodelay-up", ACTIONID_AUDIODELAY_UP, },
-    { "key-audio-track", ACTIONID_AUDIO_TRACK, },
-    { "key-subtitle-track", ACTIONID_SUBTITLE_TRACK, },
-    { "key-aspect-ratio", ACTIONID_ASPECT_RATIO, },
+    { "key-audiodevice-cycle", ACTIONID_AUDIODEVICE_CYCLE, },
+    { "key-chapter-next", ACTIONID_CHAPTER_NEXT, },
+    { "key-chapter-prev", ACTIONID_CHAPTER_PREV, },
     { "key-crop", ACTIONID_CROP, },
-    { "key-deinterlace", ACTIONID_DEINTERLACE, },
-    { "key-intf-show", ACTIONID_INTF_SHOW, },
-    { "key-intf-hide", ACTIONID_INTF_HIDE, },
-    { "key-snapshot", ACTIONID_SNAPSHOT, },
-    { "key-zoom", ACTIONID_ZOOM, },
-    { "key-unzoom", ACTIONID_UNZOOM, },
-    { "key-crop-top", ACTIONID_CROP_TOP, },
-    { "key-uncrop-top", ACTIONID_UNCROP_TOP, },
-    { "key-crop-left", ACTIONID_CROP_LEFT, },
-    { "key-uncrop-left", ACTIONID_UNCROP_LEFT, },
     { "key-crop-bottom", ACTIONID_CROP_BOTTOM, },
-    { "key-uncrop-bottom", ACTIONID_UNCROP_BOTTOM, },
+    { "key-crop-left", ACTIONID_CROP_LEFT, },
     { "key-crop-right", ACTIONID_CROP_RIGHT, },
-    { "key-uncrop-right", ACTIONID_UNCROP_RIGHT, },
+    { "key-crop-top", ACTIONID_CROP_TOP, },
+    { "key-decr-scalefactor", ACTIONID_SCALE_DOWN, },
+    { "key-deinterlace", ACTIONID_DEINTERLACE, },
+    { "key-disc-menu", ACTIONID_DISC_MENU, },
+    { "key-dump", ACTIONID_DUMP, },
+    { "key-faster", ACTIONID_FASTER, },
+    { "key-frame-next", ACTIONID_FRAME_NEXT, },
+    { "key-history-back", ACTIONID_HISTORY_BACK, },
+    { "key-history-forward", ACTIONID_HISTORY_FORWARD, },
+    { "key-incr-scalefactor", ACTIONID_SCALE_UP, },
+    { "key-intf-hide", ACTIONID_INTF_HIDE, },
+    { "key-intf-show", ACTIONID_INTF_SHOW, },
+    { "key-jump+extrashort", ACTIONID_JUMP_FORWARD_EXTRASHORT, },
+    { "key-jump+long", ACTIONID_JUMP_FORWARD_LONG, },
+    { "key-jump+medium", ACTIONID_JUMP_FORWARD_MEDIUM, },
+    { "key-jump+short", ACTIONID_JUMP_FORWARD_SHORT, },
+    { "key-jump-extrashort", ACTIONID_JUMP_BACKWARD_EXTRASHORT, },
+    { "key-jump-long", ACTIONID_JUMP_BACKWARD_LONG, },
+    { "key-jump-medium", ACTIONID_JUMP_BACKWARD_MEDIUM, },
+    { "key-jump-short", ACTIONID_JUMP_BACKWARD_SHORT, },
+    { "key-leave-fullscreen", ACTIONID_LEAVE_FULLSCREEN, },
+    { "key-loop", ACTIONID_LOOP, },
+    { "key-menu-down", ACTIONID_MENU_DOWN, },
+    { "key-menu-left", ACTIONID_MENU_LEFT, },
+    { "key-menu-off", ACTIONID_MENU_OFF, },
+    { "key-menu-on", ACTIONID_MENU_ON, },
+    { "key-menu-right", ACTIONID_MENU_RIGHT, },
+    { "key-menu-select", ACTIONID_MENU_SELECT, },
+    { "key-menu-up", ACTIONID_MENU_UP, },
     { "key-nav-activate", ACTIONID_NAV_ACTIVATE, },
-    { "key-nav-up", ACTIONID_NAV_UP, },
     { "key-nav-down", ACTIONID_NAV_DOWN, },
     { "key-nav-left", ACTIONID_NAV_LEFT, },
     { "key-nav-right", ACTIONID_NAV_RIGHT, },
-    { "key-disc-menu", ACTIONID_DISC_MENU, },
-    { "key-title-prev", ACTIONID_TITLE_PREV, },
-    { "key-title-next", ACTIONID_TITLE_NEXT, },
-    { "key-chapter-prev", ACTIONID_CHAPTER_PREV, },
-    { "key-chapter-next", ACTIONID_CHAPTER_NEXT, },
-    { "key-zoom-quarter", ACTIONID_ZOOM_QUARTER, },
-    { "key-zoom-half", ACTIONID_ZOOM_HALF, },
-    { "key-zoom-original", ACTIONID_ZOOM_ORIGINAL, },
-    { "key-zoom-double", ACTIONID_ZOOM_DOUBLE, },
-    { "key-set-bookmark1", ACTIONID_SET_BOOKMARK1, },
-    { "key-set-bookmark2", ACTIONID_SET_BOOKMARK2, },
-    { "key-set-bookmark3", ACTIONID_SET_BOOKMARK3, },
-    { "key-set-bookmark4", ACTIONID_SET_BOOKMARK4, },
-    { "key-set-bookmark5", ACTIONID_SET_BOOKMARK5, },
-    { "key-set-bookmark6", ACTIONID_SET_BOOKMARK6, },
-    { "key-set-bookmark7", ACTIONID_SET_BOOKMARK7, },
-    { "key-set-bookmark8", ACTIONID_SET_BOOKMARK8, },
-    { "key-set-bookmark9", ACTIONID_SET_BOOKMARK9, },
-    { "key-set-bookmark10", ACTIONID_SET_BOOKMARK10, },
+    { "key-nav-up", ACTIONID_NAV_UP, },
+    { "key-next", ACTIONID_NEXT, },
+    { "key-pause", ACTIONID_PAUSE, },
+    { "key-play", ACTIONID_PLAY, },
     { "key-play-bookmark1", ACTIONID_PLAY_BOOKMARK1, },
+    { "key-play-bookmark10", ACTIONID_PLAY_BOOKMARK10, },
     { "key-play-bookmark2", ACTIONID_PLAY_BOOKMARK2, },
     { "key-play-bookmark3", ACTIONID_PLAY_BOOKMARK3, },
     { "key-play-bookmark4", ACTIONID_PLAY_BOOKMARK4, },
@@ -2831,25 +2865,51 @@ const struct action libvlc_actions[] =
     { "key-play-bookmark7", ACTIONID_PLAY_BOOKMARK7, },
     { "key-play-bookmark8", ACTIONID_PLAY_BOOKMARK8, },
     { "key-play-bookmark9", ACTIONID_PLAY_BOOKMARK9, },
-    { "key-play-bookmark10", ACTIONID_PLAY_BOOKMARK10, },
-    { "key-history-back", ACTIONID_HISTORY_BACK, },
-    { "key-history-forward", ACTIONID_HISTORY_FORWARD, },
-    { "key-record", ACTIONID_RECORD, },
-    { "key-dump", ACTIONID_DUMP, },
+    { "key-play-pause", ACTIONID_PLAY_PAUSE, },
+    { "key-position", ACTIONID_POSITION, },
+    { "key-prev", ACTIONID_PREV, },
+    { "key-quit", ACTIONID_QUIT, },
     { "key-random", ACTIONID_RANDOM, },
-    { "key-loop", ACTIONID_LOOP, },
-    { "key-wallpaper", ACTIONID_WALLPAPER, },
-    { "key-menu-on", ACTIONID_MENU_ON, },
-    { "key-menu-off", ACTIONID_MENU_OFF, },
-    { "key-menu-right", ACTIONID_MENU_RIGHT, },
-    { "key-menu-left", ACTIONID_MENU_LEFT, },
-    { "key-menu-up", ACTIONID_MENU_UP, },
-    { "key-menu-down", ACTIONID_MENU_DOWN, },
-    { "key-menu-select", ACTIONID_MENU_SELECT, },
-    { "key-audiodevice-cycle", ACTIONID_AUDIODEVICE_CYCLE, },
+    { "key-rate-faster-fine", ACTIONID_RATE_FASTER_FINE, },
+    { "key-rate-normal", ACTIONID_RATE_NORMAL, },
+    { "key-rate-slower-fine", ACTIONID_RATE_SLOWER_FINE, },
+    { "key-record", ACTIONID_RECORD, },
+    { "key-set-bookmark1", ACTIONID_SET_BOOKMARK1, },
+    { "key-set-bookmark10", ACTIONID_SET_BOOKMARK10, },
+    { "key-set-bookmark2", ACTIONID_SET_BOOKMARK2, },
+    { "key-set-bookmark3", ACTIONID_SET_BOOKMARK3, },
+    { "key-set-bookmark4", ACTIONID_SET_BOOKMARK4, },
+    { "key-set-bookmark5", ACTIONID_SET_BOOKMARK5, },
+    { "key-set-bookmark6", ACTIONID_SET_BOOKMARK6, },
+    { "key-set-bookmark7", ACTIONID_SET_BOOKMARK7, },
+    { "key-set-bookmark8", ACTIONID_SET_BOOKMARK8, },
+    { "key-set-bookmark9", ACTIONID_SET_BOOKMARK9, },
+    { "key-slower", ACTIONID_SLOWER, },
+    { "key-snapshot", ACTIONID_SNAPSHOT, },
+    { "key-stop", ACTIONID_STOP, },
+    { "key-subdelay-down", ACTIONID_SUBDELAY_DOWN, },
+    { "key-subdelay-up", ACTIONID_SUBDELAY_UP, },
+    { "key-subpos-down", ACTIONID_SUBPOS_DOWN, },
+    { "key-subpos-up", ACTIONID_SUBPOS_UP, },
+    { "key-subtitle-track", ACTIONID_SUBTITLE_TRACK, },
+    { "key-title-next", ACTIONID_TITLE_NEXT, },
+    { "key-title-prev", ACTIONID_TITLE_PREV, },
     { "key-toggle-autoscale", ACTIONID_TOGGLE_AUTOSCALE, },
-    { "key-incr-scalefactor", ACTIONID_SCALE_UP, },
-    { "key-decr-scalefactor", ACTIONID_SCALE_DOWN, },
+    { "key-toggle-fullscreen", ACTIONID_TOGGLE_FULLSCREEN, },
+    { "key-uncrop-bottom", ACTIONID_UNCROP_BOTTOM, },
+    { "key-uncrop-left", ACTIONID_UNCROP_LEFT, },
+    { "key-uncrop-right", ACTIONID_UNCROP_RIGHT, },
+    { "key-uncrop-top", ACTIONID_UNCROP_TOP, },
+    { "key-unzoom", ACTIONID_UNZOOM, },
+    { "key-vol-down", ACTIONID_VOL_DOWN, },
+    { "key-vol-mute", ACTIONID_VOL_MUTE, },
+    { "key-vol-up", ACTIONID_VOL_UP, },
+    { "key-wallpaper", ACTIONID_WALLPAPER, },
+    { "key-zoom", ACTIONID_ZOOM, },
+    { "key-zoom-double", ACTIONID_ZOOM_DOUBLE, },
+    { "key-zoom-half", ACTIONID_ZOOM_HALF, },
+    { "key-zoom-original", ACTIONID_ZOOM_ORIGINAL, },
+    { "key-zoom-quarter", ACTIONID_ZOOM_QUARTER, },
 };
 
 const size_t libvlc_actions_count =