[aravis] camera: handle different series behaviour.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aravis] camera: handle different series behaviour.
- Date: Wed, 19 Jan 2011 14:57:36 +0000 (UTC)
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]