> -----Original Message-----
> From: Intel-gfx <intel-gfx-boun...@lists.freedesktop.org> On Behalf Of Nemesa
> Garg
> Sent: Monday, July 8, 2024 1:39 PM
> To: intel-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org
> Cc: Garg, Nemesa <nemesa.g...@intel.com>
> Subject: [1/5] drm: Introduce sharpness mode property

Nit: Rename it to sharpness strength instead of mode.

> Introduces the new crtc property "SHARPNESS_STRENGTH" that allows the user
> to set the intensity so as to get the sharpness effect.
> The value of this property can be set from 0-255.
> It is useful in scenario when the output is blurry and user want to sharpen 
> the
> pixels. User can increase/decrease the sharpness level depending on the 
> content
> displayed.
> 
> Signed-off-by: Nemesa Garg <nemesa.g...@intel.com>
> ---
>  drivers/gpu/drm/drm_atomic_uapi.c |  4 ++++
>  drivers/gpu/drm/drm_crtc.c        | 35 +++++++++++++++++++++++++++++++
>  include/drm/drm_crtc.h            | 17 +++++++++++++++
>  3 files changed, 56 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c
> b/drivers/gpu/drm/drm_atomic_uapi.c
> index 22bbb2d83e30..825640ab39f6 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -417,6 +417,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc
> *crtc,
>               set_out_fence_for_crtc(state->state, crtc, fence_ptr);
>       } else if (property == crtc->scaling_filter_property) {
>               state->scaling_filter = val;
> +     } else if (property == crtc->sharpness_strength_prop) {

Agree with Arun, spell property fully for consistency.

> +             state->sharpness_strength = val;
>       } else if (crtc->funcs->atomic_set_property) {
>               return crtc->funcs->atomic_set_property(crtc, state, property,
> val);
>       } else {
> @@ -454,6 +456,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc,
>               *val = 0;
>       else if (property == crtc->scaling_filter_property)
>               *val = state->scaling_filter;
> +     else if (property == crtc->sharpness_strength_prop)
> +             *val = state->sharpness_strength;
>       else if (crtc->funcs->atomic_get_property)
>               return crtc->funcs->atomic_get_property(crtc, state, property,
> val);
>       else {
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index
> 3488ff067c69..4ff18786a226 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -229,6 +229,24 @@ struct dma_fence *drm_crtc_create_fence(struct
> drm_crtc *crtc)
>   *           Driver's default scaling filter
>   *   Nearest Neighbor:
>   *           Nearest Neighbor scaling filter
> + * SHARPNESS_STRENGTH:
> + *   Atomic property for setting the sharpness strength/intensity by
> userspace.
> + *
> + *   The value of this property is set as an integer value ranging
> + *   from 0 - 255 where:
> + *
> + *   0 means feature is disabled.
> + *
> + *   1 means minimum sharpness.
> + *
> + *   255 means maximum sharpness.
> + *
> + *   User can gradually increase or decrease the sharpness level and can
> + *   set the optimum value depending on content and this value will be
> + *   passed to kernel through the Uapi.
> + *   The sharpness effect takes place post blending on the final composed
> output.
> + *   If the feature is disabled, the content remains same without any
> sharpening effect
> + *   and when this feature is applied, it enhances the clarity of the 
> content.

Can you also mention the modeset requirement that this can be done with no 
modeset
and can be managed as normal flip.

>   */
> 
>  __printf(6, 0)
> @@ -939,3 +957,20 @@ int drm_crtc_create_scaling_filter_property(struct
> drm_crtc *crtc,
>       return 0;
>  }
>  EXPORT_SYMBOL(drm_crtc_create_scaling_filter_property);
> +
> +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc)
> +{
> +     struct drm_device *dev = crtc->dev;
> +
> +     struct drm_property *prop =
> +             drm_property_create_range(dev, 0, "SHARPNESS_STRENGTH", 0,
> 255);
> +
> +     if (!prop)
> +             return -ENOMEM;
> +
> +     crtc->sharpness_strength_prop = prop;
> +     drm_object_attach_property(&crtc->base, prop, 0);
> +
> +     return 0;
> +}
> +EXPORT_SYMBOL(drm_crtc_create_sharpness_strength_property);
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index
> 8b48a1974da3..1cdca5c82753 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -317,6 +317,16 @@ struct drm_crtc_state {
>        */
>       enum drm_scaling_filter scaling_filter;
> 
> +     /**
> +      * @sharpness_strength
> +      *
> +      * Used by the user to set the sharpness intensity.
> +      * The value ranges from 0-255.
> +      * Any value greater than 0 means enabling the featuring
> +      * along with setting the value for sharpness.
> +      */
> +     u8 sharpness_strength;
> +
>       /**
>        * @event:
>        *
> @@ -1088,6 +1098,12 @@ struct drm_crtc {
>        */
>       struct drm_property *scaling_filter_property;
> 
> +     /**
> +      * @sharpness_strength_prop: property to apply
> +      * the intensity of the sharpness requested.
> +      */
> +     struct drm_property *sharpness_strength_prop;
> +
>       /**
>        * @state:
>        *
> @@ -1324,4 +1340,5 @@ static inline struct drm_crtc *drm_crtc_find(struct
> drm_device *dev,  int drm_crtc_create_scaling_filter_property(struct drm_crtc
> *crtc,
>                                           unsigned int supported_filters);
> 
> +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc);
>  #endif /* __DRM_CRTC_H__ */
> --
> 2.25.1

Reply via email to