From a0d62b465176633155e1f57e310f1ea4d3d46049 Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Thu, 8 Jul 2021 14:34:59 -0400 Subject: [PATCH] videolevels: make lower and upper histogram saturation fractions into properties --- gst/videoadjust/gstvideolevels.c | 31 ++++++++++++++++++++++++++++--- gst/videoadjust/gstvideolevels.h | 4 ++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/gst/videoadjust/gstvideolevels.c b/gst/videoadjust/gstvideolevels.c index b139a1a..0b89a94 100644 --- a/gst/videoadjust/gstvideolevels.c +++ b/gst/videoadjust/gstvideolevels.c @@ -61,6 +61,8 @@ enum PROP_HIGHOUT, PROP_AUTO, PROP_INTERVAL, + PROP_LOWER_SATURATION, + PROP_UPPER_SATURATION, PROP_LAST }; @@ -72,6 +74,8 @@ static GParamSpec *properties[PROP_LAST]; #define DEFAULT_PROP_HIGHOUT 255 #define DEFAULT_PROP_AUTO 0 #define DEFAULT_PROP_INTERVAL (GST_SECOND / 2) +#define DEFAULT_PROP_LOW_SAT 0.01 +#define DEFAULT_PROP_HIGH_SAT 0.01 /* the capabilities of the inputs and outputs */ static GstStaticPadTemplate gst_videolevels_src_template = @@ -224,6 +228,14 @@ gst_videolevels_class_init (GstVideoLevelsClass * klass) g_param_spec_uint64 ("interval", "Interval", "Interval of time between adjustments (in nanoseconds)", 1, G_MAXUINT64, DEFAULT_PROP_INTERVAL, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, PROP_LOWER_SATURATION, + g_param_spec_double ("lower-saturation", "Lower saturation", + "The fraction of the histogram to saturate on the low end when auto is enabled", + 0, 0.99, DEFAULT_PROP_LOW_SAT, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, PROP_UPPER_SATURATION, + g_param_spec_double ("upper-saturation", "Upper saturation", + "The fraction of the histogram to saturate on the upper end when auto is enabled", + 0, 0.99, DEFAULT_PROP_HIGH_SAT, G_PARAM_READWRITE)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_videolevels_sink_template)); @@ -305,6 +317,14 @@ gst_videolevels_set_property (GObject * object, guint prop_id, videolevels->interval = g_value_get_uint64 (value); videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE; break; + case PROP_LOWER_SATURATION: + videolevels->lower_pix_sat = g_value_get_double (value); + gst_videolevels_calculate_lut (videolevels); + break; + case PROP_UPPER_SATURATION: + videolevels->upper_pix_sat = g_value_get_double (value); + gst_videolevels_calculate_lut (videolevels); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -346,6 +366,12 @@ gst_videolevels_get_property (GObject * object, guint prop_id, GValue * value, case PROP_INTERVAL: g_value_set_uint64 (value, videolevels->interval); break; + case PROP_LOWER_SATURATION: + g_value_set_double (value, videolevels->lower_pix_sat); + break; + case PROP_UPPER_SATURATION: + g_value_set_double (value, videolevels->upper_pix_sat); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -689,14 +715,13 @@ gst_videolevels_reset (GstVideoLevels * videolevels) videolevels->upper_input = DEFAULT_PROP_HIGHIN; videolevels->lower_output = DEFAULT_PROP_LOWOUT; videolevels->upper_output = DEFAULT_PROP_HIGHOUT; + videolevels->lower_pix_sat = DEFAULT_PROP_LOW_SAT; + videolevels->upper_pix_sat = DEFAULT_PROP_HIGH_SAT; videolevels->auto_adjust = DEFAULT_PROP_AUTO; videolevels->interval = DEFAULT_PROP_INTERVAL; videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE; - videolevels->lower_pix_sat = 0.01f; - videolevels->upper_pix_sat = 0.01f; - /* if GRAY8, this will be set in set_info */ videolevels->nbins = 4096; diff --git a/gst/videoadjust/gstvideolevels.h b/gst/videoadjust/gstvideolevels.h index 0d7719e..e9249b4 100644 --- a/gst/videoadjust/gstvideolevels.h +++ b/gst/videoadjust/gstvideolevels.h @@ -83,14 +83,14 @@ struct _GstVideoLevels gint upper_input; gint lower_output; gint upper_output; + gfloat lower_pix_sat; + gfloat upper_pix_sat; /* tables */ gpointer lookup_table; GstVideoLevelsAuto auto_adjust; guint64 interval; - gfloat lower_pix_sat; - gfloat upper_pix_sat; gint nbins; gint * histogram;