videolevels: make lower and upper histogram saturation fractions into properties
This commit is contained in:
parent
b705e93cb3
commit
a0d62b4651
@ -61,6 +61,8 @@ enum
|
|||||||
PROP_HIGHOUT,
|
PROP_HIGHOUT,
|
||||||
PROP_AUTO,
|
PROP_AUTO,
|
||||||
PROP_INTERVAL,
|
PROP_INTERVAL,
|
||||||
|
PROP_LOWER_SATURATION,
|
||||||
|
PROP_UPPER_SATURATION,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -72,6 +74,8 @@ static GParamSpec *properties[PROP_LAST];
|
|||||||
#define DEFAULT_PROP_HIGHOUT 255
|
#define DEFAULT_PROP_HIGHOUT 255
|
||||||
#define DEFAULT_PROP_AUTO 0
|
#define DEFAULT_PROP_AUTO 0
|
||||||
#define DEFAULT_PROP_INTERVAL (GST_SECOND / 2)
|
#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 */
|
/* the capabilities of the inputs and outputs */
|
||||||
static GstStaticPadTemplate gst_videolevels_src_template =
|
static GstStaticPadTemplate gst_videolevels_src_template =
|
||||||
@ -224,6 +228,14 @@ gst_videolevels_class_init (GstVideoLevelsClass * klass)
|
|||||||
g_param_spec_uint64 ("interval", "Interval",
|
g_param_spec_uint64 ("interval", "Interval",
|
||||||
"Interval of time between adjustments (in nanoseconds)", 1,
|
"Interval of time between adjustments (in nanoseconds)", 1,
|
||||||
G_MAXUINT64, DEFAULT_PROP_INTERVAL, G_PARAM_READWRITE));
|
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_element_class_add_pad_template (gstelement_class,
|
||||||
gst_static_pad_template_get (&gst_videolevels_sink_template));
|
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->interval = g_value_get_uint64 (value);
|
||||||
videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE;
|
videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE;
|
||||||
break;
|
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:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -346,6 +366,12 @@ gst_videolevels_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
case PROP_INTERVAL:
|
case PROP_INTERVAL:
|
||||||
g_value_set_uint64 (value, videolevels->interval);
|
g_value_set_uint64 (value, videolevels->interval);
|
||||||
break;
|
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:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -689,14 +715,13 @@ gst_videolevels_reset (GstVideoLevels * videolevels)
|
|||||||
videolevels->upper_input = DEFAULT_PROP_HIGHIN;
|
videolevels->upper_input = DEFAULT_PROP_HIGHIN;
|
||||||
videolevels->lower_output = DEFAULT_PROP_LOWOUT;
|
videolevels->lower_output = DEFAULT_PROP_LOWOUT;
|
||||||
videolevels->upper_output = DEFAULT_PROP_HIGHOUT;
|
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->auto_adjust = DEFAULT_PROP_AUTO;
|
||||||
videolevels->interval = DEFAULT_PROP_INTERVAL;
|
videolevels->interval = DEFAULT_PROP_INTERVAL;
|
||||||
videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE;
|
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 */
|
/* if GRAY8, this will be set in set_info */
|
||||||
videolevels->nbins = 4096;
|
videolevels->nbins = 4096;
|
||||||
|
|
||||||
|
|||||||
@ -83,14 +83,14 @@ struct _GstVideoLevels
|
|||||||
gint upper_input;
|
gint upper_input;
|
||||||
gint lower_output;
|
gint lower_output;
|
||||||
gint upper_output;
|
gint upper_output;
|
||||||
|
gfloat lower_pix_sat;
|
||||||
|
gfloat upper_pix_sat;
|
||||||
|
|
||||||
/* tables */
|
/* tables */
|
||||||
gpointer lookup_table;
|
gpointer lookup_table;
|
||||||
|
|
||||||
GstVideoLevelsAuto auto_adjust;
|
GstVideoLevelsAuto auto_adjust;
|
||||||
guint64 interval;
|
guint64 interval;
|
||||||
gfloat lower_pix_sat;
|
|
||||||
gfloat upper_pix_sat;
|
|
||||||
gint nbins;
|
gint nbins;
|
||||||
gint * histogram;
|
gint * histogram;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user