summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@gmail.com>2014-10-07 13:58:44 +0200
committerMatthias Vogelgesang <matthias.vogelgesang@gmail.com>2014-10-07 13:58:44 +0200
commitf1198fac7cb7e0817fe11cacdc0a314aa45536f2 (patch)
tree9f9df906cf7b2155804f2f5107f7c6dc09d15a47
parent0570957a002d6f660a17135cc136a053018035c6 (diff)
parentefb97e000e66125453f3f07caa74b324a3205a4a (diff)
downloadlibuca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.gz
libuca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.bz2
libuca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.xz
libuca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.zip
Merge pull request #59 from miq/plugin-pylon-improvements
Plugin pylon improvements
-rw-r--r--plugins/pylon/CMakeLists.txt8
-rw-r--r--plugins/pylon/changelog.txt7
-rw-r--r--plugins/pylon/uca-pylon-camera.c137
-rw-r--r--plugins/pylon/uca-pylon-camera.h6
4 files changed, 94 insertions, 64 deletions
diff --git a/plugins/pylon/CMakeLists.txt b/plugins/pylon/CMakeLists.txt
index 5864b84..69f668d 100644
--- a/plugins/pylon/CMakeLists.txt
+++ b/plugins/pylon/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 2.6)
project(ucapylon C)
-set(VERSION "1.1.1")
+set(VERSION "1.3.0")
find_package(Pylon)
@@ -11,7 +11,7 @@ if (PYLON_FOUND)
set(PLUGIN_SUMMARY "Pylon plugin for libuca")
set(PLUGIN_CHANGELOG "${CMAKE_CURRENT_SOURCE_DIR}/changelog.txt")
set(PLUGIN_DESCRIPTION "Plugin for the Basler GigE CCD Camera.")
- set(PLUGIN_REQUIRES "libuca >= 1.3.0, libpyloncam >= 0.3.0")
+ set(PLUGIN_REQUIRES "libuca >= 1.3.0, libpyloncam >= 0.5.0")
set(PLUGIN_VENDOR "ANKA Computing Group")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in
@@ -30,9 +30,7 @@ if (PYLON_FOUND)
uca-pylon-camera.c
uca-pylon-enums.c)
- target_link_libraries(ucapylon
- ${UCA_DEPS}
- ${LIBPYLONCAM_LIBRARIES})
+ target_link_libraries(ucapylon ${UCA_DEPS} ${LIBPYLONCAM_LIBRARIES})
install(TARGETS ucapylon
LIBRARY DESTINATION ${UCA_PLUGINDIR}
diff --git a/plugins/pylon/changelog.txt b/plugins/pylon/changelog.txt
index adfa95b..7ce5fa8 100644
--- a/plugins/pylon/changelog.txt
+++ b/plugins/pylon/changelog.txt
@@ -1,3 +1,10 @@
+* Tue Oct 7 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.0-1
+- require libpyloncam 0.5.0 because of new auto exposure feature
+* Thu Sep 11 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.2.1-1
+- improve robustness of roi setting
+* Thu Jul 31 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.2.0-1
+- require libpyloncam 0.4.0
+- update to modified libpyloncam API
* Wed Apr 9 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.1.1-1
- remove unneeded memory allocation
- require libpyloncam 0.3.0
diff --git a/plugins/pylon/uca-pylon-camera.c b/plugins/pylon/uca-pylon-camera.c
index 134dda3..4420d58 100644
--- a/plugins/pylon/uca-pylon-camera.c
+++ b/plugins/pylon/uca-pylon-camera.c
@@ -55,6 +55,7 @@ enum {
PROP_ROI_HEIGHT_DEFAULT,
PROP_GAIN,
PROP_BALANCE_WHITE_AUTO,
+ PROP_EXPOSURE_AUTO,
N_PROPERTIES
};
@@ -89,8 +90,10 @@ struct _UcaPylonCameraPrivate {
guint width;
guint height;
- guint16 roi_x, roi_y;
- guint16 roi_width, roi_height;
+ guint16 roi_x;
+ guint16 roi_y;
+ guint16 roi_width;
+ guint16 roi_height;
GValueArray *binnings;
};
@@ -136,65 +139,67 @@ static void uca_pylon_camera_set_property(GObject *object, guint property_id, co
GError* error = NULL;
switch (property_id) {
- case PROP_SENSOR_HORIZONTAL_BINNING:
- /* intentional fall-through*/
- case PROP_SENSOR_VERTICAL_BINNING:
- /* intentional fall-through*/
- case PROP_TRIGGER_MODE:
- break;
- case PROP_BALANCE_WHITE_AUTO:
- {
- pylon_camera_set_int_attribute("BalanceWhiteAuto", g_value_get_enum(value), &error);
- }
- break;
-
- case PROP_ROI_X:
- {
- priv->roi_x = g_value_get_uint(value);
- pylon_set_roi(object, &error);
- }
- break;
-
- case PROP_ROI_Y:
- {
- priv->roi_y = g_value_get_uint(value);
- pylon_set_roi(object, &error);
- }
- break;
-
- case PROP_ROI_WIDTH:
- {
- priv->roi_width = g_value_get_uint(value);
- pylon_set_roi(object, &error);
- }
- break;
-
- case PROP_ROI_HEIGHT:
- {
- priv->roi_height = g_value_get_uint(value);
- pylon_set_roi(object, &error);
- }
- break;
-
- case PROP_EXPOSURE_TIME:
- pylon_camera_set_exposure_time(g_value_get_double(value), &error);
- break;
-
- case PROP_GAIN:
- pylon_camera_set_gain(g_value_get_int(value), &error);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- return;
+ case PROP_SENSOR_HORIZONTAL_BINNING:
+ /* intentional fall-through*/
+ case PROP_SENSOR_VERTICAL_BINNING:
+ /* intentional fall-through*/
+ case PROP_TRIGGER_MODE:
+ break;
+ case PROP_BALANCE_WHITE_AUTO:
+ {
+ pylon_camera_set_int_attribute("BalanceWhiteAuto", g_value_get_enum(value), &error);
+ break;
+ }
+ case PROP_EXPOSURE_AUTO:
+ {
+ pylon_camera_set_int_attribute("ExposureAuto", g_value_get_enum(value), &error);
+ break;
+ }
+ case PROP_ROI_X:
+ {
+ priv->roi_x = g_value_get_uint(value);
+ gint max_roi_width = priv->width - priv->roi_x;
+ priv->roi_width = MIN(priv->roi_width, max_roi_width);
+ pylon_set_roi(object, &error);
+ break;
+ }
+ case PROP_ROI_Y:
+ {
+ priv->roi_y = g_value_get_uint(value);
+ gint max_roi_height = priv->height - priv->roi_y;
+ priv->roi_height = MIN(priv->roi_height, max_roi_height);
+ pylon_set_roi(object, &error);
+ break;
+ }
+ case PROP_ROI_WIDTH:
+ {
+ priv->roi_width = g_value_get_uint(value);
+ pylon_set_roi(object, &error);
+ break;
+ }
+ case PROP_ROI_HEIGHT:
+ {
+ priv->roi_height = g_value_get_uint(value);
+ pylon_set_roi(object, &error);
+ break;
+ }
+ case PROP_EXPOSURE_TIME:
+ pylon_camera_set_exposure_time(g_value_get_double(value), &error);
+ break;
+ case PROP_GAIN:
+ pylon_camera_set_gain(g_value_get_int(value), &error);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
+ return;
}
if (error) {
- if(error->message) {
- g_warning("failed to set property %d: %s", property_id, error->message);
- } else {
- g_warning("failed to set property %d", property_id);
- }
+ if (error->message) {
+ g_warning("failed to set property %d: %s", property_id, error->message);
+ } else {
+ g_warning("failed to set property %d", property_id);
+ }
}
}
@@ -212,6 +217,14 @@ static void uca_pylon_camera_get_property(GObject *object, guint property_id, GV
g_value_set_enum(value, mode);
break;
}
+ case PROP_EXPOSURE_AUTO:
+ {
+ gint enum_value = UCA_CAMERA_EXPOSURE_AUTO_OFF;
+ pylon_camera_get_int_attribute("ExposureAuto", &enum_value, &error);
+ UcaCameraExposureAuto mode = enum_value;
+ g_value_set_enum(value, mode);
+ break;
+ }
case PROP_SENSOR_WIDTH:
pylon_camera_get_sensor_size(&priv->width, &priv->height, &error);
g_value_set_uint(value, priv->width);
@@ -364,7 +377,7 @@ static gboolean uca_pylon_camera_initable_init(GInitable *initable, GCancellable
g_error("no environment variable PYLON_CAMERA_IP found");
}
- pylon_camera_new("/usr/local/lib64", pylon_camera_ip, error);
+ pylon_camera_new(pylon_camera_ip, error);
if (*error != NULL) {
return FALSE;
}
@@ -430,6 +443,12 @@ static void uca_pylon_camera_class_init(UcaPylonCameraClass *klass)
"White balance mode (0: Off, 1: Once, 2: Continuous)",
UCA_TYPE_CAMERA_BALANCE_WHITE_AUTO, UCA_CAMERA_BALANCE_WHITE_OFF,
G_PARAM_READWRITE);
+ pylon_properties[PROP_EXPOSURE_AUTO] =
+ g_param_spec_enum("exposure-auto",
+ "Exposure Auto mode",
+ "Exposure auto mode (0: Off, 1: Once, 2: Continuous)",
+ UCA_TYPE_CAMERA_EXPOSURE_AUTO, UCA_CAMERA_EXPOSURE_AUTO_OFF,
+ G_PARAM_READWRITE);
for (guint id = N_BASE_PROPERTIES; id < N_PROPERTIES; id++)
g_object_class_install_property(gobject_class, id, pylon_properties[id]);
diff --git a/plugins/pylon/uca-pylon-camera.h b/plugins/pylon/uca-pylon-camera.h
index f3d7bb5..621c8da 100644
--- a/plugins/pylon/uca-pylon-camera.h
+++ b/plugins/pylon/uca-pylon-camera.h
@@ -43,6 +43,12 @@ typedef enum {
UCA_CAMERA_BALANCE_WHITE_CONTINUOUSLY
} UcaCameraBalanceWhiteAuto;
+typedef enum {
+ UCA_CAMERA_EXPOSURE_AUTO_OFF,
+ UCA_CAMERA_EXPOSURE_AUTO_ONCE,
+ UCA_CAMERA_EXPOSURE_AUTO_CONTINUOUSLY
+} UcaCameraExposureAuto;
+
typedef struct _UcaPylonCamera UcaPylonCamera;
typedef struct _UcaPylonCameraClass UcaPylonCameraClass;
typedef struct _UcaPylonCameraPrivate UcaPylonCameraPrivate;