From 90f417f099e3c8bbe6b9d39b0902933d973ee329 Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Tue, 27 Apr 2010 09:58:43 -0400 Subject: [PATCH] videolevels: Use proper enum for auto property instead of integer --- gst/gstvideolevels.c | 32 ++++++++++++++++++++++----- gst/gstvideolevels.h | 51 ++++++++++++++++++++++++++++++++------------ 2 files changed, 64 insertions(+), 19 deletions(-) diff --git a/gst/gstvideolevels.c b/gst/gstvideolevels.c index f1818dd..7a2036d 100644 --- a/gst/gstvideolevels.c +++ b/gst/gstvideolevels.c @@ -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 */ static void gst_videolevels_set_property (GObject * object, guint prop_id, 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_MINDOUBLE, G_MAXDOUBLE, DEFAULT_PROP_HIGHOUT, G_PARAM_READWRITE)); 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", - 0, 2, DEFAULT_PROP_AUTO, G_PARAM_READWRITE)); + g_param_spec_enum ("auto", "Auto Adjust", + "Auto adjust contrast", GST_TYPE_VIDEOLEVELS_AUTO, + DEFAULT_PROP_AUTO, G_PARAM_READWRITE)); g_object_class_install_property (obj_class, PROP_INTERVAL, g_param_spec_uint64 ("interval", "Interval", "Interval of time between adjustments (in nanoseconds)", 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); //gst_videolevels_calculate_tables (videolevels); break; - case PROP_AUTO: - videolevels->auto_adjust = g_value_get_int (value); + case PROP_AUTO: { + videolevels->auto_adjust = g_value_get_enum (value); break; + } case PROP_INTERVAL: videolevels->interval = g_value_get_uint64 (value); 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); break; case PROP_AUTO: - g_value_set_int (value, videolevels->auto_adjust); + g_value_set_enum (value, videolevels->auto_adjust); break; case PROP_INTERVAL: g_value_set_uint64 (value, videolevels->interval); @@ -571,6 +592,7 @@ gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf, if (videolevels->auto_adjust == 1) { gst_videolevels_auto_adjust (videolevels, input); videolevels->auto_adjust = 0; + g_object_notify (G_OBJECT (videolevels), "auto"); } else if (videolevels->auto_adjust == 2) { elapsed = GST_CLOCK_DIFF (videolevels->last_auto_timestamp, inbuf->timestamp); diff --git a/gst/gstvideolevels.h b/gst/gstvideolevels.h index ea144b2..37d51d7 100644 --- a/gst/gstvideolevels.h +++ b/gst/gstvideolevels.h @@ -44,32 +44,55 @@ typedef struct _GstVideoLevels GstVideoLevels; typedef struct _GstVideoLevelsClass GstVideoLevelsClass; /** - * GstVideoLevels: - * - * Opaque data structure. - */ +* 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) +* +* 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 { - GstVideoFilter videofilter; + GstVideoFilter element; /* format */ gint width; gint height; - gint bpp; - gint depth; - gint size; + + guint stride_in; + gint bpp_in; + gint depth_in; + gint endianness_in; gboolean is_signed_in; + guint stride_out; + gint bpp_out; + gint depth_out; + gint endianness_out; + /* properties */ - guint16 lower_input; - guint16 upper_input; - guint8 lower_output; - guint8 upper_output; + gdouble lower_input; + gdouble upper_input; + gdouble lower_output; + gdouble upper_output; /* tables */ - guint8* levels_table; + gpointer lookup_table; - gint auto_adjust; + GstVideoLevelsAuto auto_adjust; guint64 interval; gfloat lower_pix_sat; gfloat upper_pix_sat;