videolevels: Use proper enum for auto property instead of integer

This commit is contained in:
Joshua M. Doe 2010-04-27 09:58:43 -04:00
parent 68cf6e0c92
commit 90f417f099
2 changed files with 64 additions and 19 deletions

View File

@ -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);

View File

@ -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;