ongoing rearrangement: consistency in names and signatures of state functions
[sparrow.git] / gstsparrow.h
blob9294729bbcbfa66eee4ceaf116aea413a2e7780f
1 /* GStreamer
2 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
3 * Copyright (C) <2003> David Schleef <ds@schleef.org>
4 * Copyright (C) <2003> Arwed v. Merkatz <v.merkatz@gmx.net>
5 * Copyright (C) <2006> Mark Nauwelaerts <manauw@skynet.be>
6 * Copyright (C) <2010> Douglas Bagnall <douglas@halo.gen.nz>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
25 #ifndef __GST_VIDEO_SPARROW_H__
26 #define __GST_VIDEO_SPARROW_H__
28 #include <gst/video/gstvideofilter.h>
30 G_BEGIN_DECLS
32 #define SPARROW_PPM_DEBUG 1
35 #include "sparrowconfig.h"
36 #include "dSFMT/dSFMT.h"
37 #include "cv.h"
39 #ifndef UNUSED
40 #define UNUSED __attribute__ ((unused))
41 #else
42 #warning UNUSED is set
43 #endif
45 /* the common recommendation is to default to 'hidden' and specifically mark
46 the unhidden ('default') ones, but this might muck with gstreamer macros,
47 some of which declare functions, and most sparrow functions are static
48 anyway, so it is simpler to whitelist visibility.
50 http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fvisibility-2135
52 (actually, it seems like all functions are invisible or static, except the
53 ones that gstreamer makes in macros).
55 #ifndef INVISIBLE
56 #define INVISIBLE __attribute__ ((visibility("hidden")))
57 #else
58 #warning INVISIBLE is set
59 #endif
62 typedef guint32 pix_t;
63 #define PIXSIZE (sizeof(pix_t))
66 #define CALIBRATE_ON_MIN_T 2
67 #define CALIBRATE_ON_MAX_T 7
68 #define CALIBRATE_OFF_MIN_T 2
69 #define CALIBRATE_OFF_MAX_T 9
70 #define CALIBRATE_PATTERN_L 100
71 #define CALIBRATE_SELF_SIZE 24
73 #define CALIBRATE_MAX_VOTE_ERROR 5
74 #define CALIBRATE_MAX_BEST_ERROR 2
75 #define CALIBRATE_INITIAL_WAIT 72
76 #define CALIBRATE_RETRY_WAIT 16
78 #define CALIBRATE_SIGNAL_THRESHOLD 200
81 #define MAX_CALIBRATE_SHAPES 4
83 #define FAKE_OTHER_PROJECTION 1
85 #define WAIT_COUNTDOWN (MAX(CALIBRATE_OFF_MAX_T, CALIBRATE_ON_MAX_T) + 3)
87 #define GST_TYPE_SPARROW \
88 (gst_sparrow_get_type())
89 #define GST_SPARROW(obj) \
90 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SPARROW,GstSparrow))
91 #define GST_SPARROW_CLASS(klass) \
92 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SPARROW,GstSparrowClass))
93 #define GST_IS_SPARROW(obj) \
94 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SPARROW))
95 #define GST_IS_SPARROW_CLASS(klass) \
96 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SPARROW))
99 #define MAX_CALIBRATION_LAG 12
100 typedef struct lag_times_s {
101 //guint32 hits;
102 guint64 record;
103 } lag_times_t;
105 typedef struct sparrow_format_s {
106 gint32 width;
107 gint32 height;
108 guint32 pixcount;
109 guint32 size;
111 guint32 rshift;
112 guint32 gshift;
113 guint32 bshift;
114 guint32 rmask;
115 guint32 gmask;
116 guint32 bmask;
117 } sparrow_format;
119 enum calibration_shape {
120 NO_SHAPE = 0,
121 VERTICAL_LINE,
122 HORIZONTAL_LINE,
123 FULLSCREEN,
124 RECTANGLE,
127 typedef struct sparrow_shape_s {
128 /*Calibration shape definition -- a rectangle or line.
129 For lines, only one dimension is used.*/
130 enum calibration_shape shape;
131 gint x;
132 gint y;
133 gint w;
134 gint h;
135 } sparrow_shape_t;
137 typedef struct sparrow_calibrate_s {
138 /*calibration state, and shape and pattern definition */
139 gboolean on; /*for calibration pattern */
140 gint wait;
141 guint32 pattern[CALIBRATE_PATTERN_L];
142 guint32 index;
143 guint32 transitions;
144 } sparrow_calibrate_t;
147 typedef struct _GstSparrow GstSparrow;
148 typedef struct _GstSparrowClass GstSparrowClass;
150 typedef enum {
151 SPARROW_STATUS_QUO = 0,
152 SPARROW_INIT,
153 SPARROW_FIND_SELF,
154 SPARROW_WAIT_FOR_GRID,
155 SPARROW_FIND_EDGES,
156 SPARROW_FIND_GRID,
157 SPARROW_PLAY,
158 } sparrow_state;
162 * GstSparrow:
164 * Opaque data structure.
166 struct _GstSparrow
168 GstVideoFilter videofilter;
170 sparrow_format in;
171 sparrow_format out;
172 sparrow_shape_t shapes[MAX_CALIBRATE_SHAPES];
173 sparrow_calibrate_t calibrate;
175 /* properties */
176 gint calibrate_flag; /*whether to calibrate */
178 /* misc */
179 dsfmt_t *dsfmt; /*rng*/
181 /*state */
182 sparrow_state state;
183 sparrow_state next_state;
185 lag_times_t *lag_table;
186 guint64 lag_record;
187 guint32 lag;
189 gint32 countdown; /*intra-state timing*/
191 /*buffer pointers for previous frames */
192 guint8 *in_frame;
193 guint8 *prev_frame;
194 guint8 *work_frame;
195 guint8 *debug_frame;
197 GstBuffer *in_buffer;
198 GstBuffer *prev_buffer;
199 /*don't need work_buffer */
201 IplImage *in_ipl[3];
203 gboolean debug;
205 guint32 rng_seed;
207 guint32 frame_count;
210 struct _GstSparrowClass
212 GstVideoFilterClass parent_class;
215 GType gst_sparrow_get_type(void);
218 GST_DEBUG_CATEGORY_EXTERN (sparrow_debug);
219 #define GST_CAT_DEFAULT sparrow_debug
221 /* GstSparrow signals and args */
222 enum
224 /* FILL ME */
225 LAST_SIGNAL
228 enum
230 PROP_0,
231 PROP_CALIBRATE,
232 PROP_DEBUG,
233 PROP_RNG_SEED
236 #define DEFAULT_PROP_CALIBRATE TRUE
237 #define DEFAULT_PROP_DEBUG FALSE
238 #define DEFAULT_PROP_RNG_SEED -1
244 /* GST_DISABLE_GST_DEBUG is set in gstreamer compilation. If it is set, we
245 need our own debug channel. */
246 #ifdef GST_DISABLE_GST_DEBUG
248 #undef GEST_DEBUG
250 static FILE *_sparrow_bloody_debug_flags = NULL;
251 static void
252 GST_DEBUG(const char *msg, ...){
253 if (! _sparrow_bloody_debug_flags){
254 _sparrow_bloody_debug_flags = fopen("/tmp/sparrow.log", "wb");
255 if (! _sparrow_bloody_debug_flags){
256 exit(1);
259 va_list argp;
260 va_start(argp, msg);
261 vfprintf(_sparrow_bloody_debug_flags, msg, argp);
262 va_end(argp);
263 fflush(_sparrow_bloody_debug_flags);
266 #define GST_ERROR GST_DEBUG
267 #define GST_WARNING GST_DEBUG
268 #define GST_INFO GST_DEBUG
269 #define GST_LOG GST_DEBUG
270 #define GST_FIXME GST_DEBUG
272 #endif
273 #define LOG_LINENO() GST_DEBUG("%-25s line %4d \n", __func__, __LINE__ );
276 G_END_DECLS
277 #endif /* __GST_VIDEO_SPARROW_H__ */