diff options
Diffstat (limited to 'src/video_out')
-rw-r--r-- | src/video_out/video_out_fb.c | 42 | ||||
-rw-r--r-- | src/video_out/video_out_opengl.c | 24 | ||||
-rw-r--r-- | src/video_out/video_out_pgx32.c | 11 | ||||
-rw-r--r-- | src/video_out/video_out_pgx64.c | 41 | ||||
-rw-r--r-- | src/video_out/video_out_sdl.c | 9 | ||||
-rw-r--r-- | src/video_out/video_out_syncfb.c | 27 | ||||
-rw-r--r-- | src/video_out/video_out_vidix.c | 32 | ||||
-rw-r--r-- | src/video_out/video_out_xshm.c | 20 | ||||
-rw-r--r-- | src/video_out/video_out_xv.c | 78 | ||||
-rw-r--r-- | src/video_out/video_out_xvmc.c | 66 |
10 files changed, 256 insertions, 94 deletions
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); |