1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/* 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 */
#include "uca-camera.h"
#include "uca-mock-camera.h"
#define UCA_MOCK_CAMERA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), UCA_TYPE_MOCK_CAMERA, UcaMockCameraPrivate))
static void uca_mock_camera_interface_init(UcaCameraInterface *iface);
G_DEFINE_TYPE_WITH_CODE(UcaMockCamera, uca_mock_camera, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE(UCA_TYPE_CAMERA,
uca_mock_camera_interface_init));
enum {
PROP_0,
PROP_SENSOR_WIDTH,
PROP_SENSOR_HEIGHT,
N_INTERFACE_PROPERTIES,
N_PROPERTIES
};
static const gchar *mock_overrideables[N_PROPERTIES] = {
"sensor-width",
"sensor-height"
};
struct _UcaMockCameraPrivate {
guint width;
guint height;
guint16 *dummy_data;
};
static void uca_mock_camera_start_recording(UcaCamera *camera, GError **error)
{
g_return_if_fail(UCA_IS_MOCK_CAMERA(camera));
g_print("start recording\n");
}
static void uca_mock_camera_stop_recording(UcaCamera *camera, GError **error)
{
g_return_if_fail(UCA_IS_MOCK_CAMERA(camera));
g_print("stop recording\n");
}
static void uca_mock_camera_grab(UcaCamera *camera, gchar *data, GError **error)
{
g_return_if_fail(UCA_IS_MOCK_CAMERA(camera));
/* g_memmove(data, camera->priv->dummy_data, camera->priv->width * camera->priv->height * 2); */
}
static void uca_mock_camera_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(object);
switch (property_id) {
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
}
}
static void uca_mock_camera_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
{
UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(object);
switch (property_id) {
case PROP_SENSOR_WIDTH:
g_value_set_uint(value, 1024);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
}
}
static void uca_mock_camera_finalize(GObject *object)
{
UcaMockCameraPrivate *priv = UCA_MOCK_CAMERA_GET_PRIVATE(object);
g_free(priv->dummy_data);
G_OBJECT_CLASS(uca_mock_camera_parent_class)->finalize(object);
}
static void uca_mock_camera_interface_init(UcaCameraInterface *iface)
{
iface->start_recording = uca_mock_camera_start_recording;
iface->stop_recording = uca_mock_camera_stop_recording;
iface->grab = uca_mock_camera_grab;
}
static void uca_mock_camera_class_init(UcaMockCameraClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
gobject_class->set_property = uca_mock_camera_set_property;
gobject_class->get_property = uca_mock_camera_get_property;
gobject_class->finalize = uca_mock_camera_finalize;
for (guint id = PROP_0 + 1; id < N_INTERFACE_PROPERTIES; id++)
g_object_class_override_property(gobject_class, id, mock_overrideables[id-1]);
g_type_class_add_private(klass, sizeof(UcaMockCameraPrivate));
}
static void uca_mock_camera_init(UcaMockCamera *self)
{
self->priv = UCA_MOCK_CAMERA_GET_PRIVATE(self);
self->priv->width = 1024;
self->priv->height = 768;
self->priv->dummy_data = (guint16 *) g_malloc0(self->priv->width * self->priv->height * 2);
}
|