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>
32 #define GST_TYPE_SPARROW \
33 (gst_sparrow_get_type())
34 #define GST_SPARROW(obj) \
35 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SPARROW,GstSparrow))
36 #define GST_SPARROW_CLASS(klass) \
37 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SPARROW,GstSparrowClass))
38 #define GST_IS_SPARROW(obj) \
39 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SPARROW))
40 #define GST_IS_SPARROW_CLASS(klass) \
41 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SPARROW))
43 /*XXX could be run time option */
44 #define USE_FULL_LUT 1
46 #define SPARROW_PPM_DEBUG 1
48 #define TIMER_LOG_FILE "/tmp/timer.log"
50 #include "sparrowconfig.h"
51 #include "dSFMT/dSFMT.h"
55 #define UNUSED __attribute__ ((unused))
57 #warning UNUSED is set
60 /* the common recommendation for function visibility is to default to 'hidden'
61 and specifically mark the unhidden ('default') ones, but this might muck
62 with gstreamer macros, some of which declare functions, and most sparrow
63 functions are static anyway, so it is simpler to whitelist visibility.
65 http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fvisibility-2135
67 (actually, it seems like all functions are invisible or static, except the
68 ones that gstreamer makes in macros).
71 #define INVISIBLE __attribute__ ((visibility("hidden")))
73 #warning INVISIBLE is set
77 typedef guint32 pix_t
;
78 #define PIXSIZE (sizeof(pix_t))
80 #define SPARROW_N_IPL_IN 3
82 //#define FAKE_OTHER_PROJECTION 1
85 #define LINE_PERIOD 32
86 #define H_LINE_OFFSET (LINE_PERIOD / 2)
87 #define V_LINE_OFFSET (LINE_PERIOD / 2)
91 SPARROW_STATUS_QUO
= 0,
99 SPARROW_NEXT_STATE
/*magical last state: alias for next in sequence */
111 typedef struct sparrow_format_s
{
130 typedef enum sparrow_axis_s
{
136 /* a mesh of these contains the mapping from input to output.
137 stored in a fixed point notation.
139 #define SPARROW_FIXED_POINT 10
141 typedef struct sparrow_map_path_s
{
148 typedef struct sparrow_map_row_s
{
153 sparrow_map_path_t
*points
;
156 typedef struct sparrow_map_s
{
157 sparrow_map_row_t
*rows
;
161 typedef struct sparrow_map_lut_s
{
166 typedef struct sparrow_frame_s
{
170 gint32 successors
[8];
173 typedef struct sparrow_shared_s
{
176 sparrow_frame_t
*index
;
181 typedef struct _GstSparrow GstSparrow
;
182 typedef struct _GstSparrowClass GstSparrowClass
;
187 * Opaque data structure.
191 GstVideoFilter videofilter
;
192 sparrow_shared_t
*shared
; /* images, shared between the vaious instances */
196 /*some calibration modes have big unwieldy structs that attach here */
199 /* properties / command line options */
205 dsfmt_t
*dsfmt
; /*rng*/
209 gint32 countdown
; /*intra-state timing*/
211 guint8
*debug_frame
; /* for constructing debug images */
212 GstBuffer
*in_buffer
;
221 struct timeval timer_start
;
222 struct timeval timer_stop
;
225 /*calibration results */
230 sparrow_map_lut_t
*map_lut
;
231 /*for jpeg decompression*/
232 struct jpeg_decompress_struct
*cinfo
;
236 struct _GstSparrowClass
238 GstVideoFilterClass parent_class
;
241 GType
gst_sparrow_get_type(void);
244 GST_DEBUG_CATEGORY_EXTERN (sparrow_debug
);
245 #define GST_CAT_DEFAULT sparrow_debug
247 /* GstSparrow signals and args */
265 #define DEFAULT_PROP_CALIBRATE TRUE
266 #define DEFAULT_PROP_DEBUG FALSE
267 #define DEFAULT_PROP_TIMER FALSE
268 #define DEFAULT_PROP_RNG_SEED -1
269 #define DEFAULT_PROP_COLOUR SPARROW_GREEN
270 #define DEFAULT_PROP_RELOAD ""
271 #define DEFAULT_PROP_SAVE ""
274 #define QUOTE(x) QUOTE_(x)
276 /*timing utility code */
277 #define TIME_TRANSFORM 1
279 #define TIMER_START(sparrow) do{ \
280 if (sparrow->timer_log){ \
281 if ((sparrow)->timer_start.tv_sec){ \
282 GST_DEBUG("timer already running!\n"); \
285 gettimeofday(&((sparrow)->timer_start), NULL); \
291 TIMER_STOP(GstSparrow
*sparrow
)
293 if (sparrow
->timer_log
){
294 struct timeval
*start
= &(sparrow
->timer_start
);
295 struct timeval
*stop
= &(sparrow
->timer_stop
);
296 if (start
->tv_sec
== 0){
297 GST_DEBUG("the timer isn't running!\n");
300 gettimeofday(stop
, NULL
);
301 guint32 t
= ((stop
->tv_sec
- start
->tv_sec
) * 1000000 +
302 stop
->tv_usec
- start
->tv_usec
);
304 #if SPARROW_NOISY_DEBUG
305 GST_DEBUG("took %u microseconds (%0.5f of a frame)\n",
306 t
, (double)t
* (25.0 / 1000000.0));
309 fprintf(sparrow
->timer_log
, "%d %6d\n", sparrow
->state
, t
);
310 fflush(sparrow
->timer_log
);
311 start
->tv_sec
= 0; /* mark it as unused */
315 /* GST_DISABLE_GST_DEBUG is set in gstreamer compilation. If it is set, we
316 need our own debug channel. */
317 #ifdef GST_DISABLE_GST_DEBUG
321 static FILE *_sparrow_bloody_debug_flags
= NULL
;
323 GST_DEBUG(const char *msg
, ...){
324 if (! _sparrow_bloody_debug_flags
){
325 _sparrow_bloody_debug_flags
= fopen("/tmp/sparrow.log", "wb");
326 if (! _sparrow_bloody_debug_flags
){
332 vfprintf(_sparrow_bloody_debug_flags
, msg
, argp
);
334 fflush(_sparrow_bloody_debug_flags
);
337 #define GST_ERROR GST_DEBUG
338 #define GST_WARNING GST_DEBUG
339 #define GST_INFO GST_DEBUG
340 #define GST_LOG GST_DEBUG
341 #define GST_FIXME GST_DEBUG
344 #define LOG_LINENO() GST_DEBUG("%-25s line %4d \n", __func__, __LINE__ );
348 #endif /* __GST_VIDEO_SPARROW_H__ */