[PATCH 2/2] compositor: use smoother range for backlight control

Kristian Hoegsberg hoegsberg at gmail.com
Tue Mar 20 10:54:18 PDT 2012


On Mon, Mar 12, 2012 at 07:40:09PM -0300, Tiago Vignatti wrote:
> now it goes from 0 to 255.

Looks good, thanks.
Kristian

> Signed-off-by: Tiago Vignatti <tiago.vignatti at intel.com>
> ---
>  src/compositor-drm.c |   12 ++++++------
>  src/compositor.h     |    2 +-
>  src/shell.c          |   17 +++++++++++------
>  3 files changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index ba7e642..fe8ef49 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -927,7 +927,7 @@ sprite_handle_pending_buffer_destroy(struct wl_listener *listener,
>  	sprite->pending_surface = NULL;
>  }
>  
> -/* returns a value between 1-10 range, where higher is brighter */
> +/* returns a value between 0-255 range, where higher is brighter */
>  static uint32_t
>  drm_get_backlight(struct drm_output *output)
>  {
> @@ -936,13 +936,13 @@ drm_get_backlight(struct drm_output *output)
>  	brightness = backlight_get_brightness(output->backlight);
>  	max_brightness = backlight_get_max_brightness(output->backlight);
>  
> -	/* convert it on a scale of 1 to 10 */
> -	norm = 1 + ((brightness) * 9)/(max_brightness);
> +	/* convert it on a scale of 0 to 255 */
> +	norm = (brightness * 255)/(max_brightness);
>  
>  	return (uint32_t) norm;
>  }
>  
> -/* values accepted are between 1-10 range */
> +/* values accepted are between 0-255 range */
>  static void
>  drm_set_backlight(struct weston_output *output_base, uint32_t value)
>  {
> @@ -952,13 +952,13 @@ drm_set_backlight(struct weston_output *output_base, uint32_t value)
>  	if (!output->backlight)
>  		return;
>  
> -	if (value < 1 || value > 10)
> +	if (value < 0 || value > 255)
>  		return;
>  
>  	max_brightness = backlight_get_max_brightness(output->backlight);
>  
>  	/* get denormalized value */
> -	new_brightness = ((value - 1) * (max_brightness)) / 9;
> +	new_brightness = (value * max_brightness) / 255;
>  
>  	backlight_set_brightness(output->backlight, new_brightness);
>  }
> diff --git a/src/compositor.h b/src/compositor.h
> index b5ba7b2..16389a6 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -97,7 +97,7 @@ struct weston_output {
>  	void (*destroy)(struct weston_output *output);
>  	void (*assign_planes)(struct weston_output *output);
>  
> -	/* backlight values are on 1-10 range, where higher is brighter */
> +	/* backlight values are on 0-255 range, where higher is brighter */
>  	uint32_t backlight_current;
>  	void (*set_backlight)(struct weston_output *output, uint32_t value);
>  	void (*set_dpms)(struct weston_output *output, enum dpms_enum level);
> diff --git a/src/shell.c b/src/shell.c
> index 765b0a4..6d8546d 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -1923,6 +1923,7 @@ backlight_binding(struct wl_input_device *device, uint32_t time,
>  {
>  	struct weston_compositor *compositor = data;
>  	struct weston_output *output;
> +	long backlight_new;
>  
>  	/* TODO: we're limiting to simple use cases, where we assume just
>  	 * control on the primary display. We'd have to extend later if we
> @@ -1935,13 +1936,17 @@ backlight_binding(struct wl_input_device *device, uint32_t time,
>  	if (!output->set_backlight)
>  		return;
>  
> -	if ((key == KEY_F9 || key == KEY_BRIGHTNESSDOWN) &&
> -	    output->backlight_current > 1)
> -		output->backlight_current--;
> -	else if ((key == KEY_F10 || key == KEY_BRIGHTNESSUP) &&
> -	    output->backlight_current < 10)
> -		output->backlight_current++;
> +	if (key == KEY_F9 || key == KEY_BRIGHTNESSDOWN)
> +		backlight_new = output->backlight_current - 25;
> +	else if (key == KEY_F10 || key == KEY_BRIGHTNESSUP)
> +		backlight_new = output->backlight_current + 25;
>  
> +	if (backlight_new < 5)
> +		backlight_new = 5;
> +	if (backlight_new > 255)
> +		backlight_new = 255;
> +
> +	output->backlight_current = backlight_new;
>  	output->set_backlight(output, output->backlight_current);
>  }
>  
> -- 
> 1.7.5.4
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list