@@ -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
0 commit comments