jabcode
 All Classes Files Functions Variables Enumerations Macros
encoder.h
Go to the documentation of this file.
1 
14 #ifndef JABCODE_ENCODER_H
15 #define JABCODE_ENCODER_H
16 
20 static const jab_byte jab_default_palette[] = {0, 0, 0, //0: black
21  0, 0, 255, //1: blue
22  0, 255, 0, //2: green
23  0, 255, 255, //3: cyan
24  255, 0, 0, //4: red
25  255, 0, 255, //5: magenta
26  255, 255, 0, //6: yellow
27  255, 255, 255 //7: white
28  };
29 
33 #define FP0_CORE_COLOR 1
34 #define FP1_CORE_COLOR 2
35 #define FP2_CORE_COLOR 5
36 #define FP3_CORE_COLOR 6
37 
41 #define AP0_CORE_COLOR 0
42 #define AP1_CORE_COLOR 0
43 #define AP2_CORE_COLOR 0
44 #define AP3_CORE_COLOR 0
45 #define APX_CORE_COLOR 7
46 
50 static const jab_byte fp0_core_color_index[] = {0, 0, FP0_CORE_COLOR, 1, 1, 3, 3, 3};
51 static const jab_byte fp1_core_color_index[] = {0, 1, FP1_CORE_COLOR, 2, 6, 12, 12, 28};
52 static const jab_byte fp2_core_color_index[] = {0, 2, FP2_CORE_COLOR, 13, 25, 51, 115, 227};
53 static const jab_byte fp3_core_color_index[] = {0, 3, FP3_CORE_COLOR, 14, 30, 60, 124, 252};
57 static const jab_byte apn_core_color_index[] = {0, 4, AP0_CORE_COLOR, 0, 0, 0, 0, 0};
58 static const jab_byte apx_core_color_index[] = {0, 5, APX_CORE_COLOR, 15, 31, 63, 127, 255};
59 
63 #define FP0 0
64 #define FP1 1
65 #define FP2 2
66 #define FP3 3
67 
71 #define AP0 0
72 #define AP1 1
73 #define AP2 2
74 #define AP3 3
75 #define APX 4
76 
80 typedef struct {
81  jab_int32 dimension;
83  jab_int32 min_x;
84  jab_int32 min_y;
85  jab_int32 rows;
86  jab_int32 cols;
87  jab_int32* row_height;
88  jab_int32* col_width;
89 }jab_code;
90 
94 static const jab_vector2d jab_symbol_pos[MAX_SYMBOL_NUMBER] =
95  { { 0, 0},
96  { 0,-1}, { 0, 1}, {-1, 0}, { 1, 0}, { 0,-2}, {-1,-1}, { 1,-1}, { 0, 2}, {-1, 1}, { 1, 1},
97  {-2, 0}, { 2, 0}, { 0,-3}, {-1,-2}, { 1,-2}, {-2,-1}, { 2,-1}, { 0, 3}, {-1, 2}, { 1, 2},
98  {-2, 1}, { 2, 1}, {-3, 0}, { 3, 0}, { 0,-4}, {-1,-3}, { 1,-3}, {-2,-2}, { 2,-2}, {-3,-1},
99  { 3,-1}, { 0, 4}, {-1, 3}, { 1, 3}, {-2, 2}, { 2, 2}, {-3, 1}, { 3, 1}, {-4, 0}, { 4, 0},
100  { 0,-5}, {-1,-4}, { 1,-4}, {-2,-3}, { 2,-3}, {-3,-2}, { 3,-2}, {-4,-1}, { 4,-1}, { 0, 5},
101  {-1, 4}, { 1, 4}, {-2, 3}, { 2, 3}, {-3, 2}, { 3, 2}, {-4, 1}, { 4, 1}, {-5, 0}, { 5, 0}
102  };
103 
107 static const jab_int32 jab_enconing_table[MAX_SIZE_ENCODING_MODE][JAB_ENCODING_MODES]=
108  {{-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
109  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,16,-1},
110  {-1,-1,-1,-1,17,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-19,-1},{-1,-1,-1,-1,-1,-1},
111  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
112  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
113  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
114  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, { 0, 0, 0,-1,-1, 0}, {-1,-1,-1, 0,-1,-1}, {-1,-1,-1, 1,-1,-1},
115  {-1,-1,-1,-1, 0,-1}, {-1,-1,-1, 2,-1,-1}, {-1,-1,-1, 3,-1,-1}, {-1,-1,-1, 4,-1,-1}, {-1,-1,-1, 5,-1,-1},
116  {-1,-1,-1, 6,-1,-1}, {-1,-1,-1, 7,-1,-1}, {-1,-1,-1,-1, 1,-1}, {-1,-1,-1,-1, 2,-1}, {-1,-1,11, 8,-20,-1},
117  {-1,-1,-1, 9,-1,-1}, {-1,-1,12,10,-21,-1}, {-1,-1,-1,11,-1,-1},{-1,-1, 1,-1,-1, 1}, {-1,-1, 2,-1,-1, 2},
118  {-1,-1, 3,-1,-1, 3}, {-1,-1, 4,-1,-1, 4}, {-1,-1, 5,-1,-1, 5}, {-1,-1, 6,-1,-1, 6}, {-1,-1, 7,-1,-1, 7},
119  {-1,-1, 8,-1,-1, 8}, {-1,-1, 9,-1,-1, 9}, {-1,-1,10,-1,-1,10}, {-1,-1,-1,12,-22,-1}, {-1,-1,-1,13,-1,-1},
120  {-1,-1,-1,-1, 3,-1}, {-1,-1,-1,-1, 4,-1}, {-1,-1,-1,-1, 5,-1}, {-1,-1,-1,14,-1,-1}, {-1,-1,-1,15,-1,-1},
121  { 1,-1,-1,-1,-1,11}, { 2,-1,-1,-1,-1,12}, { 3,-1,-1,-1,-1,13}, { 4,-1,-1,-1,-1,14}, { 5,-1,-1,-1,-1,15},
122  { 6,-1,-1,-1,-1,16}, { 7,-1,-1,-1,-1,17}, { 8,-1,-1,-1,-1,18}, { 9,-1,-1,-1,-1,19}, { 10,-1,-1,-1,-1,20},
123  {11,-1,-1,-1,-1,21}, {12,-1,-1,-1,-1,22}, {13,-1,-1,-1,-1,23}, {14,-1,-1,-1,-1,24}, {15,-1,-1,-1,-1,25},
124  {16,-1,-1,-1,-1,26}, {17,-1,-1,-1,-1,27}, {18,-1,-1,-1,-1,28}, {19,-1,-1,-1,-1,29}, {20,-1,-1,-1,-1,30},
125  {21,-1,-1,-1,-1,31}, {22,-1,-1,-1,-1,32}, {23,-1,-1,-1,-1,33}, {24,-1,-1,-1,-1,34}, {25,-1,-1,-1,-1,35},
126  {26,-1,-1,-1,-1,36}, {-1,-1,-1,-1, 6,-1}, {-1,-1,-1,-1, 7,-1}, {-1,-1,-1,-1, 8,-1}, {-1,-1,-1,-1, 9,-1},
127  {-1,-1,-1,-1,10,-1}, {-1,-1,-1,-1,11,-1}, {-1, 1,-1,-1,-1,37}, {-1, 2,-1,-1,-1,38}, {-1, 3,-1,-1,-1,39},
128  {-1, 4,-1,-1,-1,40}, {-1, 5,-1,-1,-1,41}, {-1, 6,-1,-1,-1,42}, {-1, 7,-1,-1,-1,43}, {-1, 8,-1,-1,-1,44},
129  {-1, 9,-1,-1,-1,45}, {-1,10,-1,-1,-1,46}, {-1,11,-1,-1,-1,47}, {-1,12,-1,-1,-1,48}, {-1,13,-1,-1,-1,49},
130  {-1,14,-1,-1,-1,50}, {-1,15,-1,-1,-1,51}, {-1,16,-1,-1,-1,52}, {-1,17,-1,-1,-1,53}, {-1,18,-1,-1,-1,54},
131  {-1,19,-1,-1,-1,55}, {-1,20,-1,-1,-1,56}, {-1,21,-1,-1,-1,57}, {-1,22,-1,-1,-1,58}, {-1,23,-1,-1,-1,59},
132  {-1,24,-1,-1,-1,60}, {-1,25,-1,-1,-1,61}, {-1,26,-1,-1,-1,62}, {-1,-1,-1,-1,12,-1}, {-1,-1,-1,-1,13,-1},
133  {-1,-1,-1,-1,14,-1}, {-1,-1,-1,-1,15,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
134  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
135  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
136  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
137  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
138  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
139  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
140  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,23,-1},
141  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,24,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
142  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
143  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
144  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
145  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
146  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
147  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,25,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
148  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
149  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
150  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,26,-1},
151  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
152  {-1,-1,-1,-1,27,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,28,-1}, {-1,-1,-1,-1,-1,-1},
153  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,29,-1}, {-1,-1,-1,-1,-1,-1},
154  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
155  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
156  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
157  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,30,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
158  {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,31,-1}, {-1,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1,-1},
159  {-1,-1,-1,-1,-1,-1}};
160 
164 static const jab_int32 latch_shift_to[14][14]=
165  {{0,5,5,ENC_MAX,ENC_MAX,5,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,5,7,ENC_MAX,11},
166  {7,0,5,ENC_MAX,ENC_MAX,5,ENC_MAX,5,ENC_MAX,ENC_MAX,5,7,ENC_MAX,11},
167  {4,6,0,ENC_MAX,ENC_MAX,9,ENC_MAX,6,ENC_MAX,ENC_MAX,4,6,ENC_MAX,10},
168  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,ENC_MAX,ENC_MAX,0,ENC_MAX},
169  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,ENC_MAX,ENC_MAX,0,ENC_MAX},
170  {8,13,13,ENC_MAX,ENC_MAX,0,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,8,8,ENC_MAX,12},
171  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,0,ENC_MAX,ENC_MAX,0,0},
172  {0,5,5,ENC_MAX,ENC_MAX,5,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,5,7,ENC_MAX,11},
173  {7,0,5,ENC_MAX,ENC_MAX,5,ENC_MAX,5,ENC_MAX,ENC_MAX,5,7,ENC_MAX,11},
174  {4,6,0,ENC_MAX,ENC_MAX,9,ENC_MAX,6,ENC_MAX,ENC_MAX,4,6,ENC_MAX,10},
175  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,ENC_MAX,ENC_MAX,0,ENC_MAX},
176  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,ENC_MAX,ENC_MAX,0,ENC_MAX},
177  {8,13,13,ENC_MAX,ENC_MAX,0,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,8,8,ENC_MAX,12},
178  {ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,ENC_MAX,0,0,0,0,ENC_MAX,ENC_MAX,0,0}};//First latch then shift
179 
180 //Encoding is based on following mode order:
181 //1.upper, 2.lower, 3.numeric, 4.punct, 5.mixed, 6.alphanumeric, 7.byte
185 static const jab_int32 character_size[7]={5,5,4,4,5,6,8};
186 
190 //first latch followed by shift to and the last two are ECI and FNC1
191 static const jab_int32 mode_switch[7][16]=
192  {{-1,28,29,-1,-1,30,-1,-1,-1,-1,27,125,-1,124,126,-1}, //from upper case mode to all other modes; -1 indicates not possible mode switch
193  {126,-1,29,-1,-1,30,-1,28,-1,127,27,125,-1,124,-1,127}, //lower case mode
194  {14,63,-1,-1,-1,478,-1,62,-1,-1,13,61,-1,60,-1,-1}, //numeric mode
195  {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, //punctuation mode
196  {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, //mixed mode
197  {255,8188,8189,-1,-1,-1,-1,-1,-1,-1,254,253,-1,252,-1,-1}, //alphanumeric
198  {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}}; //byte mode
199 
200 
204 static const jab_float ecclevel2coderate[11] = {0.55f, 0.63f, 0.57f, 0.55f, 0.50f, 0.43f, 0.34f, 0.25f, 0.20f, 0.17f, 0.14f};
205 
209 static const jab_int32 ecclevel2wcwr[11][2] = {{4, 9}, {3, 8}, {3, 7}, {4, 9}, {3, 6}, {4, 7}, {4, 6}, {3, 4}, {4, 5}, {5, 6}, {6, 7}};
210 
211 
212 extern void interleaveData(jab_data* data);
213 extern jab_int32 maskCode(jab_encode* enc, jab_code* cp);
214 extern void maskSymbols(jab_encode* enc, jab_int32 mask_type, jab_int32* masked, jab_code* cp);
215 extern void getNextMetadataModuleInMaster(jab_int32 matrix_height, jab_int32 matrix_width, jab_int32 next_module_count, jab_int32* x, jab_int32* y);
216 
217 #endif
jab_vector2d code_size
Code size in symbol.
Definition: encoder.h:82
void getNextMetadataModuleInMaster(jab_int32 matrix_height, jab_int32 matrix_width, jab_int32 next_module_count, jab_int32 *x, jab_int32 *y)
Get the coordinate of the next metadata module in master symbol.
Definition: decoder.c:755
#define FP0_CORE_COLOR
Finder pattern core color index in default palette.
Definition: encoder.h:33
Code parameters.
Definition: encoder.h:80
#define AP0_CORE_COLOR
Alignment pattern core color index in default palette.
Definition: encoder.h:41
void interleaveData(jab_data *data)
In-place interleaving.
Definition: interleave.c:26
Data structure.
Definition: jabcode.h:87
void maskSymbols(jab_encode *enc, jab_int32 mask_type, jab_int32 *masked, jab_code *cp)
Mask the data modules in symbols.
Definition: mask.c:289
2-dimensional integer vector
Definition: jabcode.h:71
Encode parameters.
Definition: jabcode.h:122
jab_int32 maskCode(jab_encode *enc, jab_code *cp)
Mask modules.
Definition: mask.c:363
jab_int32 dimension
Module size in pixel.
Definition: encoder.h:81