[aravis] camera: use Gain feature instead of GainRaw if present.



commit 35aa9c3ac8f58d0929cefcc428449770b9410e38
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Mon Jun 18 10:19:49 2012 +0200

    camera: use Gain feature instead of GainRaw if present.
    
    GainRaw is deprecated, but still used by a lot of camera, so we can not
    switch to Gain completely. As Gain is a float feature, API is changed to
    hanlde gain as a float value.

 src/arvcamera.c    |   39 +++++++++++++++++++++++++++++----------
 src/arvcamera.h    |    6 +++---
 viewer/arvviewer.c |    4 ++--
 3 files changed, 34 insertions(+), 15 deletions(-)
---
diff --git a/src/arvcamera.c b/src/arvcamera.c
index a20eb20..0ba6e43 100644
--- a/src/arvcamera.c
+++ b/src/arvcamera.c
@@ -72,6 +72,8 @@ struct _ArvCameraPrivate {
 
 	ArvCameraVendor vendor;
 	ArvCameraSeries series;
+
+	gboolean use_gain_raw;
 };
 
 enum
@@ -721,14 +723,17 @@ arv_camera_get_exposure_time_auto (ArvCamera *camera)
  */
 
 void
-arv_camera_set_gain (ArvCamera *camera, gint gain)
+arv_camera_set_gain (ArvCamera *camera, double gain)
 {
 	g_return_if_fail (ARV_IS_CAMERA (camera));
 
 	if (gain < 0)
 		return;
 
-	arv_device_set_integer_feature_value (camera->priv->device, "GainRaw", gain);
+	if (camera->priv->use_gain_raw)
+		arv_device_set_integer_feature_value (camera->priv->device, "GainRaw", gain);
+	else
+		arv_device_set_float_feature_value (camera->priv->device, "Gain", gain);
 }
 
 /**
@@ -738,12 +743,15 @@ arv_camera_set_gain (ArvCamera *camera, gint gain)
  * Returns: the current gain setting.
  */
 
-gint
+double
 arv_camera_get_gain (ArvCamera *camera)
 {
 	g_return_val_if_fail (ARV_IS_CAMERA (camera), 0.0);
 
-	return arv_device_get_integer_feature_value (camera->priv->device, "GainRaw");
+	if (camera->priv->use_gain_raw)
+		return arv_device_get_integer_feature_value (camera->priv->device, "GainRaw");
+
+	return arv_device_get_float_feature_value (camera->priv->device, "Gain");
 }
 
 /**
@@ -756,18 +764,24 @@ arv_camera_get_gain (ArvCamera *camera)
  */
 
 void
-arv_camera_get_gain_bounds (ArvCamera *camera, gint *min, gint *max)
+arv_camera_get_gain_bounds (ArvCamera *camera, double *min, double *max)
 {
 	gint64 min64, max64;
 
 	g_return_if_fail (ARV_IS_CAMERA (camera));
 
-	arv_device_get_integer_feature_bounds (camera->priv->device, "GainRaw", &min64, &max64);
+	if (camera->priv->use_gain_raw) {
+		arv_device_get_integer_feature_bounds (camera->priv->device, "GainRaw", &min64, &max64);
 
-	if (min != NULL)
-		*min = min64;
-	if (max != NULL)
-		*max = max64;
+		if (min != NULL)
+			*min = min64;
+		if (max != NULL)
+			*max = max64;
+
+		return;
+	}
+
+	arv_device_get_float_feature_bounds (camera->priv->device, "Gain", min, max);
 }
 
 /**
@@ -853,6 +867,7 @@ arv_camera_new (const char *name)
 {
 	ArvCamera *camera;
 	ArvDevice *device;
+	ArvGcNode *node;
 
 	device = arv_open_device (name);
 
@@ -861,6 +876,10 @@ arv_camera_new (const char *name)
 
 	camera = g_object_new (ARV_TYPE_CAMERA, "device", device, NULL);
 
+	node = arv_device_get_feature (device, "Gain");
+
+	camera->priv->use_gain_raw = !ARV_IS_GC_FLOAT (node);
+
 	return camera;
 }
 
diff --git a/src/arvcamera.h b/src/arvcamera.h
index 4214191..1b9e753 100644
--- a/src/arvcamera.h
+++ b/src/arvcamera.h
@@ -100,9 +100,9 @@ ArvAuto		arv_camera_get_exposure_time_auto	(ArvCamera *camera);
 
 /* Analog control */
 
-void 		arv_camera_set_gain	 	(ArvCamera *camera, gint gain);
-gint 		arv_camera_get_gain 		(ArvCamera *camera);
-void		arv_camera_get_gain_bounds	(ArvCamera *camera, gint *min, gint *max);
+void 		arv_camera_set_gain	 	(ArvCamera *camera, double gain);
+double 		arv_camera_get_gain 		(ArvCamera *camera);
+void		arv_camera_get_gain_bounds	(ArvCamera *camera, double *min, double *max);
 void		arv_camera_set_gain_auto	(ArvCamera *camera, ArvAuto auto_mode);
 ArvAuto		arv_camera_get_gain_auto	(ArvCamera *camera);
 
diff --git a/viewer/arvviewer.c b/viewer/arvviewer.c
index f92cc66..b52397e 100644
--- a/viewer/arvviewer.c
+++ b/viewer/arvviewer.c
@@ -273,7 +273,7 @@ gboolean
 arv_viewer_update_gain_cb (void *data)
 {
 	ArvViewer *viewer = data;
-	gint64 gain;
+	double gain;
 
 	gain = arv_camera_get_gain (viewer->camera);
 
@@ -400,7 +400,7 @@ arv_viewer_select_camera_cb (GtkComboBox *combo_box, ArvViewer *viewer)
 	int height;
 	unsigned int i;
 	double frame_rate;
-	gint gain_min, gain_max;
+	double gain_min, gain_max;
 	gboolean auto_gain, auto_exposure;
 	const char *caps_string;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]