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.
This commit is contained in:
@@ -334,10 +334,40 @@ gst_idsueyesrc_get_property (GObject * object, guint property_id,
|
|||||||
g_value_set_int (value, src->timeout);
|
g_value_set_int (value, src->timeout);
|
||||||
break;
|
break;
|
||||||
case PROP_EXPOSURE:
|
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;
|
break;
|
||||||
case PROP_FRAMERATE:
|
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;
|
break;
|
||||||
case PROP_GAIN:
|
case PROP_GAIN:
|
||||||
g_value_set_int (value, src->gain);
|
g_value_set_int (value, src->gain);
|
||||||
|
|||||||
Reference in New Issue
Block a user