Skip to content

Commit 423a8ee

Browse files
durnezjEmmanuelP
authored andcommitted
Frame rate limit disabling also need vendor specific quirks
1 parent 3c217bf commit 423a8ee

2 files changed

Lines changed: 83 additions & 34 deletions

File tree

src/arvcamera.c

Lines changed: 82 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,17 +1035,16 @@ arv_camera_set_frame_rate (ArvCamera *camera, double frame_rate, GError **error)
10351035
g_return_if_fail (ARV_IS_CAMERA (camera));
10361036

10371037
if (frame_rate <= 0.0) {
1038-
if (arv_camera_is_feature_available (camera, "AcquisitionFrameRateEnable", &local_error)) {
1039-
if (local_error == NULL)
1040-
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", FALSE, error);
1041-
else
1042-
g_propagate_error (error, local_error);
1038+
arv_camera_set_frame_rate_enable(camera, FALSE, &local_error);
1039+
if (local_error != NULL)
1040+
{
1041+
g_propagate_error (error, local_error);
10431042
}
10441043
return;
10451044
}
10461045

1047-
/* Ignore the error in order to be able to change the frame rate during the acquisition, as some devices don't
1048-
* allow to change TriggerMode if the acquisition is already started. */
1046+
/* Ignore the error in order to be able to change the frame rate during the acquisition, as some devices don't
1047+
* allow to change TriggerMode if the acquisition is already started. */
10491048
arv_camera_clear_triggers (camera, NULL);
10501049

10511050
arv_camera_get_frame_rate_bounds (camera, &minimum, &maximum, &local_error);
@@ -1062,11 +1061,7 @@ arv_camera_set_frame_rate (ArvCamera *camera, double frame_rate, GError **error)
10621061
switch (priv->vendor) {
10631062
case ARV_CAMERA_VENDOR_BASLER:
10641063
if (local_error == NULL){
1065-
if (arv_camera_is_feature_available (camera, "AcquisitionFrameRateEnable", &local_error)){
1066-
/* enable is optional on some devices */
1067-
if (local_error == NULL)
1068-
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", TRUE, &local_error);
1069-
}
1064+
arv_camera_set_frame_rate_enable(camera, TRUE, &local_error);
10701065
}
10711066
if (local_error == NULL)
10721067
arv_camera_set_float (camera,
@@ -1104,37 +1099,30 @@ arv_camera_set_frame_rate (ArvCamera *camera, double frame_rate, GError **error)
11041099
}
11051100
break;
11061101
case ARV_CAMERA_VENDOR_POINT_GREY_FLIR:
1107-
if (local_error == NULL) {
1108-
if (priv->has_acquisition_frame_rate_enabled)
1109-
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnabled", TRUE, &local_error);
1110-
else
1111-
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", TRUE, &local_error);
1102+
arv_camera_set_frame_rate_enable(camera, TRUE, &local_error);
1103+
if (local_error == NULL && priv->has_acquisition_frame_rate_auto) {
1104+
arv_camera_set_string (camera, "AcquisitionFrameRateAuto", "Off", &local_error);
11121105
}
1113-
if (local_error == NULL)
1114-
if (priv->has_acquisition_frame_rate_auto)
1115-
arv_camera_set_string (camera, "AcquisitionFrameRateAuto", "Off", &local_error);
1116-
if (local_error == NULL)
1106+
1107+
if (local_error == NULL) {
11171108
arv_camera_set_float (camera, "AcquisitionFrameRate", frame_rate, &local_error);
1109+
}
1110+
11181111
break;
11191112
case ARV_CAMERA_VENDOR_DALSA:
11201113
case ARV_CAMERA_VENDOR_RICOH:
11211114
case ARV_CAMERA_VENDOR_XIMEA:
11221115
case ARV_CAMERA_VENDOR_MATRIX_VISION:
11231116
case ARV_CAMERA_VENDOR_IMPERX:
11241117
case ARV_CAMERA_VENDOR_UNKNOWN:
1125-
if (local_error == NULL) {
1126-
if (arv_camera_is_feature_available (camera, "AcquisitionFrameRateEnable", &local_error)) {
1127-
if (local_error == NULL)
1128-
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", TRUE, &local_error);
1129-
}
1130-
}
1131-
if (local_error == NULL)
1132-
arv_camera_set_float (camera,
1133-
priv->has_acquisition_frame_rate ?
1134-
"AcquisitionFrameRate":
1135-
"AcquisitionFrameRateAbs", frame_rate, &local_error);
1136-
break;
1137-
}
1118+
arv_camera_set_frame_rate_enable(camera, TRUE, &local_error);
1119+
if (local_error == NULL)
1120+
arv_camera_set_float (camera,
1121+
priv->has_acquisition_frame_rate ?
1122+
"AcquisitionFrameRate":
1123+
"AcquisitionFrameRateAbs", frame_rate, &local_error);
1124+
break;
1125+
}
11381126

11391127
if (local_error != NULL)
11401128
g_propagate_error (error, local_error);
@@ -1271,6 +1259,66 @@ arv_camera_get_frame_rate_bounds (ArvCamera *camera, double *min, double *max, G
12711259
}
12721260
}
12731261

1262+
/*
1263+
* arv_camera_set_frame_rate_enable:
1264+
* @camera: an #ArvCamera
1265+
* @enable: true to enable, false to disable
1266+
* @error: a #GError placeholer, %NULL to ignore
1267+
*
1268+
* Configures whether to enable the upper frame rate limit set by #arv_camera_set_frame_rate.
1269+
* Implements vendor specific quirks if needed.
1270+
* Since: 0.8.26
1271+
*/
1272+
void
1273+
arv_camera_set_frame_rate_enable(ArvCamera *camera, gboolean enable, GError **error)
1274+
{
1275+
ArvCameraPrivate *priv = arv_camera_get_instance_private (camera);
1276+
GError *local_error = NULL;
1277+
1278+
g_return_if_fail (ARV_IS_CAMERA (camera));
1279+
1280+
switch (priv->vendor) {
1281+
case ARV_CAMERA_VENDOR_BASLER:
1282+
if (local_error == NULL){
1283+
if (arv_camera_is_feature_available (camera, "AcquisitionFrameRateEnable", &local_error)){
1284+
/* enable is optional on some devices */
1285+
if (local_error == NULL)
1286+
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", enable, &local_error);
1287+
}
1288+
}
1289+
break;
1290+
case ARV_CAMERA_VENDOR_POINT_GREY_FLIR:
1291+
if (local_error == NULL) {
1292+
if (priv->has_acquisition_frame_rate_enabled)
1293+
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnabled", enable, &local_error);
1294+
else
1295+
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", enable, &local_error);
1296+
}
1297+
break;
1298+
case ARV_CAMERA_VENDOR_DALSA:
1299+
case ARV_CAMERA_VENDOR_RICOH:
1300+
case ARV_CAMERA_VENDOR_XIMEA:
1301+
case ARV_CAMERA_VENDOR_MATRIX_VISION:
1302+
case ARV_CAMERA_VENDOR_IMPERX:
1303+
case ARV_CAMERA_VENDOR_UNKNOWN:
1304+
if (local_error == NULL) {
1305+
if (arv_camera_is_feature_available (camera, "AcquisitionFrameRateEnable", &local_error)) {
1306+
if (local_error == NULL)
1307+
arv_camera_set_boolean (camera, "AcquisitionFrameRateEnable", TRUE, &local_error);
1308+
}
1309+
}
1310+
break;
1311+
case ARV_CAMERA_VENDOR_PROSILICA:
1312+
case ARV_CAMERA_VENDOR_TIS:
1313+
default:
1314+
break; /* No specific frame rate enable code */
1315+
}
1316+
1317+
if (local_error != NULL) {
1318+
g_propagate_error (error, local_error);
1319+
}
1320+
}
1321+
12741322
/**
12751323
* arv_camera_set_trigger:
12761324
* @camera: a #ArvCamera

src/arvcamera.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ ARV_API ArvAcquisitionMode arv_camera_get_acquisition_mode (ArvCamera *camera, G
110110
ARV_API void arv_camera_set_frame_count (ArvCamera *camera, gint64 frame_count, GError **error);
111111
ARV_API gint64 arv_camera_get_frame_count (ArvCamera *camera, GError **error);
112112
ARV_API void arv_camera_get_frame_count_bounds (ArvCamera *camera, gint64 *min, gint64 *max, GError **error);
113+
ARV_API void arv_camera_set_frame_rate_enable (ArvCamera *camera, gboolean enable, GError **error);
113114

114115
ARV_API gboolean arv_camera_is_frame_rate_available (ArvCamera *camera, GError **error);
115116

0 commit comments

Comments
 (0)