]> git.sesse.net Git - vlc/blobdiff - src/libvlc-module.c
Don't change enum orders.
[vlc] / src / libvlc-module.c
index 8f74f2afd3494efd66c63594c99aae1f9ca6b7e7..0f910c295dce97473292ceb5d82e2763ff7820f0 100644 (file)
@@ -34,7 +34,8 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include "libvlc.h"
 
 //#define Nothing here, this is just to prevent update-po from being stupid
 #include "vlc_meta.h"
 
 #if defined (WIN32) || defined (__APPLE__)
-static const char *ppsz_language[] =
+static const char *const ppsz_language[] =
 {
     "auto",
     "en",
     "ar",
     "pt_BR",
     "en_GB",
+    "bg",
     "ca",
     "zh_TW",
     "cs",
@@ -68,9 +70,12 @@ static const char *ppsz_language[] =
     "oc",
     "fa",
     "pl",
+    "pt_PT",
+    "pa",
     "ro",
     "ru",
     "zh_CN",
+    "sr",
     "sk",
     "sl",
     "es",
@@ -78,13 +83,14 @@ static const char *ppsz_language[] =
     "tr"
 };
 
-static const char *ppsz_language_text[] =
+static const char *const ppsz_language_text[] =
 {
     N_("Auto"),
     N_("American English"),
     N_("Arabic"),
     N_("Brazilian Portuguese"),
     N_("British English"),
+    N_("Bulgarian"),
     N_("Catalan"),
     N_("Chinese Traditional"),
     N_("Czech"),
@@ -104,9 +110,12 @@ static const char *ppsz_language_text[] =
     N_("Occitan"),
     N_("Persian"),
     N_("Polish"),
+    N_("Portuguese"),
+    N_("Punjabi"),
     N_("Romanian"),
     N_("Russian"),
     N_("Simplified Chinese"),
+    N_("Serbian"),
     N_("Slovak"),
     N_("Slovenian"),
     N_("Spanish"),
@@ -115,7 +124,7 @@ static const char *ppsz_language_text[] =
 };
 #endif
 
-static const char *ppsz_snap_formats[] =
+static const char *const ppsz_snap_formats[] =
 { "png", "jpg" };
 
 /*****************************************************************************
@@ -157,6 +166,16 @@ static const char *ppsz_snap_formats[] =
     "This is the verbosity level (0=only errors and " \
     "standard messages, 1=warnings, 2=debug).")
 
+#define VERBOSE_OBJECTS_TEXT N_("Choose which objects should print debug " \
+    "message")
+#define VERBOSE_OBJECTS_LONGTEXT N_( \
+    "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 " \
+    "over rules applying to object types. Note that you still need to " \
+    "use -vvv to actually display debug message.")
+
 #define QUIET_TEXT N_("Be quiet")
 #define QUIET_LONGTEXT N_( \
     "Turn off all warning and information messages.")
@@ -215,8 +234,10 @@ static const char *ppsz_snap_formats[] =
     "You can completely disable the audio output. The audio " \
     "decoding stage will not take place, thus saving some processing power.")
 
+#if 0
 #define MONO_TEXT N_("Force mono audio")
 #define MONO_LONGTEXT N_("This will force a mono audio output.")
+#endif
 
 #define VOLUME_TEXT N_("Default audio volume")
 #define VOLUME_LONGTEXT N_( \
@@ -269,8 +290,9 @@ static const char *ppsz_snap_formats[] =
     "not actually encoded with Dolby Surround, turning on this option might "\
     "enhance your experience, especially when combined with the Headphone "\
     "Channel Mixer." )
-static int pi_force_dolby_values[] = { 0, 1, 2 };
-static const char *ppsz_force_dolby_descriptions[] = { N_("Auto"), N_("On"), N_("Off") };
+static const int pi_force_dolby_values[] = { 0, 1, 2 };
+static const char *const ppsz_force_dolby_descriptions[] = {
+    N_("Auto"), N_("On"), N_("Off") };
 
 
 #define AUDIO_FILTER_TEXT N_("Audio filters")
@@ -301,8 +323,17 @@ static const char *ppsz_force_dolby_descriptions[] = { N_("Auto"), N_("On"), N_(
 #define AUDIO_REPLAY_GAIN_PEAK_PROTECTION_LONGTEXT N_( \
     "Protect against sound clipping" )
 
-static const char *ppsz_replay_gain_mode[] = { "none", "track", "album" };
-static const char *ppsz_replay_gain_mode_text[] = { N_("None"), N_("Track"), N_("Album") };
+#define AUDIO_TIME_STRETCH_TEXT N_( \
+    "Enable time streching audio" )
+#define AUDIO_TIME_STRETCH_LONGTEXT N_( \
+    "This allows to play audio at lower or higher speed without" \
+    "affecting the audio pitch" )
+
+
+static const char *const ppsz_replay_gain_mode[] = {
+    "none", "track", "album" };
+static const char *const ppsz_replay_gain_mode_text[] = {
+    N_("None"), N_("Track"), N_("Album") };
 
 /*****************************************************************************
  * Video
@@ -356,8 +387,8 @@ static const char *ppsz_replay_gain_mode_text[] = { N_("None"), N_("Track"), N_(
     "Enforce the alignment of the video in its window. By default (0) it " \
     "will be centered (0=center, 1=left, 2=right, 4=top, 8=bottom, you can " \
     "also use combinations of these values, like 6=4+2 meaning top-right).")
-static int pi_align_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
-static const char *ppsz_align_descriptions[] =
+static const int pi_align_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
+static const char *const ppsz_align_descriptions[] =
 { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
   N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };
 
@@ -387,33 +418,33 @@ static const char *ppsz_align_descriptions[] =
 #define VIDEO_ON_TOP_LONGTEXT N_( \
     "Always place the video window on top of other windows." )
 
-#define VIDEO_TITLE_SHOW_TEXT N_("Show media title on video.")
+#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.")
 
-#define VIDEO_TITLE_TIMEOUT_TEXT N_("Show video title for x miliseconds.")
+#define VIDEO_TITLE_TIMEOUT_TEXT N_("Show video title for x milliseconds")
 #define VIDEO_TITLE_TIMEOUT_LONGTEXT N_( \
-    "Show the video title for n miliseconds, default is 5000 ms (5 sec.)")
+    "Show the video title for n milliseconds, default is 5000 ms (5 sec.)")
 
-#define VIDEO_TITLE_POSITION_TEXT N_("Position of video title.")
+#define VIDEO_TITLE_POSITION_TEXT N_("Position of video title")
 #define VIDEO_TITLE_POSITION_LONGTEXT N_( \
     "Place on video where to display the title (default bottom center).")
 
 #define MOUSE_HIDE_TIMEOUT_TEXT N_("Hide cursor and fullscreen " \
-                                   "controller after x miliseconds.")
+                                   "controller after x milliseconds")
 #define MOUSE_HIDE_TIMEOUT_LONGTEXT N_( \
     "Hide mouse cursor and fullscreen controller after " \
-    "n miliseconds, default is 3000 ms (3 sec.)")
+    "n milliseconds, default is 3000 ms (3 sec.)")
 
-static int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
-static const char *ppsz_pos_descriptions[] =
+static const int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
+static const char *const ppsz_pos_descriptions[] =
 { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
   N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };
 
 #define SS_TEXT N_("Disable screensaver")
 #define SS_LONGTEXT N_("Disable the screensaver during video playback." )
 
-#define INHIBIT_TEXT N_("Inhibits the power management daemon during playback.")
+#define INHIBIT_TEXT N_("Inhibit the power management daemon during playback")
 #define INHIBIT_LONGTEXT N_("Inhibits the power management daemon during any " \
     "playback, to avoid the computer being suspended because of inactivity.")
 
@@ -424,9 +455,7 @@ static const char *ppsz_pos_descriptions[] =
 
 #define VOUT_FILTER_TEXT N_("Video output filter module")
 #define VOUT_FILTER_LONGTEXT N_( \
-    "This adds post-processing filters to enhance the " \
-    "picture quality, for instance deinterlacing, or to clone or distort " \
-    "the video window.")
+    "This adds video output filters like clone or wall" )
 
 #define VIDEO_FILTER_TEXT N_("Video filter module")
 #define VIDEO_FILTER_LONGTEXT N_( \
@@ -481,6 +510,10 @@ static const char *ppsz_pos_descriptions[] =
     "aspect, or a float value (1.25, 1.3333, etc.) expressing pixel " \
     "squareness.")
 
+#define SCALING_TEXT N_("Video scaling")
+#define SCALING_LONGTEXT N_( \
+    "This enables upscaling a video in a given window.")
+
 #define CUSTOM_CROP_RATIOS_TEXT N_("Custom crop ratios list")
 #define CUSTOM_CROP_RATIOS_LONGTEXT N_( \
     "Comma seperated list of crop ratios which will be added in the " \
@@ -519,6 +552,16 @@ static const char *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.")
+
+static const int pi_vout_event_values[] = { 1, 2, 3 };
+static const char *const ppsz_vout_event_descriptions[] =
+     { N_("FullSupport"), N_("Fullscreen-Only"), N_("None") };
+
 /*****************************************************************************
  * Input
  ****************************************************************************/
@@ -545,8 +588,8 @@ static const char *ppsz_pos_descriptions[] =
         "synchronise clocks for server and client. The detailed settings " \
         "are available in Advanced / Network Sync." )
 
-static int pi_clock_values[] = { -1, 0, 1 };
-static const char *ppsz_clock_descriptions[] =
+static const int pi_clock_values[] = { -1, 0, 1 };
+static const char *const ppsz_clock_descriptions[] =
 { N_("Default"), N_("Disable"), N_("Enable") };
 
 #define SERVER_PORT_TEXT N_("UDP port")
@@ -612,7 +655,7 @@ static const char *ppsz_clock_descriptions[] =
 #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 tree letter country code).")
+    "(comma separated, two or three letters country code).")
 
 /// \todo Document how to find it
 #define INPUT_AUDIOTRACK_ID_TEXT N_("Audio track ID")
@@ -639,6 +682,10 @@ static const char *ppsz_clock_descriptions[] =
 #define RUN_TIME_LONGTEXT N_( \
     "The stream will run this duration (in seconds)." )
 
+#define INPUT_FAST_SEEK_TEXT N_("Fast seek")
+#define INPUT_FAST_SEEK_LONGTEXT N_( \
+    "Favor speed over precision while seeking" )
+
 #define INPUT_LIST_TEXT N_("Input list")
 #define INPUT_LIST_LONGTEXT N_( \
     "You can give a comma-separated list " \
@@ -656,6 +703,24 @@ static const char *ppsz_clock_descriptions[] =
     "the form \"{name=bookmark-name,time=optional-time-offset," \
     "bytes=optional-byte-offset},{...}\"")
 
+#define INPUT_RECORD_PATH_TEXT N_("Record directory or filename")
+#define INPUT_RECORD_PATH_LONGTEXT N_( \
+    "Directory or filename where the records will be stored" )
+
+#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" \
+    "the stream output module" )
+
+#define INPUT_TIMESHIFT_PATH_TEXT N_("Timeshift directory")
+#define INPUT_TIMESHIFT_PATH_LONGTEXT N_( \
+    "Directory used to store the timeshift temporary files." )
+
+#define INPUT_TIMESHIFT_GRANULARITY_TEXT N_("Timeshift granularity")
+#define INPUT_TIMESHIFT_GRANULARITY_LONGTEXT N_( \
+    "This is the maximum size in bytes of the temporary files " \
+    "that will be used to store the timeshifted streams." )
+
 // DEPRECATED
 #define SUB_CAT_LONGTEXT N_( \
     "These options allow you to modify the behavior of the subpictures " \
@@ -685,7 +750,7 @@ static const char *ppsz_clock_descriptions[] =
 #define SUB_FILTER_TEXT N_("Subpictures filter module")
 #define SUB_FILTER_LONGTEXT N_( \
     "This adds so-called \"subpicture filters\". These filters overlay " \
-    "some images or text over the video (like a logo, arbitrary text...)." )
+    "some images or text over the video (like a logo, arbitrary text...)." )
 
 #define SUB_AUTO_TEXT N_("Autodetect subtitle files")
 #define SUB_AUTO_LONGTEXT N_( \
@@ -817,7 +882,7 @@ static const char *ppsz_clock_descriptions[] =
     "This allows you to select a list of encoders that VLC will use in " \
     "priority.")
 
-#define SYSTEM_CODEC_TEXT N_("Prefer system plugins over vlc")
+#define SYSTEM_CODEC_TEXT N_("Prefer system plugins over VLC")
 #define SYSTEM_CODEC_LONGTEXT N_( \
     "Indicates whether VLC will prefer native plugins installed " \
     "on system over VLC owns plugins whenever a choice is available." )
@@ -955,10 +1020,9 @@ static const char *ppsz_clock_descriptions[] =
     "the correct access is not automatically detected. You should not "\
     "set this as a global option unless you really know what you are doing." )
 
-#define ACCESS_FILTER_TEXT N_("Access filter module")
-#define ACCESS_FILTER_LONGTEXT N_( \
-    "Access filters are used to modify the stream that is being read. " \
-    "This is used for instance for timeshifting.")
+#define STREAM_FILTER_TEXT N_("Stream filter module")
+#define STREAM_FILTER_LONGTEXT N_( \
+    "Stream filters are used to modify the stream that is being read. " )
 
 #define DEMUX_TEXT N_("Demux module")
 #define DEMUX_LONGTEXT N_( \
@@ -981,14 +1045,15 @@ static const char *ppsz_clock_descriptions[] =
     "priorities. You can use it to tune VLC priority against other " \
     "programs, or against other VLC instances.")
 
-#define MINIMIZE_THREADS_TEXT N_("Minimize number of threads")
-#define MINIMIZE_THREADS_LONGTEXT N_( \
-     "This option minimizes the number of threads needed to run VLC.")
+#define USE_STREAM_IMMEDIATE N_("(Experimental) Don't do caching at the access level.")
+#define USE_STREAM_IMMEDIATE_LONGTEXT N_( \
+     "This option is useful if you want to lower the latency when " \
+     "reading a stream")
 
 #define PLUGIN_PATH_TEXT N_("Modules search path")
 #define PLUGIN_PATH_LONGTEXT N_( \
     "Additional path for VLC to look for its modules. You can add " \
-    "several paths by concatenating them using " PATH_SEP " as separator")
+    "several paths by concatenating them using \" PATH_SEP \" as separator")
 
 #define VLM_CONF_TEXT N_("VLM configuration file")
 #define VLM_CONF_LONGTEXT N_( \
@@ -1018,23 +1083,24 @@ static const char *ppsz_clock_descriptions[] =
 #define SYSLOG_LONGTEXT N_( \
     "Log all VLC messages to syslog (UNIX systems)." )
 
-#define ONEINSTANCE_WIN_TEXT N_("Allow only one running instance")
-#define ONEINSTANCE_WIN_LONGTEXT N_( \
+#define ONEINSTANCE_TEXT N_("Allow only one running instance")
+#if defined( WIN32 )
+#define ONEINSTANCE_LONGTEXT N_( \
     "Allowing only one running instance of VLC can sometimes be useful, " \
     "for example if you associated VLC with some media types and you " \
     "don't want a new instance of VLC to be opened each time you " \
     "double-click on a file in the explorer. This option will allow you " \
     "to play the file with the already running instance or enqueue it.")
-
-#define ONEINSTANCE_DBUS_TEXT ONEINSTANCE_WIN_TEXT
-#define ONEINSTANCE_DBUS_LONGTEXT N_( \
+#elif defined( HAVE_DBUS )
+#define ONEINSTANCE_LONGTEXT N_( \
     "Allowing only one running instance of VLC can sometimes be useful, " \
     "for example if you associated VLC with some media types and you " \
     "don't want a new instance of VLC to be opened each time you " \
     "open a file in your file manager. This option will allow you " \
     "to play the file with the already running instance or enqueue it. " \
-    "This option require the D-Bus session daemon to be active " \
+    "This option requires the D-Bus session daemon to be active " \
     "and the running instance of VLC to use D-Bus control interface.")
+#endif
 
 #define STARTEDFROMFILE_TEXT N_("VLC is started from file association")
 #define STARTEDFROMFILE_LONGTEXT N_( \
@@ -1074,19 +1140,14 @@ static const char *ppsz_clock_descriptions[] =
     "Automatically preparse files added to the playlist " \
     "(to retrieve some metadata)." )
 
-#define FETCH_META_TEXT N_( "Authorise meta information fetching" )
-#define FETCH_META_LONGTEXT N_( \
-    "Specify if you want to attempt to fetch files'"\
-    "meta informations using the network." )
-
 #define ALBUM_ART_TEXT N_( "Album art policy" )
 #define ALBUM_ART_LONGTEXT N_( \
     "Choose how album art will be downloaded." )
 
-static int pi_albumart_values[] = { ALBUM_ART_WHEN_ASKED,
-                                    ALBUM_ART_WHEN_PLAYED,
-                                    ALBUM_ART_ALL };
-static const char *ppsz_albumart_descriptions[] =
+static const int pi_albumart_values[] = { ALBUM_ART_WHEN_ASKED,
+                                          ALBUM_ART_WHEN_PLAYED,
+                                          ALBUM_ART_ALL };
+static const char *const ppsz_albumart_descriptions[] =
     { N_("Manual download only"),
       N_("When track starts playing"),
       N_("As soon as track is added") };
@@ -1121,14 +1182,10 @@ static const char *ppsz_albumart_descriptions[] =
     "The media library is automatically saved and reloaded each time you " \
     "start VLC." )
 
-#define PLTREE_TEXT N_("Use playlist tree")
+#define PLTREE_TEXT N_("Display playlist tree")
 #define PLTREE_LONGTEXT N_( \
     "The playlist can use a tree to categorize some items, like the " \
-    "contents of a directory. \"Default\" means that the tree will only " \
-    "be used when really needed." )
-static int pi_pltree_values[] = { 0, 1, 2 };
-static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N_("Never") };
-
+    "contents of a directory." )
 
 
 /*****************************************************************************
@@ -1187,6 +1244,9 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N
 #define JFLONG_KEY_TEXT N_("Long forward jump")
 #define JFLONG_KEY_LONGTEXT \
     N_("Select the hotkey to make a long forward jump.")
+#define FRAME_NEXT_KEY_TEXT N_("Next frame")
+#define FRAME_NEXT_KEY_LONGTEXT \
+    N_("Select the hotkey to got to the next video frame.")
 
 #define JIEXTRASHORT_TEXT N_("Very short jump length")
 #define JIEXTRASHORT_LONGTEXT N_("Very short jump length, in seconds.")
@@ -1288,6 +1348,8 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N
 #define ASPECT_RATIO_KEY_LONGTEXT N_("Cycle through a predefined list of source aspect ratios.")
 #define CROP_KEY_TEXT N_("Cycle video crop")
 #define CROP_KEY_LONGTEXT N_("Cycle through a predefined list of crop formats.")
+#define TOGGLE_SCALING_KEY_TEXT N_("Toggle upscaling")
+#define TOGGLE_SCALING_KEY_LONGTEXT N_("Activate or deactivate upscaling.")
 #define DEINTERLACE_KEY_TEXT N_("Cycle deinterlace modes")
 #define DEINTERLACE_KEY_LONGTEXT N_("Cycle through deinterlace modes.")
 #define INTF_SHOW_KEY_TEXT N_("Show interface")
@@ -1340,9 +1402,9 @@ static const char *ppsz_pltree_descriptions[] = { N_("Default"), N_("Always"), N
     "video output for the time being." )
 
 #define MENU_ON_KEY_TEXT N_("Display OSD menu on top of video output")
-#define MENU_ON_KEY_LONGTEXT N_("Display OSDmenu on top of video output")
+#define MENU_ON_KEY_LONGTEXT N_("Display OSD menu on top of video output")
 #define MENU_OFF_KEY_TEXT N_("Do not display OSD menu on video output")
-#define MENU_OFF_KEY_LONGTEXT N_("Do not display OSDmenu on top of video output")
+#define MENU_OFF_KEY_LONGTEXT N_("Do not display OSD menu on top of video output")
 #define MENU_RIGHT_KEY_TEXT N_("Highlight widget on the right")
 #define MENU_RIGHT_KEY_LONGTEXT N_( \
         "Move OSD menu highlight to the widget on the right")
@@ -1396,12 +1458,12 @@ const char vlc_usage[] = N_(
 /*
  * Quick usage guide for the configuration options:
  *
- * add_category_hint( N_(text), N_(longtext), b_advanced_option );
- * add_subcategory_hint( N_(text), N_(longtext), b_advanced_option );
- * add_usage_hint( N_(text), b_advanced_option );
+ * add_category_hint( N_(text), N_(longtext), b_advanced_option )
+ * add_subcategory_hint( N_(text), N_(longtext), b_advanced_option )
+ * add_usage_hint( N_(text), b_advanced_option )
  * add_string( option_name, value, p_callback, N_(text), N_(longtext),
                b_advanced_option );
- * add_file( option_name, psz_value, p_callback, N_(text), N_(longtext) );
+ * add_file( option_name, psz_value, p_callback, N_(text), N_(longtext) )
  * add_module( option_name, psz_value, i_capability, p_callback,
  *             N_(text), N_(longtext) );
  * add_integer( option_name, i_value, p_callback, N_(text), N_(longtext),
@@ -1410,13 +1472,14 @@ const char vlc_usage[] = N_(
              b_advanced_option );
  */
 
-vlc_module_begin();
+vlc_module_begin ()
 /* Audio options */
-    set_category( CAT_AUDIO );
-    set_subcategory( SUBCAT_AUDIO_GENERAL );
-    add_category_hint( N_("Audio"), AOUT_CAT_LONGTEXT , false );
+    set_category( CAT_AUDIO )
+    set_subcategory( SUBCAT_AUDIO_GENERAL )
+    add_category_hint( N_("Audio"), AOUT_CAT_LONGTEXT , false )
 
-    add_bool( "audio", 1, NULL, AUDIO_TEXT, AUDIO_LONGTEXT, false );
+    add_bool( "audio", 1, NULL, AUDIO_TEXT, AUDIO_LONGTEXT, false )
+        change_safe ()
     add_integer_with_range( "volume", AOUT_VOLUME_DEFAULT, AOUT_VOLUME_MIN,
                             AOUT_VOLUME_MAX, NULL, VOLUME_TEXT,
                             VOLUME_LONGTEXT, false );
@@ -1429,12 +1492,13 @@ vlc_module_begin();
     add_bool( "hq-resampling", 1, NULL, AOUT_RESAMP_TEXT,
               AOUT_RESAMP_LONGTEXT, true );
 #endif
-    add_bool( "spdif", 0, NULL, SPDIF_TEXT, SPDIF_LONGTEXT, false );
+    add_bool( "spdif", 0, NULL, SPDIF_TEXT, SPDIF_LONGTEXT, false )
     add_integer( "force-dolby-surround", 0, NULL, FORCE_DOLBY_TEXT,
                  FORCE_DOLBY_LONGTEXT, false );
-        change_integer_list( pi_force_dolby_values, ppsz_force_dolby_descriptions, 0 );
+        change_integer_list( pi_force_dolby_values, ppsz_force_dolby_descriptions, NULL );
     add_integer( "audio-desync", 0, NULL, DESYNC_TEXT,
                  DESYNC_LONGTEXT, true );
+        change_safe ()
 
     /* FIXME TODO create a subcat replay gain ? */
     add_string( "audio-replay-gain-mode", ppsz_replay_gain_mode[0], NULL, AUDIO_REPLAY_GAIN_MODE_TEXT,
@@ -1447,33 +1511,38 @@ 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 );
 
-    set_subcategory( SUBCAT_AUDIO_AOUT );
+    add_bool( "audio-time-stretch", true, NULL,
+              AUDIO_TIME_STRETCH_TEXT, AUDIO_TIME_STRETCH_LONGTEXT, false );
+
+    set_subcategory( SUBCAT_AUDIO_AOUT )
     add_module( "aout", "audio output", NULL, NULL, AOUT_TEXT, AOUT_LONGTEXT,
                 true );
-        change_short('A');
-    set_subcategory( SUBCAT_AUDIO_AFILTER );
+        change_short('A')
+    set_subcategory( SUBCAT_AUDIO_AFILTER )
     add_module_list_cat( "audio-filter", SUBCAT_AUDIO_AFILTER, 0,
                          NULL, AUDIO_FILTER_TEXT,
                          AUDIO_FILTER_LONGTEXT, false );
-    set_subcategory( SUBCAT_AUDIO_VISUAL );
+    set_subcategory( SUBCAT_AUDIO_VISUAL )
     add_module( "audio-visual", "visualization",NULL, NULL,AUDIO_VISUAL_TEXT,
                 AUDIO_VISUAL_LONGTEXT, false );
 
 /* Video options */
-    set_category( CAT_VIDEO );
-    set_subcategory( SUBCAT_VIDEO_GENERAL );
-    add_category_hint( N_("Video"), VOUT_CAT_LONGTEXT , false );
+    set_category( CAT_VIDEO )
+    set_subcategory( SUBCAT_VIDEO_GENERAL )
+    add_category_hint( N_("Video"), VOUT_CAT_LONGTEXT , false )
 
-    add_bool( "video", 1, NULL, VIDEO_TEXT, VIDEO_LONGTEXT, true );
+    add_bool( "video", 1, NULL, VIDEO_TEXT, VIDEO_LONGTEXT, true )
+        change_safe ()
     add_bool( "grayscale", 0, NULL, GRAYSCALE_TEXT,
               GRAYSCALE_LONGTEXT, true );
     add_bool( "fullscreen", 0, NULL, FULLSCREEN_TEXT,
               FULLSCREEN_LONGTEXT, false );
-        change_short('f');
+        change_short('f')
+        change_safe ()
     add_bool( "embedded-video", 1, NULL, EMBEDDED_TEXT, EMBEDDED_LONGTEXT,
               true );
 #ifdef __APPLE__
-       add_deprecated_alias( "macosx-embedded" ); /*deprecated since 0.9.0 */
+       add_deprecated_alias( "macosx-embedded" ) /*deprecated since 0.9.0 */
 #endif
     add_bool( "drop-late-frames", 1, NULL, DROP_LATE_FRAMES_TEXT,
               DROP_LATE_FRAMES_LONGTEXT, true );
@@ -1482,8 +1551,10 @@ 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_integer_list( pi_vout_event_values, ppsz_vout_event_descriptions, NULL )
 #ifndef __APPLE__
-    add_bool( "overlay", 1, NULL, OVERLAY_TEXT, OVERLAY_LONGTEXT, false );
+    add_bool( "overlay", 1, NULL, OVERLAY_TEXT, OVERLAY_LONGTEXT, false )
 #endif
     add_bool( "video-on-top", 0, NULL, VIDEO_ON_TOP_TEXT,
               VIDEO_ON_TOP_LONGTEXT, false );
@@ -1496,15 +1567,13 @@ vlc_module_begin();
                  VIDEO_TITLE_TIMEOUT_LONGTEXT, false );
     add_integer( "video-title-position", 8, NULL, VIDEO_TITLE_POSITION_TEXT,
                  VIDEO_TITLE_POSITION_LONGTEXT, false );
-    // autohide after 3s
-    add_integer( "mouse-hide-timeout", 3000, NULL, MOUSE_HIDE_TIMEOUT_TEXT,
+        change_integer_list( pi_pos_values, ppsz_pos_descriptions, NULL );
+    // autohide after 1.5s
+    add_integer( "mouse-hide-timeout", 1500, NULL, MOUSE_HIDE_TIMEOUT_TEXT,
                  MOUSE_HIDE_TIMEOUT_LONGTEXT, false );
-        change_integer_list( pi_pos_values, ppsz_pos_descriptions, 0 );
-
-    set_section( N_("Snapshot") , NULL );
+    set_section( N_("Snapshot") , NULL )
     add_directory( "snapshot-path", NULL, NULL, SNAP_PATH_TEXT,
                    SNAP_PATH_LONGTEXT, false );
-        change_unsafe();
     add_string( "snapshot-prefix", "vlcsnap-", NULL, SNAP_PREFIX_TEXT,
                    SNAP_PREFIX_LONGTEXT, false );
     add_string( "snapshot-format", "png", NULL, SNAP_FORMAT_TEXT,
@@ -1519,57 +1588,65 @@ vlc_module_begin();
     add_integer( "snapshot-height", -1, NULL, SNAP_HEIGHT_TEXT,
                  SNAP_HEIGHT_LONGTEXT, true );
 
-    set_section( N_("Window properties" ), NULL );
-    add_integer( "width", -1, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true );
-    add_integer( "height", -1, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true );
-    add_integer( "video-x", -1, NULL, VIDEOX_TEXT, VIDEOX_LONGTEXT, true );
-    add_integer( "video-y", -1, NULL, VIDEOY_TEXT, VIDEOY_LONGTEXT, true );
-    add_string( "crop", NULL, NULL, CROP_TEXT, CROP_LONGTEXT, false );
+    set_section( N_("Window properties" ), NULL )
+    add_integer( "width", -1, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true )
+        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 )
+        change_safe ()
+    add_integer( "video-y", -1, NULL, VIDEOY_TEXT, VIDEOY_LONGTEXT, true )
+        change_safe ()
+    add_string( "crop", NULL, NULL, CROP_TEXT, CROP_LONGTEXT, false )
+        change_safe ()
     add_string( "custom-crop-ratios", NULL, NULL, CUSTOM_CROP_RATIOS_TEXT,
                 CUSTOM_CROP_RATIOS_LONGTEXT, false );
     add_string( "aspect-ratio", NULL, NULL,
                 ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, false );
+        change_safe ()
+    add_bool( "scaling", true, NULL, SCALING_TEXT, SCALING_LONGTEXT, false )
+        change_safe ()
     add_string( "monitor-par", NULL, NULL,
                 MASPECT_RATIO_TEXT, MASPECT_RATIO_LONGTEXT, true );
     add_string( "custom-aspect-ratios", NULL, NULL, CUSTOM_ASPECT_RATIOS_TEXT,
                 CUSTOM_ASPECT_RATIOS_LONGTEXT, false );
-    add_bool( "hdtv-fix", 1, NULL, HDTV_FIX_TEXT, HDTV_FIX_LONGTEXT, true );
+    add_bool( "hdtv-fix", 1, NULL, HDTV_FIX_TEXT, HDTV_FIX_LONGTEXT, true )
     add_bool( "video-deco", 1, NULL, VIDEO_DECO_TEXT,
               VIDEO_DECO_LONGTEXT, true );
     add_string( "video-title", NULL, NULL, VIDEO_TITLE_TEXT,
                  VIDEO_TITLE_LONGTEXT, true );
-    add_integer( "align", 0, NULL, ALIGN_TEXT, ALIGN_LONGTEXT, true );
-        change_integer_list( pi_align_values, ppsz_align_descriptions, 0 );
-    add_float( "zoom", 1, NULL, ZOOM_TEXT, ZOOM_LONGTEXT, true );
+    add_integer( "align", 0, NULL, ALIGN_TEXT, ALIGN_LONGTEXT, true )
+        change_integer_list( pi_align_values, ppsz_align_descriptions, NULL );
+    add_float( "zoom", 1, NULL, ZOOM_TEXT, ZOOM_LONGTEXT, true )
 
 
-    set_subcategory( SUBCAT_VIDEO_VOUT );
+    set_subcategory( SUBCAT_VIDEO_VOUT )
     add_module( "vout", "video output", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT,
                 true );
-        change_short('V');
+        change_short('V')
 
-    set_subcategory( SUBCAT_VIDEO_VFILTER );
+    set_subcategory( SUBCAT_VIDEO_VFILTER )
     add_module_list_cat( "video-filter", SUBCAT_VIDEO_VFILTER, NULL, NULL,
                 VIDEO_FILTER_TEXT, VIDEO_FILTER_LONGTEXT, false );
-       add_deprecated_alias( "filter" ); /*deprecated since 0.8.2 */
-//       add_deprecated_alias( "vout-filter" ); /* deprecated since 0.8.6 *// While the "video-filter" chain isn't parsed for both vfilter and vfilter2, keep both options
+       add_deprecated_alias( "filter" ) /*deprecated since 0.8.2 */
     add_module_list_cat( "vout-filter", SUBCAT_VIDEO_VFILTER, NULL, NULL,
-                        NULL, NULL, false );
+                        VOUT_FILTER_TEXT, VOUT_FILTER_LONGTEXT, false );
 #if 0
-    add_string( "pixel-ratio", "1", NULL, PIXEL_RATIO_TEXT, PIXEL_RATIO_TEXT );
+    add_string( "pixel-ratio", "1", NULL, PIXEL_RATIO_TEXT, PIXEL_RATIO_TEXT )
 #endif
 
 /* Subpictures options */
-    set_subcategory( SUBCAT_VIDEO_SUBPIC );
-    set_section( N_("On Screen Display") , NULL );
-    add_category_hint( N_("Subpictures"), SUB_CAT_LONGTEXT , false );
+    set_subcategory( SUBCAT_VIDEO_SUBPIC )
+    set_section( N_("On Screen Display") , NULL )
+    add_category_hint( N_("Subpictures"), SUB_CAT_LONGTEXT , false )
 
-    add_bool( "spu", 1, NULL, SPU_TEXT, SPU_LONGTEXT, true );
-    add_bool( "osd", 1, NULL, OSD_TEXT, OSD_LONGTEXT, false );
+    add_bool( "spu", 1, NULL, SPU_TEXT, SPU_LONGTEXT, true )
+        change_safe ()
+    add_bool( "osd", 1, NULL, OSD_TEXT, OSD_LONGTEXT, false )
     add_module( "text-renderer", "text renderer", NULL, NULL, TEXTRENDERER_TEXT,
                 TEXTRENDERER_LONGTEXT, true );
 
-    set_section( N_("Subtitles") , NULL );
+    set_section( N_("Subtitles") , NULL )
     add_file( "sub-file", NULL, NULL, SUB_FILE_TEXT,
               SUB_FILE_LONGTEXT, false );
     add_bool( "sub-autodetect-file", true, NULL,
@@ -1585,46 +1662,62 @@ vlc_module_begin();
                  SUB_PATH_TEXT, SUB_PATH_LONGTEXT, true );
     add_integer( "sub-margin", 0, NULL, SUB_MARGIN_TEXT,
                  SUB_MARGIN_LONGTEXT, true );
-        add_deprecated_alias( "spu-margin" ); /*Deprecated since 0.8.2 */
-    set_section( N_( "Overlays" ) , NULL );
+        add_deprecated_alias( "spu-margin" ) /*Deprecated since 0.8.2 */
+    set_section( N_( "Overlays" ) , NULL )
     add_module_list_cat( "sub-filter", SUBCAT_VIDEO_SUBPIC, NULL, NULL,
                 SUB_FILTER_TEXT, SUB_FILTER_LONGTEXT, false );
 
 /* Input options */
-    set_category( CAT_INPUT );
-    set_subcategory( SUBCAT_INPUT_GENERAL );
+    set_category( CAT_INPUT )
+    set_subcategory( SUBCAT_INPUT_GENERAL )
 
-    set_section( N_( "Track settings" ), NULL );
+    set_section( N_( "Track settings" ), NULL )
     add_integer( "program", 0, NULL,
                  INPUT_PROGRAM_TEXT, INPUT_PROGRAM_LONGTEXT, true );
+        change_safe ()
     add_string( "programs", "", NULL,
                 INPUT_PROGRAMS_TEXT, INPUT_PROGRAMS_LONGTEXT, true );
+        change_safe ()
     add_integer( "audio-track", -1, NULL,
                  INPUT_AUDIOTRACK_TEXT, INPUT_AUDIOTRACK_LONGTEXT, true );
-       add_deprecated_alias( "audio-channel" ); /*deprecated since 0.8.2 */
+        change_safe ()
+        add_deprecated_alias( "audio-channel" ) /*deprecated since 0.8.2 */
     add_integer( "sub-track", -1, NULL,
                  INPUT_SUBTRACK_TEXT, INPUT_SUBTRACK_LONGTEXT, true );
-       add_deprecated_alias("spu-channel" ); /*deprecated since 0.8.2*/
+        change_safe ()
+        add_deprecated_alias("spu-channel" ) /*deprecated since 0.8.2*/
     add_string( "audio-language", "", NULL,
                  INPUT_AUDIOTRACK_LANG_TEXT, INPUT_AUDIOTRACK_LANG_LONGTEXT,
                   false );
+        change_safe ()
     add_string( "sub-language", "", NULL,
                  INPUT_SUBTRACK_LANG_TEXT, INPUT_SUBTRACK_LANG_LONGTEXT,
                   false );
+        change_safe ()
     add_integer( "audio-track-id", -1, NULL, INPUT_AUDIOTRACK_ID_TEXT,
                  INPUT_AUDIOTRACK_ID_LONGTEXT, true );
+        change_safe ()
     add_integer( "sub-track-id", -1, NULL,
                  INPUT_SUBTRACK_ID_TEXT, INPUT_SUBTRACK_ID_LONGTEXT, true );
+        change_safe ()
 
-    set_section( N_( "Playback control" ) , NULL);
+    set_section( N_( "Playback control" ) , NULL)
     add_integer( "input-repeat", 0, NULL,
                  INPUT_REPEAT_TEXT, INPUT_REPEAT_LONGTEXT, false );
+        change_safe ()
     add_integer( "start-time", 0, NULL,
                  START_TIME_TEXT, START_TIME_LONGTEXT, true );
+        change_safe ()
     add_integer( "stop-time", 0, NULL,
                  STOP_TIME_TEXT, STOP_TIME_LONGTEXT, true );
+        change_safe ()
     add_integer( "run-time", 0, NULL,
                  RUN_TIME_TEXT, RUN_TIME_LONGTEXT, true );
+        change_safe ()
+    add_bool( "input-fast-seek", false, NULL,
+              INPUT_FAST_SEEK_TEXT, INPUT_FAST_SEEK_LONGTEXT, false );
+        change_safe ()
+
     add_string( "input-list", NULL, NULL,
                  INPUT_LIST_TEXT, INPUT_LIST_LONGTEXT, true );
     add_string( "input-slave", NULL, NULL,
@@ -1633,7 +1726,7 @@ vlc_module_begin();
     add_string( "bookmarks", NULL, NULL,
                  BOOKMARKS_TEXT, BOOKMARKS_LONGTEXT, true );
 
-    set_section( N_( "Default devices") , NULL );
+    set_section( N_( "Default devices") , NULL )
 
     add_file( "dvd", DVD_DEVICE, NULL, DVD_DEV_TEXT, DVD_DEV_LONGTEXT,
               false );
@@ -1642,19 +1735,19 @@ vlc_module_begin();
     add_file( "cd-audio", CDAUDIO_DEVICE, NULL, CDAUDIO_DEV_TEXT,
               CDAUDIO_DEV_LONGTEXT, false );
 
-    set_section( N_( "Network settings" ), NULL );
+    set_section( N_( "Network settings" ), NULL )
 
     add_integer( "server-port", 1234, NULL,
                  SERVER_PORT_TEXT, SERVER_PORT_LONGTEXT, false );
-    add_integer( "mtu", MTU_DEFAULT, NULL, MTU_TEXT, MTU_LONGTEXT, true );
-    add_bool( "ipv6", 0, NULL, IPV6_TEXT, IPV6_LONGTEXT, false );
-        change_short('6');
-    add_bool( "ipv4", 0, NULL, IPV4_TEXT, IPV4_LONGTEXT, false );
-        change_short('4');
+    add_integer( "mtu", MTU_DEFAULT, NULL, MTU_TEXT, MTU_LONGTEXT, true )
+    add_bool( "ipv6", 0, NULL, IPV6_TEXT, IPV6_LONGTEXT, false )
+        change_short('6')
+    add_bool( "ipv4", 0, NULL, IPV4_TEXT, IPV4_LONGTEXT, false )
+        change_short('4')
     add_integer( "ipv4-timeout", 5 * 1000, NULL, TIMEOUT_TEXT,
                  TIMEOUT_LONGTEXT, true );
 
-    set_section( N_( "Socks proxy") , NULL );
+    set_section( N_( "Socks proxy") , NULL )
     add_string( "socks", NULL, NULL,
                  SOCKS_SERVER_TEXT, SOCKS_SERVER_LONGTEXT, true );
     add_string( "socks-user", NULL, NULL,
@@ -1663,7 +1756,7 @@ vlc_module_begin();
                  SOCKS_PASS_TEXT, SOCKS_PASS_LONGTEXT, true );
 
 
-    set_section( N_("Metadata" ) , NULL );
+    set_section( N_("Metadata" ) , NULL )
     add_string( "meta-title", NULL, NULL, META_TITLE_TEXT,
                 META_TITLE_LONGTEXT, true );
     add_string( "meta-author", NULL, NULL, META_AUTHOR_TEXT,
@@ -1681,53 +1774,62 @@ vlc_module_begin();
     add_string( "meta-url", NULL, NULL, META_URL_TEXT,
                 META_URL_LONGTEXT, true );
 
-    set_section( N_( "Advanced" ), NULL );
+    set_section( N_( "Advanced" ), NULL )
 
     add_integer( "cr-average", 40, NULL, CR_AVERAGE_TEXT,
                  CR_AVERAGE_LONGTEXT, true );
     add_integer( "clock-synchro", -1, NULL, CLOCK_SYNCHRO_TEXT,
                  CLOCK_SYNCHRO_LONGTEXT, true );
-        change_integer_list( pi_clock_values, ppsz_clock_descriptions, 0 );
+        change_integer_list( pi_clock_values, ppsz_clock_descriptions, NULL );
 
     add_bool( "network-synchronisation", false, NULL, NETSYNC_TEXT,
               NETSYNC_LONGTEXT, true );
 
+    add_string( "input-record-path", NULL, NULL, INPUT_RECORD_PATH_TEXT,
+                INPUT_RECORD_PATH_LONGTEXT, true );
+    add_bool( "input-record-native", true, NULL, INPUT_RECORD_NATIVE_TEXT,
+              INPUT_RECORD_NATIVE_LONGTEXT, true );
+
+    add_string( "input-timeshift-path", NULL, NULL, INPUT_TIMESHIFT_PATH_TEXT,
+                INPUT_TIMESHIFT_PATH_LONGTEXT, true );
+    add_integer( "input-timeshift-granularity", -1, NULL, INPUT_TIMESHIFT_GRANULARITY_TEXT,
+                 INPUT_TIMESHIFT_GRANULARITY_LONGTEXT, true );
+
 /* Decoder options */
-    add_category_hint( N_("Decoders"), CODEC_CAT_LONGTEXT , true );
+    add_category_hint( N_("Decoders"), CODEC_CAT_LONGTEXT , true )
     add_string( "codec", NULL, NULL, CODEC_TEXT,
                 CODEC_LONGTEXT, true );
     add_string( "encoder",  NULL, NULL, ENCODER_TEXT,
                 ENCODER_LONGTEXT, true );
 
-    set_subcategory( SUBCAT_INPUT_ACCESS );
-    add_category_hint( N_("Input"), INPUT_CAT_LONGTEXT , false );
+    set_subcategory( SUBCAT_INPUT_ACCESS )
+    add_category_hint( N_("Input"), INPUT_CAT_LONGTEXT , false )
     add_module( "access", "access", NULL, NULL, ACCESS_TEXT,
                 ACCESS_LONGTEXT, true );
 
-    set_subcategory( SUBCAT_INPUT_ACCESS_FILTER );
-    add_module_list_cat( "access-filter", SUBCAT_INPUT_ACCESS_FILTER, NULL, NULL,
-                ACCESS_FILTER_TEXT, ACCESS_FILTER_LONGTEXT, false );
-
-
-    set_subcategory( SUBCAT_INPUT_DEMUX );
+    set_subcategory( SUBCAT_INPUT_DEMUX )
     add_module( "demux", "demux", NULL, NULL, DEMUX_TEXT,
                 DEMUX_LONGTEXT, true );
-    set_subcategory( SUBCAT_INPUT_VCODEC );
-    set_subcategory( SUBCAT_INPUT_ACODEC );
-    set_subcategory( SUBCAT_INPUT_SCODEC );
+    set_subcategory( SUBCAT_INPUT_VCODEC )
+    set_subcategory( SUBCAT_INPUT_ACODEC )
+    set_subcategory( SUBCAT_INPUT_SCODEC )
     add_bool( "prefer-system-codecs", false, NULL, SYSTEM_CODEC_TEXT,
                                 SYSTEM_CODEC_LONGTEXT, false );
 
+    set_subcategory( SUBCAT_INPUT_STREAM_FILTER )
+    add_module_list_cat( "stream-filter", SUBCAT_INPUT_STREAM_FILTER, NULL, NULL,
+                STREAM_FILTER_TEXT, STREAM_FILTER_LONGTEXT, false );
+
 
 /* Stream output options */
-    set_category( CAT_SOUT );
-    set_subcategory( SUBCAT_SOUT_GENERAL );
-    add_category_hint( N_("Stream output"), SOUT_CAT_LONGTEXT , true );
+    set_category( CAT_SOUT )
+    set_subcategory( SUBCAT_SOUT_GENERAL )
+    add_category_hint( N_("Stream output"), SOUT_CAT_LONGTEXT , true )
 
-    add_string( "sout", NULL, NULL, SOUT_TEXT, SOUT_LONGTEXT, true );
+    add_string( "sout", NULL, NULL, SOUT_TEXT, SOUT_LONGTEXT, true )
     add_bool( "sout-display", false, NULL, SOUT_DISPLAY_TEXT,
                                 SOUT_DISPLAY_LONGTEXT, true );
-    add_bool( "sout-keep", true, NULL, SOUT_KEEP_TEXT,
+    add_bool( "sout-keep", false, NULL, SOUT_KEEP_TEXT,
                                 SOUT_KEEP_LONGTEXT, true );
     add_bool( "sout-all", 0, NULL, SOUT_ALL_TEXT,
                                 SOUT_ALL_LONGTEXT, true );
@@ -1740,226 +1842,221 @@ vlc_module_begin();
     add_integer( "sout-mux-caching", 1500, NULL, SOUT_MUX_CACHING_TEXT,
                                 SOUT_MUX_CACHING_LONGTEXT, true );
 
-    set_section( N_("VLM"), NULL );
+    set_section( N_("VLM"), NULL )
     add_string( "vlm-conf", NULL, NULL, VLM_CONF_TEXT,
                     VLM_CONF_LONGTEXT, true );
 
 
 
-    set_subcategory( SUBCAT_SOUT_STREAM );
-    set_subcategory( SUBCAT_SOUT_MUX );
+    set_subcategory( SUBCAT_SOUT_STREAM )
+    set_subcategory( SUBCAT_SOUT_MUX )
     add_module( "mux", "sout mux", NULL, NULL, MUX_TEXT,
                                 MUX_LONGTEXT, true );
-    set_subcategory( SUBCAT_SOUT_ACO );
+    set_subcategory( SUBCAT_SOUT_ACO )
     add_module( "access_output", "sout access", NULL, NULL,
                 ACCESS_OUTPUT_TEXT, ACCESS_OUTPUT_LONGTEXT, true );
-    add_integer( "ttl", -1, NULL, TTL_TEXT, TTL_LONGTEXT, true );
-    add_string( "miface", NULL, NULL, MIFACE_TEXT, MIFACE_LONGTEXT, true );
-    add_string( "miface-addr", NULL, NULL, MIFACE_ADDR_TEXT, MIFACE_ADDR_LONGTEXT, true );
-    add_integer( "dscp", 0, NULL, DSCP_TEXT, DSCP_LONGTEXT, true );
+    add_integer( "ttl", -1, NULL, TTL_TEXT, TTL_LONGTEXT, true )
+    add_string( "miface", NULL, NULL, MIFACE_TEXT, MIFACE_LONGTEXT, true )
+    add_string( "miface-addr", NULL, NULL, MIFACE_ADDR_TEXT, MIFACE_ADDR_LONGTEXT, true )
+    add_integer( "dscp", 0, NULL, DSCP_TEXT, DSCP_LONGTEXT, true )
 
-    set_subcategory( SUBCAT_SOUT_PACKETIZER );
+    set_subcategory( SUBCAT_SOUT_PACKETIZER )
     add_module( "packetizer","packetizer", NULL, NULL,
                 PACKETIZER_TEXT, PACKETIZER_LONGTEXT, true );
 
-    set_subcategory( SUBCAT_SOUT_SAP );
-    add_bool( "sap-flow-control", false, NULL, ANN_SAPCTRL_TEXT,
-                               ANN_SAPCTRL_LONGTEXT, true );
+    set_subcategory( SUBCAT_SOUT_SAP )
+    add_obsolete_bool( "sap-flow-control" )
     add_integer( "sap-interval", 5, NULL, ANN_SAPINTV_TEXT,
                                ANN_SAPINTV_LONGTEXT, true );
 
-    set_subcategory( SUBCAT_SOUT_VOD );
+    set_subcategory( SUBCAT_SOUT_VOD )
 
 /* CPU options */
-    set_category( CAT_ADVANCED );
-    set_subcategory( SUBCAT_ADVANCED_CPU );
-    add_category_hint( N_("CPU"), CPU_CAT_LONGTEXT, true );
-    add_bool( "fpu", 1, NULL, FPU_TEXT, FPU_LONGTEXT, true );
-        change_need_restart();
+    set_category( CAT_ADVANCED )
+    set_subcategory( SUBCAT_ADVANCED_CPU )
+    add_category_hint( N_("CPU"), CPU_CAT_LONGTEXT, true )
+    add_bool( "fpu", 1, NULL, FPU_TEXT, FPU_LONGTEXT, true )
+        change_need_restart ()
 #if defined( __i386__ ) || defined( __x86_64__ )
-    add_bool( "mmx", 1, NULL, MMX_TEXT, MMX_LONGTEXT, true );
-        change_need_restart();
-    add_bool( "3dn", 1, NULL, THREE_DN_TEXT, THREE_DN_LONGTEXT, true );
-        change_need_restart();
-    add_bool( "mmxext", 1, NULL, MMXEXT_TEXT, MMXEXT_LONGTEXT, true );
-        change_need_restart();
-    add_bool( "sse", 1, NULL, SSE_TEXT, SSE_LONGTEXT, true );
-        change_need_restart();
-    add_bool( "sse2", 1, NULL, SSE2_TEXT, SSE2_LONGTEXT, true );
-        change_need_restart();
+    add_bool( "mmx", 1, NULL, MMX_TEXT, MMX_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "3dn", 1, NULL, THREE_DN_TEXT, THREE_DN_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "mmxext", 1, NULL, MMXEXT_TEXT, MMXEXT_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse", 1, NULL, SSE_TEXT, SSE_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse2", 1, NULL, SSE2_TEXT, SSE2_LONGTEXT, true )
+        change_need_restart ()
 #endif
 #if defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
-    add_bool( "altivec", 1, NULL, ALTIVEC_TEXT, ALTIVEC_LONGTEXT, true );
-        change_need_restart();
+    add_bool( "altivec", 1, NULL, ALTIVEC_TEXT, ALTIVEC_LONGTEXT, true )
+        change_need_restart ()
 #endif
 
 /* Misc options */
-    set_subcategory( SUBCAT_ADVANCED_MISC );
-    set_section( N_("Special modules"), NULL );
-    add_category_hint( N_("Miscellaneous"), MISC_CAT_LONGTEXT, true );
+    set_subcategory( SUBCAT_ADVANCED_MISC )
+    set_section( N_("Special modules"), NULL )
+    add_category_hint( N_("Miscellaneous"), MISC_CAT_LONGTEXT, true )
     add_module( "memcpy", "memcpy", NULL, NULL, MEMCPY_TEXT,
                 MEMCPY_LONGTEXT, true );
-        change_need_restart();
+        change_need_restart ()
 
-    set_section( N_("Plugins" ), NULL );
+    set_section( N_("Plugins" ), NULL )
     add_bool( "plugins-cache", true, NULL, PLUGINS_CACHE_TEXT,
               PLUGINS_CACHE_LONGTEXT, true );
-        change_need_restart();
+        change_need_restart ()
     add_directory( "plugin-path", NULL, NULL, PLUGIN_PATH_TEXT,
                    PLUGIN_PATH_LONGTEXT, true );
-        change_need_restart();
-        change_unsafe();
+        change_need_restart ()
+
+    set_section( N_("Performance options"), NULL )
+    add_obsolete_bool( "minimize-threads" )
 
-    set_section( N_("Performance options"), NULL );
-    add_bool( "minimize-threads", 0, NULL, MINIMIZE_THREADS_TEXT,
-              MINIMIZE_THREADS_LONGTEXT, true );
-        change_need_restart();
+    add_obsolete_bool( "use-stream-immediate" );
+
+    add_obsolete_bool( "auto-adjust-pts-delay" )
 
 #if !defined(__APPLE__) && !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
     add_bool( "rt-priority", false, NULL, RT_PRIORITY_TEXT,
               RT_PRIORITY_LONGTEXT, true );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
 #if !defined(SYS_BEOS) && defined(LIBVLC_USE_PTHREAD)
     add_integer( "rt-offset", 0, NULL, RT_OFFSET_TEXT,
                  RT_OFFSET_LONGTEXT, true );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
-#if defined(HAVE_DBUS_3)
-    add_bool( "one-instance", 0, NULL, ONEINSTANCE_DBUS_TEXT,
-              ONEINSTANCE_DBUS_LONGTEXT, true );
-    add_bool( "playlist-enqueue", 0, NULL, PLAYLISTENQUEUE_TEXT,
-              PLAYLISTENQUEUE_LONGTEXT, true );
-
+#if defined(HAVE_DBUS)
     add_bool( "inhibit", 1, NULL, INHIBIT_TEXT,
               INHIBIT_LONGTEXT, true );
 #endif
 
-#if defined(WIN32)
-    add_bool( "one-instance", 0, NULL, ONEINSTANCE_WIN_TEXT,
-              ONEINSTANCE_WIN_LONGTEXT, true );
+#if defined(WIN32) || defined(HAVE_DBUS)
+    add_bool( "one-instance", 0, NULL, ONEINSTANCE_TEXT,
+              ONEINSTANCE_LONGTEXT, true );
     add_bool( "started-from-file", 0, NULL, STARTEDFROMFILE_TEXT,
               STARTEDFROMFILE_LONGTEXT, true );
-        change_internal();
-        change_unsaveable();
+        change_internal ()
+        change_unsaveable ()
     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();
+        change_unsaveable ()
+#endif
+
+#if defined(WIN32)
     add_bool( "high-priority", 0, NULL, HPRIORITY_TEXT,
               HPRIORITY_LONGTEXT, false );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
 /* Playlist options */
-    set_category( CAT_PLAYLIST );
-    set_subcategory( SUBCAT_PLAYLIST_GENERAL );
-    add_category_hint( N_("Playlist"), PLAYLIST_CAT_LONGTEXT , false );
-    add_bool( "random", 0, NULL, RANDOM_TEXT, RANDOM_LONGTEXT, false );
-        change_short('Z');
-    add_bool( "loop", 0, NULL, LOOP_TEXT, LOOP_LONGTEXT, false );
-        change_short('L');
-    add_bool( "repeat", 0, NULL, REPEAT_TEXT, REPEAT_LONGTEXT, false );
-        change_short('R');
-    add_bool( "play-and-exit", 0, NULL, PAE_TEXT, PAE_LONGTEXT, false );
-    add_bool( "play-and-stop", 0, NULL, PAS_TEXT, PAS_LONGTEXT, false );
-    add_bool( "media-library", 1, NULL, ML_TEXT, ML_LONGTEXT, false );
-    add_integer( "playlist-tree", 0, NULL, PLTREE_TEXT, PLTREE_LONGTEXT,
-                 true );
-        change_integer_list( pi_pltree_values, ppsz_pltree_descriptions, 0 );
-
-    add_string( "open", "", NULL, OPEN_TEXT, OPEN_LONGTEXT, false );
-        change_need_restart();
+    set_category( CAT_PLAYLIST )
+    set_subcategory( SUBCAT_PLAYLIST_GENERAL )
+    add_category_hint( N_("Playlist"), PLAYLIST_CAT_LONGTEXT , false )
+    add_bool( "random", 0, NULL, RANDOM_TEXT, RANDOM_LONGTEXT, false )
+        change_short('Z')
+    add_bool( "loop", 0, NULL, LOOP_TEXT, LOOP_LONGTEXT, false )
+        change_short('L')
+    add_bool( "repeat", 0, NULL, REPEAT_TEXT, REPEAT_LONGTEXT, false )
+        change_short('R')
+    add_bool( "play-and-exit", 0, NULL, PAE_TEXT, PAE_LONGTEXT, false )
+    add_bool( "play-and-stop", 0, NULL, PAS_TEXT, PAS_LONGTEXT, false )
+    add_bool( "media-library", 1, NULL, ML_TEXT, ML_LONGTEXT, false )
+    add_bool( "playlist-tree", 0, NULL, PLTREE_TEXT, PLTREE_LONGTEXT, false )
+
+    add_string( "open", "", NULL, OPEN_TEXT, OPEN_LONGTEXT, false )
+        change_need_restart ()
 
     add_bool( "auto-preparse", true, NULL, PREPARSE_TEXT,
               PREPARSE_LONGTEXT, false );
 
-    add_integer( "fetch-meta", true, NULL, FETCH_META_TEXT,
-                 FETCH_META_LONGTEXT, false );
-
     add_integer( "album-art", ALBUM_ART_WHEN_ASKED, NULL, ALBUM_ART_TEXT,
                  ALBUM_ART_LONGTEXT, false );
         change_integer_list( pi_albumart_values,
                              ppsz_albumart_descriptions, 0 );
 
-    set_subcategory( SUBCAT_PLAYLIST_SD );
+    set_subcategory( SUBCAT_PLAYLIST_SD )
     add_module_list_cat( "services-discovery", SUBCAT_PLAYLIST_SD, NULL,
                           NULL, SD_TEXT, SD_LONGTEXT, false );
-        change_short('S');
-        change_need_restart();
+        change_short('S')
+        change_need_restart ()
 
 /* Interface options */
-    set_category( CAT_INTERFACE );
-    set_subcategory( SUBCAT_INTERFACE_GENERAL );
+    set_category( CAT_INTERFACE )
+    set_subcategory( SUBCAT_INTERFACE_GENERAL )
     add_integer( "verbose", 0, NULL, VERBOSE_TEXT, VERBOSE_LONGTEXT,
                  false );
-        change_short('v');
-    add_bool( "quiet", 0, NULL, QUIET_TEXT, QUIET_LONGTEXT, true );
-        change_short('q');
+        change_short('v')
+    add_string( "verbose-objects", 0, NULL, VERBOSE_OBJECTS_TEXT, VERBOSE_OBJECTS_LONGTEXT,
+                 false );
+    add_bool( "quiet", 0, NULL, QUIET_TEXT, QUIET_LONGTEXT, true )
+        change_short('q')
 
 #if !defined(WIN32)
-    add_bool( "daemon", 0, NULL, DAEMON_TEXT, DAEMON_LONGTEXT, true );
-        change_short('d');
-        change_need_restart();
+    add_bool( "daemon", 0, NULL, DAEMON_TEXT, DAEMON_LONGTEXT, true )
+        change_short('d')
+        change_need_restart ()
 
     add_string( "pidfile", NULL, NULL, PIDFILE_TEXT, PIDFILE_LONGTEXT,
                                        false );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
     add_bool( "file-logging", false, NULL, FILE_LOG_TEXT, FILE_LOG_LONGTEXT,
               true );
-        change_need_restart();
+        change_need_restart ()
 #ifdef HAVE_SYSLOG_H
     add_bool ( "syslog", false, NULL, SYSLOG_TEXT, SYSLOG_LONGTEXT,
                true );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
 #if defined (WIN32) || defined (__APPLE__)
     add_string( "language", "auto", NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT,
                 false );
         change_string_list( ppsz_language, ppsz_language_text, 0 );
-        change_need_restart();
+        change_need_restart ()
 #endif
 
-    add_bool( "color", true, NULL, COLOR_TEXT, COLOR_LONGTEXT, true );
+    add_bool( "color", true, NULL, COLOR_TEXT, COLOR_LONGTEXT, true )
     add_bool( "advanced", false, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT,
                     false );
-        change_need_restart();
+        change_need_restart ()
     add_bool( "interact", true, NULL, INTERACTION_TEXT,
               INTERACTION_LONGTEXT, false );
 
     add_bool( "show-intf", false, NULL, SHOWINTF_TEXT, SHOWINTF_LONGTEXT,
               false );
-        change_need_restart();
+        change_need_restart ()
 
-    add_bool ( "stats", true, NULL, STATS_TEXT, STATS_LONGTEXT, true );
-        change_need_restart();
+    add_bool ( "stats", true, NULL, STATS_TEXT, STATS_LONGTEXT, true )
+        change_need_restart ()
 
-    set_subcategory( SUBCAT_INTERFACE_MAIN );
+    set_subcategory( SUBCAT_INTERFACE_MAIN )
     add_module_cat( "intf", SUBCAT_INTERFACE_MAIN, NULL, NULL, INTF_TEXT,
                 INTF_LONGTEXT, false );
-        change_short('I');
-        change_need_restart();
+        change_short('I')
+        change_need_restart ()
     add_module_list_cat( "extraintf", SUBCAT_INTERFACE_MAIN,
                          NULL, NULL, EXTRAINTF_TEXT,
                          EXTRAINTF_LONGTEXT, false );
-        change_need_restart();
+        change_need_restart ()
 
 
-    set_subcategory( SUBCAT_INTERFACE_CONTROL );
+    set_subcategory( SUBCAT_INTERFACE_CONTROL )
     add_module_list_cat( "control", SUBCAT_INTERFACE_CONTROL, NULL, NULL,
                          CONTROL_TEXT, CONTROL_LONGTEXT, false );
-        change_need_restart();
+        change_need_restart ()
 
 /* Hotkey options*/
-    set_subcategory( SUBCAT_INTERFACE_HOTKEYS );
-    add_category_hint( N_("Hot keys"), HOTKEY_CAT_LONGTEXT , false );
+    set_subcategory( SUBCAT_INTERFACE_HOTKEYS )
+    add_category_hint( N_("Hot keys"), HOTKEY_CAT_LONGTEXT , false )
 
 #if defined(__APPLE__)
 /* Don't use the following combo's */
@@ -1975,6 +2072,7 @@ vlc_module_begin();
  *  open                          KEY_MODIFIER_COMMAND|'o'
  *  open disk                     KEY_MODIFIER_COMMAND|'d'
  *  open network                  KEY_MODIFIER_COMMAND|'n'
+ *  open capture                  KEY_MODIFIER_COMMAND|'r'
  *  save playlist                 KEY_MODIFIER_COMMAND|'s'
  *  playlist random               KEY_MODIFIER_COMMAND|'z'
  *  playlist repeat all           KEY_MODIFIER_COMMAND|'l'
@@ -2017,6 +2115,7 @@ vlc_module_begin();
 #   define KEY_JUMP_PMEDIUM       KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|KEY_RIGHT
 #   define KEY_JUMP_MLONG         KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|KEY_MODIFIER_ALT|KEY_LEFT
 #   define KEY_JUMP_PLONG         KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|KEY_MODIFIER_ALT|KEY_RIGHT
+#   define KEY_FRAME_NEXT         'e'
 #   define KEY_NAV_ACTIVATE       KEY_ENTER
 #   define KEY_NAV_UP             KEY_UP
 #   define KEY_NAV_DOWN           KEY_DOWN
@@ -2034,9 +2133,10 @@ vlc_module_begin();
 #   define KEY_SUBTITLE_TRACK     's'
 #   define KEY_ASPECT_RATIO       'a'
 #   define KEY_CROP               'c'
+#   define KEY_TOGGLE_SCALING     'o'
 #   define KEY_DEINTERLACE        'd'
 #   define KEY_INTF_SHOW          'i'
-#   define KEY_INTF_HIDE          'I'
+#   define KEY_INTF_HIDE          KEY_MODIFIER_SHIFT|'i'
 #   define KEY_DISC_MENU          KEY_MODIFIER_CTRL|'m'
 #   define KEY_TITLE_PREV         KEY_MODIFIER_CTRL|'p'
 #   define KEY_TITLE_NEXT         KEY_MODIFIER_CTRL|'n'
@@ -2058,7 +2158,7 @@ vlc_module_begin();
 #   define KEY_UNCROP_RIGHT       KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'l'
 
 /* the macosx-interface already has bindings */
-#   define KEY_ZOOM_QUARTER       KEY_UNSET 
+#   define KEY_ZOOM_QUARTER       KEY_UNSET
 #   define KEY_ZOOM_HALF          KEY_UNSET
 #   define KEY_ZOOM_ORIGINAL      KEY_UNSET
 #   define KEY_ZOOM_DOUBLE        KEY_UNSET
@@ -2097,7 +2197,14 @@ vlc_module_begin();
 #   define KEY_MENU_DOWN          KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_DOWN
 #   define KEY_MENU_SELECT        KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_ENTER
 
-#else
+#else /* Non Mac OS X */
+    /*
+       You should try to avoid Ctrl + letter key, because they are usually for
+       dialogs showing and interface related stuffs.
+       It would be nice (less important than previous rule) to try to avoid
+       alt + letter key, because they are usually for menu accelerators and you
+       don't know how the translator is going to do it.
+     */
 #   define KEY_TOGGLE_FULLSCREEN  'f'
 #   define KEY_LEAVE_FULLSCREEN   KEY_ESC
 #   define KEY_PLAY_PAUSE         KEY_SPACE
@@ -2117,6 +2224,7 @@ vlc_module_begin();
 #   define KEY_JUMP_PMEDIUM       KEY_MODIFIER_CTRL|KEY_RIGHT
 #   define KEY_JUMP_MLONG         KEY_MODIFIER_CTRL|KEY_MODIFIER_ALT|KEY_LEFT
 #   define KEY_JUMP_PLONG         KEY_MODIFIER_CTRL|KEY_MODIFIER_ALT|KEY_RIGHT
+#   define KEY_FRAME_NEXT         'e'
 #   define KEY_NAV_ACTIVATE       KEY_ENTER
 #   define KEY_NAV_UP             KEY_UP
 #   define KEY_NAV_DOWN           KEY_DOWN
@@ -2137,33 +2245,45 @@ vlc_module_begin();
 #   define KEY_SUBTITLE_TRACK     'v'
 #   define KEY_ASPECT_RATIO       'a'
 #   define KEY_CROP               'c'
+#   define KEY_TOGGLE_SCALING     'o'
 #   define KEY_DEINTERLACE        'd'
 #   define KEY_INTF_SHOW          'i'
-#   define KEY_INTF_HIDE          'I'
-#   define KEY_DISC_MENU          KEY_MODIFIER_ALT|'r'
-#   define KEY_TITLE_PREV         KEY_MODIFIER_ALT|'o'
-#   define KEY_TITLE_NEXT         KEY_MODIFIER_ALT|'b'
-#   define KEY_CHAPTER_PREV       KEY_MODIFIER_ALT|'p'
-#   define KEY_CHAPTER_NEXT       KEY_MODIFIER_ALT|'n'
-#   define KEY_SNAPSHOT           KEY_MODIFIER_CTRL|KEY_MODIFIER_ALT|'s'
+#   define KEY_INTF_HIDE          KEY_MODIFIER_SHIFT|'i'
+#   define KEY_DISC_MENU          KEY_MODIFIER_SHIFT|'m'
+#   define KEY_TITLE_PREV         KEY_MODIFIER_SHIFT|'o'
+#   define KEY_TITLE_NEXT         KEY_MODIFIER_SHIFT|'b'
+#   define KEY_CHAPTER_PREV       KEY_MODIFIER_SHIFT|'p'
+#   define KEY_CHAPTER_NEXT       KEY_MODIFIER_SHIFT|'n'
+#   define KEY_SNAPSHOT           KEY_MODIFIER_SHIFT|'s'
 
 #   define KEY_ZOOM               'z'
 #   define KEY_UNZOOM             KEY_MODIFIER_SHIFT|'z'
 
-#   define KEY_CROP_TOP           KEY_MODIFIER_ALT|'i'
-#   define KEY_UNCROP_TOP         KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'i'
-#   define KEY_CROP_LEFT          KEY_MODIFIER_ALT|'j'
-#   define KEY_UNCROP_LEFT        KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'j'
-#   define KEY_CROP_BOTTOM        KEY_MODIFIER_ALT|'k'
-#   define KEY_UNCROP_BOTTOM      KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'k'
-#   define KEY_CROP_RIGHT         KEY_MODIFIER_ALT|'l'
-#   define KEY_UNCROP_RIGHT       KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'l'
+#   define KEY_AUDIODEVICE_CYCLE  KEY_MODIFIER_SHIFT|'a'
 
+#   define KEY_HISTORY_BACK       KEY_MODIFIER_SHIFT|'g'
+#   define KEY_HISTORY_FORWARD    KEY_MODIFIER_SHIFT|'h'
+#   define KEY_RECORD             KEY_MODIFIER_SHIFT|'r'
+#   define KEY_DUMP               KEY_MODIFIER_SHIFT|'d'
+#   define KEY_WALLPAPER          'w'
+
+/* Cropping */
+#   define KEY_CROP_TOP           KEY_MODIFIER_ALT|'r'
+#   define KEY_UNCROP_TOP         KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'r'
+#   define KEY_CROP_LEFT          KEY_MODIFIER_ALT|'d'
+#   define KEY_UNCROP_LEFT        KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'d'
+#   define KEY_CROP_BOTTOM        KEY_MODIFIER_ALT|'c'
+#   define KEY_UNCROP_BOTTOM      KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'c'
+#   define KEY_CROP_RIGHT         KEY_MODIFIER_ALT|'f'
+#   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'
 
+/* Bookmarks */
 #   define KEY_SET_BOOKMARK1      KEY_MODIFIER_CTRL|KEY_F1
 #   define KEY_SET_BOOKMARK2      KEY_MODIFIER_CTRL|KEY_F2
 #   define KEY_SET_BOOKMARK3      KEY_MODIFIER_CTRL|KEY_F3
@@ -2184,25 +2304,20 @@ vlc_module_begin();
 #   define KEY_PLAY_BOOKMARK8     KEY_F8
 #   define KEY_PLAY_BOOKMARK9     KEY_F9
 #   define KEY_PLAY_BOOKMARK10    KEY_F10
-#   define KEY_HISTORY_BACK       KEY_MODIFIER_ALT|'g'
-#   define KEY_HISTORY_FORWARD    KEY_MODIFIER_ALT|'h'
-#   define KEY_RECORD             KEY_MODIFIER_CTRL|KEY_MODIFIER_SHIFT|'r'
-#   define KEY_DUMP               KEY_MODIFIER_CTRL|KEY_MODIFIER_SHIFT|'d'
-#   define KEY_WALLPAPER          'w'
 
-#   define KEY_MENU_ON            KEY_MODIFIER_ALT|'m'
-#   define KEY_MENU_OFF           KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'m'
+/* OSD menu */
+#   define KEY_MENU_ON            KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|'m'
+#   define KEY_MENU_OFF           KEY_MODIFIER_ALT|KEY_MODIFIER_CTRL|'m'
 #   define KEY_MENU_RIGHT         KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_RIGHT
 #   define KEY_MENU_LEFT          KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_LEFT
 #   define KEY_MENU_UP            KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_UP
 #   define KEY_MENU_DOWN          KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_DOWN
 #   define KEY_MENU_SELECT        KEY_MODIFIER_ALT|KEY_MODIFIER_SHIFT|KEY_ENTER
-#   define KEY_AUDIODEVICE_CYCLE  KEY_MODIFIER_ALT|'a'
 #endif
 
     add_key( "key-toggle-fullscreen", KEY_TOGGLE_FULLSCREEN, NULL, TOGGLE_FULLSCREEN_KEY_TEXT,
              TOGGLE_FULLSCREEN_KEY_LONGTEXT, false );
-       add_deprecated_alias( "key-fullscreen" ); /*deprecated since 0.9.0 */
+       add_deprecated_alias( "key-fullscreen" ) /*deprecated since 0.9.0 */
     add_key( "key-leave-fullscreen", KEY_LEAVE_FULLSCREEN, NULL, LEAVE_FULLSCREEN_KEY_TEXT,
              LEAVE_FULLSCREEN_KEY_LONGTEXT, false );
     add_key( "key-play-pause", KEY_PLAY_PAUSE, NULL, PLAY_PAUSE_KEY_TEXT,
@@ -2239,6 +2354,8 @@ vlc_module_begin();
              JBLONG_KEY_LONGTEXT, false );
     add_key( "key-jump+long", KEY_JUMP_PLONG, NULL, JFLONG_KEY_TEXT,
              JFLONG_KEY_LONGTEXT, false );
+    add_key( "key-frame-next", KEY_FRAME_NEXT, NULL, FRAME_NEXT_KEY_TEXT,
+             FRAME_NEXT_KEY_LONGTEXT, false );
     add_key( "key-nav-activate", KEY_NAV_ACTIVATE, NULL, NAV_ACTIVATE_KEY_TEXT,
              NAV_ACTIVATE_KEY_LONGTEXT, true );
     add_key( "key-nav-up", KEY_NAV_UP, NULL, NAV_UP_KEY_TEXT,
@@ -2286,6 +2403,8 @@ vlc_module_begin();
              ASPECT_RATIO_KEY_TEXT, ASPECT_RATIO_KEY_LONGTEXT, false );
     add_key( "key-crop", KEY_CROP, NULL,
              CROP_KEY_TEXT, CROP_KEY_LONGTEXT, false );
+    add_key( "key-toggle-scaling", KEY_TOGGLE_SCALING, NULL,
+             TOGGLE_SCALING_KEY_TEXT, TOGGLE_SCALING_KEY_LONGTEXT, false );
     add_key( "key-deinterlace", KEY_DEINTERLACE, NULL,
              DEINTERLACE_KEY_TEXT, DEINTERLACE_KEY_LONGTEXT, false );
     add_key( "key-intf-show", KEY_INTF_SHOW, NULL,
@@ -2345,17 +2464,17 @@ vlc_module_begin();
     add_key( "key-loop", KEY_LOOP, NULL,
              LOOP_KEY_TEXT, LOOP_KEY_LONGTEXT, false );
 
-    set_section ( N_("Zoom" ), NULL );
-    add_key( "key-zoom-quarter",  KEY_ZOOM_QUARTER, NULL, 
+    set_section ( N_("Zoom" ), NULL )
+    add_key( "key-zoom-quarter",  KEY_ZOOM_QUARTER, NULL,
         ZOOM_QUARTER_KEY_TEXT,  NULL, false );
-    add_key( "key-zoom-half",     KEY_ZOOM_HALF, NULL, 
+    add_key( "key-zoom-half",     KEY_ZOOM_HALF, NULL,
         ZOOM_HALF_KEY_TEXT,     NULL, false );
-    add_key( "key-zoom-original", KEY_ZOOM_ORIGINAL, NULL, 
+    add_key( "key-zoom-original", KEY_ZOOM_ORIGINAL, NULL,
         ZOOM_ORIGINAL_KEY_TEXT, NULL, false );
-    add_key( "key-zoom-double",   KEY_ZOOM_DOUBLE, NULL, 
+    add_key( "key-zoom-double",   KEY_ZOOM_DOUBLE, NULL,
         ZOOM_DOUBLE_KEY_TEXT,   NULL, false );
-    
-    set_section ( N_("Jump sizes" ), NULL );
+
+    set_section ( N_("Jump sizes" ), NULL )
     add_integer( "extrashort-jump-size", 3, NULL, JIEXTRASHORT_TEXT,
                                     JIEXTRASHORT_LONGTEXT, false );
     add_integer( "short-jump-size", 10, NULL, JISHORT_TEXT,
@@ -2366,8 +2485,8 @@ vlc_module_begin();
                                     JILONG_LONGTEXT, false );
 
     /* HACK so these don't get displayed */
-    set_category( -1 );
-    set_subcategory( -1 );
+    set_category( -1 )
+    set_subcategory( -1 )
     add_key( "key-set-bookmark1", KEY_SET_BOOKMARK1, NULL,
              SET_BOOKMARK1_KEY_TEXT, SET_BOOKMARK_KEY_LONGTEXT, true );
     add_key( "key-set-bookmark2", KEY_SET_BOOKMARK2, NULL,
@@ -2434,6 +2553,8 @@ vlc_module_begin();
 #define HELP_TEXT \
     N_("print help for VLC (can be combined with --advanced and " \
        "--help-verbose)")
+#define FULL_HELP_TEXT \
+    N_("Exhaustive help for VLC and its modules")
 #define LONGHELP_TEXT \
     N_("print help for VLC and all its modules (can be combined with " \
        "--advanced and --help-verbose)")
@@ -2445,7 +2566,8 @@ 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)")
+       "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 \
@@ -2458,62 +2580,64 @@ vlc_module_begin();
     N_("resets the current plugins cache")
 #define VERSION_TEXT \
     N_("print version information")
-    add_bool( "help", false, NULL, HELP_TEXT, "", false );
-        change_short( 'h' );
-        change_internal();
-        change_unsaveable();
-    add_bool( "longhelp", false, NULL, LONGHELP_TEXT, "", false );
-        change_short( 'H' );
-        change_internal();
-        change_unsaveable();
+
+    add_bool( "help", false, NULL, HELP_TEXT, "", false )
+        change_short( 'h' )
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "full-help", false, NULL, FULL_HELP_TEXT, "", false )
+        change_short( 'H' )
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "longhelp", false, NULL, LONGHELP_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
     add_bool( "help-verbose", false, NULL, HELP_VERBOSE_TEXT, "",
               false );
-        change_internal();
-        change_unsaveable();
-    add_bool( "list", false, NULL, LIST_TEXT, "", false );
-        change_short( 'l' );
-        change_internal();
-        change_unsaveable();
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "list", false, NULL, LIST_TEXT, "", false )
+        change_short( 'l' )
+        change_internal ()
+        change_unsaveable ()
     add_bool( "list-verbose", false, NULL, LIST_VERBOSE_TEXT, "",
               false );
-        change_short( 'l' );
-        change_internal();
-        change_unsaveable();
-    add_string( "module", NULL, NULL, MODULE_TEXT, "", false );
-        change_short( 'p' );
-        change_internal();
-        change_unsaveable();
-    add_bool( "ignore-config", false, NULL, IGNORE_CONFIG_TEXT, "", false );
-        change_internal();
-        change_unsaveable();
+        change_internal ()
+        change_unsaveable ()
+    add_string( "module", NULL, NULL, MODULE_TEXT, "", false )
+        change_short( 'p' )
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "ignore-config", false, NULL, IGNORE_CONFIG_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
     add_bool( "save-config", false, NULL, SAVE_CONFIG_TEXT, "",
               false );
-        change_internal();
-        change_unsaveable();
-    add_bool( "reset-config", false, NULL, MODULE_TEXT, "", false );
-        change_internal();
-        change_unsaveable();
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "reset-config", false, NULL, RESET_CONFIG_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
     add_bool( "reset-plugins-cache", false, NULL,
               RESET_PLUGINS_CACHE_TEXT, "", false );
-        change_internal();
-        change_unsaveable();
-    add_bool( "version", false, NULL, VERSION_TEXT, "", false );
-        change_internal();
-        change_unsaveable();
-    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_internal ()
+        change_unsaveable ()
+    add_bool( "version", false, NULL, VERSION_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
+    add_string( "config", NULL, NULL, CONFIG_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
+    add_bool( "version", false, NULL, VERSION_TEXT, "", false )
+        change_internal ()
+        change_unsaveable ()
 
    /* Usage (mainly useful for cmd line stuff) */
-    /* add_usage_hint( PLAYLIST_USAGE ); */
+    /* add_usage_hint( PLAYLIST_USAGE ) */
 
-    set_description( N_("main program") );
-    set_capability( "main", 100 );
-vlc_module_end();
+    set_description( N_("main program") )
+    set_capability( "main", 100 )
+vlc_module_end ()
 
 /*****************************************************************************
  * End configuration.
@@ -2539,6 +2663,7 @@ const struct hotkey libvlc_hotkeys[] =
     { "key-jump+medium", ACTIONID_JUMP_FORWARD_MEDIUM, 0, },
     { "key-jump-long", ACTIONID_JUMP_BACKWARD_LONG, 0, },
     { "key-jump+long", ACTIONID_JUMP_FORWARD_LONG, 0, },
+    { "key-frame-next", ACTIONID_FRAME_NEXT, 0, },
     { "key-prev", ACTIONID_PREV, 0, },
     { "key-next", ACTIONID_NEXT, 0, },
     { "key-faster", ACTIONID_FASTER, 0, },
@@ -2619,6 +2744,7 @@ const struct hotkey libvlc_hotkeys[] =
     { "key-menu-down", ACTIONID_MENU_DOWN, 0, },
     { "key-menu-select", ACTIONID_MENU_SELECT, 0, },
     { "key-audiodevice-cycle", ACTIONID_AUDIODEVICE_CYCLE, 0, },
+    { "key-toggle-scaling", ACTIONID_TOGGLE_SCALING, 0, },
     { NULL, 0, 0, }
 };