summaryrefslogtreecommitdiff
path: root/src/video_out
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_out')
-rw-r--r--src/video_out/video_out_fb.c42
-rw-r--r--src/video_out/video_out_opengl.c24
-rw-r--r--src/video_out/video_out_pgx32.c11
-rw-r--r--src/video_out/video_out_pgx64.c41
-rw-r--r--src/video_out/video_out_sdl.c9
-rw-r--r--src/video_out/video_out_syncfb.c27
-rw-r--r--src/video_out/video_out_vidix.c32
-rw-r--r--src/video_out/video_out_xshm.c20
-rw-r--r--src/video_out/video_out_xv.c78
-rw-r--r--src/video_out/video_out_xvmc.c66
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);