summaryrefslogtreecommitdiffstats
path: root/src/uca-camera.c
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@gmail.com>2012-04-24 17:18:21 +0200
committerMatthias Vogelgesang <matthias.vogelgesang@gmail.com>2012-04-24 17:18:21 +0200
commit4a73ba1bcee84666169dc3acc646fd49b533f715 (patch)
tree3308021b9256e73dc7f80c4363246aa026293c8c /src/uca-camera.c
parent1b5138f0adb94d1500aa5314a7539019c9c1414b (diff)
downloadlibuca-4a73ba1bcee84666169dc3acc646fd49b533f715.tar.gz
libuca-4a73ba1bcee84666169dc3acc646fd49b533f715.tar.bz2
libuca-4a73ba1bcee84666169dc3acc646fd49b533f715.tar.xz
libuca-4a73ba1bcee84666169dc3acc646fd49b533f715.zip
Add trigger mode and trigger method
Diffstat (limited to 'src/uca-camera.c')
-rw-r--r--src/uca-camera.c61
1 files changed, 60 insertions, 1 deletions
diff --git a/src/uca-camera.c b/src/uca-camera.c
index 67951cb..ba7d912 100644
--- a/src/uca-camera.c
+++ b/src/uca-camera.c
@@ -82,6 +82,7 @@ const gchar *uca_camera_props[N_BASE_PROPERTIES] = {
"sensor-vertical-binning",
"sensor-vertical-binnings",
"sensor-max-frame-rate",
+ "trigger-mode",
"exposure-time",
"roi-x",
"roi-y",
@@ -102,7 +103,30 @@ struct _UcaCameraPrivate {
gboolean transfer_async;
};
-/* static guint camera_signals[LAST_SIGNAL] = { 0 }; */
+/**
+ * UcaCameraTrigger:
+ * @UCA_CAMERA_TRIGGER_AUTO: Trigger automatically
+ * @UCA_CAMERA_TRIGGER_EXTERNAL: Trigger from an external source
+ * @UCA_CAMERA_TRIGGER_INTERNAL: Trigger internally from software using
+ * #uca_camera_trigger
+ */
+static GType uca_camera_trigger_get_type(void)
+{
+ static GType camera_trigger_type = 0;
+
+ if (!camera_trigger_type) {
+ static GEnumValue trigger_types[] = {
+ { UCA_CAMERA_TRIGGER_AUTO, "Automatic internal camera trigger", "auto" },
+ { UCA_CAMERA_TRIGGER_EXTERNAL, "External trigger", "external" },
+ { UCA_CAMERA_TRIGGER_INTERNAL, "Internal software trigger", "internal" },
+ { 0, NULL, NULL }
+ };
+
+ camera_trigger_type = g_enum_register_static("UcaCameraTrigger", trigger_types);
+ }
+
+ return camera_trigger_type;
+}
static void uca_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
@@ -219,6 +243,13 @@ static void uca_camera_class_init(UcaCameraClass *klass)
0.0f, G_MAXFLOAT, 1.0f,
G_PARAM_READABLE);
+ camera_properties[PROP_TRIGGER_MODE] =
+ g_param_spec_enum("trigger-mode",
+ "Trigger mode",
+ "Trigger mode",
+ UCA_TYPE_CAMERA_TRIGGER, UCA_CAMERA_TRIGGER_AUTO,
+ G_PARAM_READWRITE);
+
camera_properties[PROP_ROI_X] =
g_param_spec_uint(uca_camera_props[PROP_ROI_X],
"Horizontal coordinate",
@@ -508,6 +539,34 @@ void uca_camera_set_grab_func(UcaCamera *camera, UcaCameraGrabFunc func, gpointe
}
/**
+ * uca_camera_trigger:
+ * @camera: A #UcaCamera object
+ * @error: Location to store a #UcaCameraError error or %NULL
+ *
+ * Trigger from software if supported by camera.
+ *
+ * You must have called uca_camera_start_recording() before, otherwise you will
+ * get a #UCA_CAMERA_ERROR_NOT_RECORDING error.
+ */
+void uca_camera_trigger(UcaCamera *camera, GError **error)
+{
+ g_return_if_fail(UCA_IS_CAMERA(camera));
+
+ UcaCameraClass *klass = UCA_CAMERA_GET_CLASS(camera);
+
+ g_return_if_fail(klass != NULL);
+ g_return_if_fail(klass->trigger != NULL);
+
+ if (!camera->priv->is_recording) {
+ g_set_error(error, UCA_CAMERA_ERROR, UCA_CAMERA_ERROR_NOT_RECORDING,
+ "Camera is not recording");
+ return;
+ }
+
+ (*klass->trigger)(camera, error);
+}
+
+/**
* uca_camera_grab:
* @camera: A #UcaCamera object
* @data: Pointer to pointer to the data. Must not be %NULL.