From 6c62aa35482df9c49d70ed6eb02bbe01b095db66 Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Wed, 3 Feb 2021 16:54:10 -0500 Subject: [PATCH] idsueyesrc: add exposure and framerate properties These are only suitable for setting values right now, they aren't being updated yet. --- sys/idsueye/gstidsueyesrc.c | 64 ++++++++++++++++++++++++++++++++++++- sys/idsueye/gstidsueyesrc.h | 2 ++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/sys/idsueye/gstidsueyesrc.c b/sys/idsueye/gstidsueyesrc.c index f7d8012..3453fd7 100644 --- a/sys/idsueye/gstidsueyesrc.c +++ b/sys/idsueye/gstidsueyesrc.c @@ -60,6 +60,7 @@ static gboolean gst_idsueyesrc_unlock_stop (GstBaseSrc * src); static GstFlowReturn gst_idsueyesrc_create (GstPushSrc * src, GstBuffer ** buf); +static gboolean gst_idsueyesrc_set_framerate_exposure (GstIdsueyeSrc * src); static gchar *gst_idsueyesrc_get_error_string (GstIdsueyeSrc * src, INT error_num); @@ -69,13 +70,17 @@ enum PROP_CAMERA_ID, PROP_CONFIG_FILE, PROP_NUM_CAPTURE_BUFFERS, - PROP_TIMEOUT + PROP_TIMEOUT, + PROP_EXPOSURE, + PROP_FRAMERATE }; #define DEFAULT_PROP_CAMERA_ID 0 #define DEFAULT_PROP_CONFIG_FILE "" #define DEFAULT_PROP_NUM_CAPTURE_BUFFERS 3 #define DEFAULT_PROP_TIMEOUT 1000 +#define DEFAULT_PROP_EXPOSURE 0 +#define DEFAULT_PROP_FRAMERATE 0 /* pad templates */ @@ -141,6 +146,16 @@ gst_idsueyesrc_class_init (GstIdsueyeSrcClass * klass) g_param_spec_int ("timeout", "Timeout (ms)", "Timeout in ms (0 to use default)", 0, G_MAXINT, DEFAULT_PROP_TIMEOUT, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + g_object_class_install_property (gobject_class, PROP_EXPOSURE, + g_param_spec_double ("exposure", "Exposure (ms)", + "Exposure in ms (0 to max of 1/FPS)", 0, G_MAXDOUBLE, + DEFAULT_PROP_EXPOSURE, + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + g_object_class_install_property (gobject_class, PROP_FRAMERATE, + g_param_spec_double ("framerate", "Framerate (Hz)", + "Framerate in frames per second", 0, G_MAXDOUBLE, + DEFAULT_PROP_FRAMERATE, + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); } static void @@ -172,6 +187,8 @@ gst_idsueyesrc_init (GstIdsueyeSrc * src) src->config_file = g_strdup (DEFAULT_PROP_CONFIG_FILE); src->num_capture_buffers = DEFAULT_PROP_NUM_CAPTURE_BUFFERS; src->timeout = DEFAULT_PROP_TIMEOUT; + src->exposure = DEFAULT_PROP_EXPOSURE; + src->framerate = DEFAULT_PROP_FRAMERATE; src->stop_requested = FALSE; src->caps = NULL; @@ -201,6 +218,18 @@ gst_idsueyesrc_set_property (GObject * object, guint property_id, case PROP_TIMEOUT: src->timeout = g_value_get_int (value); break; + case PROP_EXPOSURE: + src->exposure = g_value_get_double (value); + if (src->is_started) { + gst_idsueyesrc_set_framerate_exposure (src); + } + break; + case PROP_FRAMERATE: + src->framerate = g_value_get_double (value); + if (src->is_started) { + gst_idsueyesrc_set_framerate_exposure (src); + } + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -229,6 +258,12 @@ gst_idsueyesrc_get_property (GObject * object, guint property_id, case PROP_TIMEOUT: g_value_set_int (value, src->timeout); break; + case PROP_EXPOSURE: + g_value_set_double (value, src->exposure); + break; + case PROP_FRAMERATE: + g_value_set_double (value, src->framerate); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -535,6 +570,8 @@ gst_idsueyesrc_start (GstBaseSrc * bsrc) return FALSE; } + gst_idsueyesrc_set_framerate_exposure (src); + return TRUE; } @@ -769,6 +806,31 @@ gst_idsueyesrc_create (GstPushSrc * psrc, GstBuffer ** buf) } +gboolean +gst_idsueyesrc_set_framerate_exposure (GstIdsueyeSrc * src) +{ + INT ret; + gboolean success = TRUE; + double new_fps; + + ret = is_SetFrameRate (src->hCam, src->framerate, &new_fps); + if (ret != IS_SUCCESS) { + GST_WARNING_OBJECT (src, "Failed to set framerate to %.3f (error %d)", + src->framerate, ret); + success = FALSE; + } + + ret = + is_Exposure (src->hCam, IS_EXPOSURE_CMD_SET_EXPOSURE, &src->exposure, 8); + if (ret != IS_SUCCESS) { + GST_WARNING_OBJECT (src, "Failed to set exposure to %.3f (error %d)", + src->exposure, ret); + success = FALSE; + } + + return success; +} + gchar * gst_idsueyesrc_get_error_string (GstIdsueyeSrc * src, INT error_num) { diff --git a/sys/idsueye/gstidsueyesrc.h b/sys/idsueye/gstidsueyesrc.h index d46a859..9c2a6b0 100644 --- a/sys/idsueye/gstidsueyesrc.h +++ b/sys/idsueye/gstidsueyesrc.h @@ -54,6 +54,8 @@ struct _GstIdsueyeSrc gchar *config_file; gint num_capture_buffers; gint timeout; + gdouble exposure; + gdouble framerate; GstClockTime acq_start_time; guint32 last_frame_count;