Compare commits

...

2 Commits

Author SHA1 Message Date
yair
340cd1dd6e max pixel clock 2025-11-16 21:07:03 +02:00
yair
60f77cc884 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.
2025-11-16 21:06:47 +02:00
2 changed files with 35 additions and 5 deletions

View File

@@ -54,10 +54,10 @@ Manual gain=0
[Timing]
Pixelclock=237
Pixelclock=474
Extended pixelclock range=0
Framerate=99.968929
Exposure=9.910081
Framerate=750
Exposure=1.24
Long exposure=0
Dual exposure ratio=0

View File

@@ -334,10 +334,40 @@ gst_idsueyesrc_get_property (GObject * object, guint property_id,
g_value_set_int (value, src->timeout);
break;
case PROP_EXPOSURE:
if (src->is_started && src->hCam) {
double current_exposure = 0.0;
INT ret = is_Exposure (src->hCam, IS_EXPOSURE_CMD_GET_EXPOSURE,
&current_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:
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, &current_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);