[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xine-devel
Subject:    Re: [xine-devel] [PATCH] Added support for video controls sharpness
From:       Andreas Auras <yak54 () gmx ! net>
Date:       2010-04-13 8:23:56
Message-ID: 201004131023.56235.yak54 () gmx ! net
[Download RAW message or body]

Hi,

as a attachment you will find the revised patch for xine-ui now adding support for \
video controls sharpness, noise reduction AND gamma.

Testing for support of video properties is now done by inspecting video out driver \
capabilities (already uint64_t aware).

Furthermore the patch fixes the possibility of modification of video properties by
events (e.g. keyboard) only to those properties that are supported by the video
out driver.

Again the modified background image for the control panel is not perfect. Someone \
with more know how about graphic manipulation should repaint the top and bottom \
mouldings.

I could not test the gamma video property because of lack of hardware.

 Andreas


> I demand that Andreas Auras may or may not have written...
> 
> > as a attachment you will find a patch against the actual xine-ui hg
> > repository that added suppport for video controls sharpness and noise
> > reduction to the xine player.
> 
> No gamma? (That's available to (some of) us Radeon users...)
> 
> Also, if VO_CAP_HUE is set, you can assume that it's safe to check whether
> each control is recognised, and to disable it if not. (BTW, if you store the
> capabilities word returned from (video_port)->get_capabilities, use uint64_t.
> uint32_t is presently what is returned, but I intend to change this.)
> 
> > The patch enhances the video control panel with two sliders and the command
> > interface of the player. Beside the diff patch i attach the modified
> > background image of the video control panel because it is a binary file.
> 
> "hg export --git" does binary diffs. Though it's better to set that and
> listing of function names (ref. hg diff -p) by adding the following to
> ~/.hgrc:
> 
> [diff]
> git=true
> showfunc=true
> 
> (See hgrc(5) for more information.)
> 
> [snip]
> > Also there is no transalation of the new gui labels introduced. If someone
> > could give me an explanation how to handle these .pot and .po files i could
> > add the german translation.
> 
> Not a problem. Best to wait until those files are refreshed, then update as
> needed.
> 


["xine-ui-hg-3f5b3fe4a1d7" (text/plain)]

# HG changeset patch
# User Andreas Auras <yak54@gmx.net>
# Date 1271146001 -7200
# Node ID 3f5b3fe4a1d74a14007970b1d81571976a84ce60
# Parent  4a1c7e8ec2a66639370f236fd1d60e82cdb7e6b1
Added support for video controls gamma, sharpness and noise reduction.

Furthermore the patch fixes the possibility of modification of video properties by
events (e.g. keyboard) only to those properties that are supported by the video
out driver.

diff --git a/src/xitk/common.h b/src/xitk/common.h
--- a/src/xitk/common.h
+++ b/src/xitk/common.h
@@ -185,6 +185,9 @@ typedef struct {
     int                     brightness, default_brightness;
     int                     saturation, default_saturation;
     int                     contrast, default_contrast;
+    int                     gamma, default_gamma;
+    int                     sharpness, default_sharpness;
+    int                     noise_reduction, default_noise_reduction;
   } video_settings;
 
   xine_audio_port_t        *ao_port;
diff --git a/src/xitk/control.c b/src/xitk/control.c
--- a/src/xitk/control.c
+++ b/src/xitk/control.c
@@ -32,10 +32,12 @@
 #include <pthread.h>
 
 #include "common.h"
+#include <xine/video_out.h>
 
 #define CONTROL_MIN     0
 #define CONTROL_MAX     65535
 #define CONTROL_STEP    565	/* approx. 1 pixel slider step */
+#define STEP_SIZE       256     /* action event step */
 
 #define TEST_VO_VALUE(val)  (val < CONTROL_MAX/3 || val > CONTROL_MAX*2/3) ? \
(CONTROL_MAX - val) : 0  
@@ -46,6 +48,9 @@ typedef struct {
   xitk_widget_t        *sat;
   xitk_widget_t        *bright;
   xitk_widget_t        *contr;
+  xitk_widget_t        *gamma;
+  xitk_widget_t        *sharp;
+  xitk_widget_t        *noise;
   ImlibImage           *bg_image;
   xitk_widget_list_t   *widget_list;
 
@@ -62,7 +67,7 @@ typedef struct {
 } _control_t;
 
 static _control_t    *control = NULL;
-static int hue_ena, sat_ena, bright_ena, contr_ena;
+static int hue_ena, sat_ena, bright_ena, contr_ena, gamma_ena, sharp_ena, noise_ena;
 
 
 static void hue_changes_cb(void *data, xine_cfg_entry_t *cfg) {
@@ -81,6 +86,18 @@ static void contrast_changes_cb(void *da
   gGui->video_settings.contrast =
     (cfg->num_value < 0) ? gGui->video_settings.default_contrast : cfg->num_value;
 }
+static void gamma_changes_cb(void *data, xine_cfg_entry_t *cfg) {
+  gGui->video_settings.gamma =
+    (cfg->num_value < 0) ? gGui->video_settings.default_gamma : cfg->num_value;
+}
+static void sharpness_changes_cb(void *data, xine_cfg_entry_t *cfg) {
+  gGui->video_settings.sharpness =
+    (cfg->num_value < 0) ? gGui->video_settings.default_sharpness : cfg->num_value;
+}
+static void noise_reduction_changes_cb(void *data, xine_cfg_entry_t *cfg) {
+  gGui->video_settings.noise_reduction =
+    (cfg->num_value < 0) ? gGui->video_settings.default_noise_reduction : \
cfg->num_value; +}
 
 /*
  *
@@ -132,6 +149,19 @@ static void update_sliders_video_setting
     if(xitk_is_widget_enabled(control->contr)) {
       xitk_slider_set_pos(control->contr, \
get_current_param(XINE_PARAM_VO_CONTRAST));  }
+    if(xitk_is_widget_enabled(control->gamma)) {
+      xitk_slider_set_pos(control->gamma, get_current_param(XINE_PARAM_VO_GAMMA));
+    }
+#ifdef XINE_PARAM_VO_SHARPNESS
+    if(xitk_is_widget_enabled(control->sharp)) {
+      xitk_slider_set_pos(control->sharp, \
get_current_param(XINE_PARAM_VO_SHARPNESS)); +    }
+#endif
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+    if(xitk_is_widget_enabled(control->noise)) {
+      xitk_slider_set_pos(control->noise, \
get_current_param(XINE_PARAM_VO_NOISE_REDUCTION)); +    }
+#endif
   }
 }
 
@@ -195,20 +225,109 @@ static void set_contrast(xitk_widget_t *
     config_update_num("gui.vo_contrast", contrast);
 }
 
-void control_set_image_prop(int prop, int value) {
+/*
+ * Set gamma
+ */
+static void set_gamma(xitk_widget_t *w, void *data, int value) {
+  int gamma;
+
+  set_current_param(XINE_PARAM_VO_GAMMA, value);
+
+  if((gamma = get_current_param(XINE_PARAM_VO_GAMMA)) != value)
+    update_sliders_video_settings();
+
+  if(gamma_ena)
+    config_update_num("gui.vo_gamma", gamma);
+}
+
+/*
+ * Set sharpness
+ */
+static void set_sharpness(xitk_widget_t *w, void *data, int value) {
+#ifdef XINE_PARAM_VO_SHARPNESS
+  int sharpness;
+  set_current_param(XINE_PARAM_VO_SHARPNESS, value);
+
+  if((sharpness = get_current_param(XINE_PARAM_VO_SHARPNESS)) != value)
+    update_sliders_video_settings();
+
+  if(sharp_ena)
+    config_update_num("gui.vo_sharpness", sharpness);
+#endif
+}
+
+/*
+ * Set noise reduction
+ */
+static void set_noise_reduction(xitk_widget_t *w, void *data, int value) {
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  int noise;
+
+  set_current_param(XINE_PARAM_VO_NOISE_REDUCTION, value);
+
+  if((noise = get_current_param(XINE_PARAM_VO_NOISE_REDUCTION)) != value)
+    update_sliders_video_settings();
+
+  if(noise_ena)
+    config_update_num("gui.vo_noise_reduction", noise);
+#endif
+}
+
+void control_inc_image_prop(int prop) {
   switch(prop) {
   case XINE_PARAM_VO_HUE:
-    set_current_param(XINE_PARAM_VO_HUE, value);
+    if(hue_ena && gGui->video_settings.hue <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_hue", gGui->video_settings.hue + STEP_SIZE);
+      set_current_param(XINE_PARAM_VO_HUE, gGui->video_settings.hue);
+      osd_draw_bar(_("Hue"), 0, 65535, gGui->video_settings.hue, OSD_BAR_STEPPER);
+    }
     break;
   case XINE_PARAM_VO_SATURATION:
-    set_current_param(XINE_PARAM_VO_SATURATION, value);
+    if(sat_ena && gGui->video_settings.saturation <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_saturation", gGui->video_settings.saturation + \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_SATURATION, \
gGui->video_settings.saturation); +      osd_draw_bar(_("Saturation"), 0, 65535, \
gGui->video_settings.saturation, OSD_BAR_STEPPER); +    }
     break;
   case XINE_PARAM_VO_BRIGHTNESS:
-    set_current_param(XINE_PARAM_VO_BRIGHTNESS, value);
+    if(bright_ena && gGui->video_settings.brightness <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_brightness", gGui->video_settings.brightness + \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_BRIGHTNESS, \
gGui->video_settings.brightness); +      osd_draw_bar(_("Brightness"), 0, 65535, \
gGui->video_settings.brightness, OSD_BAR_STEPPER); +    }
     break;
   case XINE_PARAM_VO_CONTRAST:
-    set_current_param(XINE_PARAM_VO_CONTRAST, value);
+    if(contr_ena && gGui->video_settings.contrast <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_contrast", gGui->video_settings.contrast + \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_CONTRAST, \
gGui->video_settings.contrast); +      osd_draw_bar(_("Contrast"), 0, 65535, \
gGui->video_settings.contrast, OSD_BAR_STEPPER); +    }
     break;
+  case XINE_PARAM_VO_GAMMA:
+    if(gamma_ena && gGui->video_settings.gamma <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_gamma", gGui->video_settings.gamma + STEP_SIZE);
+      set_current_param(XINE_PARAM_VO_GAMMA, gGui->video_settings.gamma);
+      osd_draw_bar(_("Gamma"), 0, 65535, gGui->video_settings.gamma, \
OSD_BAR_STEPPER); +    }
+    break;
+#ifdef XINE_PARAM_VO_SHARPNESS
+  case XINE_PARAM_VO_SHARPNESS:
+    if(sharp_ena && gGui->video_settings.sharpness <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_sharpness", gGui->video_settings.sharpness + \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_SHARPNESS, \
gGui->video_settings.sharpness); +      osd_draw_bar(_("Sharpness"), 0, 65535, \
gGui->video_settings.sharpness, OSD_BAR_STEPPER); +    }
+    break;
+#endif
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  case XINE_PARAM_VO_NOISE_REDUCTION:
+    if(noise_ena && gGui->video_settings.noise_reduction <= (65535 - STEP_SIZE)) {
+      config_update_num("gui.vo_noise_reduction", \
gGui->video_settings.noise_reduction + STEP_SIZE); +      \
set_current_param(XINE_PARAM_VO_NOISE_REDUCTION, \
gGui->video_settings.noise_reduction); +      osd_draw_bar(_("Noise reduction"), 0, \
65535, gGui->video_settings.noise_reduction, OSD_BAR_STEPPER); +    }
+    break;
+#endif
   default:
     return;
     break;
@@ -216,20 +335,68 @@ void control_set_image_prop(int prop, in
   update_sliders_video_settings();
 }
 
-static int test_vo_property(int property) {
-  int cur;
-
-  cur = get_current_param(property);
-  set_current_param(property, TEST_VO_VALUE(cur));
-  if((get_current_param(property)) == cur)
-    return 0;
-  else {
-    set_current_param(property, cur);
-    return 1;
+void control_dec_image_prop(int prop) {
+  switch(prop) {
+  case XINE_PARAM_VO_HUE:
+    if(hue_ena && gGui->video_settings.hue >= STEP_SIZE) {
+      config_update_num("gui.vo_hue", gGui->video_settings.hue - STEP_SIZE);
+      set_current_param(XINE_PARAM_VO_HUE, gGui->video_settings.hue);
+      osd_draw_bar(_("Hue"), 0, 65535, gGui->video_settings.hue, OSD_BAR_STEPPER);
+    }
+    break;
+  case XINE_PARAM_VO_SATURATION:
+    if(sat_ena && gGui->video_settings.saturation >= STEP_SIZE) {
+      config_update_num("gui.vo_saturation", gGui->video_settings.saturation - \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_SATURATION, \
gGui->video_settings.saturation); +      osd_draw_bar(_("Saturation"), 0, 65535, \
gGui->video_settings.saturation, OSD_BAR_STEPPER); +    }
+    break;
+  case XINE_PARAM_VO_BRIGHTNESS:
+    if(bright_ena && gGui->video_settings.brightness >= STEP_SIZE) {
+      config_update_num("gui.vo_brightness", gGui->video_settings.brightness - \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_BRIGHTNESS, \
gGui->video_settings.brightness); +      osd_draw_bar(_("Brightness"), 0, 65535, \
gGui->video_settings.brightness, OSD_BAR_STEPPER); +    }
+    break;
+  case XINE_PARAM_VO_CONTRAST:
+    if(contr_ena && gGui->video_settings.contrast >= STEP_SIZE) {
+      config_update_num("gui.vo_contrast", gGui->video_settings.contrast - \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_CONTRAST, \
gGui->video_settings.contrast); +      osd_draw_bar(_("Contrast"), 0, 65535, \
gGui->video_settings.contrast, OSD_BAR_STEPPER); +    }
+    break;
+  case XINE_PARAM_VO_GAMMA:
+    if(gamma_ena && gGui->video_settings.gamma >= STEP_SIZE) {
+      config_update_num("gui.vo_gamma", gGui->video_settings.gamma - STEP_SIZE);
+      set_current_param(XINE_PARAM_VO_GAMMA, gGui->video_settings.gamma);
+      osd_draw_bar(_("Gamma"), 0, 65535, gGui->video_settings.gamma, \
OSD_BAR_STEPPER); +    }
+    break;
+#ifdef XINE_PARAM_VO_SHARPNESS
+  case XINE_PARAM_VO_SHARPNESS:
+    if(sharp_ena && gGui->video_settings.sharpness >= STEP_SIZE) {
+      config_update_num("gui.vo_sharpness", gGui->video_settings.sharpness - \
STEP_SIZE); +      set_current_param(XINE_PARAM_VO_SHARPNESS, \
gGui->video_settings.sharpness); +      osd_draw_bar(_("Sharpness"), 0, 65535, \
gGui->video_settings.sharpness, OSD_BAR_STEPPER); +    }
+    break;
+#endif
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  case XINE_PARAM_VO_NOISE_REDUCTION:
+    if(noise_ena && gGui->video_settings.noise_reduction >= STEP_SIZE) {
+      config_update_num("gui.vo_noise_reduction", \
gGui->video_settings.noise_reduction - STEP_SIZE); +      \
set_current_param(XINE_PARAM_VO_NOISE_REDUCTION, \
gGui->video_settings.noise_reduction); +      osd_draw_bar(_("Noise reduction"), 0, \
65535, gGui->video_settings.noise_reduction, OSD_BAR_STEPPER); +    }
+    break;
+#endif
+  default:
+    return;
+    break;
   }
+  update_sliders_video_settings();
 }
 
-
 /*
  * Enable or disable video settings sliders.
  */
@@ -254,13 +421,41 @@ static void active_sliders_video_setting
     xitk_disable_widget(control->contr);
   else
     xitk_enable_widget(control->contr);
+
+  if(!gamma_ena)
+    xitk_disable_widget(control->gamma);
+  else
+    xitk_enable_widget(control->gamma);
+
+  if(!sharp_ena)
+    xitk_disable_widget(control->sharp);
+  else
+    xitk_enable_widget(control->sharp);
+
+  if(!noise_ena)
+    xitk_disable_widget(control->noise);
+  else
+    xitk_enable_widget(control->noise);
 }
 
 static void probe_active_controls(void) {
-  hue_ena    = test_vo_property(XINE_PARAM_VO_HUE);
-  bright_ena = test_vo_property(XINE_PARAM_VO_BRIGHTNESS);
-  sat_ena    = test_vo_property(XINE_PARAM_VO_SATURATION);
-  contr_ena  = test_vo_property(XINE_PARAM_VO_CONTRAST);
+  uint64_t cap = gGui->vo_port->get_capabilities(gGui->vo_port);
+
+  hue_ena    = ((cap & VO_CAP_HUE) != 0);
+  bright_ena = ((cap & VO_CAP_BRIGHTNESS) != 0);
+  sat_ena    = ((cap & VO_CAP_SATURATION) != 0);
+  contr_ena  = ((cap & VO_CAP_CONTRAST) != 0);
+  gamma_ena  = ((cap & VO_CAP_GAMMA) != 0);
+#ifdef XINE_PARAM_VO_SHARPNESS
+  sharp_ena  = ((cap & VO_CAP_SHARPNESS) != 0);
+#else
+  sharp_ena = 0;
+#endif
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  noise_ena  = ((cap & VO_CAP_NOISE_REDUCTION) != 0);
+#else
+  noise_ena = 0;
+#endif
 }
 
 /*
@@ -287,6 +482,22 @@ void control_reset(void) {
     set_current_param(XINE_PARAM_VO_CONTRAST, \
gGui->video_settings.default_contrast);  config_update_num("gui.vo_contrast", -1);
   }
+  if(gamma_ena) {
+    set_current_param(XINE_PARAM_VO_GAMMA, gGui->video_settings.default_gamma);
+    config_update_num("gui.vo_gamma", -1);
+  }
+#ifdef XINE_PARAM_VO_SHARPNESS
+  if(sharp_ena) {
+    set_current_param(XINE_PARAM_VO_SHARPNESS, \
gGui->video_settings.default_sharpness); +    config_update_num("gui.vo_sharpness", \
-1); +  }
+#endif
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  if(noise_ena) {
+    set_current_param(XINE_PARAM_VO_NOISE_REDUCTION, \
gGui->video_settings.default_noise_reduction); +    \
config_update_num("gui.vo_noise_reduction", -1); +  }
+#endif
 
   update_sliders_video_settings();
 }
@@ -370,6 +581,67 @@ void control_config_register(void) {
       gGui->video_settings.contrast = get_current_param(XINE_PARAM_VO_CONTRAST);
     }
   }
+
+  if(gamma_ena) {
+    gGui->video_settings.gamma =
+     xine_config_register_range(__xineui_global_xine_instance, "gui.vo_gamma",
+                                -1,
+                                CONTROL_MIN, CONTROL_MAX,
+                                CONFIG_NO_DESC, /* _("contrast value"), */
+                                CONFIG_NO_HELP, /* _("Contrast value."), */
+                                CONFIG_LEVEL_DEB,
+                                gamma_changes_cb,
+                                CONFIG_NO_DATA);
+    gGui->video_settings.default_gamma = get_current_param(XINE_PARAM_VO_GAMMA);
+    if(gGui->video_settings.gamma < 0)
+      gGui->video_settings.gamma = gGui->video_settings.default_gamma;
+    else {
+      set_current_param(XINE_PARAM_VO_GAMMA, gGui->video_settings.gamma);
+      gGui->video_settings.gamma = get_current_param(XINE_PARAM_VO_GAMMA);
+    }
+  }
+
+#ifdef XINE_PARAM_VO_SHARPNESS
+  if(sharp_ena) {
+    gGui->video_settings.sharpness =
+     xine_config_register_range(__xineui_global_xine_instance, "gui.vo_sharpness",
+                                -1,
+                                CONTROL_MIN, CONTROL_MAX,
+                                CONFIG_NO_DESC, /* _("contrast value"), */
+                                CONFIG_NO_HELP, /* _("Contrast value."), */
+                                CONFIG_LEVEL_DEB,
+                                sharpness_changes_cb,
+                                CONFIG_NO_DATA);
+    gGui->video_settings.default_sharpness = \
get_current_param(XINE_PARAM_VO_SHARPNESS); +    if(gGui->video_settings.sharpness < \
0) +      gGui->video_settings.sharpness = gGui->video_settings.default_sharpness;
+    else {
+      set_current_param(XINE_PARAM_VO_SHARPNESS, gGui->video_settings.sharpness);
+      gGui->video_settings.sharpness = get_current_param(XINE_PARAM_VO_SHARPNESS);
+    }
+  }
+#endif
+
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+  if(noise_ena) {
+    gGui->video_settings.noise_reduction =
+     xine_config_register_range(__xineui_global_xine_instance, \
"gui.vo_noise_reduction", +                                -1,
+                                CONTROL_MIN, CONTROL_MAX,
+                                CONFIG_NO_DESC, /* _("contrast value"), */
+                                CONFIG_NO_HELP, /* _("Contrast value."), */
+                                CONFIG_LEVEL_DEB,
+                                noise_reduction_changes_cb,
+                                CONFIG_NO_DATA);
+    gGui->video_settings.default_noise_reduction = \
get_current_param(XINE_PARAM_VO_NOISE_REDUCTION); +    \
if(gGui->video_settings.noise_reduction < 0) +      \
gGui->video_settings.noise_reduction = gGui->video_settings.default_noise_reduction; \
+    else { +      set_current_param(XINE_PARAM_VO_NOISE_REDUCTION, \
gGui->video_settings.noise_reduction); +      gGui->video_settings.noise_reduction = \
get_current_param(XINE_PARAM_VO_NOISE_REDUCTION); +    }
+  }
+#endif
 }
 
 /*
@@ -721,11 +993,16 @@ void control_panel(void) {
   { /* All of sliders are disabled by default*/
     int cur;
 
+    probe_active_controls();
+
     lbl.window = XITK_WIDGET_LIST_WINDOW(control->widget_list);
     lbl.gc     = XITK_WIDGET_LIST_GC(control->widget_list);
 
     /* HUE */
-    cur = get_current_param(XINE_PARAM_VO_HUE);
+    if (hue_ena)
+      cur = get_current_param(XINE_PARAM_VO_HUE);
+    else
+      cur = CONTROL_MIN;
     
     sl.skin_element_name = "SliderCtlHue";
     sl.min               = CONTROL_MIN;
@@ -748,7 +1025,10 @@ void control_panel(void) {
     xitk_disable_widget(control->hue);
     
     /* SATURATION */
-    cur = get_current_param(XINE_PARAM_VO_SATURATION);
+    if (sat_ena)
+      cur = get_current_param(XINE_PARAM_VO_SATURATION);
+    else
+      cur = CONTROL_MIN;
 
     sl.skin_element_name = "SliderCtlSat";
     sl.min               = CONTROL_MIN;
@@ -771,7 +1051,10 @@ void control_panel(void) {
     xitk_disable_widget(control->sat);
 
     /* BRIGHTNESS */
-    cur = get_current_param(XINE_PARAM_VO_BRIGHTNESS);
+    if (bright_ena)
+      cur = get_current_param(XINE_PARAM_VO_BRIGHTNESS);
+    else
+      cur = CONTROL_MIN;
 
     sl.skin_element_name = "SliderCtlBright";
     sl.min               = CONTROL_MIN;
@@ -794,7 +1077,10 @@ void control_panel(void) {
     xitk_disable_widget(control->bright);
       
     /* CONTRAST */
-    cur = get_current_param(XINE_PARAM_VO_CONTRAST);
+    if (contr_ena)
+      cur = get_current_param(XINE_PARAM_VO_CONTRAST);
+    else
+      cur = CONTROL_MIN;
 
     sl.skin_element_name = "SliderCtlCont";
     sl.min               = CONTROL_MIN;
@@ -816,7 +1102,90 @@ void control_panel(void) {
 			    xitk_label_create(control->widget_list, gGui->skin_config, &lbl));
     xitk_disable_widget(control->contr);
 
-    probe_active_controls();
+    /* GAMMA */
+    if (gamma_ena)
+      cur = get_current_param(XINE_PARAM_VO_GAMMA);
+    else
+      cur = CONTROL_MIN;
+
+    sl.skin_element_name = "SliderCtlGamma";
+    sl.min               = CONTROL_MIN;
+    sl.max               = CONTROL_MAX;
+    sl.step              = CONTROL_STEP;
+    sl.callback          = set_gamma;
+    sl.userdata          = NULL;
+    sl.motion_callback   = set_gamma;
+    sl.motion_userdata   = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+              (control->gamma = xitk_slider_create(control->widget_list, \
gGui->skin_config, &sl))); +    xitk_slider_set_pos(control->gamma, cur);
+    xitk_set_widget_tips(control->gamma, _("Control GAMMA value"));
+
+    lbl.skin_element_name = "CtlGammaLbl";
+    lbl.label             = _("Gam");
+    lbl.callback          = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+                            xitk_label_create(control->widget_list, \
gGui->skin_config, &lbl)); +    xitk_disable_widget(control->gamma);
+
+    /* SHARPNESS */
+#ifdef XINE_PARAM_VO_SHARPNESS
+    if (sharp_ena)
+      cur = get_current_param(XINE_PARAM_VO_SHARPNESS);
+    else
+      cur = CONTROL_MIN;
+#else
+    cur = CONTROL_MIN;
+#endif
+    sl.skin_element_name = "SliderCtlSharp";
+    sl.min               = CONTROL_MIN;
+    sl.max               = CONTROL_MAX;
+    sl.step              = CONTROL_STEP;
+    sl.callback          = set_sharpness;
+    sl.userdata          = NULL;
+    sl.motion_callback   = set_sharpness;
+    sl.motion_userdata   = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+              (control->sharp = xitk_slider_create(control->widget_list, \
gGui->skin_config, &sl))); +    xitk_slider_set_pos(control->sharp, cur);
+    xitk_set_widget_tips(control->sharp, _("Control SHARPNESS value"));
+
+    lbl.skin_element_name = "CtlSharpLbl";
+    lbl.label             = _("Sha");
+    lbl.callback          = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+                            xitk_label_create(control->widget_list, \
gGui->skin_config, &lbl)); +    xitk_disable_widget(control->sharp);
+
+    /* NOISE REDUCTION */
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+    if (noise_ena)
+      cur = get_current_param(XINE_PARAM_VO_NOISE_REDUCTION);
+    else
+      cur = CONTROL_MIN;
+#else
+    cur = CONTROL_MIN;
+#endif
+    sl.skin_element_name = "SliderCtlNoise";
+    sl.min               = CONTROL_MIN;
+    sl.max               = CONTROL_MAX;
+    sl.step              = CONTROL_STEP;
+    sl.callback          = set_noise_reduction;
+    sl.userdata          = NULL;
+    sl.motion_callback   = set_noise_reduction;
+    sl.motion_userdata   = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+              (control->noise = xitk_slider_create(control->widget_list, \
gGui->skin_config, &sl))); +    xitk_slider_set_pos(control->noise, cur);
+    xitk_set_widget_tips(control->noise, _("Control NOISE REDUCTION value"));
+
+    lbl.skin_element_name = "CtlNoiseLbl";
+    lbl.label             = _("Noi");
+    lbl.callback          = NULL;
+    xitk_list_append_content((XITK_WIDGET_LIST_LIST(control->widget_list)),
+                            xitk_label_create(control->widget_list, \
gGui->skin_config, &lbl)); +    xitk_disable_widget(control->noise);
+
     active_sliders_video_settings();
   }
 
diff --git a/src/xitk/control.h b/src/xitk/control.h
--- a/src/xitk/control.h
+++ b/src/xitk/control.h
@@ -35,7 +35,8 @@ void control_toggle_visibility(xitk_widg
 void control_raise_window(void);
 void control_show_tips(int enabled, unsigned long timeout);
 void control_update_tips_timeout(unsigned long timeout);
-void control_set_image_prop(int prop, int value);
+void control_inc_image_prop(int prop);
+void control_dec_image_prop(int prop);
 void control_reparent(void);
 
 #endif
diff --git a/src/xitk/event.c b/src/xitk/event.c
--- a/src/xitk/event.c
+++ b/src/xitk/event.c
@@ -46,8 +46,6 @@
 #include "common.h"
 #include "oxine/oxine.h"
 
-#define STEP_SIZE 256
-
 /*
  * global variables
  */
@@ -975,63 +973,60 @@ void gui_execute_action_id(action_id_t a
     break;
 
   case ACTID_HUECONTROLp:
-    if(gGui->video_settings.hue <= (65535 - STEP_SIZE)) {
-      config_update_num("gui.vo_hue", gGui->video_settings.hue + STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_HUE, gGui->video_settings.hue);
-      osd_draw_bar(_("Hue"), 0, 65535, gGui->video_settings.hue, OSD_BAR_STEPPER);
-    }
+    control_inc_image_prop(XINE_PARAM_VO_HUE);
     break;
   case ACTID_HUECONTROLm:
-    if(gGui->video_settings.hue >= STEP_SIZE) {
-      config_update_num("gui.vo_hue", gGui->video_settings.hue - STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_HUE, gGui->video_settings.hue);
-      osd_draw_bar(_("Hue"), 0, 65535, gGui->video_settings.hue, OSD_BAR_STEPPER);
-    }
+    control_dec_image_prop(XINE_PARAM_VO_HUE);
     break;
 
   case ACTID_SATURATIONCONTROLp:
-    if(gGui->video_settings.saturation <= (65535 - STEP_SIZE)) {
-      config_update_num("gui.vo_saturation", gGui->video_settings.saturation + \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_SATURATION, \
                gGui->video_settings.saturation);
-      osd_draw_bar(_("Saturation"), 0, 65535, gGui->video_settings.saturation, \
                OSD_BAR_STEPPER);
-    }
+    control_inc_image_prop(XINE_PARAM_VO_SATURATION);
     break;
   case ACTID_SATURATIONCONTROLm:
-    if(gGui->video_settings.saturation >= STEP_SIZE) {
-      config_update_num("gui.vo_saturation", gGui->video_settings.saturation - \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_SATURATION, \
                gGui->video_settings.saturation);
-      osd_draw_bar(_("Saturation"), 0, 65535, gGui->video_settings.saturation, \
                OSD_BAR_STEPPER);
-    }
+    control_dec_image_prop(XINE_PARAM_VO_SATURATION);
     break;
 
   case ACTID_BRIGHTNESSCONTROLp:
-    if(gGui->video_settings.brightness <= (65535 - STEP_SIZE)) {
-      config_update_num("gui.vo_brightness", gGui->video_settings.brightness + \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_BRIGHTNESS, \
                gGui->video_settings.brightness);
-      osd_draw_bar(_("Brightness"), 0, 65535, gGui->video_settings.brightness, \
                OSD_BAR_STEPPER);
-    }
+    control_inc_image_prop(XINE_PARAM_VO_BRIGHTNESS);
     break;
   case ACTID_BRIGHTNESSCONTROLm:
-    if(gGui->video_settings.brightness >= STEP_SIZE) {
-      config_update_num("gui.vo_brightness", gGui->video_settings.brightness - \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_BRIGHTNESS, \
                gGui->video_settings.brightness);
-      osd_draw_bar(_("Brightness"), 0, 65535, gGui->video_settings.brightness, \
                OSD_BAR_STEPPER);
-    }
+    control_dec_image_prop(XINE_PARAM_VO_BRIGHTNESS);
     break;
 
   case ACTID_CONTRASTCONTROLp:
-    if(gGui->video_settings.contrast <= (65535 - STEP_SIZE)) {
-      config_update_num("gui.vo_contrast", gGui->video_settings.contrast + \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_CONTRAST, gGui->video_settings.contrast);
-      osd_draw_bar(_("Contrast"), 0, 65535, gGui->video_settings.contrast, \
                OSD_BAR_STEPPER);
-    }
+    control_inc_image_prop(XINE_PARAM_VO_CONTRAST);
     break;
   case ACTID_CONTRASTCONTROLm:
-    if(gGui->video_settings.contrast >= STEP_SIZE) {
-      config_update_num("gui.vo_contrast", gGui->video_settings.contrast - \
                STEP_SIZE);
-      control_set_image_prop(XINE_PARAM_VO_CONTRAST, gGui->video_settings.contrast);
-      osd_draw_bar(_("Contrast"), 0, 65535, gGui->video_settings.contrast, \
                OSD_BAR_STEPPER);
-    }
+    control_dec_image_prop(XINE_PARAM_VO_CONTRAST);
+    break;
+
+  case ACTID_GAMMACONTROLp:
+    control_inc_image_prop(XINE_PARAM_VO_GAMMA);
+    break;
+  case ACTID_GAMMACONTROLm:
+    control_dec_image_prop(XINE_PARAM_VO_GAMMA);
+    break;
+
+  case ACTID_SHARPNESSCONTROLp:
+#ifdef XINE_PARAM_VO_SHARPNESS
+    control_inc_image_prop(XINE_PARAM_VO_SHARPNESS);
+#endif
+    break;
+  case ACTID_SHARPNESSCONTROLm:
+#ifdef XINE_PARAM_VO_SHARPNESS
+    control_dec_image_prop(XINE_PARAM_VO_SHARPNESS);
+#endif
+    break;
+
+  case ACTID_NOISEREDUCTIONCONTROLp:
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+    control_inc_image_prop(XINE_PARAM_VO_NOISE_REDUCTION);
+#endif
+    break;
+  case ACTID_NOISEREDUCTIONCONTROLm:
+#ifdef XINE_PARAM_VO_NOISE_REDUCTION
+    control_dec_image_prop(XINE_PARAM_VO_NOISE_REDUCTION);
+#endif
     break;
 
   case ACTID_VPP:
diff --git a/src/xitk/kbindings.h b/src/xitk/kbindings.h
--- a/src/xitk/kbindings.h
+++ b/src/xitk/kbindings.h
@@ -139,6 +139,12 @@ typedef enum {
   ACTID_BRIGHTNESSCONTROLm,
   ACTID_CONTRASTCONTROLp,
   ACTID_CONTRASTCONTROLm,
+  ACTID_GAMMACONTROLp,
+  ACTID_GAMMACONTROLm,
+  ACTID_SHARPNESSCONTROLp,
+  ACTID_SHARPNESSCONTROLm,
+  ACTID_NOISEREDUCTIONCONTROLp,
+  ACTID_NOISEREDUCTIONCONTROLm,
   ACTID_VPP,
   ACTID_VPP_ENABLE,
   ACTID_HELP_SHOW,
diff --git a/src/xitk/kbindings_common.c b/src/xitk/kbindings_common.c
--- a/src/xitk/kbindings_common.c
+++ b/src/xitk/kbindings_common.c
@@ -301,6 +301,18 @@ static const kbinding_entry_t default_bi
     "ContrastControl+",       ACTID_CONTRASTCONTROLp        , "VOID",     \
KEYMOD_NOMOD   , 0 , 0},  { "decrease contrast by 10",
     "ContrastControl-",       ACTID_CONTRASTCONTROLm        , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "increase gamma by 10",
+    "GammaControl+",          ACTID_GAMMACONTROLp           , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "decrease gamma by 10",
+    "GammaControl-",          ACTID_GAMMACONTROLm           , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "increase sharpness by 10",
+    "SharpnessControl+",      ACTID_SHARPNESSCONTROLp       , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "decrease sharpness by 10",
+    "SharpnessControl-",      ACTID_SHARPNESSCONTROLm       , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "increase noise reduction by 10",
+    "NoiseReductionControl+", ACTID_NOISEREDUCTIONCONTROLp  , "VOID",     \
KEYMOD_NOMOD   , 0 , 0}, +  { "decrease noise reduction by 10",
+    "NoiseReductionControl-", ACTID_NOISEREDUCTIONCONTROLm  , "VOID",     \
KEYMOD_NOMOD   , 0 , 0},  { "quit the program",
     "Quit",                   ACTID_QUIT                    , "q",        \
KEYMOD_NOMOD   , 0 , 0},  { "input_pvr: set input",
diff --git a/src/xitk/skins/xinetic/CtlBg.png b/src/xitk/skins/xinetic/CtlBg.png
index d2b3201e7bffb09a5d65e1df0dedd15c55c1ba0a..44d9509ca4617d8d288d1075d4459df4303d4c70
 GIT binary patch
literal 11689
zc$~$0cT`j9*DlVCl_pA2KoC?!LJ<-`y3%_SiIl(q5<m!OXc8$lx^(FRB3(#m5=ekB
zAe|tc01*Pxiy$Rbf$wBS9q+pLx9<Jpe(QsE2zlGt@7~XT_VccDLJjpb7*BDYqNAf@
z)Y4Qnrlb3fm5%PnA196hEe}-DlfcIjcVi7@I?PAzdEm=2TOAEmx<lIUo7%iMpylKP
zO*3~oI{IU@>&QLG{AHl=xQCXW+VPP;7#IW@(gqVf=;$ueX{p{ac{K7R&CfB7lr|f%
zrRS!PZhas9RQ1JF)RA!0^6;V1@cRO=8m31B8&Rf5Cyn5Iabb*`Nl7nYr14|-nJ@og
z9xTDX-r`!rKU#5U)brwFKjL>Yk@I)!O;QDu^%nn}ipGL3fQ)T*@Wt!F?mWB~(keCZ
zc$CNf&R@?xR{WOT>$=D?ly$i}_jF6>;dr9zl+NMC$HN2O2z3?Ch@dGXZmKxsazN*y
z--_h=`g<4n<IetWM~D>lg6F5o-Re%obhPX-vX9;yZ|}tj+zhPFX4zR&r^vJdM%g7-
zP@F33h9$1el*8jK$ezBvmWwm~I~$1L<!-lRd*3CQvVAvy=}ph9o@i99XuDYdB6Vjv
zCr4%FZ~<D^=}Bc~A}E3Pb^NZd!~p#}zKSfx?1}Z)Nu_@91Gll)e3Q0&x`!06)hcXO
z#%Xsh>{hQO1L3Tl)oHZQ5NyPjI)Xhbq)F^@nN>%$$n!SYveeF1jP*%P7PX7Qp0A9B
z^~{sgSNtU^r^&%dTf|B0V$yBslz5$ksWGNZHX<fO+$S@P=p}CpSy&W8qtueH&lv9v
zVJ8c$`*uCYcl}atNo@_ov#DJhs83!O_9Ac9T2=a6A6lSIbBqf#bBtrm(YaQKWmd%j
zm$t?puhjNALXL4psIO)E+(hDDPp$7v6?guTv^dNVxGOyP=*6jv<fHcNn&KS6J|%kl
zPV}RO@Bi|S8`k%jYw((fh-qiA&{xPRi=3gXG9`n_-hRi<)_P}*4TW9r7t*n?*=7jy
zuY0FGR@2qLhap)w<>1XJD7BfwM(QM+P@FBuB(=E{;_K0u?MCtX<`MycHeJ9AcuZzy
zk(~K%J0B#xvq0=kg3sn2>5)vHx#?#hJt!Nf%(p|ZYDs?j!W@lVzFVk<s5VDy<1F<V
z)Nqyw<`pR}S%Unb$&L_CV?owf-d@Hh5@!OHZB%aElNE;^fxGJwPIZ41-h}r{&K+xI
z<EOF}&4hZ5dSJtcYGiyxM?5WE&_R%iC11rA;YThlLb>Bxhz{=$O(r}9)8nWWt6GBg
zu&||_P(5T~JPENg7%Hx+_+bXb3+rKq%5X~r&bZB~UlV8_e|O#P?JaoIIXwHuB)rf?
zr6<@>^`<rS{BPFphdl{M+$TKh4#`!HfEO>x;hD?8>4v)U0MIrOiuY8n{}#!UT%y*v
zQFlM!j6&1rFI#HachRPC5rVffrA&m`rIU_Ar|P|)7S>gmBc8AKC|@xKdb<!Du@cfK
zj+Yoc@2G{p=Ez_UsCD$0pa;o+ST{C(OZR_X7_LU)*l)Q0AsH^HO*!rvv&fMnYYK15
zq&&dV5B86{Z;D=B#^?LNv}UMTkS!`TlcSbP$YR}}IJ?f(&H!#NXlJs>v1PBxRbPLM
zGRsQT+Es8JdyY9}<@R-`-K19h4Ypvj!cfp9zlf+Ffy+l~P@v_yr31gCaJE=iL<HC(
zG2SU@1KH*hLvB|tf9>wcMdpm2q2_0R_kDMXW`g{zVOTP;#@`>o=(#Rygc{f}W%OM)
z#|+#zE+*xe2x)nHR}MT#ov|p^A+BdD-lkT)tL~UCE5cy30S81HYpn%7V?{`p`>ZFy
zcrk<J_>;uvW<v3=b3d?~(o?19S5l>GMDDR8KTG8;ostY}@W*tQqOZHlSddn5mR@tx
zF6b1)qvI0B;(V&$l&Sj)+sXmf+YKDu;Z}=>;zmK;Zb@hrix)i(#xA38v90+XOI7^W
z2&aZg`?hihm~I?8W=_b>4%zQJswE1Z10C8`JHp`2p4_%sBjPM<ss8SA*h$_nt0r}v
z@95Yr9s~k$VXi5RyiMf<pUDisEO=3qt-45yo;aVy!7oAn73MH+ep|2ZgzR~Iy-TJT
zbSrqC8z$QCbrHsq)A6lJ8CmN0guo>t<$Ip&ca|%bkxh#5OinMU*E?%uBRTNCZtr5c
z!ehXA2Ngb6WE8GtBP9R4R_T?#rm1^FgImclhBC1N4nk4}MAFv>X>JP0d*QN;mLPa+
zHnT;xxtg)B4+Nub<&s!hyeMlzATMx%pS|IAD3=>~`7!BO(>XJnF9%--9?oDpHRDA_
z5C;ii2heu=0+T}Hy`tbOAXpk2!K?@yO$#-*aQUR=Vatu*odulnqUP4km`>GgA*T$x
zh=+Bhp*Esm8|(|;nO1M3=F5ntPetM?OTI?zi5SBMGCb&-r>7?X!}^4hPVPnl<vej+
zr%EUA=~O3^s<#lr>-P|?w9KAkgk#CY_Dd2^2$+d(uTJ$@_*#&z-6GhD&|G@HK-zO|
zlo=~qKkz^j<N<}oph2B%=$@!@k;8_>IvX$Vf<0YN?;<o>E60+spB%zUov=eSIdGn&
z))8zh@<nn%AC_jzU?;FW{8;)vxRqt797YvvUHB*1uE<V3uhA>u1^+dt*bla@oaM}&
z*b873t2?;bJPJ!NW{J_xd1keNs<dA)_BkpJA2l^<NqJN*TzcMz6e2?2%apikV$^c(
z6onA1yo+7gYo9eVbL^mAj|yK*S@%>TD{o@htCN*ta*q^}tl?uB>6ACl*WE9>#L(5Q
zI)$rOVW9ifGlFX1cXl0qWe8|gwBYS*?41IWdkD`vgYEWaW@a%+oN%D875*_Q+cC(@
z<>Ym&DHaiVit?ZXiK}rX3*l6FyYACF&D-$pzhFIebWxBMTx16?c}Lm2)4Z!CDaHfs
z%|agz-gz|Cd}Yt|v|sg%HS{33(0ZufUT!P%VJC|BwUaVzzmjlS-hx6Mt9{%PKE^0>
z4#R!y4*Srubh%4O;2><mX1yBK^yk<iR(ntwq|1m|(<7myO3KybU|L1k7bCuk8Luj^
zYevO4h|Ue%eiPvja3AY-lE<EHP1g@0-H3=0Jc}>R2foiHr`&3v-`QN{q`Bc-|ILz7
z!mx!TpNCm&l(#}%sPta3a!3sBd_Tm`AvGD>F@5=P*ze7IZ!a(HOv7l~9OKeRkM4lG
zU2v~Xu+5&$z5<&qqbKym%h1IwWuN1OB0KP{4mQGCpgrP)IgHE@ab!!+{Ij!UPO`lS
zBthww@2n17BG_!WS*zNdd!ZaCog6^r_Ge!JMSj7*Om_Rgc4q5}<Osh4cCCZ$e1)W}
zB@8Q`b=tD$Pm9Z~-om!QB`s5v!$LODBqf22M)rx#eT*~3(lf>>-*QKp&=ZZFv?~-t
z>@Z*`UvuaooQyjgeFh{%%j=q6FXnkFfgoa^TR89z;5va6P<+@_Jgz(VZi+s6098Ug
ziQ~>3hS}2d;m*ja_|QoqoE)UxVdI%o5{b#Ds88{(2}x!<meK@}(KXhYjVnu4yGzP8
zQ{9Z?g&`ZHcMU3HD42=?jO}iUnIr71;Lcj1<;h5Rm5cyOx3HWFn@!Qv61B6wGJjx9
zz4M)$p%^^BQfB+$Cu#SD4hYNy>lmMG5WTraz&uaNPwrr?Zb$l^`h!GWOquW9tUDiZ
zJ(!`Ip&6e|>=LLjx3Gu<L=%8W)JiQhY*&AgBTlxbJwE?;C;FY_<JbEcZNVUnqSSiz
z45I@+f2g1m7MNAIrVlPP(an9l<n4FT0AqK$8fHxh5?Q}taxrMv5q7kWu~zI%?Oeq9
zp3`7{5Tr|2ck;?ByKx;U21%FR8K))&O2p16B<^w3l*_RBU*fqE0xMTGcT4n6<On%f
zNM~4aq{P98G0qBZ4RC$sID?%?oS62Plm|rnF=9}Sn=L5*l2fjH75)ZwMRcs{VRgp`
z`FvDBrq6Z6<U82J+jANVU>0!|HNUzqAVbTuqm5X+GMdL)N0e0vQn8zx8o{WR+gY}S
zxb)u7I_K;jSB~+?+BrRYZd<*2Q=z?~*=vm^7sZ)T$oM?Mc`+5n{GrKn66zSi0_TO*
zB%4Z%Yf-mw8{b*y4jb`Gr&Qhcmyn^@Yp_}QPOz45oCrP^2@5UC+zEEU>B7YVMOu`l
z&t@PVz<AUYGZH_4`}XY^#|)<!f=l-P%$+KsO~}ke$VSHue_xO+Y_XYXT|2JkELh&H
zT%;I%&m#}PlH(I?=16!FZ4~ZwD{E`HCsj(Rfuoc`O#-_+MNB$w-Ne*Kz0mT$<)iRb
zgo>;mtjwuP%hC9z_3*1f$jHkqnPgi>S$EPNHaL73lbm$&q{=byrWwQuf6ne>=t{j4
zoFlY7%MiwcTDi5F<~{b%3$%?F^)-41ISCPmv1a~}cXz!c`S^I_*p1R-d|tn0K+sW1
z?D|Aq=T3j_6;mt+_y{9vg{Rg@Xu31y`FoZ&Lw_|Qw%6-<vpf!>Cw=QBj$SgPH}d7s
zGS$|>OYd=UHu{opXk6xwpzh>^>?|fkCI8`hu;E_`q)fc@yMg;_tqfG3(z~x-hqzEa
z%pIYl8^>Ji;see^bPPv<KYt3+{#60m>7Hc%Us~S>XC~Fi$A1f0Bg!P#$X~hI_4+JJ
z%tTC<gpZH5XwBOFwcQ;KYkfuD$GbAaO1{}Saxbkm-g4B^Mf0hw@*XaU#Xh^KdhhTn
zi%<Tczt38~+5F-tXfHUbb*|M$=J0u40?3VU#m+$Ks><`<k<*=(_Z%PGR8{5i|9Zs7
zdxn~@B#7z>x7zsa<}t=5%C{}v*3i6kO{<l~#dv0RMOK!WrX2fW5-GJN&#LQVX9uum
za$0I)X<kO$A$772F&qh4GN&d+=fc}$dN4%XaFzh?r-X#aAAasw`}&-@b)fzTFdalW
z9P^g&egFsxz;rsSjIs@gA?VogSbO-cBn|~|U?g{f%5h-0GbzsV&f?_6ao%X1zJN-*
zK#uR`sWUV!eezv9Y;4kzfZVuvmP0Hwq;=RKs)InVqOG87pnrL>fY39H^YNJ=f{}I)
z3+#V*s@oUI-#dOCaQ0u3>VF3z41G|)E(RO=IyQg%s>I_b-wpfh_#O$wV8D^;_RqfP
z={q(>MON1C-n~0?$CaMeggSCjw}VkFAm9)qdz1FPho0^{g!O$AZ4GR=72VJ+m0RIJ
zqN=%7&mDbo;lH)3N~MF>TG7WxXy<T9x-Na^_ZR={__T%&FAwq{hrW8j=IY-@b~H4^
z)(1cD$)oMG61MT%Ul+p2r9A-7`1t{6X^o}%_>DT4EnT7wrrng2d?xc8C--TVnAOrA
zSkG^_{%LOw$$WIslxROSR0V{&KOn%^G3j2;(P!U1EuSLWZU^)+Ff!4CIsH748HjNO
z<D#xrdb{qX)c0sM^Rs@qq%lnkGYy{MIvvQl@u%5pu}$nJ{>5YF^W*otT&>hKm^wD5
zUcC0(tn#ca+KBlMxqID)!lEJ_+e7)jC0}jU#x|x@;T9LaN2D{yDb9R}SF!gTkIV>g
zEm%6Nt(m|DCT{+{4R-c~8DYKD;LlUZ?!BaHD0^apn(94Y7i|GitC8qO@$o;+Sa(dJ
zxgq+hK^kle1>_DqmsCumQ0iO>{xNCE<-Ff9@jS>DFxBeDx^AzA>^}fS+;y|Dxuu^W
zTRJHh`Q1O3bA4(*EO3$Mc6l_F|1DT)r)-0|9N!c30XY#5MK9VrS<3(GsJO&D&Va8?
z#g_xNn0cLE%e#w~i=3vdHfL{R(>5*`#TBlzhHl~2+120$vKm)f^=kMR^UV`mfRv5~
z1|biQ2Z;F9KAvv=9BcV)f}U%zqh0sWPlx63#n4jX4j=cA#hq-7;lkDEAHhAHI~`<O
zN&UtD-L}fWWU?sg$e+g<kBSJ;hJ69@$m`dxaV8mDTH3J0$2t$bod9X#aMTZsb~q5@
zU=W65f4k7^?p=u+F0T|}KNeXw{1h3%6vfRJL+<-RkXzryca;rkg#9zQL=t;NSsd^)
zKmVj%R`uH-Hb%3ktbPj@>u4=~$U<YpgY53>ZQAsI{EX7)rSg`zXLdlW;IlK+jkgW%
zVSmoOr6MkmG@(%=Zf(Y*tm?gRFcXia`DHVgr*D4lnOpYJO<=0M$5aW8b3|f`us6Tc
zhlHab03>@~7Zb(1+t+>EP)PnCp*s3x#^`j+ij<v7z~PM86mP(KC;(oaLtcL)_OSpm
zeysbFbwbAB##K4O<d2ACIjtK4;nv?pZMA>yEei>G8Ku`o<3I4exxi1P1Ka~J``T1N
z`Jxpwkafh3T`D^}`(P(YtPJeFnf23fBEaAD4(VFEn!(48-~0SIhjEd*wbfDT=I__y
z&Hb-~_9%OiK<4o8?V{pHQf0AC5&z~kbD)rLbBp?P1E|=X)X`h@==<hgo)23sHKLUU
z8jHu}eQeK}uZxRw_-K#)g&GE@A5up=&+~G{6UJ)WD8slN;=jH-mw97v=^+ihmtmbB
zJ1wqa+Iq{6e(z1u$cpcnnl4Z;3^@A(Em-fi%8}Y7>`$yGC2)m}4*oz$^#3cN%1upq
zdBHpWF2Z$OGfNu(5M4-C&IfG(vo=u1=eK^OECUl)jseHdnXHv|SpbizsZIeYRr4Pq
zTFHCjJ(u~<fQhqq)oqu(<mTdFi3#3aF*wB-SM>ho&z;`Z@B#V~GwYAg>KedpnMB<>
ztW8>5$L-{{G4<~>eD{Sdz#a16#{Vhm51q`IF33l}*DM?Q$<%K$Z+LutLi}E~(_crI
zckxtW65|z(zekOMGYly2w0HouUUw`t{dKF$k5qYsgCLB<_djTG0vqH4uC%`?oOqf0
zM>*+zo%0_6%5|o=toMf*jy!tc{~e)ay}!gsTuxd{?6r@;{G|&3(}sp8N)=U>lw6#(
z#+NMD_T}ln_igF<>7CikAthhcO)6C&v$H4)tnt$yG%jyD1o$nki8%GqI79S1EZiMO
zN_uD<X?VDg1n@`mDy?t;<w?5e7jOJXQ1`>F!`7?4m#lXt13)-SeN)n4(IhdLXQ%Aj
zw>+ic)eApv`R5B|)q8+|nPqtNFGE1067+o^(kk!$w@g2X^rYC1X?5c0;18di=tHWM
zlFO=ke)5K+cqT9uL4(cnpl9r7fnj4_09fRH?RpTLt6zKJxuU_LYf{#a!V{Um1OhZm
zMPX3=o9~)M=U8w=@Bg9DBOf0ecsp2GZ<(?0X@0*qwi&A`2uLwiTKV&U{=}h#tzde<
zs{MHxDN%lYW-29vl~cgX=@%Z%4?du&JP9Cn<?idq&jnW{$iF}jsJTMSO50B?ebz<H
zEX`@^4&X}RU%3(h>_uRzge>xI?$xWWqpp4Ym8fk2NYkhWP!MrjK>xq1JMtW5*>MF+
zZEU$6C?Bj!XS4#~+c=!yu%FnkL@zQbtl97E7zC94TXp4Aq?nu9z_Z!K-o-%Z!$VrP
zhhFJg)?5bn72B8n%Kt#R8l=lsFH^h6pAdD6t$_+|GwQp~F9&u|`d64NeX6N>Fq51e
z<pBr+nq(-k3J9p<-kTwL|AZ>ALBe6}O6$SIrLy8;X&=NTklCkysXa?xJu;$WzHZxH
z21ruNS}$0TMr1o+W06R-@ROegtpbHT4$vO)fUeysZpnBBFlVysFJbs}*D@BM3R-#t
zN&L!9;UEbRN$-Dgv%Wl4wRd6rV2f}G5G8E@?7{!KQZ&L;lqN9H2YNriIy`oTa(}Cg
z{FAV3%v}Y&EO@W|-2Z>7^#7{}SdNY(4=0P*0lI4q0BrfMfR#Dy4TMSl$I5?`>F7T<
z`)e8eKd7vkynsCB8k6%|P=zy}{&)MdQyZ@j6YU^(@1vpRqv<=egWEra06429%v$@J
zsj6-=^Tq%NrH=k1H@{12SsHH3rKC1D+}C<m4$J`L#I7n`h&RaA*c>H;3Z0#emud|N
zUfV`H^*C_yu+I;kRu=^LuKhSYFO6oGfU{ZhJc)*7K!4YTgaF`CxGfj;6EilGfX1Oo
zn^r(TtEx@`yhziP;Kx5e(R<rvrWs>ZEegn+XrKaFlSXKqN^1d%zP*>LBKYTW^(UGD
zVQqXJP~VT%4k~#9bVU!o9;H=!K(1<qxaa*q5)<+7lkISrA?<(_^xMy~?m60n$G`pu
zT7Nlj|Nn1&<HQ=US)S2WyEO(H9UblM>$^nz=;`4LRKB&gBj<l9u|rEV(PB$BNIk1`
zxnehchg7K_GDP*o_xejGcKB45p4ThgEAXfEpB<6TfbaY52dvA@_~SNj`(5?mc1h_!
z0Fr#6dRG!dIc|ZQ@uLg`=um=Ir2UE!Ep6VqzI&4(C}MWFQel4|Rm<b~x_2%@q_PvS
zhjp+ZeKOTOkLWWhCZ)}aWOV5in8f-jioswogd5XACzLlaV7n<Q$GD)iy*<pN@J<0~
z(HLzyJ&3kIE)I&A!C>*I+Vn?(pBoyUeX4q>A}c3n-<7U_>{8g$^!Bb~4OeTMU2kK|
zAw+l0lGrqJhflCw-<6`0oP?&MC%Wm6P-HP&jiyhe$QNG_L-5y#R9K*C%5Q?$o7W|i
zq{~-=sBHRtXny{`pI+*D^3HEPD=d=$8Io&P3U44H-l=EBEM=IrC9_$KAR9e-dQ$|*
z2RSlOJ{4Q?A$lqAOAVgrLUbF(PE>m#JYR=s8W==*czLzE1?*Y)EX`F;C)RC0By)xZ
zg?y^<x$VDIO=+uMA%LXa#$K7D1uD$-OrcPFdwVrgQ`2nYg3F#ht23RcWq7<0;2zos
zFyh_7JJ#@~#)$c#w}yf@BAye{eI}b!<@)z#c4xLMr7Ko)x7bW}kJ^J?DRUGRv<)<9
zyO-uk@@6I^_<YF2#n=hOonsUa%ryH7BoHCNdn5r#^mBBj<dW>S`%D`%Lkt8tStO1V
z{7mehA*@~EF)Q3vn|$}WmDO9=VBrxiN%#%qb&m_fF9&*iV?VifDXihT{FX6u4ci-i
z2GaoE;-Zue?gB=d2(cBI7Ou_bWwfuYl?jW9b)YROvrP*}rC8yGYUe{EBblzThc60s
zsAt(oGNAhFi!2fG7*}=|j&j*mahPzXD693O{{BV0Q!l$QhF<bLbLzEM$`nbrQ?;i<
zPsRtmyqn^hoa7kov;^=5G*KtNgD+w=O7a?fcmmA15MV81JC>38SV5rS&xByn+cROD
z!;zI=?&9#+XFF&*I>rmMcLA)ZW#mCkaGi4ss3HQ=+~Z|wTb)g`n_e)#jaP=LAlPyo
zA%MwfdWNL*H->_mqKR=pnA9rDPTA+52sFQz(RFo)mC*WBL}L6gI+cZdC<<nY>xgL%
zN#ekw->l<2t#w2^o|2U_;Q^%uJ)YoZEWu?LvG<MwLDio-o8ncG-^*>izXdQ<IZ`L?
zgMHykm0W>WiT4Ondt<PO3ppR|TuY7+fhNO2XMJT6BPPkN=?447gvib(Bf4?L!a8<O
zh?DmQ6?Qi}Cs)EQBe1Xgl?qJ@wXTqt0q>hxStW2uyK2^28GL)XuzVNDoPmKmEG*aJ
zwJR^N&eTi0{jq;<9*v@=FC6QM0~6aRFCB;UQwk0GX3AiryeQVDL1uXMHiDykzQHo6
zm1JJZW{YWP9%xt%^iz@k2zTYTI5MtnSbpKLbzw8xAQr|!;9{peBTrf!=CG0upuq3@
z#y`kMdRzg3d)MN?O!uw5%f04rFbk8RrOlFfBW!jjWaf&=F+9G?#faVlhbG;^l=Ydm
zG<lQ{eGJIz(NsPp$2`ioLbOARHQ9=vguK$uY5biP6d%TV>S)2h{m_SoqK)h`-PQ8_
zZ#nd(CT&cK*kuOjTX_D;N45*Yx{n5@4PhcVohD<YHgdd}XHtlRz{THAA+BQOTJF?W
z@tf|hQtt@N)$VQV@;?+GO~Hh9u|Hi^WA5eLg4o|7YKlP3;9z-dbC~OOkLTmE)~LWD
zAx3MGo^Ivsl;#LrU4^+wQdV59F4Z%>ny6P`f=}zO35<DGon2=)itC(4(jL>Fh-gop
zo14>A6cb9c@lu!zH=9qDIZJS*w|Mk%rW=MCWs}`tlXY@425Xlk)Au=`Z1wbXZH@BB
zy}!5-8F_CD=7c`ljwSo@H5pC>j#V2Ji!|~`9AqL!0P6CK#BKT7zbF)bAc^UX--`HC
zrPZs3xMjI_Up*IA$8viRhcESwVX=U|mhjwlRN23qVsz4iNk{PA;{C=2#${BkXq5l-
zlW!_qQES@^^}n~B9>!oWQ|aOzkrfpcm-7uxu4>6deEg_CKQ|W*Wb2|JGi8o`w5i(s
zBmwg~DR7~~rUd3&>gR<iG0(5Qg8l0OZX1H;BCGM<{<>=(M`#o)fAcT`^)Rs9Za3X;
zAMIognX7%gfma^DJSMS~F*8oQY&))VHvXjyllZ!2<7MvM<^AX*-4toAz|2MUu8OZ0
zc*&aJ#QFznX)e2+EFqZ8dd#wYqSKn>P3MY~Z?j7KLEq}U59_`ytpzyCfmc`Rb~2_m
zR+SQ)n$*lJEG!b0j0#M$Ek&<(EG)dsPmlaOGGZS41XotZU+Fp;Yblz@aG|18CG(J~
zCQ9V$mps!rQ0yqzgZa|D`TGK;BI2%=+%nngX^ZK2>KE(@Mlr@@eu_L#>9ICX|9)rd
z?5kfIZve_HMKe>(mIZHZTYb_lE)%i00M@~@+B#C~G~VK3ufZ5AliIpmVoqnYg*z1`
z_pm^-h~A^aFY`ee{LRGtIuHnCEEIn^v7^m8O-Y2Zo!FFnXG%tk5^+Y3qnX!_y82a8
zi2raoig0=MpyQ#LrRA%wvBw4piHS|zHAZOD97|E19OD?EdIH70k}**BiI8?C*YC9r
z)GOop^ai+FshJ^?T!fGyG{3if;hs6W_$4)4dUUsUpGSNnXP9A<zJWG1nLBZ^^1^NC
z9As+S&&I~Oo-#ZfYPDg$Vn({GovUyCN0X;@Q{*@RA$6-JsYkZ$LKe712@OIQk%bi#
zq>+*=fG~&QeN|jLF-Xb@No$#N;En>fXKL0=JpkdyA~ypLzKW%pZ}cCz9d(e35#@op
z_U!I|D|GBz1mE73QaaeS+o2W*h}0eKub@Y#?{DOdP4|qBil|9qOl6q+5DUjY#IK^g
z-IK01OOD;hHIR_fY8wz*3uIQAoP=?p^6NTH$D1N8yds`6Rs6Ma@Fyu6-F;6ylelRZ
zPJF3|JCouoErjY>>`R4j1Um71T#)*ZmJ1RTK%N0}+3WshFKElci9W-5jXlg`m!GM$
zd;^bH((N1P6y@w)0y7fU<g?`<JG5Ho;o)&3YYH3lVqxU=o&(o1r@Oq%UJiD8f#-Gx
z8Jpw#L@{<6DAsM`4DJekicHfi+BvbTh_}S&n4sso{Kw%OA%z3nLXTXSi186FT#8d%
z$u{m7!qQsOvn!Cx{oG~oSmr_LKAZA%@c8{{+*`%WhRZXxhDvB;-JDu+@xvIesra$&
z)p=$oFGd3fzZQEs;+%F$yJBurGTe&G8u#UX)y~>!Tcn)jOanU`y`B$GyVyguc1u##
zVohOpKuV1yDMZ7)F{YS2B5jreLgse`*rpt>z4flRQ1_X+^}xDNWtmkm04J^ASPBaZ
zy<;T?9GR)m2(V-pQ>j3Mw4RqEBskQ^h`c6ks}hvCWoN-dXlR7q2#gh$-uo2Y9mtk?
zH^s|T*?KUbwP+_+t7BRM)x#ysrOXlu5x6>dv+?rjW>sq#TbdaGFQiKn#27}#gOu&K
zL?*!W;(Oev&2XpOjdlp6h9n<J_$E&lFY%ntX*(L`CzyqvSWIQUB;eCuQOswTmj{_+
zp@&{5@J96Cmn<+5D#KzEF56*fZ#fui`4{Fl_oo<e+);wh7!8TqriM#0=lZa;FkGOf
zIa=4Vr0jg0edi~Ak9cDziO-opb(zS255LITORr|)(hP!>+v>9WxNw{WEEjsy=Owuf
zPh=P^%+$;?uoHamnpz<7eg%uXA;qWgDseo_wNYQ6?Y=K=^U`KAn2`O^&^sN6;Xxzy
zPA=akjxfMdW@{QD+<sZEM8}{-*|O0tQLvp?2AQ8zNGK~^{@qM&{=ogpYI&kqfeoLO
zM%K#f^s0Hh5o|x->FxQ<)@LB)iFUs0D(Tn<v2MpI4e15@e<Lq_EjN5R+ZU5-yvlad
zDHf{Y=byQ6r1cy?h_i)LIyHLch<|CEc9W`!a=A{k$CW1RGrKM|-Dg%W`H+%u%W~e9
z7qcoc5uH}jxsgc@X^kma=g!)A%~$FE=@_6_Zm)xp+!|OiEk(P{K!@-uCYT)5%_PNF
zCaP0}z2&&qArSoxMG?TucsxG4y4nJe-f=C7sW2Y6XyEWsn@z+HUc*;9t~diE;J}a2
z5!M5_mNTzwyZ6npWWB$n*1KFMmR&utoCq<SB-F5PjE$nCEqt0i?1Rz`&sU?-kuz(a
zB26<M+x{SdmJjT*Tl>xMtCQ=VTSJ2baliL*=Au7Kh&x>xl(It<wsxL)<7TW3ZR8WE
zRO5}GPmLUX?NwurZU?CTRR`_;5Usaom3DigvIY5ZQHr~B%xgQ}G#0e7c9)WOxzED+
zLp!)><18%JgNiH#_&Yz;C}U)DyTi<`=H7`JL<9|$J469;WA3+Bj^xm^k}L1KN?Xd#
zOJhLqL&mCaufQW7kDSbtBHtJeYlfTnm!5UVVXSq_?GW}T>U()=r|8*U=hX~f2@!sS
zrps@F-wKvad%8e%M;uC%;_)EkWjSERo6uG_B<_=kfkD@8%)|i3N7aRFnnFE^Q3R_6
z3_3!rMzMLRzI$ZKL0l!pe~*zRW_fwpvxk}L=;3FiuD)O42M==e@aCw__kYv9wb4bL
zeVtFjcHOz5+2wyH@*{RGWATvUP4O!$Dd`?FNI!DoYwM*bO$`kVV}B1%Pb~+BS$tW8
zum({=rFJlQF|hrJA8H!?ifh+4fp6wBh`HaH?LO8ox00LJZ^OuEGD3P}73KIqA)CO1
z1pMi^93egC*!Emwja>C*>)M$kbmkh~-qOd9uud<tTc2+FGV*m+>2Rk#UE#61B7J3u
zxyh@yCPG&t%YZ*d^wjhN^V&STg>GVAo#{uTD9$0pO2mgv95Nh3J4fniy!(`ej24p5
zW*^A8r_cG;;Ph_~D$5<Zc;=UuUMW1@q#g7&Ha0Y&Q0UrgKIr+k?acdN>LX{0ACEgF
zPef@0*}8=bbHukt+^-O#y;ez)f<~c=^YVfhpDx}4oL&rE=AhzW1emq9w)PM?-5y`J
zGeROHB!xa+#%Z8XC@J|Tx@o@q#RmlZbq^IAFe5fh5nkK9xk2A%X<*&IZqVOmdeu?^
z)HK*qfGwOYvaChLFEdpw8rdN3Jk76rck68;BW6u?-_7(Qp$@f)cUG{TY`T+Mr3huy
zK%2%Pal(M2Ex19<Q%ns-&Sb0LEcJn`8lj@Lm7!3QlDmQ`j5%+8=NmoF5;FwIcGeh+
iSAQS(|NDPR7Pq16PxO6Ttva`8-?h~ARWZtcKKn0=i?9L!

diff --git a/src/xitk/skins/xinetic/skinconfig b/src/xitk/skins/xinetic/skinconfig
--- a/src/xitk/skins/xinetic/skinconfig
+++ b/src/xitk/skins/xinetic/skinconfig
@@ -613,9 +613,81 @@ skin.CtlContLbl {
 	}
 }
 
+skin.SliderCtlGamma {
+	coords {
+	  x = 210
+	  y = 36
+	}
+	pixmap = SliderVBg.png
+	slider {
+	  pixmap = SliderVPad.png
+	  type = vertical
+	}
+}
+
+skin.CtlGammaLbl {
+	coords {
+	  x = 210
+	  y = 175
+	}
+	label {
+	  length = 3
+	  animation = False
+	pixmap = Letters2.png
+	}
+}
+
+skin.SliderCtlSharp {
+	coords {
+	  x = 254
+	  y = 36
+	}
+	pixmap = SliderVBg.png
+	slider {
+	  pixmap = SliderVPad.png
+	  type = vertical
+	}
+}
+
+skin.CtlSharpLbl {
+	coords {
+	  x = 254
+	  y = 175
+	}
+	label {
+	  length = 3
+	  animation = False
+	pixmap = Letters2.png
+	}
+}
+
+skin.SliderCtlNoise {
+	coords {
+	  x = 298
+	  y = 36
+	}
+	pixmap = SliderVBg.png
+	slider {
+	  pixmap = SliderVPad.png
+	  type = vertical
+	}
+}
+
+skin.CtlNoiseLbl {
+	coords {
+	  x = 298
+	  y = 175
+	}
+	label {
+	  length = 3
+	  animation = False
+	pixmap = Letters2.png
+	}
+}
+
 skin.CtlSkLbl {
 	coords {
-	  x = 218
+	  x = 350
 	  y = 18
 	}
 	label {
@@ -627,7 +699,7 @@ skin.CtlSkLbl {
 
 skin.CtlSkUp {
 	coords {
-	  x = 372
+	  x = 504
 	  y = 17
 	}
 	pixmap = BigArrowUp.png
@@ -635,7 +707,7 @@ skin.CtlSkUp {
 
 skin.SliderCtlSk {
 	coords {
-	  x = 372
+	  x = 504
 	  y = 38
 	}
 	pixmap = SliderVBg.png
@@ -647,7 +719,7 @@ skin.SliderCtlSk {
 
 skin.CtlSkDn {
 	coords {
-	  x = 372
+	  x = 504
 	  y = 164
 	}
 	pixmap = BigArrowDown.png
@@ -655,7 +727,7 @@ skin.CtlSkDn {
 
 skin.CtlSkLeft {
         coords {
-          x = 200
+          x = 332
           y = 163
         }
         pixmap = BigArrowLeft.png
@@ -663,7 +735,7 @@ skin.CtlSkLeft {
 
 skin.SliderHCtlSk {
         coords {
-          x = 221
+          x = 353
           y = 163
         }
         pixmap = SkSlidHBg.png
@@ -675,7 +747,7 @@ skin.SliderHCtlSk {
 
 skin.CtlSkRight {
         coords {
-          x = 341
+          x = 473
           y = 163
         }
         pixmap = BigArrowRight.png
@@ -683,7 +755,7 @@ skin.CtlSkRight {
 
 skin.CtlSkItemBtn {
 	coords {
-	  x = 200
+	  x = 332
 	  y = 37
 	}
 	pixmap = SkItemBtn.png
@@ -700,7 +772,7 @@ skin.CtlSkItemBtn {
 
 skin.CtlDismiss {
 	coords {
-	  x = 333
+	  x = 465
 	  y = 182
 	}
 	pixmap = CtlDismiss.png



------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
xine-devel mailing list
xine-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic