From 60f77cc8847c25933db373e12e9e447144b90821 Mon Sep 17 00:00:00 2001 From: yair Date: Sun, 16 Nov 2025 21:06:47 +0200 Subject: [PATCH] Query actual framerate and exposure from hardware in property getters Previously, GET_FRAMERATE and GET_EXPOSURE returned only cached values. Now they query the actual hardware state using: - is_SetFrameRate() with IS_GET_FRAMERATE for framerate - is_Exposure() with IS_EXPOSURE_CMD_GET_EXPOSURE for exposure This matches the pattern used for auto-exposure, auto-gain, and gain-boost properties, ensuring UDP control commands return real-time hardware values instead of stale cached values. Critical when auto-exposure is enabled as the hardware adjusts exposure dynamically. --- sys/idsueye/gstidsueyesrc.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/sys/idsueye/gstidsueyesrc.c b/sys/idsueye/gstidsueyesrc.c index 9c92cc2..0876acc 100644 --- a/sys/idsueye/gstidsueyesrc.c +++ b/sys/idsueye/gstidsueyesrc.c @@ -334,10 +334,40 @@ gst_idsueyesrc_get_property (GObject * object, guint property_id, g_value_set_int (value, src->timeout); break; case PROP_EXPOSURE: - g_value_set_double (value, src->exposure); + if (src->is_started && src->hCam) { + double current_exposure = 0.0; + INT ret = is_Exposure (src->hCam, IS_EXPOSURE_CMD_GET_EXPOSURE, + ¤t_exposure, sizeof(double)); + if (ret == IS_SUCCESS) { + /* Update cached value to match hardware state */ + src->exposure = current_exposure; + g_value_set_double (value, current_exposure); + } else { + GST_WARNING_OBJECT (src, "Failed to query exposure (error %d), returning cached value", + ret); + g_value_set_double (value, src->exposure); + } + } else { + g_value_set_double (value, src->exposure); + } break; case PROP_FRAMERATE: - g_value_set_double (value, src->framerate); + if (src->is_started && src->hCam) { + double current_fps = 0.0; + /* Query current framerate by calling is_SetFrameRate with IS_GET_FRAMERATE */ + INT ret = is_SetFrameRate (src->hCam, IS_GET_FRAMERATE, ¤t_fps); + if (ret == IS_SUCCESS) { + /* Update cached value to match hardware state */ + src->framerate = current_fps; + g_value_set_double (value, current_fps); + } else { + GST_WARNING_OBJECT (src, "Failed to query framerate (error %d), returning cached value", + ret); + g_value_set_double (value, src->framerate); + } + } else { + g_value_set_double (value, src->framerate); + } break; case PROP_GAIN: g_value_set_int (value, src->gain);