videolevels: Use proper enum for auto property instead of integer
This commit is contained in:
parent
68cf6e0c92
commit
90f417f099
@ -125,6 +125,25 @@ GST_STATIC_PAD_TEMPLATE ("src",
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#define GST_TYPE_VIDEOLEVELS_AUTO (gst_videolevels_auto_get_type())
|
||||||
|
static GType
|
||||||
|
gst_videolevels_auto_get_type (void)
|
||||||
|
{
|
||||||
|
static GType videolevels_auto_type = 0;
|
||||||
|
static const GEnumValue videolevels_auto[] = {
|
||||||
|
{GST_VIDEOLEVELS_AUTO_OFF, "off", "off"},
|
||||||
|
{GST_VIDEOLEVELS_AUTO_SINGLE, "single", "single"},
|
||||||
|
{GST_VIDEOLEVELS_AUTO_CONTINUOUS, "continuous", "continuous"},
|
||||||
|
{0, NULL, NULL},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!videolevels_auto_type) {
|
||||||
|
videolevels_auto_type =
|
||||||
|
g_enum_register_static ("GstVideoLevelsAuto", videolevels_auto);
|
||||||
|
}
|
||||||
|
return videolevels_auto_type;
|
||||||
|
}
|
||||||
|
|
||||||
/* GObject vmethod declarations */
|
/* GObject vmethod declarations */
|
||||||
static void gst_videolevels_set_property (GObject * object, guint prop_id,
|
static void gst_videolevels_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec);
|
const GValue * value, GParamSpec * pspec);
|
||||||
@ -239,8 +258,9 @@ gst_videolevels_class_init (GstVideoLevelsClass * object)
|
|||||||
g_param_spec_double ("upper-output-level", "Upper Output Level", "Upper Output Level",
|
g_param_spec_double ("upper-output-level", "Upper Output Level", "Upper Output Level",
|
||||||
-G_MINDOUBLE, G_MAXDOUBLE, DEFAULT_PROP_HIGHOUT, G_PARAM_READWRITE));
|
-G_MINDOUBLE, G_MAXDOUBLE, DEFAULT_PROP_HIGHOUT, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (obj_class, PROP_AUTO,
|
g_object_class_install_property (obj_class, PROP_AUTO,
|
||||||
g_param_spec_int ("auto", "Auto Adjust", "Auto adjust contrast (0): off, (1): single-shot, (2): continuous",
|
g_param_spec_enum ("auto", "Auto Adjust",
|
||||||
0, 2, DEFAULT_PROP_AUTO, G_PARAM_READWRITE));
|
"Auto adjust contrast", GST_TYPE_VIDEOLEVELS_AUTO,
|
||||||
|
DEFAULT_PROP_AUTO, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (obj_class, PROP_INTERVAL,
|
g_object_class_install_property (obj_class, PROP_INTERVAL,
|
||||||
g_param_spec_uint64 ("interval", "Interval", "Interval of time between adjustments (in nanoseconds)",
|
g_param_spec_uint64 ("interval", "Interval", "Interval of time between adjustments (in nanoseconds)",
|
||||||
1, G_MAXUINT64, DEFAULT_PROP_INTERVAL, G_PARAM_READWRITE));
|
1, G_MAXUINT64, DEFAULT_PROP_INTERVAL, G_PARAM_READWRITE));
|
||||||
@ -306,9 +326,10 @@ gst_videolevels_set_property (GObject * object, guint prop_id,
|
|||||||
videolevels->upper_output = g_value_get_double (value);
|
videolevels->upper_output = g_value_get_double (value);
|
||||||
//gst_videolevels_calculate_tables (videolevels);
|
//gst_videolevels_calculate_tables (videolevels);
|
||||||
break;
|
break;
|
||||||
case PROP_AUTO:
|
case PROP_AUTO: {
|
||||||
videolevels->auto_adjust = g_value_get_int (value);
|
videolevels->auto_adjust = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PROP_INTERVAL:
|
case PROP_INTERVAL:
|
||||||
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;
|
||||||
@ -349,7 +370,7 @@ gst_videolevels_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
g_value_set_double (value, videolevels->upper_output);
|
g_value_set_double (value, videolevels->upper_output);
|
||||||
break;
|
break;
|
||||||
case PROP_AUTO:
|
case PROP_AUTO:
|
||||||
g_value_set_int (value, videolevels->auto_adjust);
|
g_value_set_enum (value, videolevels->auto_adjust);
|
||||||
break;
|
break;
|
||||||
case PROP_INTERVAL:
|
case PROP_INTERVAL:
|
||||||
g_value_set_uint64 (value, videolevels->interval);
|
g_value_set_uint64 (value, videolevels->interval);
|
||||||
@ -571,6 +592,7 @@ gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf,
|
|||||||
if (videolevels->auto_adjust == 1) {
|
if (videolevels->auto_adjust == 1) {
|
||||||
gst_videolevels_auto_adjust (videolevels, input);
|
gst_videolevels_auto_adjust (videolevels, input);
|
||||||
videolevels->auto_adjust = 0;
|
videolevels->auto_adjust = 0;
|
||||||
|
g_object_notify (G_OBJECT (videolevels), "auto");
|
||||||
}
|
}
|
||||||
else if (videolevels->auto_adjust == 2) {
|
else if (videolevels->auto_adjust == 2) {
|
||||||
elapsed = GST_CLOCK_DIFF (videolevels->last_auto_timestamp, inbuf->timestamp);
|
elapsed = GST_CLOCK_DIFF (videolevels->last_auto_timestamp, inbuf->timestamp);
|
||||||
|
|||||||
@ -44,32 +44,55 @@ typedef struct _GstVideoLevels GstVideoLevels;
|
|||||||
typedef struct _GstVideoLevelsClass GstVideoLevelsClass;
|
typedef struct _GstVideoLevelsClass GstVideoLevelsClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstVideoLevels:
|
* GstVideoLevelsAuto:
|
||||||
|
* @GST_VIDEOLEVELS_AUTO_OFF: don't perform auto adjustment
|
||||||
|
* @GST_VIDEOLEVELS_AUTO_SINGLE: perform auto adjustment once
|
||||||
|
* @GST_VIDEOLEVELS_AUTO_CONTINUOUS: perform auto adjustment continuously (defined by "interval" property)
|
||||||
*
|
*
|
||||||
* Opaque data structure.
|
* Vertical alignment of the text.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
GST_VIDEOLEVELS_AUTO_OFF,
|
||||||
|
GST_VIDEOLEVELS_AUTO_SINGLE,
|
||||||
|
GST_VIDEOLEVELS_AUTO_CONTINUOUS
|
||||||
|
} GstVideoLevelsAuto;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVideoLevels:
|
||||||
|
* @element: the parent element.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The opaque GstVideoLevels data structure.
|
||||||
*/
|
*/
|
||||||
struct _GstVideoLevels
|
struct _GstVideoLevels
|
||||||
{
|
{
|
||||||
GstVideoFilter videofilter;
|
GstVideoFilter element;
|
||||||
|
|
||||||
/* format */
|
/* format */
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
gint bpp;
|
|
||||||
gint depth;
|
guint stride_in;
|
||||||
gint size;
|
gint bpp_in;
|
||||||
|
gint depth_in;
|
||||||
|
gint endianness_in;
|
||||||
gboolean is_signed_in;
|
gboolean is_signed_in;
|
||||||
|
|
||||||
|
guint stride_out;
|
||||||
|
gint bpp_out;
|
||||||
|
gint depth_out;
|
||||||
|
gint endianness_out;
|
||||||
|
|
||||||
/* properties */
|
/* properties */
|
||||||
guint16 lower_input;
|
gdouble lower_input;
|
||||||
guint16 upper_input;
|
gdouble upper_input;
|
||||||
guint8 lower_output;
|
gdouble lower_output;
|
||||||
guint8 upper_output;
|
gdouble upper_output;
|
||||||
|
|
||||||
/* tables */
|
/* tables */
|
||||||
guint8* levels_table;
|
gpointer lookup_table;
|
||||||
|
|
||||||
gint auto_adjust;
|
GstVideoLevelsAuto auto_adjust;
|
||||||
guint64 interval;
|
guint64 interval;
|
||||||
gfloat lower_pix_sat;
|
gfloat lower_pix_sat;
|
||||||
gfloat upper_pix_sat;
|
gfloat upper_pix_sat;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user