idsueyesrc: add exposure and framerate properties

These are only suitable for setting values right now, they aren't being updated yet.
This commit is contained in:
Joshua M. Doe 2021-02-03 16:54:10 -05:00
parent 87f20146a6
commit 6c62aa3548
2 changed files with 65 additions and 1 deletions

View File

@ -60,6 +60,7 @@ static gboolean gst_idsueyesrc_unlock_stop (GstBaseSrc * src);
static GstFlowReturn gst_idsueyesrc_create (GstPushSrc * src, GstBuffer ** buf); 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, static gchar *gst_idsueyesrc_get_error_string (GstIdsueyeSrc * src,
INT error_num); INT error_num);
@ -69,13 +70,17 @@ enum
PROP_CAMERA_ID, PROP_CAMERA_ID,
PROP_CONFIG_FILE, PROP_CONFIG_FILE,
PROP_NUM_CAPTURE_BUFFERS, PROP_NUM_CAPTURE_BUFFERS,
PROP_TIMEOUT PROP_TIMEOUT,
PROP_EXPOSURE,
PROP_FRAMERATE
}; };
#define DEFAULT_PROP_CAMERA_ID 0 #define DEFAULT_PROP_CAMERA_ID 0
#define DEFAULT_PROP_CONFIG_FILE "" #define DEFAULT_PROP_CONFIG_FILE ""
#define DEFAULT_PROP_NUM_CAPTURE_BUFFERS 3 #define DEFAULT_PROP_NUM_CAPTURE_BUFFERS 3
#define DEFAULT_PROP_TIMEOUT 1000 #define DEFAULT_PROP_TIMEOUT 1000
#define DEFAULT_PROP_EXPOSURE 0
#define DEFAULT_PROP_FRAMERATE 0
/* pad templates */ /* pad templates */
@ -141,6 +146,16 @@ gst_idsueyesrc_class_init (GstIdsueyeSrcClass * klass)
g_param_spec_int ("timeout", "Timeout (ms)", g_param_spec_int ("timeout", "Timeout (ms)",
"Timeout in ms (0 to use default)", 0, G_MAXINT, DEFAULT_PROP_TIMEOUT, "Timeout in ms (0 to use default)", 0, G_MAXINT, DEFAULT_PROP_TIMEOUT,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); (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 static void
@ -172,6 +187,8 @@ gst_idsueyesrc_init (GstIdsueyeSrc * src)
src->config_file = g_strdup (DEFAULT_PROP_CONFIG_FILE); src->config_file = g_strdup (DEFAULT_PROP_CONFIG_FILE);
src->num_capture_buffers = DEFAULT_PROP_NUM_CAPTURE_BUFFERS; src->num_capture_buffers = DEFAULT_PROP_NUM_CAPTURE_BUFFERS;
src->timeout = DEFAULT_PROP_TIMEOUT; src->timeout = DEFAULT_PROP_TIMEOUT;
src->exposure = DEFAULT_PROP_EXPOSURE;
src->framerate = DEFAULT_PROP_FRAMERATE;
src->stop_requested = FALSE; src->stop_requested = FALSE;
src->caps = NULL; src->caps = NULL;
@ -201,6 +218,18 @@ gst_idsueyesrc_set_property (GObject * object, guint property_id,
case PROP_TIMEOUT: case PROP_TIMEOUT:
src->timeout = g_value_get_int (value); src->timeout = g_value_get_int (value);
break; 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: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -229,6 +258,12 @@ gst_idsueyesrc_get_property (GObject * object, guint property_id,
case PROP_TIMEOUT: case PROP_TIMEOUT:
g_value_set_int (value, src->timeout); g_value_set_int (value, src->timeout);
break; break;
case PROP_EXPOSURE:
g_value_set_double (value, src->exposure);
break;
case PROP_FRAMERATE:
g_value_set_double (value, src->framerate);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@ -535,6 +570,8 @@ gst_idsueyesrc_start (GstBaseSrc * bsrc)
return FALSE; return FALSE;
} }
gst_idsueyesrc_set_framerate_exposure (src);
return TRUE; 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 * gchar *
gst_idsueyesrc_get_error_string (GstIdsueyeSrc * src, INT error_num) gst_idsueyesrc_get_error_string (GstIdsueyeSrc * src, INT error_num)
{ {

View File

@ -54,6 +54,8 @@ struct _GstIdsueyeSrc
gchar *config_file; gchar *config_file;
gint num_capture_buffers; gint num_capture_buffers;
gint timeout; gint timeout;
gdouble exposure;
gdouble framerate;
GstClockTime acq_start_time; GstClockTime acq_start_time;
guint32 last_frame_count; guint32 last_frame_count;