diff options
30 files changed, 572 insertions, 229 deletions
@@ -33,6 +33,7 @@ xine-lib (1-rc4) * mmst big cleanup and fixes * asf codec initialization fix * engine improvement to handle unknown frame rate correctly + * all config entries have help strings now xine-lib (1-rc3c) * fix the deadlock with non-seekable input plugins diff --git a/src/liba52/xine_decoder.c b/src/liba52/xine_decoder.c index 9483f1bdb..c21c41adb 100644 --- a/src/liba52/xine_decoder.c +++ b/src/liba52/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.69 2004/03/16 14:12:04 mroi Exp $ + * $Id: xine_decoder.c,v 1.70 2004/04/26 17:50:07 mroi Exp $ * * stuff needed to turn liba52 into a xine decoder plugin */ @@ -60,7 +60,7 @@ typedef struct { config_values_t *config; float a52_level; - int disable_dynrng; + int disable_dynrng_compress; int enable_surround_downmix; } a52dec_class_t; @@ -145,6 +145,12 @@ static const struct frmsize_s frmsizecod_tbl[64] = { 640 ,{1280 ,1394 ,1920 } } }; +/* config callbacks */ +static void a52_level_change_cb(void *this_gen, xine_cfg_entry_t *entry); +static void dynrng_compress_change_cb(void *this_gen, xine_cfg_entry_t *entry); +static void surround_downmix_change_cb(void *this_gen, xine_cfg_entry_t *entry); + + static void a52dec_reset (audio_decoder_t *this_gen) { a52dec_decoder_t *this = (a52dec_decoder_t *) this_gen; @@ -226,7 +232,7 @@ static void a52dec_decode_frame (a52dec_decoder_t *this, int64_t pts, int previe return; } - if (this->class->disable_dynrng) + if (this->class->disable_dynrng_compress) a52_dynrng (this->a52_state, NULL, NULL); this->have_lfe = a52_output_flags & A52_LFE; @@ -770,20 +776,51 @@ static void *init_plugin (xine_t *xine, void *data) { this->a52_level = (float) cfg->register_range (cfg, "codec.a52_level", 100, 0, 200, - _("a/52 volume control"), - NULL, 0, NULL, NULL) / 100.0; - this->disable_dynrng = !cfg->register_bool (cfg, "codec.a52_dynrng", 0, - _("enable a/52 dynamic range compensation"), - NULL, 0, NULL, NULL); + _("A/52 volume"), + _("With A/52 audio, you can modify the volume " + "at the decoder level. This has the advantage " + "of the audio being already decoded for the " + "specified volume, so later operations like " + "channel downmixing will work on an audio stream " + "of the given volume."), + 10, a52_level_change_cb, this) / 100.0; + this->disable_dynrng_compress = !cfg->register_bool (cfg, "codec.a52_dynrng", 0, + _("use A/52 dynamic range compression"), + _("Dynamic range compression limits the dynamic " + "range of the audio. This means making the loud " + "sounds softer, and the soft sounds louder, so you can " + "more easily listen to the audio in a noisy " + "environment without disturbing anyone."), + 0, dynrng_compress_change_cb, this); this->enable_surround_downmix = cfg->register_bool (cfg, "codec.a52_surround_downmix", 0, - _("enable audio downmixing to 2.0 surround stereo"), - NULL, 0, NULL, NULL); - - + _("downmix audio to 2 channel surround stereo"), + _("When you want to listen to multichannel surround " + "sound, but you have only two speakers or a " + "surround decoder or amplifier which does some " + "sort of matrix surround decoding like prologic, " + "you should enable this option so that the " + "additional channels are mixed into the stereo " + "signal."), + 0, surround_downmix_change_cb, this); lprintf ("init_plugin called\n"); return this; } +static void a52_level_change_cb(void *this_gen, xine_cfg_entry_t *entry) +{ + ((a52dec_class_t *)this_gen)->a52_level = entry->num_value / 100.0; +} + +static void dynrng_compress_change_cb(void *this_gen, xine_cfg_entry_t *entry) +{ + ((a52dec_class_t *)this_gen)->disable_dynrng_compress = !entry->num_value; +} + +static void surround_downmix_change_cb(void *this_gen, xine_cfg_entry_t *entry) +{ + ((a52dec_class_t *)this_gen)->enable_surround_downmix = entry->num_value; +} + static uint32_t audio_types[] = { BUF_AUDIO_A52, diff --git a/src/libffmpeg/video_decoder.c b/src/libffmpeg/video_decoder.c index 13606126e..88cee7ffa 100644 --- a/src/libffmpeg/video_decoder.c +++ b/src/libffmpeg/video_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_decoder.c,v 1.14 2004/04/19 21:18:01 jstembridge Exp $ + * $Id: video_decoder.c,v 1.15 2004/04/26 17:50:07 mroi Exp $ * * xine video decoder plugin using ffmpeg * @@ -1209,8 +1209,14 @@ void *init_video_plugin (xine_t *xine, void *data) { config = xine->config; this->pp_quality = xine->config->register_range(config, "codec.ffmpeg_pp_quality", 3, - 0, PP_QUALITY_MAX, _("ffmpeg mpeg-4 postprocessing quality"), NULL, - 10, pp_quality_cb, this); + 0, PP_QUALITY_MAX, + _("MPEG-4 postprocessing quality"), + _("You can adjust the amount of post processing applied to MPEG-4 video.\n" + "Higher values result in better quality, but need more CPU. Lower values may " + "result in image defects like block artifacts. For high quality content, " + "too heavy post processing can actually make the image worse by blurring it " + "too much."), + 10, pp_quality_cb, this); return this; } diff --git a/src/libffmpeg/xine_encoder.c b/src/libffmpeg/xine_encoder.c index b883bce85..da5e134e6 100644 --- a/src/libffmpeg/xine_encoder.c +++ b/src/libffmpeg/xine_encoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_encoder.c,v 1.12 2004/04/15 15:49:56 mroi Exp $ + * $Id: xine_encoder.c,v 1.13 2004/04/26 17:50:07 mroi Exp $ */ /* mpeg encoders for the dxr3 video out plugin. */ @@ -151,23 +151,31 @@ static int lavc_on_update_format(dxr3_driver_t *drv, dxr3_frame_t *frame) /* put sample parameters */ this->context->bit_rate = drv->class->xine->config->register_range(drv->class->xine->config, "dxr3.lavc_bitrate", 10000, 1000, 20000, - _("Dxr3enc: libavcodec mpeg output bitrate (kbit/s)"), - _("The bitrate the libavcodec mpeg encoder should use for dxr3's encoding mode"), 10, - NULL, NULL); + _("libavcodec mpeg output bitrate (kbit/s)"), + _("The bitrate the libavcodec mpeg encoder should use for DXR3's encoding mode. + "Higher values will increase quality and CPU usage.\n" + "This setting is only considered, when constant quality mode is disabled."), 10, NULL, NULL); this->context->bit_rate *= 1000; /* config in kbit/s, libavcodec wants bit/s */ use_quantizer = drv->class->xine->config->register_bool(drv->class->xine->config, "dxr3.lavc_quantizer", 1, - _("Dxr3enc: Use quantizer instead of bitrate"),NULL, 0, NULL, NULL); + _("constant quality mode"), + _("When enabled, libavcodec will use a constant quality mode by danymically " + "compressing the images based on their complexity. When disabled, libavcodec " + "will use constant bitrate mode."), 10, NULL, NULL); if (use_quantizer) { this->context->qmin = drv->class->xine->config->register_range(drv->class->xine->config, "dxr3.lavc_qmin", 1, 1, 10, - _("Dxr3enc: Minimum quantizer"),NULL , 10, NULL, NULL); + _("minimum compression"), + _("The minimum compression to apply to an image in constant quality mode."), + 10, NULL, NULL); this->context->qmax = drv->class->xine->config->register_range(drv->class->xine->config, "dxr3.lavc_qmax", 2, 1, 20, - _("Dxr3enc: Maximum quantizer"),NULL, 10, NULL, NULL); + _("maximum quantizer"), + _("The maximum compression to apply to an image in constant quality mode."), + 10, NULL, NULL); } #if LOG_ENC diff --git a/src/libreal/audio_decoder.c b/src/libreal/audio_decoder.c index cc527eeeb..d213af8b4 100644 --- a/src/libreal/audio_decoder.c +++ b/src/libreal/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.37 2004/02/04 22:13:12 jstembridge Exp $ + * $Id: audio_decoder.c,v 1.38 2004/04/26 17:50:07 mroi Exp $ * * thin layer to use real binary-only codecs in xine * @@ -656,8 +656,15 @@ static void *init_class (xine_t *xine, void *data) { real_codec_path = config->register_string (config, "codec.real_codecs_path", "unknown", - _("path to real player codecs, if installed"), - NULL, 10, NULL, NULL); + _("path to RealPlayer codecs"), + _("If you have RealPlayer installed, specify the path " + "to its codec directory here. You can easily find " + "the codec directory by looking for a file named " + "\"drv3.so.6.0\" in it. If xine can find the RealPlayer " + "codecs, it will use them to decode RealPlayer content " + "for you. Consult the xine FAQ for more information on " + "how to install the codecs."), + 10, NULL, this); if (!strcmp (real_codec_path, "unknown")) { diff --git a/src/libreal/xine_decoder.c b/src/libreal/xine_decoder.c index 313e82bb6..7df79059e 100644 --- a/src/libreal/xine_decoder.c +++ b/src/libreal/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.68 2004/03/16 14:12:04 mroi Exp $ + * $Id: xine_decoder.c,v 1.69 2004/04/26 17:50:07 mroi Exp $ * * thin layer to use real binary-only codecs in xine * @@ -536,8 +536,15 @@ static void *init_class (xine_t *xine, void *data) { real_codec_path = config->register_string (config, "codec.real_codecs_path", "unknown", - _("path to real player codecs, if installed"), - NULL, 10, NULL, NULL); + _("path to RealPlayer codecs"), + _("If you have RealPlayer installed, specify the path " + "to its codec directory here. You can easily find " + "the codec directory by looking for a file named " + "\"drv3.so.6.0\" in it. If xine can find the RealPlayer " + "codecs, it will use them to decode RealPlayer content " + "for you. Consult the xine FAQ for more information on " + "how to install the codecs."), + 10, NULL, this); if (!strcmp (real_codec_path, "unknown")) { diff --git a/src/libspucc/xine_decoder.c b/src/libspucc/xine_decoder.c index 0caeaa6f5..467b93369 100644 --- a/src/libspucc/xine_decoder.c +++ b/src/libspucc/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.28 2003/12/14 22:13:24 siggi Exp $ + * $Id: xine_decoder.c,v 1.29 2004/04/26 17:50:08 mroi Exp $ * * closed caption spu decoder. receive data by events. * @@ -218,41 +218,46 @@ static void spucc_register_cfg_vars(spucc_decoder_t *this, config_values_t *xine_cfg) { cc_config_t *cc_vars = &this->cc_cfg; - cc_vars->cc_enabled = xine_cfg->register_bool(xine_cfg, + cc_vars->cc_enabled = xine_cfg->register_bool(xine_cfg, "misc.cc_enabled", 0, - _("Enable closed captions in MPEG-2 streams"), - NULL, 0, spucc_cfg_enable_change, - this); + _("display closed captions in MPEG-2 streams"), + _("Closed captions are subtitles mostly meant " + "to help the hearing impaired."), + 0, spucc_cfg_enable_change, this); cc_vars->cc_scheme = xine_cfg->register_enum(xine_cfg, "misc.cc_scheme", 0, cc_schemes, - _("Closed-captioning foreground/background scheme"), - NULL, 10, spucc_cfg_scheme_change, - this); + _("closed-captioning foreground/background scheme"), + _("Choose your favourite rendering of the closed " + "captions."), + 10, spucc_cfg_scheme_change, this); copy_str(cc_vars->font, xine_cfg->register_string(xine_cfg, "misc.cc_font", "cc", - _("Standard closed captioning font"), - NULL, 10, spucc_font_change, this), + _("standard closed captioning font"), + _("Choose the font for standard closed captions text."), + 20, spucc_font_change, this), CC_FONT_MAX); copy_str(cc_vars->italic_font, xine_cfg->register_string(xine_cfg, "misc.cc_italic_font", "cci", - _("Italic closed captioning font"), - NULL, 10, spucc_font_change, this), + _("italic closed captioning font"), + _("Choose the font for italic closed captions text."), + 20, spucc_font_change, this), CC_FONT_MAX); cc_vars->font_size = xine_cfg->register_num(xine_cfg, "misc.cc_font_size", 24, - _("Closed captioning font size"), - NULL, 10, spucc_num_change, - this); + _("closed captioning font size"), + _("Choose the font size for closed captions text."), + 10, spucc_num_change, this); cc_vars->center = xine_cfg->register_bool(xine_cfg, "misc.cc_center", 1, - _("Center-adjust closed captions"), - NULL, 10, spucc_num_change, - this); + _("center-adjust closed captions"), + _("When enabled, closed captions will be positioned " + "by the center of the individual lines."), + 20, spucc_num_change, this); } diff --git a/src/libsputext/demux_sputext.c b/src/libsputext/demux_sputext.c index aa74639eb..664e6b702 100644 --- a/src/libsputext/demux_sputext.c +++ b/src/libsputext/demux_sputext.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_sputext.c,v 1.33 2004/01/12 17:35:17 miguelfreitas Exp $ + * $Id: demux_sputext.c,v 1.34 2004/04/26 17:50:08 mroi Exp $ * * code based on old libsputext/xine_decoder.c * @@ -1352,8 +1352,10 @@ static void *init_sputext_demux_class (xine_t *xine, void *data) { */ this->max_timeout = xine->config->register_num(xine->config, "misc.sub_timeout", 4, - _("Default period to hide subtitles in seconds"), - _("Define this to non-zero, if you want automatically hide subtitle after given time. Used only with subtitle formats, where are no end time."), + _("default duration of subtitle display in seconds"), + _("Some subtitle formats do not explicitly give a duration for each subtitle. " + "For these, you can set a default duration here. Setting to zero will result " + "in the subtitle being shown until the next one takes over."), 20, config_timeout_cb, this); return this; diff --git a/src/libsputext/xine_decoder.c b/src/libsputext/xine_decoder.c index c63eca435..18c13512a 100644 --- a/src/libsputext/xine_decoder.c +++ b/src/libsputext/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.79 2004/04/07 18:10:20 valtri Exp $ + * $Id: xine_decoder.c,v 1.80 2004/04/26 17:50:08 mroi Exp $ * */ @@ -670,28 +670,44 @@ static void *init_spu_decoder_plugin (xine_t *xine, void *data) { "misc.spu_subtitle_size", 1, subtitle_size_strings, - _("Subtitle size (relative window size)"), - NULL, 0, update_subtitle_size, this); + _("subtitle size"), + _("You can adjust the subtitle size here. The setting will " + "be evaluated relative to the window size."), + 0, update_subtitle_size, this); this->vertical_offset = xine->config->register_num(xine->config, "misc.spu_vertical_offset", 0, - _("Subtitle vertical offset (relative window size)"), - NULL, 0, update_vertical_offset, this); - strcpy(this->font, xine->config->register_string(xine->config, - "misc.spu_font", - "sans", - _("Font for external subtitles"), - NULL, 0, update_osd_font, this)); + _("subtitle vertical offset"), + _("You can adjust the vertical position of the subtitle. " + "The setting will be evaluated relative to the window size."), + 0, update_vertical_offset, this); + strcpy(this->font, xine->config->register_string(xine->config, + "misc.spu_font", + "sans", + _("font for subtitles"), + _("A font from the xine font directory to be used for the " + "subtitle text."), + 10, update_osd_font, this)); this->src_encoding = xine->config->register_string(xine->config, "misc.spu_src_encoding", - "iso-8859-1", - _("Encoding of subtitles"), - NULL, 10, update_src_encoding, this); - this->use_unscaled = xine->config->register_bool(xine->config, - "misc.spu_use_unscaled_osd", + "iso-8859-1", + _("encoding of the subtitles"), + _("The encoding of the subtitle text in the stream. This setting " + "is used to render non-ASCII characters correctly. If non-ASCII " + "charachters are not displayed as you expect, ask the " + "creator of the subtitles what encoding was used."), + 10, update_src_encoding, this); + this->use_unscaled = xine->config->register_bool(xine->config, + "misc.spu_use_unscaled_osd", 1, - _("Use unscaled OSD if possible"), - NULL, 0, update_use_unscaled, this); + _("use unscaled OSD if possible"), + _("The unscaled OSD will be rendered independently of the video " + "frame and will always be sharp, even if the video is magnified. " + "This will look better, but does not work with all graphics " + "hardware. The alternative is the scaled OSD, which will become " + "blurry, if you enlarge a low resolution video to fullscreen, but " + "it works with all graphics cards."), + 10, update_use_unscaled, this); return &this->class; } diff --git a/src/libw32dll/qt_decoder.c b/src/libw32dll/qt_decoder.c index 15bcb6b02..8818f5702 100644 --- a/src/libw32dll/qt_decoder.c +++ b/src/libw32dll/qt_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: qt_decoder.c,v 1.34 2004/03/16 14:12:04 mroi Exp $ + * $Id: qt_decoder.c,v 1.35 2004/04/26 17:50:08 mroi Exp $ * * quicktime video/audio decoder plugin, using win32 dlls * most of this code comes directly from MPlayer @@ -613,10 +613,15 @@ static void *qta_init_class (xine_t *xine, void *data) { this->decoder_class.dispose = qta_dispose_class; cfg = xine->config; - win32_def_path = cfg->register_string (cfg, "codec.win32_path", - WIN32_PATH, - _("path to win32 codec dlls"), - NULL, 0, NULL, NULL); + win32_def_path = cfg->register_string (cfg, "codec.win32_path", WIN32_PATH, + _("path to Win32 codecs"), + _("If you have the Windows or Apple Quicktime codec packs " + "installed, specify the path the codec directory here. " + "If xine can find the Windows or Apple Quicktime codecs, " + "it will use them to decode various Windows Media and " + "Quicktime streams for you. Consult the xine FAQ for " + "more information on how to install the codecs."), + 10, NULL, NULL); return this; } @@ -1128,8 +1133,14 @@ static void *qtv_init_class (xine_t *xine, void *data) { config_values_t *cfg = xine->config; win32_def_path = cfg->register_string (cfg, "codec.win32_path", WIN32_PATH, - _("path to win32 codec dlls"), - NULL, 0, NULL, NULL); + _("path to Win32 codecs"), + _("If you have the Windows or Apple Quicktime codec packs " + "installed, specify the path the codec directory here. " + "If xine can find the Windows or Apple Quicktime codecs, " + "it will use them to decode various Windows Media and " + "Quicktime streams for you. Consult the xine FAQ for " + "more information on how to install the codecs."), + 10, NULL, NULL); lprintf ("%s...\n", __XINE_FUNCTION__); diff --git a/src/libw32dll/w32codec.c b/src/libw32dll/w32codec.c index e0b62c582..3eed139c9 100644 --- a/src/libw32dll/w32codec.c +++ b/src/libw32dll/w32codec.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: w32codec.c,v 1.139 2004/02/09 22:16:54 jstembridge Exp $ + * $Id: w32codec.c,v 1.140 2004/04/26 17:50:09 mroi Exp $ * * routines for using w32 codecs * DirectShow support by Miguel Freitas (Nov/2001) @@ -1566,8 +1566,14 @@ static void *init_video_decoder_class (xine_t *xine, void *data) { cfg = xine->config; win32_def_path = cfg->register_string (cfg, "codec.win32_path", WIN32_PATH, - _("path to win32 codec dlls"), - NULL, 0, NULL, NULL); + _("path to Win32 codecs"), + _("If you have the Windows or Apple Quicktime codec packs " + "installed, specify the path the codec directory here. " + "If xine can find the Windows or Apple Quicktime codecs, " + "it will use them to decode various Windows Media and " + "Quicktime streams for you. Consult the xine FAQ for " + "more information on how to install the codecs."), + 10, NULL, NULL); this = (w32v_class_t *) xine_xmalloc (sizeof (w32v_class_t)); @@ -1636,10 +1642,15 @@ static void *init_audio_decoder_class (xine_t *xine, void *data) { this->decoder_class.dispose = dispose_class; cfg = xine->config; - win32_def_path = cfg->register_string (cfg, "codec.win32_path", - WIN32_PATH, - _("path to win32 codec dlls"), - NULL, 0, NULL, NULL); + win32_def_path = cfg->register_string (cfg, "codec.win32_path", WIN32_PATH, + _("path to Win32 codecs"), + _("If you have the Windows or Apple Quicktime codec packs " + "installed, specify the path the codec directory here. " + "If xine can find the Windows or Apple Quicktime codecs, " + "it will use them to decode various Windows Media and " + "Quicktime streams for you. Consult the xine FAQ for " + "more information on how to install the codecs."), + 10, NULL, NULL); pthread_once (&once_control, init_routine); diff --git a/src/post/goom/xine_goom.c b/src/post/goom/xine_goom.c index 97f0ba14e..221dd213c 100644 --- a/src/post/goom/xine_goom.c +++ b/src/post/goom/xine_goom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_goom.c,v 1.50 2004/04/17 19:54:31 mroi Exp $ + * $Id: xine_goom.c,v 1.51 2004/04/26 17:50:09 mroi Exp $ * * GOOM post plugin. * @@ -51,7 +51,7 @@ /* colorspace conversion methods */ const char * goom_csc_methods[]={ "Fast but not photorealistic", - "Slow but looks better (mmx)", + "Slow but looks better", NULL }; @@ -193,22 +193,28 @@ static void *goom_init_plugin(xine_t *xine, void *data) cfg = xine->config; cfg->register_num (cfg, "post.goom_fps", FPS, - _("Frames per second to generate with Goom"), - NULL, 10, fps_changed_cb, this); + _("frames per second to generate"), + _("With more frames per second, the animation will get " + "smoother and faster, but will also require more CPU power."), + 10, fps_changed_cb, this); cfg->register_num (cfg, "post.goom_width", GOOM_WIDTH, - _("Goom image width in pixels"), - NULL, 20, width_changed_cb, this); + _("goom image width"), + _("The width in pixels of the image to be generated."), + 10, width_changed_cb, this); cfg->register_num (cfg, "post.goom_height", GOOM_HEIGHT, - _("Goom image height in pixels"), - NULL, 20, height_changed_cb, this); + _("goom image height"), + _("The height in pixels of the image to be generated."), + 10, height_changed_cb, this); cfg->register_enum (cfg, "post.goom_csc_method", 0, (char **)goom_csc_methods, - _("Colorspace conversion method used by Goom"), - NULL, 20, csc_method_changed_cb, this); + _("colorspace conversion method"), + _("You can choose the colorspace conversion method used by goom.\n" + "The available selections should be self-explaining."), + 20, csc_method_changed_cb, this); return &this->class; } diff --git a/src/video_out/video_out_fb.c b/src/video_out/video_out_fb.c index eb29c363a..6aae47597 100644 --- a/src/video_out/video_out_fb.c +++ b/src/video_out/video_out_fb.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_fb.c,v 1.35 2003/12/14 22:13:25 siggi Exp $ + * $Id: video_out_fb.c,v 1.36 2004/04/26 17:50:09 mroi Exp $ * * video_out_fb.c, frame buffer xine driver by Miguel Freitas * @@ -126,7 +126,7 @@ typedef struct fb_driver_s int yuv2rgb_mode; int yuv2rgb_swap; - int yuv2rgb_gamma; + int yuv2rgb_brightness; uint8_t *yuv2rgb_cmap; yuv2rgb_factory_t *yuv2rgb_factory; @@ -616,7 +616,7 @@ static int fb_get_property(vo_driver_t *this_gen, int property) return this->sc.user_ratio; case VO_PROP_BRIGHTNESS: - return this->yuv2rgb_gamma; + return this->yuv2rgb_brightness; case VO_PROP_WINDOW_WIDTH: return this->sc.gui_width; @@ -647,10 +647,10 @@ static int fb_set_property(vo_driver_t *this_gen, int property, int value) break; case VO_PROP_BRIGHTNESS: - this->yuv2rgb_gamma = value; + this->yuv2rgb_brightness = value; this->yuv2rgb_factory-> set_csc_levels(this->yuv2rgb_factory, value, 128, 128); - xprintf(this->xine, XINE_VERBOSITY_DEBUG, "video_out_fb: gamma changed to %d\n", value); + xprintf(this->xine, XINE_VERBOSITY_DEBUG, "video_out_fb: brightness changed to %d\n", value); break; default: @@ -771,9 +771,17 @@ static int open_fb_device(config_values_t *config, xine_t *xine) char *device_name; int fd; + /* This config entry is security critical, is it really necessary + * or is a number enough? */ device_name = config->register_string(config, devkey, "", - _("framebuffer device"), - NULL, 10, NULL, NULL); + _("framebuffer device name"), + _("Specifies the file name for the framebuffer device " + "to be used.\nThis setting is security critical, " + "because when changed to a different file, xine " + "can be used to fill this file with arbitrary content. " + "So you should be careful that the value you enter " + "really is a proper framebuffer device."), + XINE_CONFIG_SECURITY, NULL, NULL); if(strlen(device_name) > 3) { fd = open(device_name, O_RDWR); @@ -854,17 +862,20 @@ static int setup_yuv2rgb(fb_driver_t *this, config_values_t *config, return 0; this->yuv2rgb_swap = 0; - this->yuv2rgb_gamma = + this->yuv2rgb_brightness = config->register_range(config, "video.fb_gamma", 0, - -100, 100, - "gamma correction for fb driver", - NULL, 0, NULL, NULL); + -100, 100, + _("brightness correction"), + _("The brightness correction can be used to lighten or darken the image. " + "It changes the blacklevel without modifying the contrast, but it " + "limits the tonal range."), + 0, NULL, NULL); this->yuv2rgb_factory = yuv2rgb_factory_init(this->yuv2rgb_mode, this->yuv2rgb_swap, this->yuv2rgb_cmap); this->yuv2rgb_factory->set_csc_levels(this->yuv2rgb_factory, - this->yuv2rgb_gamma, 128, 128); + this->yuv2rgb_brightness, 128, 128); return 1; } @@ -979,8 +990,11 @@ static vo_driver_t *fb_open_plugin(video_driver_class_t *class_gen, this->sc.scaling_disabled = config->register_bool(config, "video.disable_scaling", 0, - _("disable all video scaling (faster!)"), - NULL, 10, NULL, NULL); + _("disable all video scaling"), + _("You can disable video scaling globally. The image will then no longer " + "adapt to the size of the video window, which can dramatically " + "reduce CPU usage."), + 10, NULL, NULL); setup_buffers(this, &this->fb_var); diff --git a/src/video_out/video_out_opengl.c b/src/video_out/video_out_opengl.c index ceb96cad3..87def8a54 100644 --- a/src/video_out/video_out_opengl.c +++ b/src/video_out/video_out_opengl.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_opengl.c,v 1.36 2004/03/03 20:09:15 mroi Exp $ + * $Id: video_out_opengl.c,v 1.37 2004/04/26 17:50:09 mroi Exp $ * * video_out_glut.c, glut based OpenGL rendering interface for xine * Matthias Hopf <mat@mshopf.de> @@ -168,7 +168,7 @@ typedef struct opengl_driver_s { int output_xoffset, output_yoffset; #endif /* software yuv2rgb related */ - int yuv2rgb_gamma; + int yuv2rgb_brightness; uint8_t *yuv2rgb_cmap; yuv2rgb_factory_t *yuv2rgb_factory; @@ -752,7 +752,7 @@ static int opengl_get_property (vo_driver_t *this_gen, int property) { case VO_PROP_ASPECT_RATIO: return this->sc.user_ratio ; case VO_PROP_BRIGHTNESS: - return this->yuv2rgb_gamma; + return this->yuv2rgb_brightness; case VO_PROP_WINDOW_WIDTH: return this->sc.gui_width; case VO_PROP_WINDOW_HEIGHT: @@ -783,9 +783,9 @@ static int opengl_set_property (vo_driver_t *this_gen, // opengl_redraw_needed ((vo_driver_t *) this); break; case VO_PROP_BRIGHTNESS: - this->yuv2rgb_gamma = value; + this->yuv2rgb_brightness = value; this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, value, 128, 128); - xrintf(this->xine, XINE_VERBOSITY_DEBUG, "video_out_opengl: gamma changed to %d\n",value); + xrintf(this->xine, XINE_VERBOSITY_DEBUG, "video_out_opengl: brightness changed to %d\n",value); break; default: xprintf (this->xine, XINE_VERBOSITY_DEBUG, @@ -958,14 +958,18 @@ static vo_driver_t *opengl_open_plugin (video_driver_class_t *class_gen, this->vo_driver.dispose = opengl_dispose; this->vo_driver.redraw_needed = opengl_redraw_needed; - this->yuv2rgb_gamma = class->config->register_range (class->config, - "video.opengl_gamma", 0, -100, 100, - _("gamma correction for OpenGL driver"), - NULL, 0, NULL, NULL); + this->yuv2rgb_brightness = + config->register_range(this->config, "video.opengl_gamma", 0, + -100, 100, + _("brightness correction"), + _("The brightness correction can be used to lighten or darken the image. " + "It changes the blacklevel without modifying the contrast, but it " + "limits the tonal range."), + 0, NULL, NULL); this->yuv2rgb_factory = yuv2rgb_factory_init (YUV_FORMAT, YUV_SWAP_MODE, this->yuv2rgb_cmap); this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, - this->yuv2rgb_gamma, 128, 128); + this->yuv2rgb_brightness, 128, 128); return &this->vo_driver; } diff --git a/src/video_out/video_out_pgx32.c b/src/video_out/video_out_pgx32.c index 05588980e..602439f34 100644 --- a/src/video_out/video_out_pgx32.c +++ b/src/video_out/video_out_pgx32.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_pgx32.c,v 1.5 2004/04/25 15:05:31 komadori Exp $ + * $Id: video_out_pgx32.c,v 1.6 2004/04/26 17:50:10 mroi Exp $ * * video_out_pgx32.c, Sun PGX32 output plugin for xine * @@ -753,7 +753,14 @@ static vo_driver_t *pgx32_init_driver(video_driver_class_t *class_gen, const voi class->instance_count++; pthread_mutex_unlock(&class->mutex); - devname = class->config->register_string(class->config, "video.pgx32_device", "/dev/fb", _("path to pgx32 device"), NULL, 10, NULL, NULL); + devname = class->config->register_string(class->config, "video.pgx32_device", "/dev/fb", + _("PGX32 device name"), + _("Specifies the file name for the PGX32 device to be used.\n" + "This setting is security critical, because when changed to a different file, xine " + "can be used to fill this file with arbitrary content. So you should be careful that " + "the value you enter really is a proper PGX32 device."), + XINE_CONFIG_SECURITY, NULL, NULL); + if ((fbfd = open(devname, O_RDWR)) < 0) { xprintf(class->xine, XINE_VERBOSITY_LOG, _("video_out_pgx32: Error: can't open framebuffer device '%s'\n"), devname); return NULL; diff --git a/src/video_out/video_out_pgx64.c b/src/video_out/video_out_pgx64.c index 69a552c1b..a62253a46 100644 --- a/src/video_out/video_out_pgx64.c +++ b/src/video_out/video_out_pgx64.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_pgx64.c,v 1.56 2004/04/25 15:05:31 komadori Exp $ + * $Id: video_out_pgx64.c,v 1.57 2004/04/26 17:50:10 mroi Exp $ * * video_out_pgx64.c, Sun PGX64/PGX24 output plugin for xine * @@ -1057,7 +1057,14 @@ static vo_driver_t *pgx64_init_driver(video_driver_class_t *class_gen, const voi class->instance_count++; pthread_mutex_unlock(&class->mutex); - devname = class->config->register_string(class->config, "video.pgx64_device", "/dev/fb", _("path to pgx64/pgx24 device"), NULL, 10, NULL, NULL); + devname = class->config->register_string(class->config, "video.pgx64_device", "/dev/fb", + _("PGX64/PGX24 device name"), + _("Specifies the file name for the PGX64/PGX24 device to be used.\n" + "This setting is security critical, because when changed to a different file, xine " + "can be used to fill this file with arbitrary content. So you should be careful that " + "the value you enter really is a proper PGX64 or PGX24 device."), + XINE_CONFIG_SECURITY, NULL, NULL); + if ((fbfd = open(devname, O_RDWR)) < 0) { xprintf(class->xine, XINE_VERBOSITY_LOG, _("video_out_pgx64: Error: can't open framebuffer device '%s'\n"), devname); return NULL; @@ -1131,11 +1138,31 @@ static vo_driver_t *pgx64_init_driver(video_driver_class_t *class_gen, const voi XSetWindowColormap(this->display, this->drawable, this->cmap); XUnlockDisplay(this->display); - this->colour_key = class->config->register_num(this->class->config, "video.pgx64_colour_key", 1, _("video overlay colour key"), NULL, 10, pgx64_config_changed, this); - this->brightness = class->config->register_range(this->class->config, "video.pgx64_brightness", 0, -64, 63, _("video overlay brightness"), NULL, 10, pgx64_config_changed, this); - this->saturation = class->config->register_range(this->class->config, "video.pgx64_saturation", 16, 0, 31, _("video overlay saturation"), NULL, 10, pgx64_config_changed, this); - this->chromakey_en = class->config->register_bool(this->class->config, "video.pgx64_chromakey_en", 0, _("enable chroma keying"), NULL, 10, pgx64_config_changed, this); - this->multibuf_en = class->config->register_bool(this->class->config, "video.pgx64_multibuf_en", 1, _("enable multi-buffering"), NULL, 10, pgx64_config_changed, this); + this->colour_key = class->config->register_num(this->class->config, "video.pgx64_colour_key", 1, + _("video overlay colour key"), + _("The colour key is used to tell the graphics card where to overlay the video image. " + "Try different values, if you experience windows becoming transparent."), + 20, pgx64_config_changed, this); + this->brightness = class->config->register_range(this->class->config, "video.pgx64_brightness", 0, + -64, 63, + _("video brightness"), + _("The brightness of the video image."), + 10, pgx64_config_changed, this); + this->saturation = class->config->register_range(this->class->config, "video.pgx64_saturation", 16, + 0, 31, + _("video saturation"), + _("The saturation of the video image."), + 10, pgx64_config_changed, this); + this->chromakey_en = class->config->register_bool(this->class->config, "video.pgx64_chromakey_en", 0, + _("enable chroma keying"), + _("You can select, whether the graphics hardware shall use chroma keying to overlay the video image."), + 20, pgx64_config_changed, this); + this->multibuf_en = class->config->register_bool(this->class->config, "video.pgx64_multibuf_en", 1, + _("enable multi-buffering"), + _("Multi buffering will synchronize the update of the video image to the repainting of the entire " + "screen (\"vertical retrace\"). This eliminates flickering and tearing artifacts, but will use " + "more graphics memory."), + 20, pgx64_config_changed, this); pthread_mutex_init(&this->chromakey_mutex, NULL); diff --git a/src/video_out/video_out_sdl.c b/src/video_out/video_out_sdl.c index 5e99b8f8d..3cede2844 100644 --- a/src/video_out/video_out_sdl.c +++ b/src/video_out/video_out_sdl.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_sdl.c,v 1.36 2003/12/29 18:07:49 miguelfreitas Exp $ + * $Id: video_out_sdl.c,v 1.37 2004/04/26 17:50:10 mroi Exp $ * * video_out_sdl.c, Simple DirectMedia Layer * @@ -469,8 +469,11 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi this->sdlflags = SDL_HWSURFACE | SDL_RESIZABLE; this->hw_accel = class->config->register_bool(class->config, - "video.sdl_hw_accel", 1, "use hardware acceleration if available", - NULL, 10, NULL, this); + "video.sdl_hw_accel", 1, + _("use hardware acceleration if available"), + _("When your system supports it, hardware acceleration provided by your " + "graphics hardware will be used. This might not work, so you can disable it, " + "if things go wrong."), 10, NULL, NULL); xine_setenv("SDL_VIDEO_YUV_HWACCEL", (this->hw_accel) ? "1" : "0", 1); xine_setenv("SDL_VIDEO_X11_NODIRECTCOLOR", "1", 1); diff --git a/src/video_out/video_out_syncfb.c b/src/video_out/video_out_syncfb.c index 8184746f9..2fd87adfa 100644 --- a/src/video_out/video_out_syncfb.c +++ b/src/video_out/video_out_syncfb.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_syncfb.c,v 1.96 2003/12/14 22:13:25 siggi Exp $ + * $Id: video_out_syncfb.c,v 1.97 2004/04/26 17:50:10 mroi Exp $ * * video_out_syncfb.c, SyncFB (for Matrox G200/G400 cards) interface for xine * @@ -991,10 +991,14 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi /* FIXME: setting the default_repeat to anything higher than 1 will result in a distorted video, so for now, set this manually to 0 until the kernel driver is fixed... */ +#if 0 this->default_repeat = config->register_range(config, - "video.syncfb_default_repeat", 3, 1, 4, - "default frame repeat for SyncFB", NULL, - 0, NULL, NULL); + "video.syncfb_default_repeat", 3, 1, 4, + _("default number of frame repetitions"), + _("This specifies how many times a single video " + "frame will be displayed consecutively."), + 10, NULL, NULL); +#endif this->default_repeat = 0; this->display = visual->display; @@ -1055,11 +1059,16 @@ static void *init_class (xine_t *xine, void *visual_gen) { char* device_name; int fd; - device_name = xine->config->register_string(xine->config, - "video.syncfb_device", "/dev/syncfb", - _("syncfb (teletux) device node"), - NULL, 10, NULL, NULL); - + device_name = xine->config->register_string(xine->config, "video.syncfb_device", "/dev/syncfb", + _("SyncFB device name"), + _("Specifies the file name for the SyncFB (TeleTux) device " + "to be used.\nThis setting is security critical, " + "because when changed to a different file, xine " + "can be used to fill this file with arbitrary content. " + "So you should be careful that the value you enter " + "really is a proper framebuffer device."), + XINE_CONFIG_SECURITY, NULL, NULL); + /* check for syncfb device */ if((fd = open(device_name, O_RDWR)) < 0) { xprintf(xine, XINE_VERBOSITY_DEBUG, diff --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c index bc25fc102..88f5d055f 100644 --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_vidix.c,v 1.60 2004/04/10 15:31:10 miguelfreitas Exp $ + * $Id: video_out_vidix.c,v 1.61 2004/04/26 17:50:11 mroi Exp $ * * video_out_vidix.c * @@ -938,17 +938,17 @@ static vidix_driver_t *open_plugin (video_driver_class_t *class_gen) { if(this->vidix_eq.cap & VEQ_CAP_RGB_INTENSITY) { this->vidix_eq.red_intensity = config->register_range(config, "video.vidix_red_intensity", 0, -1000, 1000, - "red intensity", NULL, 10, + _("red intensity"), _("The intensity of the red colour components."), 10, (void*) vidix_rgb_callback, this); this->vidix_eq.green_intensity = config->register_range(config, "video.vidix_green_intensity", 0, -1000, 1000, - "green intensity", NULL, 10, + _("green intensity"), _("The intensity of the green colour components."), 10, (void*) vidix_rgb_callback, this); this->vidix_eq.blue_intensity = config->register_range(config, "video.vidix_blue_intensity", 0, -1000, 1000, - "blue intensity", NULL, 10, + _("blue intensity"), _("The intensity of the blue colour components."), 10, (void*) vidix_rgb_callback, this); if((err = vdlPlaybackSetEq(this->vidix_handler, &this->vidix_eq))) @@ -960,7 +960,10 @@ static vidix_driver_t *open_plugin (video_driver_class_t *class_gen) { /* Configuration for double buffering */ this->use_doublebuffer = config->register_bool(config, - "video.vidix_use_double_buffer", 1, "double buffer to sync video to retrace", NULL, 10, + "video.vidix_use_double_buffer", 1, _("enable double buffering"), + _("Double buffering will synchronize the update of the video image to the repainting of the entire " + "screen (\"vertical retrace\"). This eliminates flickering and tearing artifacts, but will use " + "more graphics memory."), 20, (void*) vidix_db_callback, this); /* Set up remaining props */ @@ -1100,17 +1103,23 @@ static vo_driver_t *vidix_open_plugin (video_driver_class_t *class_gen, const vo /* Colour key components */ this->vidix_grkey.ckey.red = config->register_range(config, "video.vidix_colour_key_red", 255, 0, 255, - "video overlay colour key red component", NULL, 10, + _("video overlay colour key red component"), + _("The colour key is used to tell the graphics card where to overlay the video image. " + "Try different values, if you experience windows becoming transparent."), 20, (void*) vidix_ckey_callback, this); this->vidix_grkey.ckey.green = config->register_range(config, "video.vidix_colour_key_green", 0, 0, 255, - "video overlay colour key green component", NULL, 10, + _("video overlay colour key green component"), + _("The colour key is used to tell the graphics card where to overlay the video image. " + "Try different values, if you experience windows becoming transparent."), 20, (void*) vidix_ckey_callback, this); this->vidix_grkey.ckey.blue = config->register_range(config, "video.vidix_colour_key_blue", 255, 0, 255, - "video overlay colour key blue component", NULL, 10, + _("video overlay colour key blue component"), + _("The colour key is used to tell the graphics card where to overlay the video image. " + "Try different values, if you experience windows becoming transparent."), 20, (void*) vidix_ckey_callback, this); vidix_update_colourkey(this); @@ -1168,7 +1177,12 @@ static vo_driver_t *vidixfb_open_plugin (video_driver_class_t *class_gen, const /* Register config option for fb device */ device = config->register_string(config, "video.vidixfb_device", "/dev/fb0", - "frame buffer device for vidix overlay", NULL, 10, NULL, NULL); + _("framebuffer device name"), + _("Specifies the file name for the framebuffer device to be used.\n" + "This setting is security critical, because when changed to a different file, xine " + "can be used to fill this file with arbitrary content. So you should be careful that " + "the value you enter really is a proper framebuffer device."), + XINE_CONFIG_SECURITY, NULL, NULL); /* Open fb device for reading */ if((fd = open("/dev/fb0", O_RDONLY)) < 0) { diff --git a/src/video_out/video_out_xshm.c b/src/video_out/video_out_xshm.c index 297a6d7d1..51df7dfa2 100644 --- a/src/video_out/video_out_xshm.c +++ b/src/video_out/video_out_xshm.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xshm.c,v 1.129 2004/04/10 15:31:10 miguelfreitas Exp $ + * $Id: video_out_xshm.c,v 1.130 2004/04/26 17:50:11 mroi Exp $ * * video_out_xshm.c, X11 shared memory extension interface for xine * @@ -1062,9 +1062,13 @@ static vo_driver_t *xshm_open_plugin (video_driver_class_t *class_gen, const voi this->sc.user_ratio = XINE_VO_ASPECT_AUTO; - this->sc.scaling_disabled = config->register_bool (config, "video.disable_scaling", 0, - _("disable all video scaling (faster!)"), - NULL, 10, NULL, NULL); + this->sc.scaling_disabled = + config->register_bool(config, "video.disable_scaling", 0, + _("disable all video scaling"), + _("You can disable video scaling globally. The image will then no longer " + "adapt to the size of the video window, which can dramatically " + "reduce CPU usage."), + 10, NULL, NULL); this->drawable = visual->d; this->cur_frame = NULL; XLockDisplay(this->display); @@ -1217,8 +1221,12 @@ static vo_driver_t *xshm_open_plugin (video_driver_class_t *class_gen, const voi this->yuv2rgb_swap = swapped; this->yuv2rgb_brightness = config->register_range (config, "video.xshm_gamma", 0, -128, 127, - _("gamma correction for XShm driver"), - NULL, 0, NULL, NULL); + _("brightness correction"), + _("The brightness correction can be used to " + "lighten or darken the image. It changes the " + "blacklevel without modifying the contrast, " + "but it limits the tonal range."), + 0, NULL, NULL); this->yuv2rgb_contrast = 128; this->yuv2rgb_saturation = 128; diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c index cf192db6f..69343972b 100644 --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xv.c,v 1.196 2004/04/10 15:31:10 miguelfreitas Exp $ + * $Id: video_out_xv.c,v 1.197 2004/04/26 17:50:11 mroi Exp $ * * video_out_xv.c, X11 video extension interface for xine * @@ -1057,7 +1057,8 @@ static void xv_check_capability (xv_driver_t *this, int property, XvAttribute attr, int base_id, char *str_prop, char *config_name, - char *config_desc) { + char *config_desc, + char *config_help) { int int_default; cfg_entry_t *entry; @@ -1082,13 +1083,13 @@ static void xv_check_capability (xv_driver_t *this, if ((attr.min_value == 0) && (attr.max_value == 1)) { this->config->register_bool (this->config, config_name, int_default, config_desc, - NULL, 10, xv_property_callback, &this->props[property]); + config_help, 20, xv_property_callback, &this->props[property]); } else { this->config->register_range (this->config, config_name, int_default, this->props[property].min, this->props[property].max, config_desc, - NULL, 10, xv_property_callback, &this->props[property]); + config_help, 20, xv_property_callback, &this->props[property]); } entry = this->config->lookup_entry (this->config, config_name); @@ -1261,49 +1262,65 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi } else { xv_check_capability (this, VO_PROP_HUE, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_HUE", - NULL, NULL); + NULL, NULL, NULL); } } else if(!strcmp(attr[k].name, "XV_SATURATION")) { xv_check_capability (this, VO_PROP_SATURATION, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_SATURATION", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_BRIGHTNESS")) { xv_check_capability (this, VO_PROP_BRIGHTNESS, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_BRIGHTNESS", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_CONTRAST")) { xv_check_capability (this, VO_PROP_CONTRAST, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_CONTRAST", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_COLORKEY")) { xv_check_capability (this, VO_PROP_COLORKEY, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_COLORKEY", "video.xv_colorkey", - _("Colorkey used for Xv video overlay")); + _("video overlay colour key"), + _("The colour key is used to tell the graphics card where to " + "overlay the video image. Try different values, if you experience " + "windows becoming transparent.")); } else if(!strcmp(attr[k].name, "XV_AUTOPAINT_COLORKEY")) { xv_check_capability (this, VO_PROP_AUTOPAINT_COLORKEY, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_AUTOPAINT_COLORKEY", "video.xv_autopaint_colorkey", - _("Make Xv autopaint its colorkey")); + _("autopaint colour key"), + _("Make Xv autopaint its colorkey.")); } else if(!strcmp(attr[k].name, "XV_FILTER")) { int xv_filter; /* This setting is specific to Permedia 2/3 cards. */ xv_filter = config->register_range (config, "video.XV_FILTER", 0, attr[k].min_value, attr[k].max_value, - _("bilinear scaling mode (permedia 2/3)"), - NULL, 10, xv_update_XV_FILTER, this); + _("bilinear scaling mode"), + _("Selects the bilinear scaling mode for Permedia cards. " + "The individual values are:\n\n" + "Permedia 2\n" + "0 - disable bilinear filtering\n" + "1 - enable bilinear filtering\n\n" + "Permedia 3\n" + "0 - disable bilinear filtering\n" + "1 - horizontal linear filtering\n" + "2 - enable full bilinear filtering"), + 20, xv_update_XV_FILTER, this); config->update_num(config,"video.XV_FILTER",xv_filter); } else if(!strcmp(attr[k].name, "XV_DOUBLE_BUFFER")) { int xv_double_buffer; xv_double_buffer = config->register_bool (config, "video.XV_DOUBLE_BUFFER", 1, - _("double buffer to sync video to the retrace"), - NULL, 10, xv_update_XV_DOUBLE_BUFFER, this); + _("enable double buffering"), + _("Double buffering will synchronize the update of the video image to the " + "repainting of the entire screen (\"vertical retrace\"). This eliminates " + "flickering and tearing artifacts, but will use more graphics memory."), + 20, xv_update_XV_DOUBLE_BUFFER, this); config->update_num(config,"video.XV_DOUBLE_BUFFER",xv_double_buffer); } } @@ -1359,14 +1376,39 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi this->use_pitch_alignment = config->register_bool (config, "video.xv_pitch_alignment", 0, - _("workaround for some (buggy) XVideo drivers"), - NULL, 10, xv_update_xv_pitch_alignment, this); + _("pitch alignment workaround"), + _("Some buggy video drivers need a workaround to function properly."), + 10, xv_update_xv_pitch_alignment, this); this->deinterlace_method = config->register_enum (config, "video.deinterlace_method", 4, deinterlace_methods, - _("Software deinterlace method (Key I toggles deinterlacer on/off)"), - NULL, 10, xv_update_deinterlace, this); + _("deinterlace method"), + _("From the old days of analog television, where the even and odd numbered " + "lines of a video frame would be displayed at different times comes the " + "idea to increase motion smoothness by also recording the lines at " + "different times. This is called \"interlacing\". But unfortunately, " + "todays displays show the even and odd numbered lines as one complete frame " + "all at the same time (called \"progressive display\"), which results in " + "ugly frame errors known as comb artifacts. Software deinterlacing is an " + "approach to reduce these artifacts. The individual values are:\n\n" + "none\n" + "Disables software deinterlacing.\n\n" + "bob\n" + "Interpolates between the lines for moving parts of the image.\n\n" + "weave\n" + "Similar to bob, but with a tendency to preserve the full resolution, " + "better for high detail in low movement scenes.\n\n" + "greedy\n" + "Very good adaptive deinterlacer, but needs a lot of CPU power.\n\n" + "onefield\n" + "Always interpolates and reduces vertical resolution.\n\n" + "onefieldxv\n" + "Same as onefield, but does the interpolation in hardware.\n\n" + "linearblend\n" + "Applies a slight vertical blur to remove the comb artifacts. Good results " + "with medium CPU usage."), + 10, xv_update_deinterlace, this); this->deinterlace_enabled = 0; XLockDisplay (this->display); diff --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c index 8ead3549e..242b63058 100644 --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xvmc.c,v 1.14 2004/03/03 20:09:15 mroi Exp $ + * $Id: video_out_xvmc.c,v 1.15 2004/04/26 17:50:11 mroi Exp $ * * video_out_xvmc.c, X11 video motion compensation extension interface for xine * @@ -1279,7 +1279,8 @@ static void xvmc_check_capability (xvmc_driver_t *this, int property, XvAttribute attr, int base_id, char *str_prop, char *config_name, - char *config_desc) { + char *config_desc, + char *config_help) { int int_default; cfg_entry_t *entry; @@ -1304,13 +1305,13 @@ static void xvmc_check_capability (xvmc_driver_t *this, if ((attr.min_value == 0) && (attr.max_value == 1)) { this->config->register_bool (this->config, config_name, int_default, config_desc, - NULL, 10, xvmc_property_callback, &this->props[property]); + NULL, 20, xvmc_property_callback, &this->props[property]); } else { this->config->register_range (this->config, config_name, int_default, this->props[property].min, this->props[property].max, config_desc, - NULL, 10, xvmc_property_callback, &this->props[property]); + NULL, 20, xvmc_property_callback, &this->props[property]); } entry = this->config->lookup_entry (this->config, config_name); @@ -1461,39 +1462,47 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi if(!strcmp(attr[k].name, "XV_HUE")) { xvmc_check_capability (this, VO_PROP_HUE, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_HUE", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_SATURATION")) { xvmc_check_capability (this, VO_PROP_SATURATION, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_SATURATION", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_BRIGHTNESS")) { xvmc_check_capability (this, VO_PROP_BRIGHTNESS, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_BRIGHTNESS", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_CONTRAST")) { xvmc_check_capability (this, VO_PROP_CONTRAST, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_CONTRAST", - NULL, NULL); + NULL, NULL, NULL); } else if(!strcmp(attr[k].name, "XV_COLORKEY")) { xvmc_check_capability (this, VO_PROP_COLORKEY, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_COLORKEY", "video.xv_colorkey", - _("Colorkey used for Xv video overlay")); + _("video overlay colour key"), + _("The colour key is used to tell the graphics card where to " + "overlay the video image. Try different values, if you experience " + "windows becoming transparent.")); } else if(!strcmp(attr[k].name, "XV_AUTOPAINT_COLORKEY")) { xvmc_check_capability (this, VO_PROP_AUTOPAINT_COLORKEY, attr[k], class->adaptor_info[class->adaptor_num].base_id, "XV_AUTOPAINT_COLORKEY", - NULL, NULL); + "video.xv_autopaint_colorkey", + _("autopaint colour key"), + _("Make Xv autopaint its colorkey.")); } else if(!strcmp(attr[k].name, "XV_DOUBLE_BUFFER")) { int xvmc_double_buffer; xvmc_double_buffer = config->register_bool (config, "video.XV_DOUBLE_BUFFER", 1, - _("double buffer to sync video to the retrace"), - NULL, 10, xvmc_update_XV_DOUBLE_BUFFER, this); + _("enable double buffering"), + _("Double buffering will synchronize the update of the video image to the " + "repainting of the entire screen (\"vertical retrace\"). This eliminates " + "flickering and tearing artifacts, but will use more graphics memory."), + 20, xvmc_update_XV_DOUBLE_BUFFER, this); config->update_num(config,"video.XV_DOUBLE_BUFFER",xvmc_double_buffer); } } @@ -1549,10 +1558,35 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi XUnLockDisplay(this->display); */ - this->deinterlace_method = config->register_enum (config, "video.deinterlace_method", 4, - deinterlace_methods, - _("Software deinterlace method (Key I toggles deinterlacer on/off)"), - NULL, 10, xvmc_update_deinterlace, this); + this->deinterlace_method = + config->register_enum (config, "video.deinterlace_method", 4, + deinterlace_methods, + _("deinterlace method"), + _("From the old days of analog television, where the even and odd numbered " + "lines of a video frame would be displayed at different times comes the " + "idea to increase motion smoothness by also recording the lines at " + "different times. This is called \"interlacing\". But unfortunately, " + "todays displays show the even and odd numbered lines as one complete frame " + "all at the same time (called \"progressive display\"), which results in " + "ugly frame errors known as comb artifacts. Software deinterlacing is an " + "approach to reduce these artifacts. The individual values are:\n\n" + "none\n" + "Disables software deinterlacing.\n\n" + "bob\n" + "Interpolates between the lines for moving parts of the image.\n\n" + "weave\n" + "Similar to bob, but with a tendency to preserve the full resolution, " + "better for high detail in low movement scenes.\n\n" + "greedy\n" + "Very good adaptive deinterlacer, but needs a lot of CPU power.\n\n" + "onefield\n" + "Always interpolates and reduces vertical resolution.\n\n" + "onefieldxv\n" + "Same as onefield, but does the interpolation in hardware.\n\n" + "linearblend\n" + "Applies a slight vertical blur to remove the comb artifacts. Good results " + "with medium CPU usage."), + 10, xvmc_update_deinterlace, this); this->deinterlace_enabled = 1; /* default is enabled */ lprintf("deinterlace_methods %d ",this->deinterlace_method); diff --git a/src/xine-engine/audio_decoder.c b/src/xine-engine/audio_decoder.c index 05642fc84..1b4c68457 100644 --- a/src/xine-engine/audio_decoder.c +++ b/src/xine-engine/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.127 2004/03/28 19:51:56 mroi Exp $ + * $Id: audio_decoder.c,v 1.128 2004/04/26 17:50:12 mroi Exp $ * * * functions that implement audio decoding @@ -449,9 +449,12 @@ void _x_audio_decoder_init (xine_stream_t *stream) { num_buffers = stream->xine->config->register_num (stream->xine->config, "audio.num_buffers", 230, - "number of audio buffers to allocate (higher values mean smoother playback but higher latency)", - NULL, 20, - NULL, NULL); + _("number of audio buffers"), + _("The number of audio buffers (each is 8k in size) " + "xine uses in its internal queue. Higher values " + "mean smoother playback for unreliable inputs, but " + "also increased latency and memory comsumption."), + 20, NULL, NULL); stream->audio_fifo = _x_fifo_buffer_new (num_buffers, 8192); stream->audio_channel_user = -1; diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index 9247e3411..e263b73e5 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -17,7 +17,7 @@ * along with self program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.c,v 1.171 2004/04/07 18:07:25 mroi Exp $ + * $Id: audio_out.c,v 1.172 2004/04/26 17:50:12 mroi Exp $ * * 22-8-2001 James imported some useful AC3 sections from the previous alsa driver. * (c) 2001 Andy Lo A Foe <andy@alsaplayer.org> @@ -1843,7 +1843,7 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, int i, err; pthread_attr_t pth_attrs; static char *resample_modes[] = {"auto", "off", "on", NULL}; - static char *av_sync_methods[] = {"metronom_feedback", "resample", NULL}; + static char *av_sync_methods[] = {"metronom feedback", "resample", NULL}; this = xine_xmalloc (sizeof (aos_t)) ; @@ -1883,26 +1883,59 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, this->av_sync_method_conf = config->register_enum(config, "audio.av_sync_method", 0, av_sync_methods, - _("choose method to sync audio and video"), - _("'resample' might be better if you use a " - "DXR3/H+ card and (analog) audio is " - "processed by your sound card"), - 30, ao_update_av_sync_method, this); + _("method to sync audio and video"), + _("When playing audio and video, there are at least " + "two clocks involved: The system clock, to which " + "video frames are synchronized and the clock " + "in your sound hardware, which determines the " + "speed of the audio playback. These clocks are " + "never ticking at the same speed except for some " + "rare cases where they are physically identical. " + "In general, the two clocks will run drift after " + "some time, for which xine offers two ways to " + "keep audio and video synchronized:\n\n" + "metronom feedback\n" + "This is the standard method, which applies a " + "countereffecting video drift, as soon as the audio " + "drift has accumulated over a threshold.\n\n" + "resample\n" + "For some video hardware, which is limited to a " + "fixed frame rate (like the DXR3 or other decoder " + "cards) the above does not work, because the video " + "cannot drift. Therefore we resample the audio " + "stream to make it longer or shorter to compensate " + "the audio drift error. This does not work for " + "digital passthrough, where audio data is passed to " + "an external decoder in digital form."), + 20, ao_update_av_sync_method, this); config->update_num(config,"audio.av_sync_method",this->av_sync_method_conf); this->resample_conf = config->register_enum (config, "audio.resample_mode", 0, resample_modes, - _("adjust whether resampling is done or not"), - NULL, 20, NULL, NULL); + _("enable resampling"), + _("When the sample rate of the decoded audio does not " + "match the capabilities of your sound hardware, an " + "adaptation called \"resampling\" is required. Here you " + "can select, whether resampling is enabled, disabled or " + "used automatically when necessary."), + 20, NULL, NULL); this->force_rate = config->register_num (config, "audio.force_rate", 0, - _("if !=0 always resample to given rate"), - NULL, 20, NULL, NULL); + _("always resample to this rate (0 to disable)"), + _("Some audio drivers do not correctly announce the " + "capabilities of the audio hardware. By setting a " + "value other than zero here, you can force the audio " + "stream to be resampled to the given rate."), + 20, NULL, NULL); this->passthrough_offset = config->register_num (config, "audio.passthrough_offset", 0, - _("adjust if audio is offsync"), - NULL, 10, NULL, NULL); + _("offset for digital passthrough"), + _("If you use an external surround decoder and " + "audio is ahead or behind video, you can enter " + "a fixed offset here to compensate.\nThe unit of " + "the value is one PTS tick, which is the 90000th " + "part of a second."), 10, NULL, NULL); this->compression_factor = 2.0; this->compression_factor_max = 0.0; @@ -1968,13 +2001,13 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, int vol; vol = config->register_range (config, "audio.mixer_volume", - 50, 0, 100, _("Audio volume"), - NULL, 0, NULL, NULL); + 50, 0, 100, _("startup audio volume"), + _("The overall audio volume set at xine startup."), 10, NULL, NULL); if(config->register_bool (config, "audio.remember_volume", 0, _("restore volume level at startup"), - _("if this not set, xine will not touch any mixer settings at startup"), - 0, NULL, NULL)) { + _("If disabled, xine will not modify any mixer settings at startup."), + 10, NULL, NULL)) { int prop = 0; if((ao_get_capabilities(&this->ao)) & AO_CAP_MIXER_VOL) diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c index 92bbaef66..03cc5bb64 100644 --- a/src/xine-engine/load_plugins.c +++ b/src/xine-engine/load_plugins.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: load_plugins.c,v 1.174 2004/04/11 14:51:20 mroi Exp $ + * $Id: load_plugins.c,v 1.175 2004/04/26 17:50:12 mroi Exp $ * * * Load input/demux/audio_out/video_out/codec plugins @@ -303,6 +303,7 @@ static void _insert_plugin (xine_t *this, uint32_t *types; int priority = 0; char key[80]; + char desc[100]; int i; if (info->API != api_version) { @@ -359,13 +360,14 @@ static void _insert_plugin (xine_t *this, priority = decoder_new->priority = decoder_old->priority; sprintf(key, "decoder.%s_priority", info->id); + sprintf(desc, _("priority for decoder %s"), info->id); this->config->register_num (this->config, key, 0, - "decoder's priority compared to others", - "The priority provides a ranking in case some media " - "can be handled by more than one decoder.\n" - "A priority of 0 enables the decoder's default priority.", 20, + desc, + _("The priority provides a ranking in case some media " + "can be handled by more than one decoder.\n" + "A priority of 0 enables the decoder's default priority."), 20, _decoder_priority_cb, (void *)this); /* reset priority on old config files */ diff --git a/src/xine-engine/osd.c b/src/xine-engine/osd.c index eeb40b02a..876fbc9cf 100644 --- a/src/xine-engine/osd.c +++ b/src/xine-engine/osd.c @@ -1375,8 +1375,11 @@ osd_renderer_t *_x_osd_renderer_init( xine_stream_t *stream ) { this->textpalette = this->stream->xine->config->register_enum (this->stream->xine->config, "misc.osd_text_palette", 0, textpalettes_str, - _("Palette (foreground-border-background) to use on subtitles"), - NULL, 10, update_text_palette, this); + _("palette (foreground-border-background) to use for subtitles and OSD"), + _("The palette for on-screen-display and some subtitle formats that do " + "not specify any colouring themselves. The palettes are listed in the " + "form: foreground-border-background."), + 10, update_text_palette, this); /* * set up function pointer diff --git a/src/xine-engine/video_decoder.c b/src/xine-engine/video_decoder.c index 0255d71fe..c0c4af95c 100644 --- a/src/xine-engine/video_decoder.c +++ b/src/xine-engine/video_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_decoder.c,v 1.148 2004/04/08 13:37:54 mroi Exp $ + * $Id: video_decoder.c,v 1.149 2004/04/26 17:50:12 mroi Exp $ * */ @@ -456,9 +456,12 @@ void _x_video_decoder_init (xine_stream_t *stream) { num_buffers = stream->xine->config->register_num (stream->xine->config, "video.num_buffers", 500, - "number of video buffers to allocate (higher values mean smoother playback but higher latency)", - NULL, 20, - NULL, NULL); + _("number of video buffers"), + _("The number of video buffers (each is 8k in size) " + "xine uses in its internal queue. Higher values " + "mean smoother playback for unreliable inputs, but " + "also increased latency and memory comsumption."), + 20, NULL, NULL); stream->video_fifo = _x_fifo_buffer_new (num_buffers, 8192); stream->spu_track_map_entries = 0; diff --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c index 65a7f7d56..2f8deadf0 100644 --- a/src/xine-engine/video_out.c +++ b/src/xine-engine/video_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out.c,v 1.190 2004/04/22 23:19:04 tmattern Exp $ + * $Id: video_out.c,v 1.191 2004/04/26 17:50:13 mroi Exp $ * * frame allocation / queuing / scheduling / output functions */ @@ -1550,12 +1550,16 @@ xine_video_port_t *_x_vo_new_port (xine_t *xine, vo_driver_t *driver, this->warn_skipped_threshold = xine->config->register_num (xine->config, "video.warn_skipped_threshold", 10, - "send event to front end if percentage of skipped frames exceed this value", - NULL, 20, NULL, NULL); + _("percentage of skipped frames to tolerate"), + _("When more than this percentage of frames are not shown, because they " + "were not decoded in time, xine sends a notification."), + 20, NULL, NULL); this->warn_discarded_threshold = xine->config->register_num (xine->config, "video.warn_discarded_threshold", 10, - "send event to front end if percentage of discarded frames exceed this value", - NULL, 20, NULL, NULL); + _("percentage of discarded frames to tolerate"), + _("When more than this percentage of frames are not shown, because they " + "were not scheduled for display in time, xine sends a notification."), + 20, NULL, NULL); if (grabonly) { diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 625915008..d34db5c31 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine.c,v 1.290 2004/04/16 16:34:22 hadess Exp $ + * $Id: xine.c,v 1.291 2004/04/26 17:50:13 mroi Exp $ */ /* @@ -1459,9 +1459,18 @@ void xine_init (xine_t *this) { this->demux_strategy = this->config->register_enum ( this->config, "misc.demux_strategy", 0, demux_strategies, - _("Media format detection strategy"), - NULL, - 10, __config_demux_strategy_cb, this); + _("media format detection strategy"), + _("xine offers various methods to detect the media format of input to play. " + "The individual values are:\n\n" + "default\n" + "First try to detect by content, then by file name extension.\n\n" + "reverse\n" + "First try to detect by file name extension, then by content.\n\n" + "content\n" + "Detect by content only.\n\n" + "extension\n" + "Detect by file name extension only.\n"), + 20, __config_demux_strategy_cb, this); /* * save directory @@ -1469,8 +1478,11 @@ void xine_init (xine_t *this) { this->save_path = this->config->register_string ( this->config, "misc.save_dir", "", - _("Path for saving streams"), - _("Streams will be saved only into this directory"), + _("directory for saving streams"), + _("When using the stream save feature, files will be written only into this directory.\n" + "This setting is security critical, because when changed to a different directory, xine " + "can be used to fill files in it with arbitrary content. So you should be careful that " + "the directory you specify is robust against any content in any file."), XINE_CONFIG_SECURITY, __config_save_cb, this); /* diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c index 8353d6ba1..3d22dc8fa 100644 --- a/src/xine-utils/memcpy.c +++ b/src/xine-utils/memcpy.c @@ -477,8 +477,12 @@ void xine_probe_fast_memcpy(xine_t *xine) best = xine->config->register_enum (xine->config, "misc.memcpy_method", 0, memcpy_methods, - _("Memcopy method to use in xine for large data chunks."), - NULL, 20, update_fast_memcpy, (void *) xine); + _("memcopy method used by xine"), + _("The copying of large memory blocks is one of the most " + "expensive operations on todays computers. Therefore xine " + "provides various tuned methods to do this copying. " + "Usually, the best method is detected automatically."), + 20, update_fast_memcpy, (void *) xine); /* check if function is configured and valid for this machine */ if( best != 0 && |