[aravis] camera: handle different series behaviour.



commit 8479521a18e742d044f2bf28b283581a2f985425
Author: Emmanuel Pacaud <emmanuel gnome org>
Date:   Wed Jan 19 15:55:37 2011 +0100

    camera: handle different series behaviour.
    
    For example, Basler Scout cameras require to use ExposureTimeBaseAbs in
    order to get the full exposure time range, while Basler Ace cameras don't.

 docs/reference/aravis/aravis-sections.txt |    1 -
 src/arvcamera.c                           |   59 +++++++++++++++++++++++------
 src/arvcamera.h                           |   13 ------
 3 files changed, 47 insertions(+), 26 deletions(-)
---
diff --git a/docs/reference/aravis/aravis-sections.txt b/docs/reference/aravis/aravis-sections.txt
index 978de2b..19b0a12 100644
--- a/docs/reference/aravis/aravis-sections.txt
+++ b/docs/reference/aravis/aravis-sections.txt
@@ -1,7 +1,6 @@
 <SECTION>
 <FILE>arvcamera</FILE>
 <TITLE>ArvCamera</TITLE>
-ArvCameraVendor
 ArvCamera
 arv_camera_new
 arv_camera_create_stream
diff --git a/src/arvcamera.c b/src/arvcamera.c
index c6292ff..b3e8449 100644
--- a/src/arvcamera.c
+++ b/src/arvcamera.c
@@ -42,6 +42,27 @@
 #include <arvdevice.h>
 #include <arvenums.h>
 
+/**
+ * ArvCameraVendor:
+ * @ARV_CAMERA_VENDOR_UNKNOWN: unknown camera vendor
+ * @ARV_CAMERA_VENDOR_BASLER: Basler
+ * @ARV_CAMERA_VENDOR_PROSILICA: Prosilica
+ */
+
+typedef enum {
+	ARV_CAMERA_VENDOR_UNKNOWN,
+	ARV_CAMERA_VENDOR_BASLER,
+	ARV_CAMERA_VENDOR_PROSILICA
+} ArvCameraVendor;
+
+typedef enum {
+	ARV_CAMERA_SERIES_UNKNOWN,
+	ARV_CAMERA_SERIES_BASLER_ACE,
+	ARV_CAMERA_SERIES_BASLER_SCOUT,
+	ARV_CAMERA_SERIES_BASLER_OTHER,
+	ARV_CAMERA_SERIES_PROSILICA_OTHER
+} ArvCameraSeries;
+
 static GObjectClass *parent_class = NULL;
 
 struct _ArvCameraPrivate {
@@ -49,6 +70,7 @@ struct _ArvCameraPrivate {
 	ArvGc *genicam;
 
 	ArvCameraVendor vendor;
+	ArvCameraSeries series;
 };
 
 /**
@@ -460,13 +482,13 @@ arv_camera_set_exposure_time (ArvCamera *camera, double exposure_time_us)
 	if (exposure_time_us <= 0)
 		return;
 
-	switch (camera->priv->vendor) {
-		case ARV_CAMERA_VENDOR_BASLER:
-			arv_device_set_float_feature_value (camera->priv->device, "ExposureTimeBaseAbs", exposure_time_us);
+	switch (camera->priv->series) {
+		case ARV_CAMERA_SERIES_BASLER_SCOUT:
+			arv_device_set_float_feature_value (camera->priv->device, "ExposureTimeBaseAbs",
+							    exposure_time_us);
 			arv_device_set_integer_feature_value (camera->priv->device, "ExposureTimeRaw", 1);
 			break;
-		case ARV_CAMERA_VENDOR_PROSILICA:
-		case ARV_CAMERA_VENDOR_UNKNOWN:
+		default:
 			arv_device_set_float_feature_value (camera->priv->device, "ExposureTimeAbs", exposure_time_us);
 			break;
 	}
@@ -491,12 +513,11 @@ arv_camera_get_exposure_time_bounds (ArvCamera *camera, double *min, double *max
 {
 	g_return_if_fail (ARV_IS_CAMERA (camera));
 
-	switch (camera->priv->vendor) {
-		case ARV_CAMERA_VENDOR_BASLER:
+	switch (camera->priv->series) {
+		case ARV_CAMERA_SERIES_BASLER_SCOUT:
 			arv_device_get_float_feature_bounds (camera->priv->device, "ExposureTimeBaseAbs", min, max);
 			break;
-		case ARV_CAMERA_VENDOR_PROSILICA:
-		case ARV_CAMERA_VENDOR_UNKNOWN:
+		default:
 			arv_device_get_float_feature_bounds (camera->priv->device, "ExposureTimeAbs", min, max);
 			break;
 	}
@@ -595,7 +616,9 @@ arv_camera_new (const char *name)
 	ArvCamera *camera;
 	ArvDevice *device;
 	ArvCameraVendor vendor;
+	ArvCameraSeries series;
 	const char *vendor_name;
+	const char *model_name;
 
 	device = arv_open_device (name);
 
@@ -607,14 +630,26 @@ arv_camera_new (const char *name)
 	camera->priv->genicam = arv_device_get_genicam (device);
 
 	vendor_name = arv_camera_get_vendor_name (camera);
-	if (g_strcmp0 (vendor_name, "Basler") == 0)
+	model_name = arv_camera_get_model_name (camera);
+
+	if (g_strcmp0 (vendor_name, "Basler") == 0) {
 		vendor = ARV_CAMERA_VENDOR_BASLER;
-	else if (g_strcmp0 (vendor_name, "Prosilica") == 0)
+		if (g_str_has_prefix (model_name, "acA"))
+			series = ARV_CAMERA_SERIES_BASLER_ACE;
+		else if (g_str_has_prefix (model_name, "scA"))
+			series = ARV_CAMERA_SERIES_BASLER_SCOUT;
+		else
+			series = ARV_CAMERA_SERIES_BASLER_OTHER;
+	} else if (g_strcmp0 (vendor_name, "Prosilica") == 0) {
 		vendor = ARV_CAMERA_VENDOR_PROSILICA;
-	else
+		series = ARV_CAMERA_SERIES_PROSILICA_OTHER;
+	} else {
 		vendor = ARV_CAMERA_VENDOR_UNKNOWN;
+		series = ARV_CAMERA_SERIES_UNKNOWN;
+	}
 
 	camera->priv->vendor = vendor;
+	camera->priv->series = vendor;
 
 	return camera;
 }
diff --git a/src/arvcamera.h b/src/arvcamera.h
index ff2c42d..f0764a8 100644
--- a/src/arvcamera.h
+++ b/src/arvcamera.h
@@ -28,19 +28,6 @@
 
 G_BEGIN_DECLS
 
-/**
- * ArvCameraVendor:
- * @ARV_CAMERA_VENDOR_UNKNOWN: unknown camera vendor
- * @ARV_CAMERA_VENDOR_BASLER: Basler
- * @ARV_CAMERA_VENDOR_PROSILICA: Prosilica
- */
-
-typedef enum {
-	ARV_CAMERA_VENDOR_UNKNOWN,
-	ARV_CAMERA_VENDOR_BASLER,
-	ARV_CAMERA_VENDOR_PROSILICA
-} ArvCameraVendor;
-
 #define ARV_TYPE_CAMERA             (arv_camera_get_type ())
 #define ARV_CAMERA(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), ARV_TYPE_CAMERA, ArvCamera))
 #define ARV_CAMERA_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), ARV_TYPE_CAMERA, ArvCameraClass))



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