fix a few more int-isms around coord_t
[sparrow.git] / edges.h
blob0b3b4feb2effaea2046099854db834af0fd9d40e
1 #ifndef __SPARROW_EDGES_H__
2 #define __SPARROW_EDGES_H__
4 #define SAFETY_LAG 3;
5 #define SIG_WEIGHT 2
7 /* for discarding outliers */
8 #define OUTLIER_RADIUS 7
9 #define OUTLIER_THRESHOLD (OUTLIER_RADIUS * OUTLIER_RADIUS)
11 #define BAD_PIXEL 0xffff
13 #define FL_DUMPFILE "/tmp/edges.dump"
15 #define COLOUR_QUANT 1
16 #define COLOUR_MASK (0xff >> COLOUR_QUANT)
18 /*XXX should dither */
19 #define QUANTISE_DELTA(d)(((d) + LINE_PERIOD / 2) / LINE_PERIOD)
21 typedef enum corner_status {
22 CORNER_UNUSED,
23 CORNER_PROJECTED,
24 CORNER_EXACT,
25 CORNER_SETTLED,
26 } corner_status_t;
28 typedef enum edges_state {
29 EDGES_FIND_NOISE,
30 EDGES_FIND_LINES,
31 EDGES_FIND_CORNERS,
32 EDGES_WAIT_FOR_PLAY,
34 EDGES_NEXT_STATE,
35 } edges_state_t;
37 #define USE_FLOAT_COORDS 1
39 #if USE_FLOAT_COORDS
40 typedef float coord_t;
41 #else
42 typedef int coord_t;
43 #endif
45 typedef struct sparrow_estimator_s {
46 int x1;
47 int y1;
48 int x2;
49 int y2;
50 int x3;
51 int y3;
52 //int mul; /* estimate: x1,y1 + mul * diff */
53 } sparrow_estimator_t;
55 typedef struct sparrow_corner_s {
56 coord_t x;
57 coord_t y;
58 /*dyr -> dy to next point right
59 dxd ->dx to next point down */
60 coord_t dxr;
61 coord_t dyr;
62 coord_t dxd;
63 coord_t dyd;
64 corner_status_t status;
65 } sparrow_corner_t;
67 typedef struct sparrow_voter_s {
68 coord_t x;
69 coord_t y;
70 guint32 signal;
71 } sparrow_voter_t;
73 typedef struct sparrow_cluster_s {
74 int n;
75 sparrow_voter_t voters[8];
76 } sparrow_cluster_t;
79 typedef union sparrow_signal_s {
80 guint16 v_signal;
81 guint16 h_signal;
82 } sparrow_signal_t;
85 typedef struct sparrow_intersect_s {
86 guint16 lines[2];
87 guint16 signal[2];
88 } sparrow_intersect_t;
90 typedef struct sparrow_line_s {
91 gint offset;
92 sparrow_axis_t dir;
93 gint index;
94 } sparrow_line_t;
96 /*condensed version of <struct sparrow_find_lines_s> for saving: contains no
97 pointers or other unnecessary things that might vary in size across
98 architectures. */
99 typedef struct sparrow_fl_condensed {
100 gint32 n_vlines;
101 gint32 n_hlines;
102 } sparrow_fl_condensed_t;
104 typedef struct sparrow_find_lines_s {
105 sparrow_line_t *h_lines;
106 sparrow_line_t *v_lines;
107 sparrow_line_t **shuffled_lines;
108 int current;
109 int n_lines;
110 int n_vlines;
111 int n_hlines;
112 gint shift1;
113 gint shift2;
114 sparrow_intersect_t *map;
115 sparrow_corner_t *mesh;
116 sparrow_cluster_t *clusters;
117 IplImage *debug;
118 IplImage *threshold;
119 IplImage *working;
120 IplImage *input;
121 edges_state_t state;
122 } sparrow_find_lines_t;
125 #define DEBUG_FIND_LINES(fl)GST_DEBUG( \
126 "fl:\n" \
127 " sparrow_line_t *h_lines: %p\n" \
128 " sparrow_line_t *v_lines: %p\n" \
129 " sparrow_line_t **shuffled_lines: %p\n" \
130 " int current: %d\n" \
131 " int n_lines: %d\n" \
132 " int n_vlines: %d\n" \
133 " int n_hlines: %d\n" \
134 " gint shift1: %d\n" \
135 " gint shift2: %d\n" \
136 " sparrow_intersect_t *map: %p\n" \
137 " sparrow_corner_t *mesh: %p\n" \
138 " sparrow_cluster_t *clusters: %p\n" \
139 " IplImage *debug: %p\n" \
140 " IplImage *threshold: %p\n" \
141 " IplImage *working: %p\n" \
142 " IplImage *input: %p\n" \
143 " edges_state_t state: %d\n" \
145 (fl)->h_lines, \
146 (fl)->v_lines, \
147 (fl)->shuffled_lines, \
148 (fl)->current, \
149 (fl)->n_lines, \
150 (fl)->n_vlines, \
151 (fl)->n_hlines, \
152 (fl)->shift1, \
153 (fl)->shift2, \
154 (fl)->map, \
155 (fl)->mesh, \
156 (fl)->clusters, \
157 (fl)->debug, \
158 (fl)->threshold, \
159 (fl)->working, \
160 (fl)->input, \
161 (fl)->state \
163 //#undef debug_find_lines
164 //#define debug_find_lines(x) /* */
167 #endif /*have this .h*/