[aravis] camera: use Gain feature instead of GainRaw if present.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis] camera: use Gain feature instead of GainRaw if present.
- Date: Mon, 18 Jun 2012 08:21:33 +0000 (UTC)
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]