diff options
| author | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2012-03-02 17:29:30 +0100 | 
|---|---|---|
| committer | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2012-03-02 17:29:30 +0100 | 
| commit | 5ce0955086c2360d5f5346270759fb7d96cc4a70 (patch) | |
| tree | ba8c47a827a3b1077443200dbcd97233ca88b781 | |
| parent | a8436e9b42a1b5a2b30b13a13496539fc23f480e (diff) | |
| download | libuca-5ce0955086c2360d5f5346270759fb7d96cc4a70.tar.gz libuca-5ce0955086c2360d5f5346270759fb7d96cc4a70.tar.bz2 libuca-5ce0955086c2360d5f5346270759fb7d96cc4a70.tar.xz libuca-5ce0955086c2360d5f5346270759fb7d96cc4a70.zip | |
Make available binnings mandatory
| -rw-r--r-- | src/cameras/uca-mock-camera.c | 62 | ||||
| -rw-r--r-- | src/uca-camera.c | 40 | 
2 files changed, 100 insertions, 2 deletions
| diff --git a/src/cameras/uca-mock-camera.c b/src/cameras/uca-mock-camera.c index 12ba070..0803ec0 100644 --- a/src/cameras/uca-mock-camera.c +++ b/src/cameras/uca-mock-camera.c @@ -27,21 +27,39 @@ enum {      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_HAS_STREAMING, +    PROP_HAS_CAMRAM_RECORDING,      N_INTERFACE_PROPERTIES, +    PROP_FRAMERATE,      N_PROPERTIES  };  static const gchar *mock_overrideables[N_PROPERTIES] = {      "sensor-width",      "sensor-height", -    "sensor-bitdepth" +    "sensor-bitdepth", +    "sensor-horizontal-binning", +    "sensor-horizontal-binnings", +    "sensor-vertical-binning", +    "sensor-vertical-binnings", +    "has-streaming", +    "has-camram-recording"  }; +static GParamSpec *mock_properties[N_PROPERTIES - N_INTERFACE_PROPERTIES - 1] = { NULL, }; +  struct _UcaMockCameraPrivate {      guint width;      guint height; +    guint framerate;      guint16 *dummy_data; + +    GValueArray *binnings;  };  UcaMockCamera *uca_mock_camera_new(GError **error) @@ -58,7 +76,6 @@ static void uca_mock_camera_start_recording(UcaCamera *camera, GError **error)  static void uca_mock_camera_stop_recording(UcaCamera *camera, GError **error)  {      g_return_if_fail(UCA_IS_MOCK_CAMERA(camera)); -    UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(camera);  }  static void uca_mock_camera_grab(UcaCamera *camera, gchar *data, GError **error) @@ -73,6 +90,9 @@ static void uca_mock_camera_set_property(GObject *object, guint property_id, con      UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(object);      switch (property_id) { +        case PROP_FRAMERATE: +            priv->framerate = g_value_get_uint(value); +            break;          default:              G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);              break; @@ -93,6 +113,27 @@ static void uca_mock_camera_get_property(GObject *object, guint property_id, GVa          case PROP_SENSOR_BITDEPTH:              g_value_set_uint(value, 8);              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_HAS_STREAMING: +            g_value_set_boolean(value, TRUE); +            break; +        case PROP_HAS_CAMRAM_RECORDING: +            g_value_set_boolean(value, FALSE); +            break; +        case PROP_FRAMERATE: +            g_value_set_uint(value, priv->framerate); +            break;          default:              G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);              break; @@ -104,6 +145,7 @@ static void uca_mock_camera_finalize(GObject *object)      UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(object);      g_free(priv->dummy_data); +    g_value_array_free(priv->binnings);      G_OBJECT_CLASS(uca_mock_camera_parent_class)->finalize(object);  } @@ -123,6 +165,16 @@ static void uca_mock_camera_class_init(UcaMockCameraClass *klass)      for (guint id = PROP_0 + 1; id < N_INTERFACE_PROPERTIES; id++)          g_object_class_override_property(gobject_class, id, mock_overrideables[id-1]); +    mock_properties[PROP_FRAMERATE] =  +        g_param_spec_uint("framerate", +                "Framerate", +                "Number of frames per second that are taken", +                1, 30, 25, +                G_PARAM_READWRITE); + +    for (guint id = N_INTERFACE_PROPERTIES + 1; id < N_PROPERTIES; id++) +        g_object_class_install_property(gobject_class, id, mock_properties[id]); +      g_type_class_add_private(klass, sizeof(UcaMockCameraPrivate));  } @@ -132,4 +184,10 @@ static void uca_mock_camera_init(UcaMockCamera *self)      self->priv->width = 640;      self->priv->height = 480;      self->priv->dummy_data = (guint16 *) g_malloc0(self->priv->width * self->priv->height); + +    self->priv->binnings = g_value_array_new(1); +    GValue val = {0}; +    g_value_init(&val, G_TYPE_UINT); +    g_value_set_uint(&val, 1); +    g_value_array_append(self->priv->binnings, &val);  } diff --git a/src/uca-camera.c b/src/uca-camera.c index d8c1a25..85c4140 100644 --- a/src/uca-camera.c +++ b/src/uca-camera.c @@ -38,7 +38,11 @@ enum {      PROP_SENSOR_HEIGHT,      PROP_SENSOR_BITDEPTH,      PROP_SENSOR_HORIZONTAL_BINNING, +    PROP_SENSOR_HORIZONTAL_BINNINGS,      PROP_SENSOR_VERTICAL_BINNING, +    PROP_SENSOR_VERTICAL_BINNINGS, +    PROP_HAS_STREAMING, +    PROP_HAS_CAMRAM_RECORDING,      N_PROPERTIES  }; @@ -50,10 +54,12 @@ static GParamSpec *uca_camera_properties[N_PROPERTIES] = { NULL, };  static void uca_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)  { +    G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);  }  static void uca_camera_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)  { +    G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);  }  static void uca_camera_class_init(UcaCameraClass *klass) @@ -94,6 +100,17 @@ static void uca_camera_class_init(UcaCameraClass *klass)              1, G_MAXUINT, 1,              G_PARAM_READWRITE); +    uca_camera_properties[PROP_SENSOR_HORIZONTAL_BINNINGS] =  +        g_param_spec_value_array("sensor-horizontal-binnings", +            "Array of possible binnings", +            "Array of possible binnings in horizontal direction", +            g_param_spec_uint( +                "sensor-horizontal-binning",  +                "Number of ADCs",  +                "Number of ADCs that make up one pixel", +                1, G_MAXUINT, 1, +                G_PARAM_READABLE), G_PARAM_READABLE); +      uca_camera_properties[PROP_SENSOR_VERTICAL_BINNING] =           g_param_spec_uint("sensor-vertical-binning",              "Vertical binning", @@ -101,6 +118,29 @@ static void uca_camera_class_init(UcaCameraClass *klass)              1, G_MAXUINT, 1,              G_PARAM_READWRITE); +    uca_camera_properties[PROP_SENSOR_VERTICAL_BINNINGS] =  +        g_param_spec_value_array("sensor-vertical-binnings", +            "Array of possible binnings", +            "Array of possible binnings in vertical direction", +            g_param_spec_uint( +                "sensor-vertical-binning",  +                "Number of ADCs",  +                "Number of ADCs that make up one pixel", +                1, G_MAXUINT, 1, +                G_PARAM_READABLE), G_PARAM_READABLE); + +    uca_camera_properties[PROP_HAS_STREAMING] =  +        g_param_spec_boolean("has-streaming", +            "Streaming capability", +            "Is the camera able to stream the data", +            TRUE, G_PARAM_READABLE); + +    uca_camera_properties[PROP_HAS_CAMRAM_RECORDING] =  +        g_param_spec_boolean("has-camram-recording", +            "Cam-RAM capability", +            "Is the camera able to record the data in-camera", +            FALSE, G_PARAM_READABLE); +      for (guint id = PROP_0 + 1; id < N_PROPERTIES; id++)          g_object_class_install_property(gobject_class, id, uca_camera_properties[id]); | 
