diff options
| author | Matthias Vogelgesang <matthias.vogelgesang@gmail.com> | 2014-10-07 13:58:44 +0200 | 
|---|---|---|
| committer | Matthias Vogelgesang <matthias.vogelgesang@gmail.com> | 2014-10-07 13:58:44 +0200 | 
| commit | f1198fac7cb7e0817fe11cacdc0a314aa45536f2 (patch) | |
| tree | 9f9df906cf7b2155804f2f5107f7c6dc09d15a47 | |
| parent | 0570957a002d6f660a17135cc136a053018035c6 (diff) | |
| parent | efb97e000e66125453f3f07caa74b324a3205a4a (diff) | |
| download | uca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.gz uca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.bz2 uca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.tar.xz uca-f1198fac7cb7e0817fe11cacdc0a314aa45536f2.zip | |
Merge pull request #59 from miq/plugin-pylon-improvements
Plugin pylon improvements
| -rw-r--r-- | plugins/pylon/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | plugins/pylon/changelog.txt | 7 | ||||
| -rw-r--r-- | plugins/pylon/uca-pylon-camera.c | 137 | ||||
| -rw-r--r-- | plugins/pylon/uca-pylon-camera.h | 6 | 
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; | 
