summaryrefslogtreecommitdiffstats
path: root/src/uca-camera.c
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2012-03-02 10:31:40 +0100
committerMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2012-03-02 10:31:40 +0100
commita8436e9b42a1b5a2b30b13a13496539fc23f480e (patch)
treeb757c3a60b00ea3affd0ba10a92d9457194e4121 /src/uca-camera.c
parente26a093b4036083f13265bcbde5eae442d502377 (diff)
downloadlibuca-a8436e9b42a1b5a2b30b13a13496539fc23f480e.tar.gz
libuca-a8436e9b42a1b5a2b30b13a13496539fc23f480e.tar.bz2
libuca-a8436e9b42a1b5a2b30b13a13496539fc23f480e.tar.xz
libuca-a8436e9b42a1b5a2b30b13a13496539fc23f480e.zip
Make UcaCamera a base class not an interface
Diffstat (limited to 'src/uca-camera.c')
-rw-r--r--src/uca-camera.c88
1 files changed, 72 insertions, 16 deletions
diff --git a/src/uca-camera.c b/src/uca-camera.c
index cb7890b..d8c1a25 100644
--- a/src/uca-camera.c
+++ b/src/uca-camera.c
@@ -18,7 +18,19 @@
#include <glib.h>
#include "uca-camera.h"
-G_DEFINE_INTERFACE(UcaCamera, uca_camera, G_TYPE_OBJECT)
+#define UCA_CAMERA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), UCA_TYPE_CAMERA, UcaCameraPrivate))
+
+G_DEFINE_TYPE(UcaCamera, uca_camera, G_TYPE_OBJECT)
+
+/**
+ * UcaCameraError:
+ * @UCA_CAMERA_ERROR_RECORDING: Camera is already recording
+ * @UCA_CAMERA_ERROR_NOT_RECORDING: Camera is not recording
+ */
+GQuark uca_camera_error_quark()
+{
+ return g_quark_from_static_string("uca-camera-error-quark");
+}
enum {
PROP_0 = 0,
@@ -30,10 +42,26 @@ enum {
N_PROPERTIES
};
+struct _UcaCameraPrivate {
+ gboolean recording;
+};
+
static GParamSpec *uca_camera_properties[N_PROPERTIES] = { NULL, };
-static void uca_camera_default_init(UcaCameraInterface *klass)
+static void uca_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
+{
+}
+
+static void uca_camera_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
+{
+}
+
+static void uca_camera_class_init(UcaCameraClass *klass)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ gobject_class->set_property = uca_camera_set_property;
+ gobject_class->get_property = uca_camera_get_property;
+
klass->start_recording = NULL;
klass->stop_recording = NULL;
klass->grab = NULL;
@@ -73,43 +101,71 @@ static void uca_camera_default_init(UcaCameraInterface *klass)
1, G_MAXUINT, 1,
G_PARAM_READWRITE);
- for (int i = PROP_0 + 1; i < N_PROPERTIES; i++)
- g_object_interface_install_property(klass, uca_camera_properties[i]);
+ for (guint id = PROP_0 + 1; id < N_PROPERTIES; id++)
+ g_object_class_install_property(gobject_class, id, uca_camera_properties[id]);
+
+ g_type_class_add_private(klass, sizeof(UcaCameraPrivate));
+}
+
+static void uca_camera_init(UcaCamera *camera)
+{
+ camera->priv = UCA_CAMERA_GET_PRIVATE(camera);
+ camera->priv->recording = FALSE;
}
void uca_camera_start_recording(UcaCamera *camera, GError **error)
{
g_return_if_fail(UCA_IS_CAMERA(camera));
- UcaCameraInterface *iface = UCA_CAMERA_GET_INTERFACE(camera);
+ UcaCameraClass *klass = UCA_CAMERA_GET_CLASS(camera);
+
+ g_return_if_fail(klass != NULL);
+ g_return_if_fail(klass->start_recording != NULL);
- g_return_if_fail(iface != NULL);
- g_return_if_fail(iface->start_recording != NULL);
+ if (camera->priv->recording) {
+ g_set_error(error, UCA_CAMERA_ERROR, UCA_CAMERA_ERROR_RECORDING,
+ "Camera is already recording");
+ return;
+ }
- (*iface->start_recording)(camera, error);
+ camera->priv->recording = TRUE;
+ (*klass->start_recording)(camera, error);
}
void uca_camera_stop_recording(UcaCamera *camera, GError **error)
{
g_return_if_fail(UCA_IS_CAMERA(camera));
- UcaCameraInterface *iface = UCA_CAMERA_GET_INTERFACE(camera);
+ UcaCameraClass *klass = UCA_CAMERA_GET_CLASS(camera);
- g_return_if_fail(iface != NULL);
- g_return_if_fail(iface->start_recording != NULL);
+ g_return_if_fail(klass != NULL);
+ g_return_if_fail(klass->stop_recording != NULL);
- (*iface->stop_recording)(camera, error);
+ if (!camera->priv->recording) {
+ g_set_error(error, UCA_CAMERA_ERROR, UCA_CAMERA_ERROR_NOT_RECORDING,
+ "Camera is not recording");
+ return;
+ }
+
+ camera->priv->recording = FALSE;
+ (*klass->stop_recording)(camera, error);
}
void uca_camera_grab(UcaCamera *camera, gchar *data, GError **error)
{
g_return_if_fail(UCA_IS_CAMERA(camera));
- UcaCameraInterface *iface = UCA_CAMERA_GET_INTERFACE(camera);
+ UcaCameraClass *klass = UCA_CAMERA_GET_CLASS(camera);
+
+ g_return_if_fail(klass != NULL);
+ g_return_if_fail(klass->grab != NULL);
- g_return_if_fail(iface != NULL);
- g_return_if_fail(iface->start_recording != NULL);
+ if (!camera->priv->recording) {
+ g_set_error(error, UCA_CAMERA_ERROR, UCA_CAMERA_ERROR_NOT_RECORDING,
+ "Camera is not recording");
+ return;
+ }
- (*iface->grab)(camera, data, error);
+ (*klass->grab)(camera, data, error);
}