summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMihael Koep <koep@schneide.com>2015-08-06 12:44:54 +0200
committerMihael Koep <koep@schneide.com>2015-08-06 13:01:11 +0200
commit89ced9478f200facde423423df8c1718752f8a6c (patch)
tree61d9ea2b56590a884b063a363e2d907ffe9ac3b2
parentf1cb055bdd2cd18ecd09c1f7504c825eb884aaf0 (diff)
downloadlibuca-89ced9478f200facde423423df8c1718752f8a6c.tar.gz
libuca-89ced9478f200facde423423df8c1718752f8a6c.tar.bz2
libuca-89ced9478f200facde423423df8c1718752f8a6c.tar.xz
libuca-89ced9478f200facde423423df8c1718752f8a6c.zip
Remove ANKA plugins and change versioning scheme for bundled plugins
ANKA plugins are developed and distributed separately like other plugins depending on vendor SDKs. The bundled plugins use libuca version as their version and depend on it directly. This ensures that they always match the libuca version and makes versioning more transparent for the end users. Conflicts: plugins/mock/CMakeLists.txt
-rw-r--r--CMakeLists.txt2
-rw-r--r--plugins/CMakeLists.txt4
-rw-r--r--plugins/dexela/CMakeLists.txt30
-rw-r--r--plugins/dexela/changelog.txt26
-rw-r--r--plugins/dexela/software-roi.c12
-rw-r--r--plugins/dexela/software-roi.h18
-rw-r--r--plugins/dexela/uca-dexela-camera.c543
-rw-r--r--plugins/dexela/uca-dexela-camera.h70
-rw-r--r--plugins/file/CMakeLists.txt6
-rw-r--r--plugins/mock/CMakeLists.txt6
-rw-r--r--plugins/package-plugin.sh.in2
-rw-r--r--plugins/pylon/CMakeLists.txt38
-rw-r--r--plugins/pylon/changelog.txt20
-rw-r--r--plugins/pylon/uca-pylon-camera.c483
-rw-r--r--plugins/pylon/uca-pylon-camera.h84
-rw-r--r--test/CMakeLists.txt4
-rw-r--r--test/test-software-roi.c85
17 files changed, 9 insertions, 1424 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 76ccfc0..483a2e1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "http://ufo.kit.edu/ufo/newticket")
set(CPACK_GENERATOR "DEB;RPM")
-set(CPACK_PACKAGE_RELEASE 1)
+set(CPACK_PACKAGE_RELEASE 2)
set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE})
set(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Matthias Vogelgesang <matthias.vogelgesang@kit.edu>")
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 65b0cb0..7029cf7 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -2,11 +2,9 @@ set(UCA_CONFIGDIR "${CMAKE_CURRENT_BINARY_DIR}/../src")
add_subdirectory(mock)
add_subdirectory(file)
-add_subdirectory(pylon)
-add_subdirectory(dexela)
message("-- Building the following plugins:")
-set(_plugins "mock;file;;pylon;dexela")
+set(_plugins "mock;file")
foreach(_target ${_plugins})
if (TARGET "uca${_target}")
diff --git a/plugins/dexela/CMakeLists.txt b/plugins/dexela/CMakeLists.txt
deleted file mode 100644
index d04c2e6..0000000
--- a/plugins/dexela/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-project(ucadexela C)
-set(VERSION "1.4.0")
-
-find_package(DEXELA)
-
-if (DEXELA_FOUND)
- set(UCA_CAMERA_NAME "dexela")
- set(PLUGIN_REVISION "1")
- set(PLUGIN_VERSION ${VERSION})
- set(PLUGIN_SUMMARY "Dexela plugin for libuca")
- set(PLUGIN_CHANGELOG "${CMAKE_CURRENT_SOURCE_DIR}/changelog.txt")
- set(PLUGIN_DESCRIPTION "Plugin for the Dexela 1207 detector.")
- set(PLUGIN_REQUIRES "libuca >= 2.0.0, libdexela >= 1.2.0")
- set(PLUGIN_VENDOR "ANKA Computing Group")
-
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in
- ${CMAKE_CURRENT_BINARY_DIR}/../../package-plugin-${UCA_CAMERA_NAME}.sh)
-
- include_directories(${DEXELA_INCLUDE_DIRS}
- ${UCA_CONFIGDIR})
-
- add_library(ucadexela SHARED uca-dexela-camera.c software-roi.c)
-
- target_link_libraries(ucadexela ${UCA_DEPS} ${DEXELA_LIBRARIES})
-
- install(TARGETS ucadexela
- LIBRARY DESTINATION ${UCA_PLUGINDIR}
- COMPONENT ${UCA_CAMERA_NAME})
-endif()
diff --git a/plugins/dexela/changelog.txt b/plugins/dexela/changelog.txt
deleted file mode 100644
index 7b2d81b..0000000
--- a/plugins/dexela/changelog.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-* Mon May 18 2015 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.4.0-1
-- Update to libuca 2.0.0
-- Report errors opening the detector instead of crashing
-* Tue Mar 17 2015 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.3-1
-- adjust the ROI depending on the binning
-* Wed Oct 8 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.2-2
-- new revision for libuca 1.6.0
-* Tue Sep 16 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.2-1
-- implement sensor pixel width and height properties
-* Tue Sep 16 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.1-1
-- fix software roi for multi-byte images
-* Tue Sep 9 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.0-1
-- add software roi feature
-* Tue Jul 29 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.2.0-1
-- bump plugin version for package management systems
-* Wed Mar 19 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.3-1
-- bump libdexela requirement to 1.1.0
-- use new libdexela API for FMT file
-* Tue Oct 15 2013 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.2-2
-- bump libuca requirement to 1.3.0
-* Wed Mar 27 2013 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.2-1
-- return current width and height as rois
-* Thu Mar 14 2013 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.0-3
-- improve package metadata and build scripts
-* Thu Mar 7 2013 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.0-2
-- add changelog and improve package metadata
diff --git a/plugins/dexela/software-roi.c b/plugins/dexela/software-roi.c
deleted file mode 100644
index 6056dec..0000000
--- a/plugins/dexela/software-roi.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "software-roi.h"
-#include <string.h>
-
-void apply_software_roi(const guchar* src, guint srcWidth, guint bytesPerPixel, guchar* dest, guint x, guint y, guint roiWidth, guint roiHeight)
-{
- for (guint row = 0; row < roiHeight; row++) {
- guint roiWidthInBytes = roiWidth * bytesPerPixel;
- guint rowOffset = srcWidth * bytesPerPixel * (y + row);
- guint offset = rowOffset + x * bytesPerPixel;
- memcpy(dest + row * roiWidthInBytes, src + offset, roiWidthInBytes);
- }
-}
diff --git a/plugins/dexela/software-roi.h b/plugins/dexela/software-roi.h
deleted file mode 100644
index 3fb3b69..0000000
--- a/plugins/dexela/software-roi.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef SOFTWAREROI_H
-#define SOFTWAREROI_H
-#include <glib.h>
-
-/**
- * @brief apply_software_roi Extracts the pixels defined by x, y, roiWidth, roiHeight from
- * the src array and writes them into the dest buffer
- * @param src
- * @param srcWidth
- * @param dest
- * @param x
- * @param y
- * @param roiWidth
- * @param roiHeight
- */
-void apply_software_roi(const guchar* src, guint srcWidth, guint bytesPerPixel, guchar* dest, guint x, guint y, guint roiWidth, guint roiHeight);
-
-#endif // SOFTWAREROI_H
diff --git a/plugins/dexela/uca-dexela-camera.c b/plugins/dexela/uca-dexela-camera.c
deleted file mode 100644
index 3e22c06..0000000
--- a/plugins/dexela/uca-dexela-camera.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/* Copyright (C) 2011, 2012 Mihael Koep <koep@softwareschneiderei.de>
- (Softwareschneiderei GmbH)
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
-
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along
- with this library; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110, USA */
-
-#include <string.h>
-#include <gio/gio.h>
-#include <gmodule.h>
-#include <math.h>
-#include "uca-dexela-camera.h"
-#include "dexela/dexela_api.h"
-#include "software-roi.h"
-
-#define UCA_DEXELA_CAMERA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), UCA_TYPE_DEXELA_CAMERA, UcaDexelaCameraPrivate))
-
-static void uca_dexela_camera_initable_iface_init (GInitableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (UcaDexelaCamera, uca_dexela_camera, UCA_TYPE_CAMERA,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
- uca_dexela_camera_initable_iface_init))
-/**
- * UcaDexelaCameraError:
- * @UCA_DEXELA_CAMERA_ERROR_LIBDEXELA_INIT: Initializing libdexela failed
- */
-GQuark uca_dexela_camera_error_quark()
-{
- return g_quark_from_static_string("uca-dexela-camera-error-quark");
-}
-
-enum {
- PROP_GAIN_MODE = N_BASE_PROPERTIES,
- PROP_TEST_MODE,
- N_PROPERTIES
-};
-
-static gint base_overrideables[] = {
- PROP_NAME,
- PROP_SENSOR_WIDTH,
- PROP_SENSOR_HEIGHT,
- PROP_SENSOR_PIXEL_WIDTH,
- PROP_SENSOR_PIXEL_HEIGHT,
- PROP_SENSOR_BITDEPTH,
- PROP_SENSOR_HORIZONTAL_BINNING,
- PROP_SENSOR_HORIZONTAL_BINNINGS,
- PROP_SENSOR_VERTICAL_BINNING,
- PROP_SENSOR_VERTICAL_BINNINGS,
- PROP_EXPOSURE_TIME,
- PROP_TRIGGER_SOURCE,
- PROP_ROI_X,
- PROP_ROI_Y,
- PROP_ROI_WIDTH,
- PROP_ROI_HEIGHT,
- PROP_ROI_WIDTH_MULTIPLIER,
- PROP_ROI_HEIGHT_MULTIPLIER,
- PROP_HAS_STREAMING,
- PROP_HAS_CAMRAM_RECORDING,
- 0
-};
-
-static GParamSpec *dexela_properties[N_PROPERTIES] = { NULL, };
-
-static const gdouble MICROS_TO_SECONDS_FACTOR = 1e6d;
-static const gdouble MINIMUM_EXPOSURE_TIME_IN_SECONDS = 0.017d; // 17ms as per documentation
-static const gdouble PIXEL_SIZE = 74.8e-6; // 74.8µm as per data sheet
-
-struct _UcaDexelaCameraPrivate {
- GError* init_error;
-
- GValueArray *binnings;
- guint width;
- guint height;
- guint roi_x;
- guint roi_y;
- guint roi_width;
- guint roi_height;
- guint bits;
- gsize num_bytes;
- UcaCameraTriggerSource uca_trigger_source;
- UcaCameraTriggerType uca_trigger_type;
-};
-
-/**
- * Hardcode possible binnings for now
- */
-static void fill_binnings(UcaDexelaCameraPrivate *priv)
-{
- GValue val = {0};
- g_value_init(&val, G_TYPE_UINT);
-
- priv->binnings = g_value_array_new(3);
- g_value_set_uint(&val, 1);
- g_value_array_append(priv->binnings, &val);
- g_value_set_uint(&val, 2);
- g_value_array_append(priv->binnings, &val);
- g_value_set_uint(&val, 4);
- g_value_array_append(priv->binnings, &val);
-}
-
-static void map_dexela_trigger_mode_to_uca_source(UcaDexelaCameraPrivate *priv, GValue* value, TriggerMode mode)
-{
- if (mode == SOFTWARE) {
- priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_AUTO;
- }
- if (mode == EDGE || mode == DURATION) {
- priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_EXTERNAL;
- }
- g_value_set_enum(value, priv->uca_trigger_source);
-}
-
-static void map_dexela_trigger_mode_to_uca_type(UcaDexelaCameraPrivate *priv, GValue* value, TriggerMode mode)
-{
- if (mode == EDGE) {
- priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_EDGE;
- }
- if (mode == DURATION) {
- priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_LEVEL;
- }
- g_value_set_enum(value, priv->uca_trigger_type);
-}
-
-static void set_triggering(UcaDexelaCameraPrivate *priv, UcaCameraTriggerSource source, UcaCameraTriggerType type)
-{
- priv->uca_trigger_source = source;
- priv->uca_trigger_type = type;
- if (source == UCA_CAMERA_TRIGGER_SOURCE_AUTO) {
- dexela_set_trigger_mode(SOFTWARE);
- return;
- }
- if (source == UCA_CAMERA_TRIGGER_SOURCE_SOFTWARE) {
- dexela_set_trigger_mode(SOFTWARE);
- return;
- }
- if (source == UCA_CAMERA_TRIGGER_SOURCE_EXTERNAL) {
- if (type == UCA_CAMERA_TRIGGER_TYPE_EDGE) {
- dexela_set_trigger_mode(EDGE);
- return;
- }
- if (type == UCA_CAMERA_TRIGGER_TYPE_LEVEL) {
- dexela_set_trigger_mode(DURATION);
- return;
- }
- }
- g_warning("Unsupported uca trigger source and type: %d/%d", source, type);
-}
-
-static gboolean is_binning_allowed(UcaDexelaCameraPrivate *priv, guint binning)
-{
- for (int i = 0; i < priv->binnings->n_values; i++) {
- guint allowedBinning = g_value_get_uint(g_value_array_get_nth(priv->binnings, i));
- if (binning == allowedBinning) {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static guint real_width(UcaDexelaCameraPrivate *priv)
-{
- return priv->width / dexela_get_binning_mode_horizontal();
-}
-
-static guint real_height(UcaDexelaCameraPrivate *priv)
-{
- return priv->height / dexela_get_binning_mode_vertical();
-}
-
-static void adjust_roi_width(UcaDexelaCameraPrivate *priv, guint requested_width)
-{
- guint maxRoiWidth = real_width(priv) - priv->roi_x;
- priv->roi_width = min(maxRoiWidth, requested_width);
-}
-
-static void adjust_roi_height(UcaDexelaCameraPrivate *priv, guint requested_height)
-{
- guint maxRoiHeight = real_height(priv) - priv->roi_y;
- priv->roi_height = min(maxRoiHeight, requested_height);
-}
-
-static void uca_dexela_camera_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
-{
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(object);
-
- switch (property_id) {
- case PROP_NAME:
- {
- gchar* model = dexela_get_model();
- g_value_set_string(value, g_strdup_printf("Dexela %s", model));
- g_free(model);
- break;
- }
- case PROP_EXPOSURE_TIME:
- {
- g_value_set_double(value, dexela_get_exposure_time_micros() / MICROS_TO_SECONDS_FACTOR);
- break;
- }
- case PROP_HAS_CAMRAM_RECORDING:
- {
- g_value_set_boolean(value, FALSE);
- break;
- }
- case PROP_HAS_STREAMING:
- {
- g_value_set_boolean(value, FALSE);
- break;
- }
- case PROP_SENSOR_BITDEPTH:
- {
- g_value_set_uint(value, priv->bits);
- break;
- }
- case PROP_SENSOR_WIDTH:
- {
- g_value_set_uint(value, priv->width);
- break;
- }
- case PROP_SENSOR_HEIGHT:
- {
- g_value_set_uint(value, priv->height);
- break;
- }
- case PROP_SENSOR_PIXEL_WIDTH:
- {
- g_value_set_double(value, PIXEL_SIZE);
- break;
- }
- case PROP_SENSOR_PIXEL_HEIGHT:
- {
- g_value_set_double(value, PIXEL_SIZE);
- break;
- }
- case PROP_ROI_X:
- {
- g_value_set_uint(value, priv->roi_x);
- break;
- }
- case PROP_ROI_Y:
- {
- g_value_set_uint(value, priv->roi_y);
- break;
- }
- case PROP_ROI_WIDTH:
- {
- g_value_set_uint(value, priv->roi_width);
- break;
- }
- case PROP_ROI_HEIGHT:
- {
- g_value_set_uint(value, priv->roi_height);
- break;
- }
- case PROP_SENSOR_HORIZONTAL_BINNING:
- {
- g_value_set_uint(value, dexela_get_binning_mode_horizontal());
- break;
- }
- case PROP_SENSOR_HORIZONTAL_BINNINGS:
- {
- g_value_set_boxed(value, priv->binnings);
- break;
- }
- case PROP_SENSOR_VERTICAL_BINNING:
- {
- g_value_set_uint(value, dexela_get_binning_mode_vertical());
- break;
- }
- case PROP_SENSOR_VERTICAL_BINNINGS:
- {
- g_value_set_boxed(value, priv->binnings);
- break;
- }
- case PROP_GAIN_MODE:
- {
- g_value_set_uint(value, dexela_get_gain());
- break;
- }
- case PROP_TEST_MODE:
- {
- g_value_set_boolean(value, dexela_get_control_register() & 1);
- break;
- }
- case PROP_TRIGGER_SOURCE:
- {
- map_dexela_trigger_mode_to_uca_source(priv, value, dexela_get_trigger_mode());
- break;
- }
- case PROP_TRIGGER_TYPE:
- {
- map_dexela_trigger_mode_to_uca_type(priv, value, dexela_get_trigger_mode());
- break;
- }
- default:
- {
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- break;
- }
- }
-}
-
-static void uca_dexela_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
-{
- g_return_if_fail (UCA_IS_DEXELA_CAMERA (object));
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE (object);
-
- if (uca_camera_is_recording (UCA_CAMERA (object)) && !uca_camera_is_writable_during_acquisition (UCA_CAMERA (object), pspec->name)) {
- g_warning ("Property '%s' cant be changed during acquisition", pspec->name);
- return;
- }
-
- switch (property_id) {
- case PROP_EXPOSURE_TIME:
- {
- const gdouble exposureTimeInSeconds = fmax(MINIMUM_EXPOSURE_TIME_IN_SECONDS, g_value_get_double(value));
- dexela_set_exposure_time_micros((gint) (exposureTimeInSeconds * MICROS_TO_SECONDS_FACTOR));
- break;
- }
- case PROP_ROI_X:
- {
- guint maxRoiX = real_width(priv) - 1;
- guint requestedRoiX = g_value_get_uint(value);
- priv->roi_x = min(maxRoiX, requestedRoiX);
- adjust_roi_width(priv, priv->roi_width);
- break;
- }
- case PROP_ROI_Y:
- {
- guint maxRoiY = real_height(priv) -1;
- guint requestedRoiY = g_value_get_uint(value);
- priv->roi_y = min(maxRoiY, requestedRoiY);
- adjust_roi_height(priv, priv->roi_height);
- break;
- }
- case PROP_ROI_WIDTH:
- {
- adjust_roi_width(priv, g_value_get_uint(value));
- break;
- }
- case PROP_ROI_HEIGHT:
- {
- adjust_roi_height(priv, g_value_get_uint(value));
- break;
- }
- case PROP_SENSOR_HORIZONTAL_BINNING:
- {
- const guint horizontalBinning = g_value_get_uint(value);
- if (!is_binning_allowed(priv, horizontalBinning)) {
- g_warning("Tried to set illegal horizontal binning: %d", horizontalBinning);
- return;
- }
- dexela_set_binning_mode(horizontalBinning, horizontalBinning);
- adjust_roi_width(priv, priv->roi_width);
- break;
- }
- case PROP_SENSOR_VERTICAL_BINNING:
- {
- const guint verticalBinning = g_value_get_uint(value);
- if (!is_binning_allowed(priv, verticalBinning)) {
- g_warning("Tried to set illegal vertical binning: %d", verticalBinning);
- return;
- }
- dexela_set_binning_mode(verticalBinning, verticalBinning);
- adjust_roi_height(priv, priv->roi_height);
- break;
- }
- case PROP_GAIN_MODE:
- {
- const guint gain = g_value_get_uint(value);
- if (gain == 0) {
- dexela_set_gain(LOW);
- return;
- }
- if (gain == 1) {
- dexela_set_gain(HIGH);
- return;
- }
- g_warning("Illegal attempt to set gain: %d", gain);
- break;
- }
- case PROP_TEST_MODE:
- {
- if (g_value_get_boolean(value)) {
- dexela_set_control_register(dexela_get_control_register() | 1);
- return;
- }
- dexela_set_control_register(dexela_get_control_register() & 0xFFFE);
- break;
- }
- case PROP_TRIGGER_SOURCE:
- {
- set_triggering(priv, g_value_get_enum(value), priv->uca_trigger_type);
- break;
- }
- case PROP_TRIGGER_TYPE:
- {
- set_triggering(priv, priv->uca_trigger_source, g_value_get_enum(value));
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- return;
- }
-}
-
-static void uca_dexela_camera_start_recording(UcaCamera *camera, GError **error)
-{
- g_debug("start recording called");
- dexela_start_acquisition();
-}
-
-static void uca_dexela_camera_stop_recording(UcaCamera *camera, GError **error)
-{
- g_debug("stop recording called");
- dexela_stop_acquisition();
-}
-
-static gboolean uca_dexela_camera_grab(UcaCamera *camera, gpointer data, GError **error)
-{
- g_debug("grab called");
- g_return_val_if_fail(UCA_IS_DEXELA_CAMERA(camera), FALSE);
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(camera);
-
- if (priv->uca_trigger_source == UCA_CAMERA_TRIGGER_SOURCE_SOFTWARE) {
- // TODO: wait for a signal from uca_camera_trigger()
- }
- guchar* fullFrame = dexela_grab();
- apply_software_roi(fullFrame, real_width(priv), priv->num_bytes, data, priv->roi_x, priv->roi_y, priv->roi_width, priv->roi_height);
- return TRUE;
-}
-
-static void uca_dexela_camera_finalize(GObject *object)
-{
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(object);
- g_value_array_free(priv->binnings);
-
- G_OBJECT_CLASS(uca_dexela_camera_parent_class)->finalize(object);
-}
-
-static gboolean uca_dexela_camera_initable_init(GInitable *initable, GCancellable *cancellable, GError **error)
-{
- g_return_val_if_fail (UCA_IS_DEXELA_CAMERA (initable), FALSE);
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(initable);
-
- if (cancellable != NULL) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "Cancellable initialization not supported");
- return FALSE;
- }
- if (priv->init_error != NULL) {
- if (error) {
- *error = g_error_copy (priv->init_error);
- }
- return FALSE;
- }
- return TRUE;
-}
-
-static void uca_dexela_camera_initable_iface_init(GInitableIface *iface)
-{
- iface->init = uca_dexela_camera_initable_init;
-}
-
-static void uca_dexela_camera_class_init(UcaDexelaCameraClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
- gobject_class->set_property = uca_dexela_camera_set_property;
- gobject_class->get_property = uca_dexela_camera_get_property;
- gobject_class->finalize = uca_dexela_camera_finalize;
-
- UcaCameraClass *camera_class = UCA_CAMERA_CLASS(klass);
- camera_class->start_recording = uca_dexela_camera_start_recording;
- camera_class->stop_recording = uca_dexela_camera_stop_recording;
- camera_class->grab = uca_dexela_camera_grab;
-
- for (guint i = 0; base_overrideables[i] != 0; i++) {
- g_object_class_override_property(gobject_class, base_overrideables[i], uca_camera_props[base_overrideables[i]]);
- }
- dexela_properties[PROP_GAIN_MODE] =
- g_param_spec_uint("gain-mode",
- "High or Low Full Well",
- "High (1) or Low (0) Full Well",
- 0, 1, 0, G_PARAM_READWRITE);
- dexela_properties[PROP_TEST_MODE] =
- g_param_spec_boolean("test-mode",
- "Enable or disable test mode",
- "Enable (true) or disable (false) test mode",
- FALSE, G_PARAM_READWRITE);
- for (guint id = N_BASE_PROPERTIES; id < N_PROPERTIES; id++) {
- g_object_class_install_property(gobject_class, id, dexela_properties[id]);
- }
- g_type_class_add_private(klass, sizeof(UcaDexelaCameraPrivate));
-}
-
-static gboolean setup_dexela(UcaDexelaCameraPrivate *priv)
-{
- if (!dexela_open_detector(DEFAULT_FMT_FILE_PATH)) {
- g_set_error_literal(&priv->init_error, G_IO_ERROR, G_IO_ERROR_FAILED, "Failed to open dexela detector. Check cable, driver and permissions.");
- return FALSE;
- }
- // TODO implement more error checking
- dexela_init_serial_connection();
- priv->bits = dexela_get_bit_depth();
- priv->width = dexela_get_width();
- priv->height = dexela_get_height();
- priv->roi_x = 0;
- priv->roi_y = 0;
- priv->roi_width = real_width(priv);
- priv->roi_height = real_height(priv);
- priv->num_bytes = 2;
- return TRUE;
-}
-
-static void uca_dexela_camera_init(UcaDexelaCamera *self)
-{
- UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(self);
- self->priv = priv;
- fill_binnings(priv);
- priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_AUTO;
- priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_EDGE;
- setup_dexela(priv);
-}
-
-G_MODULE_EXPORT GType
-uca_camera_get_type (void)
-{
- return UCA_TYPE_DEXELA_CAMERA;
-}
-
-G_MODULE_EXPORT UcaCamera *
-uca_camera_impl_new (GError **error)
-{
- return UCA_CAMERA(uca_dexela_camera_new(error));
-}
diff --git a/plugins/dexela/uca-dexela-camera.h b/plugins/dexela/uca-dexela-camera.h
deleted file mode 100644
index 32d231e..0000000
--- a/plugins/dexela/uca-dexela-camera.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 2011, 2012 Mihael Koep <koep@softwareschneiderei.de>
- (Softwareschneiderei GmbH)
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
-
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along
- with this library; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110, USA */
-
-#ifndef __UCA_DEXELA_CAMERA_H
-#define __UCA_DEXELA_CAMERA_H
-
-#include <glib-object.h>
-#include "uca-camera.h"
-
-G_BEGIN_DECLS
-
-#define UCA_TYPE_DEXELA_CAMERA (uca_dexela_camera_get_type())
-#define UCA_DEXELA_CAMERA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), UCA_TYPE_DEXELA_CAMERA, UcaDexelaCamera))
-#define UCA_IS_DEXELA_CAMERA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), UCA_TYPE_DEXELA_CAMERA))
-#define UCA_DEXELA_CAMERA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), UCA_TYPE_DEXELA_CAMERA, UcaDexelaCameraClass))
-#define UCA_IS_DEXELA_CAMERA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), UCA_TYPE_DEXELA_CAMERA))
-#define UCA_DEXELA_CAMERA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), UCA_TYPE_DEXELA_CAMERA, UcaDexelaCameraClass))
-
-#define UCA_DEXELA_CAMERA_ERROR uca_dexela_camera_error_quark()
-typedef enum {
- UCA_DEXELA_CAMERA_ERROR_LIBPCO_INIT,
-} UcaDexelaCameraError;
-
-typedef struct _UcaDexelaCamera UcaDexelaCamera;
-typedef struct _UcaDexelaCameraClass UcaDexelaCameraClass;
-typedef struct _UcaDexelaCameraPrivate UcaDexelaCameraPrivate;
-
-/**
- * UcaDexelaCamera:
- *
- * Creates #UcaDexelaCamera instances by loading corresponding shared objects. The
- * contents of the #UcaDexelaCamera structure are private and should only be
- * accessed via the provided API.
- */
-struct _UcaDexelaCamera {
- /*< private >*/
- UcaCamera parent;
-
- UcaDexelaCameraPrivate *priv;
-};
-
-/**
- * UcaDexelaCameraClass:
- *
- * #UcaDexelaCamera class
- */
-struct _UcaDexelaCameraClass {
- /*< private >*/
- UcaCameraClass parent;
-};
-
-GType uca_dexela_camera_get_type(void);
-
-G_END_DECLS
-
-#endif
diff --git a/plugins/file/CMakeLists.txt b/plugins/file/CMakeLists.txt
index 41aa81c..ab655fb 100644
--- a/plugins/file/CMakeLists.txt
+++ b/plugins/file/CMakeLists.txt
@@ -5,9 +5,9 @@ find_package(TIFF)
if (TIFF_FOUND)
set(UCA_CAMERA_NAME "file")
- set(PLUGIN_VERSION "0.0.2")
- set(PLUGIN_REVISION "1")
- set(PLUGIN_REQUIRES "libuca >= 2.0.0")
+ set(PLUGIN_VERSION ${UCA_VERSION_STRING})
+ set(PLUGIN_REVISION ${CPACK_PACKAGE_RELEASE})
+ set(PLUGIN_REQUIRES "libuca = ${UCA_VERSION_STRING}")
set(PLUGIN_SUMMARY "File plugin for libuca")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in
diff --git a/plugins/mock/CMakeLists.txt b/plugins/mock/CMakeLists.txt
index eafd180..5cb1067 100644
--- a/plugins/mock/CMakeLists.txt
+++ b/plugins/mock/CMakeLists.txt
@@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 2.6)
project(ucamock C)
set(UCA_CAMERA_NAME "mock")
-set(PLUGIN_VERSION "1.0.2")
-set(PLUGIN_REVISION "1")
-set(PLUGIN_REQUIRES "libuca >= 2.1.0")
+set(PLUGIN_VERSION ${UCA_VERSION_STRING})
+set(PLUGIN_REVISION ${CPACK_PACKAGE_RELEASE})
+set(PLUGIN_REQUIRES "libuca = ${UCA_VERSION_STRING}")
set(PLUGIN_SUMMARY "Mock plugin for libuca")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in
diff --git a/plugins/package-plugin.sh.in b/plugins/package-plugin.sh.in
index 65c401c..23d7b34 100644
--- a/plugins/package-plugin.sh.in
+++ b/plugins/package-plugin.sh.in
@@ -1,5 +1,5 @@
PACKAGE_CHANGELOG="-D CPACK_RPM_CHANGELOG_FILE=${PLUGIN_CHANGELOG}"
-PACKAGE_FILE_NAME="-D CPACK_PACKAGE_FILE_NAME=uca-plugin-${UCA_CAMERA_NAME}-${UCA_VERSION_STRING}-${PLUGIN_VERSION}-${PLUGIN_REVISION}"
+PACKAGE_FILE_NAME="-D CPACK_PACKAGE_FILE_NAME=uca-plugin-${UCA_CAMERA_NAME}-${PLUGIN_VERSION}-${PLUGIN_REVISION}"
PACKAGE_NAME="-D CPACK_PACKAGE_NAME=uca-plugin-${UCA_CAMERA_NAME}"
PACKAGE_DEPENDENCIES="-D CPACK_RPM_PACKAGE_REQUIRES=\"${PLUGIN_REQUIRES}\""
PACKAGE_DESCRIPTION="-D CPACK_RPM_PACKAGE_DESCRIPTION=\"${PLUGIN_DESCRIPTION}\""
diff --git a/plugins/pylon/CMakeLists.txt b/plugins/pylon/CMakeLists.txt
deleted file mode 100644
index e2ace6b..0000000
--- a/plugins/pylon/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-project(ucapylon C)
-set(VERSION "1.4.0")
-
-find_package(Pylon)
-
-if (PYLON_FOUND)
- set(UCA_CAMERA_NAME "pylon")
- set(PLUGIN_REVISION "1")
- set(PLUGIN_VERSION ${VERSION})
- 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 >= 2.0.0, libpyloncam >= 0.5.0")
- set(PLUGIN_VENDOR "ANKA Computing Group")
-
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in
- ${CMAKE_CURRENT_BINARY_DIR}/../../package-plugin-${UCA_CAMERA_NAME}.sh)
-
- include_directories(${LIBPYLONCAM_INCLUDEDIR}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}
- ${UCA_CONFIGDIR})
-
- create_enums(uca-pylon-enums
- ${CMAKE_CURRENT_SOURCE_DIR}/../../src/uca-enums
- uca-pylon-camera.h)
-
- add_library(ucapylon SHARED
- uca-pylon-camera.c
- uca-pylon-enums.c)
-
- target_link_libraries(ucapylon ${UCA_DEPS} ${LIBPYLONCAM_LIBRARIES})
-
- install(TARGETS ucapylon
- LIBRARY DESTINATION ${UCA_PLUGINDIR}
- COMPONENT ${UCA_CAMERA_NAME})
-endif()
diff --git a/plugins/pylon/changelog.txt b/plugins/pylon/changelog.txt
deleted file mode 100644
index ea5e9be..0000000
--- a/plugins/pylon/changelog.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-* Mon May 18 2015 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.4.0-1
-- Update to libuca 2.0.0
-* Wed Oct 8 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.3.0-2
-- new revision for libuca 1.6.0
-* 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
-* Wed Apr 9 2014 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.1.0-1
-- make compatible with current libuca
-* Tue Oct 15 2013 Mihael Koep <mihael.koep@softwareschneiderei.de> 1.0.2-2
-- updated to libuca 1.3.0
-* Tue Apr 23 2013 Vasili Kvockin <vasili.kvockin@softwareschneiderei.de> 1.0.0-1
-- repackaged as part of libuca 1.*
diff --git a/plugins/pylon/uca-pylon-camera.c b/plugins/pylon/uca-pylon-camera.c
deleted file mode 100644
index 0265ade..0000000
--- a/plugins/pylon/uca-pylon-camera.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* Copyright (C) 2012 Volker Kaiser <volker.kaiser@softwareschneiderei>
- (Karlsruhe Institute of Technology)
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
-
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along
- with this library; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110, USA */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <libpyloncam/pylon_camera.h>
-#include <gmodule.h>
-#include <gio/gio.h>
-#include "uca-pylon-camera.h"
-#include "uca-pylon-enums.h"
-
-#define UCA_PYLON_CAMERA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), UCA_TYPE_PYLON_CAMERA, UcaPylonCameraPrivate))
-
-static void uca_pylon_camera_initable_iface_init (GInitableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (UcaPylonCamera, uca_pylon_camera, UCA_TYPE_CAMERA,
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
- uca_pylon_camera_initable_iface_init))
-
-#define PROP_GAIN_MIN 300
-#define PROP_GAIN_MAX 400
-#define PROP_GAIN_DEFAULT PROP_GAIN_MAX
-
-/**
- * UcapylonCameraError:
- * @UCA_PYLON_CAMERA_ERROR_LIBPYLON_INIT: Initializing libpylon failed
- * @UCA_PYLON_CAMERA_ERROR_LIBPYLON_GENERAL: General libpylon error
- * @UCA_PYLON_CAMERA_ERROR_UNSUPPORTED: Camera type is not supported
- * @UCA_PYLON_CAMERA_ERROR_FG_INIT: Framegrabber initialization failed
- * @UCA_PYLON_CAMERA_ERROR_FG_GENERAL: General framegrabber error
- * @UCA_PYLON_CAMERA_ERROR_FG_ACQUISITION: Framegrabber acquisition error
- */
-GQuark uca_pylon_camera_error_quark()
-{
- return g_quark_from_static_string("uca-pylon-camera-error-quark");
-}
-
-enum {
- PROP_ROI_WIDTH_DEFAULT = N_BASE_PROPERTIES,
- PROP_ROI_HEIGHT_DEFAULT,
- PROP_GAIN,
- PROP_BALANCE_WHITE_AUTO,
- PROP_EXPOSURE_AUTO,
- N_PROPERTIES
-};
-
-static gint base_overrideables[] = {
- PROP_NAME,
- PROP_SENSOR_WIDTH,
- PROP_SENSOR_HEIGHT,
- PROP_SENSOR_BITDEPTH,
- PROP_SENSOR_HORIZONTAL_BINNING,
- PROP_SENSOR_HORIZONTAL_BINNINGS,
- PROP_SENSOR_VERTICAL_BINNING,
- PROP_SENSOR_VERTICAL_BINNINGS,
- PROP_TRIGGER_SOURCE,
- PROP_EXPOSURE_TIME,
- PROP_ROI_X,
- PROP_ROI_Y,
- PROP_ROI_WIDTH,
- PROP_ROI_HEIGHT,
- PROP_ROI_WIDTH_MULTIPLIER,
- PROP_ROI_HEIGHT_MULTIPLIER,
- PROP_HAS_STREAMING,
- PROP_HAS_CAMRAM_RECORDING,
- 0
-};
-
-static GParamSpec *pylon_properties[N_PROPERTIES] = { NULL, };
-
-
-struct _UcaPylonCameraPrivate {
- guint bit_depth;
- gsize num_bytes;
-
- guint width;
- guint height;
- guint16 roi_x;
- guint16 roi_y;
- guint16 roi_width;
- guint16 roi_height;
- GValueArray *binnings;
-};
-
-
-static void pylon_get_roi(GObject *object, GError** error)
-{
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(object);
- pylon_camera_get_roi(&priv->roi_x, &priv->roi_y, &priv->roi_width, &priv->roi_height, error);
-}
-
-static void pylon_set_roi(GObject *object, GError** error)
-{
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(object);
- pylon_camera_set_roi(priv->roi_x, priv->roi_y, priv->roi_width, priv->roi_height, error);
-}
-
-static void uca_pylon_camera_start_recording(UcaCamera *camera, GError **error)
-{
- g_return_if_fail(UCA_IS_PYLON_CAMERA(camera));
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(camera);
-
- priv->num_bytes = 2;
- pylon_camera_start_acquision(error);
-}
-
-static void uca_pylon_camera_stop_recording(UcaCamera *camera, GError **error)
-{
- g_return_if_fail(UCA_IS_PYLON_CAMERA(camera));
- pylon_camera_stop_acquision(error);
-}
-
-static gboolean uca_pylon_camera_grab(UcaCamera *camera, gpointer data, GError **error)
-{
- g_return_val_if_fail(UCA_IS_PYLON_CAMERA(camera), FALSE);
-
- pylon_camera_grab(data, error);
- return TRUE;
-}
-
-static void uca_pylon_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
-{
- g_return_if_fail (UCA_IS_PYLON_CAMERA (object));
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE (object);
- GError* error = NULL;
-
- if (uca_camera_is_recording (UCA_CAMERA (object)) && !uca_camera_is_writable_during_acquisition (UCA_CAMERA (object), pspec->name)) {
- g_warning ("Property '%s' cant be changed during acquisition", pspec->name);
- return;
- }
-
- switch (property_id) {
- case PROP_SENSOR_HORIZONTAL_BINNING:
- /* intentional fall-through*/
- case PROP_SENSOR_VERTICAL_BINNING:
- /* intentional fall-through*/
- case PROP_TRIGGER_SOURCE:
- /* this plugin supports AUTO triggering only ATM */
- 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);
- }
- }
-}
-
-static void uca_pylon_camera_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
-{
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(object);
- GError* error = NULL;
-
- switch (property_id) {
- case PROP_BALANCE_WHITE_AUTO:
- {
- gint enum_value = UCA_CAMERA_BALANCE_WHITE_OFF;
- pylon_camera_get_int_attribute("BalanceWhiteAuto", &enum_value, &error);
- UcaCameraBalanceWhiteAuto mode = enum_value;
- 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);
- break;
-
- case PROP_SENSOR_HEIGHT:
- pylon_camera_get_sensor_size(&priv->width, &priv->height, &error);
- g_value_set_uint(value, priv->height);
- break;
-
- case PROP_SENSOR_BITDEPTH:
- pylon_camera_get_bit_depth(&priv->bit_depth, &error);
- g_value_set_uint(value, priv->bit_depth);
- break;
-
- case PROP_SENSOR_HORIZONTAL_BINNING:
- g_value_set_uint(value, 1);
- break;
-
- case PROP_SENSOR_HORIZONTAL_BINNINGS:
- g_value_set_boxed(value, priv->binnings);
- break;
-
- case PROP_SENSOR_VERTICAL_BINNING:
- g_value_set_uint(value, 1);
- break;
-
- case PROP_SENSOR_VERTICAL_BINNINGS:
- g_value_set_boxed(value, priv->binnings);
- break;
-
- case PROP_TRIGGER_SOURCE:
- g_value_set_enum(value, UCA_CAMERA_TRIGGER_SOURCE_AUTO);
- break;
-
- case PROP_HAS_STREAMING:
- g_value_set_boolean(value, FALSE);
- break;
-
- case PROP_HAS_CAMRAM_RECORDING:
- g_value_set_boolean(value, FALSE);
- break;
-
- case PROP_ROI_X:
- {
- pylon_get_roi(object, &error);
- g_value_set_uint(value, priv->roi_x);
- }
- break;
-
- case PROP_ROI_Y:
- {
- pylon_get_roi(object, &error);
- g_value_set_uint(value, priv->roi_y);
- }
- break;
-
- case PROP_ROI_WIDTH:
- {
- pylon_get_roi(object, &error);
- g_value_set_uint(value, priv->roi_width);
- }
- break;
-
- case PROP_ROI_HEIGHT:
- {
- pylon_get_roi(object, &error);
- g_value_set_uint(value, priv->roi_height);
- }
- break;
-
- case PROP_ROI_WIDTH_DEFAULT:
- pylon_camera_get_sensor_size(&priv->width, &priv->height, &error);
- g_value_set_uint(value, priv->width);
- break;
-
- case PROP_ROI_HEIGHT_DEFAULT:
- pylon_camera_get_sensor_size(&priv->width, &priv->height, &error);
- g_value_set_uint(value, priv->height);
- break;
-
- case PROP_GAIN:
- {
- gint gain=0;
- pylon_camera_get_gain(&gain, &error);
- g_value_set_int(value, gain);
- }
- break;
-
- case PROP_ROI_WIDTH_MULTIPLIER:
- g_value_set_uint(value, 1);
- break;
-
- case PROP_ROI_HEIGHT_MULTIPLIER:
- g_value_set_uint(value, 1);
- break;
-
- case PROP_EXPOSURE_TIME:
- {
- gdouble exp_time = 0.0;
- pylon_camera_get_exposure_time(&exp_time, &error);
- g_value_set_double(value, exp_time);
- }
- break;
-
- case PROP_NAME:
- {
- const gchar* name = NULL;
- pylon_camera_get_string_attribute("ModelName", &name, &error);
- g_value_set_string(value, name);
- }
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
- break;
- }
- if (error) {
- if(error->message) {
- g_warning("failed to get property %d: %s", property_id, error->message);
- } else {
- g_warning("failed to get property %d", property_id);
- }
- }
- //g_debug("pylon_get_property end\n");
-}
-
-static void uca_pylon_camera_finalize(GObject *object)
-{
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(object);
- g_value_array_free(priv->binnings);
-
- G_OBJECT_CLASS(uca_pylon_camera_parent_class)->finalize(object);
-}
-
-static gboolean uca_pylon_camera_initable_init(GInitable *initable, GCancellable *cancellable, GError **error)
-{
- g_return_val_if_fail (UCA_IS_PYLON_CAMERA (initable), FALSE);
-
- if (cancellable != NULL) {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- "Cancellable initialization not supported");
- return FALSE;
- }
-
- UcaPylonCameraPrivate *priv = UCA_PYLON_CAMERA_GET_PRIVATE(initable);
-
- gchar* pylon_camera_ip = getenv("PYLON_CAMERA_IP");
- if(!pylon_camera_ip) {
- g_error("no environment variable PYLON_CAMERA_IP found");
- }
-
- pylon_camera_new(pylon_camera_ip, error);
- if (*error != NULL) {
- return FALSE;
- }
-
- pylon_camera_get_sensor_size(&priv->width, &priv->height, error);
- if (*error != NULL) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void uca_pylon_camera_initable_iface_init(GInitableIface *iface)
-{
- iface->init = uca_pylon_camera_initable_init;
-}
-
-
-static void uca_pylon_camera_class_init(UcaPylonCameraClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
- gobject_class->set_property = uca_pylon_camera_set_property;
- gobject_class->get_property = uca_pylon_camera_get_property;
- gobject_class->finalize = uca_pylon_camera_finalize;
-
- UcaCameraClass *camera_class = UCA_CAMERA_CLASS(klass);
- camera_class->start_recording = uca_pylon_camera_start_recording;
- camera_class->stop_recording = uca_pylon_camera_stop_recording;
- camera_class->grab = uca_pylon_camera_grab;
-
- for (guint i = 0; base_overrideables[i] != 0; i++)
- g_object_class_override_property(gobject_class, base_overrideables[i], uca_camera_props[base_overrideables[i]]);
-
- pylon_properties[PROP_NAME] =
- g_param_spec_string("name",
- "Name of the camera",
- "Name of the camera",
- "", G_PARAM_READABLE);
-
- pylon_properties[PROP_ROI_WIDTH_DEFAULT] =
- g_param_spec_uint("roi-width-default",
- "ROI width default value",
- "ROI width default value",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE);
-
- pylon_properties[PROP_ROI_HEIGHT_DEFAULT] =
- g_param_spec_uint("roi-height-default",
- "ROI height default value",
- "ROI height default value",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE);
-
- pylon_properties[PROP_GAIN] =
- g_param_spec_int("gain",
- "gain",
- "gain",
- PROP_GAIN_MIN, PROP_GAIN_MAX, PROP_GAIN_DEFAULT,
- G_PARAM_READWRITE);
- pylon_properties[PROP_BALANCE_WHITE_AUTO] =
- g_param_spec_enum("balance-white-auto",
- "Balance White Auto mode",
- "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]);
-
- g_type_class_add_private(klass, sizeof(UcaPylonCameraPrivate));
-}
-
-static void uca_pylon_camera_init(UcaPylonCamera *self)
-{
-
- self->priv = UCA_PYLON_CAMERA_GET_PRIVATE(self);
-
- /* binnings */
- GValue val = {0};
- g_value_init(&val, G_TYPE_UINT);
- g_value_set_uint(&val, 1);
- self->priv->binnings = g_value_array_new(1);
- g_value_array_append(self->priv->binnings, &val);
-}
-
-G_MODULE_EXPORT GType
-uca_camera_get_type (void)
-{
- return UCA_TYPE_PYLON_CAMERA;
-}
diff --git a/plugins/pylon/uca-pylon-camera.h b/plugins/pylon/uca-pylon-camera.h
deleted file mode 100644
index 621c8da..0000000
--- a/plugins/pylon/uca-pylon-camera.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (C) 2011, 2012 Matthias Vogelgesang <matthias.vogelgesang@kit.edu>
- (Karlsruhe Institute of Technology)
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
-
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License along
- with this library; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110, USA */
-
-#ifndef __UCA_PYLON_CAMERA_H
-#define __UCA_PYLON_CAMERA_H
-
-#include <glib-object.h>
-#include "uca-camera.h"
-
-G_BEGIN_DECLS
-
-#define UCA_TYPE_PYLON_CAMERA (uca_pylon_camera_get_type())
-#define UCA_PYLON_CAMERA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), UCA_TYPE_PYLON_CAMERA, UcaPylonCamera))
-#define UCA_IS_PYLON_CAMERA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), UCA_TYPE_PYLON_CAMERA))
-#define UCA_PYLON_CAMERA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), UFO_TYPE_PYLON_CAMERA, UfoPylonCameraClass))
-#define UCA_IS_PYLON_CAMERA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), UCA_TYPE_PYLON_CAMERA))
-#define UCA_PYLON_CAMERA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), UCA_TYPE_PYLON_CAMERA, UcaPylonCameraClass))
-
-#define UCA_PYLON_CAMERA_ERROR uca_pylon_camera_error_quark()
-typedef enum {
- UCA_PYLON_CAMERA_ERROR_LIBPYLON_INIT,
- UCA_PYLON_CAMERA_ERROR_LIBPYLON_GENERAL,
- UCA_PYLON_CAMERA_ERROR_UNSUPPORTED,
-} UcaPylonCameraError;
-
-typedef enum {
- UCA_CAMERA_BALANCE_WHITE_OFF,
- UCA_CAMERA_BALANCE_WHITE_ONCE,
- 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;
-
-/**
- * UcaPylonCamera:
- *
- * Creates #UcaPylonCamera instances by loading corresponding shared objects. The
- * contents of the #UcaPylonCamera structure are private and should only be
- * accessed via the provided API.
- */
-struct _UcaPylonCamera {
- /*< private >*/
- UcaCamera parent;
-
- UcaPylonCameraPrivate *priv;
-};
-
-/**
- * UcaPylonCameraClass:
- *
- * #UcaPylonCamera class
- */
-struct _UcaPylonCameraClass {
- /*< private >*/
- UcaCameraClass parent;
-};
-
-GType uca_pylon_camera_get_type(void);
-
-G_END_DECLS
-
-#endif
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index afe79ec..0e8cfad 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,14 +1,10 @@
cmake_minimum_required(VERSION 2.6)
-include_directories(${ucadexela_SOURCE_DIR})
-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gtester.xsl
${CMAKE_CURRENT_BINARY_DIR}/gtester.xsl)
add_executable(test-mock test-mock.c)
add_executable(test-ring-buffer test-ring-buffer.c)
-add_executable(test-software-roi test-software-roi.c ${ucadexela_SOURCE_DIR}/software-roi.c)
target_link_libraries(test-mock uca ${UCA_DEPS})
target_link_libraries(test-ring-buffer uca ${UCA_DEPS})
-target_link_libraries(test-software-roi ${UCA_DEPS})
diff --git a/test/test-software-roi.c b/test/test-software-roi.c
deleted file mode 100644
index 08ab742..0000000
--- a/test/test-software-roi.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <glib.h>
-#include "software-roi.h"
-
-static const guchar test_frame[] = {
- 0, 10, 20, 30, 40, 50, 60, 70, 80,
- 0, 11, 21, 31, 41, 51, 61, 71, 81,
- 0, 12, 22, 32, 42, 52, 62, 72, 82,
- 0, 13, 23, 33, 43, 53, 63, 73, 83,
- 0, 14, 24, 34, 44, 54, 64, 74, 84,
-};
-static const guint test_frame_width = 9;
-static guchar test_roi_2x1_5x3[] = {
- 21, 31, 41, 51, 61,
- 22, 32, 42, 52, 62,
- 23, 33, 43, 53, 63,
-};
-
-static const guchar test_frame16bit[] = {
- 0, 0, 10, 10, 20, 20, 30, 30, 40, 40, 50, 50, 60, 60, 70, 70,
- 1, 1, 11, 11, 21, 21, 31, 31, 41, 41, 51, 51, 61, 61, 71, 71,
- 2, 2, 12, 12, 22, 22, 32, 32, 42, 42, 52, 52, 62, 62, 72, 72,
- 3, 3, 13, 13, 23, 23, 33, 33, 43, 43, 53, 53, 63, 63, 73, 73,
- 4, 4, 14, 14, 24, 24, 34, 34, 44, 44, 54, 54, 64, 64, 74, 74,
- 5, 5, 15, 15, 25, 25, 35, 35, 45, 45, 55, 55, 65, 65, 75, 75,
- 6, 6, 16, 16, 26, 26, 36, 36, 46, 46, 56, 56, 66, 66, 76, 76,
-};
-static const guint test_frame16bit_width = 8;
-static guchar test_roi16bit_3x3_5x3[] = {
- 33, 33, 43, 43, 53, 53, 63, 63, 73, 73,
- 34, 34, 44, 44, 54, 54, 64, 64, 74, 74,
- 35, 35, 45, 45, 55, 55, 65, 65, 75, 75,
- 36, 36, 46, 46, 56, 56, 66, 66, 76, 76,
-};
-
-void typical_roi_test(void)
-{
- guint roiX = 2;
- guint roiY = 1;
- guint roiWidth = 5;
- guint roiHeight = 3;
- guint roiSize = roiWidth * roiHeight;
- guchar roiFrame[roiSize];
- apply_software_roi(test_frame, test_frame_width, 1, roiFrame, roiX, roiY, roiWidth, roiHeight);
- for (guint i = 0; i < roiSize; i++) {
- g_assert_cmpint(test_roi_2x1_5x3[i], ==, roiFrame[i]);
- }
-}
-
-void nrows_only_roi_test(void)
-{
- guint roiX = 0;
- guint roiY = 0;
- guint roiWidth = test_frame_width;
- guint roiHeight = 3;
- guint roiSize = roiWidth * roiHeight;
- guchar roiFrame[roiSize];
- apply_software_roi(test_frame, test_frame_width, 1, roiFrame, roiX, roiY, roiWidth, roiHeight);
- for (guint i = 0; i < roiSize; i++) {
- g_assert_cmpint(test_frame[i], ==, roiFrame[i]);
- }
-}
-
-void multibyte_image_test(void)
-{
- guint roiX = 3;
- guint roiY = 3;
- guint roiWidth = 5;
- guint roiHeight = 3;
- guint bytesPerPixel = 2;
- guint roiSize = roiWidth * bytesPerPixel * roiHeight;
- guchar roiFrame[roiSize];
- apply_software_roi(test_frame16bit, test_frame16bit_width, bytesPerPixel, roiFrame, roiX, roiY, roiWidth, roiHeight);
- for (guint i = 0; i < roiSize; i++) {
- g_assert_cmpint(test_roi16bit_3x3_5x3[i], ==, roiFrame[i]);
- }
-}
-
-int main(int argc, char** argv)
-{
- g_test_init(&argc, &argv, NULL);
- g_test_add_func("/software-roi/apply-typical-roi", typical_roi_test);
- g_test_add_func("/software-roi/apply-roi-nrows-only", nrows_only_roi_test);
- g_test_add_func("/software-roi/apply-roi-multibyte-image", multibyte_image_test);
- return g_test_run();
-}