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); | 
