blob: 2659c8790e77886e0c7fc638b12bd4004490c999
1 | /* |
2 | * Copyright (c) 2017 Gerion Entrup |
3 | * |
4 | * This file is part of FFmpeg. |
5 | * |
6 | * FFmpeg is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by |
8 | * the Free Software Foundation; either version 2 of the License, or |
9 | * (at your option) any later version. |
10 | * |
11 | * FFmpeg is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | * GNU General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU General Public License along |
17 | * with FFmpeg; if not, write to the Free Software Foundation, Inc., |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
19 | */ |
20 | |
21 | /** |
22 | * @file |
23 | * MPEG-7 video signature calculation and lookup filter |
24 | */ |
25 | |
26 | #ifndef AVFILTER_SIGNATURE_H |
27 | #define AVFILTER_SIGNATURE_H |
28 | |
29 | #include <float.h> |
30 | #include "libavutil/common.h" |
31 | #include "libavutil/opt.h" |
32 | #include "libavutil/timestamp.h" |
33 | #include "avfilter.h" |
34 | #include "internal.h" |
35 | |
36 | #define ELEMENT_COUNT 10 |
37 | #define SIGELEM_SIZE 380 |
38 | #define DIFFELEM_SIZE 348 /* SIGELEM_SIZE - elem_a1 - elem_a2 */ |
39 | #define COARSE_SIZE 90 |
40 | |
41 | enum lookup_mode { |
42 | MODE_OFF, |
43 | MODE_FULL, |
44 | MODE_FAST, |
45 | NB_LOOKUP_MODE |
46 | }; |
47 | |
48 | enum formats { |
49 | FORMAT_BINARY, |
50 | FORMAT_XML, |
51 | NB_FORMATS |
52 | }; |
53 | |
54 | typedef struct { |
55 | uint8_t x; |
56 | uint8_t y; |
57 | } Point; |
58 | |
59 | typedef struct { |
60 | Point up; |
61 | Point to; |
62 | } Block; |
63 | |
64 | typedef struct { |
65 | int av_elem; /* average element category */ |
66 | short left_count; /* count of blocks that will be added together */ |
67 | short block_count; /* count of blocks per element */ |
68 | short elem_count; |
69 | const Block* blocks; |
70 | } ElemCat; |
71 | |
72 | typedef struct FineSignature { |
73 | struct FineSignature* next; |
74 | struct FineSignature* prev; |
75 | uint64_t pts; |
76 | uint32_t index; /* needed for xmlexport */ |
77 | uint8_t confidence; |
78 | uint8_t words[5]; |
79 | uint8_t framesig[SIGELEM_SIZE/5]; |
80 | } FineSignature; |
81 | |
82 | typedef struct CoarseSignature { |
83 | uint8_t data[5][31]; /* 5 words with min. 243 bit */ |
84 | struct FineSignature* first; /* associated Finesignatures */ |
85 | struct FineSignature* last; |
86 | struct CoarseSignature* next; |
87 | } CoarseSignature; |
88 | |
89 | /* lookup types */ |
90 | typedef struct MatchingInfo { |
91 | double meandist; |
92 | double framerateratio; /* second/first */ |
93 | int score; |
94 | int offset; |
95 | int matchframes; /* number of matching frames */ |
96 | int whole; |
97 | struct FineSignature* first; |
98 | struct FineSignature* second; |
99 | struct MatchingInfo* next; |
100 | } MatchingInfo; |
101 | |
102 | typedef struct { |
103 | AVRational time_base; |
104 | /* needed for xml_export */ |
105 | int w; /* height */ |
106 | int h; /* width */ |
107 | |
108 | /* overflow protection */ |
109 | int divide; |
110 | |
111 | FineSignature* finesiglist; |
112 | FineSignature* curfinesig; |
113 | |
114 | CoarseSignature* coarsesiglist; |
115 | CoarseSignature* coarseend; /* needed for xml export */ |
116 | /* helpers to store the alternating signatures */ |
117 | CoarseSignature* curcoarsesig1; |
118 | CoarseSignature* curcoarsesig2; |
119 | |
120 | int coarsecount; /* counter from 0 to 89 */ |
121 | int midcoarse; /* whether it is a coarsesignature beginning from 45 + i * 90 */ |
122 | uint32_t lastindex; /* helper to store amount of frames */ |
123 | |
124 | int exported; /* boolean whether stream already exported */ |
125 | } StreamContext; |
126 | |
127 | typedef struct { |
128 | const AVClass *class; |
129 | /* input parameters */ |
130 | int mode; |
131 | int nb_inputs; |
132 | char *filename; |
133 | int format; |
134 | int thworddist; |
135 | int thcomposdist; |
136 | int thl1; |
137 | int thdi; |
138 | int thit; |
139 | /* end input parameters */ |
140 | |
141 | uint8_t l1distlut[243*242/2]; /* 243 + 242 + 241 ... */ |
142 | StreamContext* streamcontexts; |
143 | } SignatureContext; |
144 | |
145 | |
146 | static const Block elem_a1_data[] = { |
147 | {{ 0, 0},{ 7, 7}}, |
148 | {{ 8, 0},{15, 7}}, |
149 | {{ 0, 8},{ 7,15}}, |
150 | {{ 8, 8},{15,15}}, |
151 | {{16, 0},{23, 7}}, |
152 | {{24, 0},{31, 7}}, |
153 | {{16, 8},{23,15}}, |
154 | {{24, 8},{31,15}}, |
155 | {{ 0,16},{ 7,23}}, |
156 | {{ 8,16},{15,23}}, |
157 | {{ 0,24},{ 7,31}}, |
158 | {{ 8,24},{15,31}}, |
159 | {{16,16},{23,23}}, |
160 | {{24,16},{31,23}}, |
161 | {{16,24},{23,31}}, |
162 | {{24,24},{31,31}}, |
163 | {{ 0, 0},{15,15}}, |
164 | {{16, 0},{31,15}}, |
165 | {{ 0,16},{15,31}}, |
166 | {{16,16},{31,31}} |
167 | }; |
168 | static const ElemCat elem_a1 = { 1, 1, 1, 20, elem_a1_data }; |
169 | |
170 | static const Block elem_a2_data[] = { |
171 | {{ 2, 2},{ 9, 9}}, |
172 | {{12, 2},{19, 9}}, |
173 | {{22, 2},{29, 9}}, |
174 | {{ 2,12},{ 9,19}}, |
175 | {{12,12},{19,19}}, |
176 | {{22,12},{29,19}}, |
177 | {{ 2,22},{ 9,29}}, |
178 | {{12,22},{19,29}}, |
179 | {{22,22},{29,29}}, |
180 | {{ 9, 9},{22,22}}, |
181 | {{ 6, 6},{25,25}}, |
182 | {{ 3, 3},{28,28}} |
183 | }; |
184 | static const ElemCat elem_a2 = { 1, 1, 1, 12, elem_a2_data }; |
185 | |
186 | static const Block elem_d1_data[] = { |
187 | {{ 0, 0},{ 1, 3}},{{ 2, 0},{ 3, 3}}, |
188 | {{ 4, 0},{ 7, 1}},{{ 4, 2},{ 7, 3}}, |
189 | {{ 0, 6},{ 3, 7}},{{ 0, 4},{ 3, 5}}, |
190 | {{ 6, 4},{ 7, 7}},{{ 4, 4},{ 5, 7}}, |
191 | {{ 8, 0},{ 9, 3}},{{10, 0},{11, 3}}, |
192 | {{12, 0},{15, 1}},{{12, 2},{15, 3}}, |
193 | {{ 8, 6},{11, 7}},{{ 8, 4},{11, 5}}, |
194 | {{14, 4},{15, 7}},{{12, 4},{13, 7}}, |
195 | {{ 0, 8},{ 1,11}},{{ 2, 8},{ 3,11}}, |
196 | {{ 4, 8},{ 7, 9}},{{ 4,10},{ 7,11}}, |
197 | {{ 0,14},{ 3,15}},{{ 0,12},{ 3,13}}, |
198 | {{ 6,12},{ 7,15}},{{ 4,12},{ 5,15}}, |
199 | {{ 8, 8},{ 9,11}},{{10, 8},{11,11}}, |
200 | {{12, 8},{15, 9}},{{12,10},{15,11}}, |
201 | {{ 8,14},{11,15}},{{ 8,12},{11,13}}, |
202 | {{14,12},{15,15}},{{12,12},{13,15}}, |
203 | {{16, 0},{19, 1}},{{16, 2},{19, 3}}, |
204 | {{22, 0},{23, 3}},{{20, 0},{21, 3}}, |
205 | {{16, 4},{17, 7}},{{18, 4},{19, 7}}, |
206 | {{20, 6},{23, 7}},{{20, 4},{23, 5}}, |
207 | {{24, 0},{27, 1}},{{24, 2},{27, 3}}, |
208 | {{30, 0},{31, 3}},{{28, 0},{29, 3}}, |
209 | {{24, 4},{25, 7}},{{26, 4},{27, 7}}, |
210 | {{28, 6},{31, 7}},{{28, 4},{31, 5}}, |
211 | {{16, 8},{19, 9}},{{16,10},{19,11}}, |
212 | {{22, 8},{23,11}},{{20, 8},{21,11}}, |
213 | {{16,12},{17,15}},{{18,12},{19,15}}, |
214 | {{20,14},{23,15}},{{20,12},{23,13}}, |
215 | {{24, 8},{27, 9}},{{24,10},{27,11}}, |
216 | {{30, 8},{31,11}},{{28, 8},{29,11}}, |
217 | {{24,12},{25,15}},{{26,12},{27,15}}, |
218 | {{28,14},{31,15}},{{28,12},{31,13}}, |
219 | {{ 0,16},{ 3,17}},{{ 0,18},{ 3,19}}, |
220 | {{ 6,16},{ 7,19}},{{ 4,16},{ 5,19}}, |
221 | {{ 0,20},{ 1,23}},{{ 2,20},{ 3,23}}, |
222 | {{ 4,22},{ 7,23}},{{ 4,20},{ 7,21}}, |
223 | {{ 8,16},{11,17}},{{ 8,18},{11,19}}, |
224 | {{14,16},{15,19}},{{12,16},{13,19}}, |
225 | {{ 8,20},{ 9,23}},{{10,20},{11,23}}, |
226 | {{12,22},{15,23}},{{12,20},{15,21}}, |
227 | {{ 0,24},{ 3,25}},{{ 0,26},{ 3,27}}, |
228 | {{ 6,24},{ 7,27}},{{ 4,24},{ 5,27}}, |
229 | {{ 0,28},{ 1,31}},{{ 2,28},{ 3,31}}, |
230 | {{ 4,30},{ 7,31}},{{ 4,28},{ 7,29}}, |
231 | {{ 8,24},{11,25}},{{ 8,26},{11,27}}, |
232 | {{14,24},{15,27}},{{12,24},{13,27}}, |
233 | {{ 8,28},{ 9,31}},{{10,28},{11,31}}, |
234 | {{12,30},{15,31}},{{12,28},{15,29}}, |
235 | {{16,16},{17,19}},{{18,16},{19,19}}, |
236 | {{20,16},{23,17}},{{20,18},{23,19}}, |
237 | {{16,22},{19,23}},{{16,20},{19,21}}, |
238 | {{22,20},{23,23}},{{20,20},{21,23}}, |
239 | {{24,16},{25,19}},{{26,16},{27,19}}, |
240 | {{28,16},{31,17}},{{28,18},{31,19}}, |
241 | {{24,22},{27,23}},{{24,20},{27,21}}, |
242 | {{30,20},{31,23}},{{28,20},{29,23}}, |
243 | {{16,24},{17,27}},{{18,24},{19,27}}, |
244 | {{20,24},{23,25}},{{20,26},{23,27}}, |
245 | {{16,30},{19,31}},{{16,28},{19,29}}, |
246 | {{22,28},{23,31}},{{20,28},{21,31}}, |
247 | {{24,24},{25,27}},{{26,24},{27,27}}, |
248 | {{28,24},{31,25}},{{28,26},{31,27}}, |
249 | {{24,30},{27,31}},{{24,28},{27,29}}, |
250 | {{30,28},{31,31}},{{28,28},{29,31}}, |
251 | {{ 2, 2},{ 3, 5}},{{ 4, 2},{ 5, 5}}, |
252 | {{ 6, 2},{ 9, 3}},{{ 6, 4},{ 9, 5}}, |
253 | {{ 2, 8},{ 5, 9}},{{ 2, 6},{ 5, 7}}, |
254 | {{ 8, 6},{ 9, 9}},{{ 6, 6},{ 7, 9}}, |
255 | {{12, 2},{13, 5}},{{14, 2},{15, 5}}, |
256 | {{16, 2},{19, 3}},{{16, 4},{19, 5}}, |
257 | {{12, 8},{15, 9}},{{12, 6},{15, 7}}, |
258 | {{18, 6},{19, 9}},{{16, 6},{17, 9}}, |
259 | {{22, 2},{23, 5}},{{24, 2},{25, 5}}, |
260 | {{26, 2},{29, 3}},{{26, 4},{29, 5}}, |
261 | {{22, 8},{25, 9}},{{22, 6},{25, 7}}, |
262 | {{28, 6},{29, 9}},{{26, 6},{27, 9}}, |
263 | {{ 2,12},{ 3,15}},{{ 4,12},{ 5,15}}, |
264 | {{ 6,12},{ 9,13}},{{ 6,14},{ 9,15}}, |
265 | {{ 2,18},{ 5,19}},{{ 2,16},{ 5,17}}, |
266 | {{ 8,16},{ 9,19}},{{ 6,16},{ 7,19}}, |
267 | {{12,12},{15,13}},{{12,14},{15,15}}, |
268 | {{16,12},{19,13}},{{16,14},{19,15}}, |
269 | {{12,18},{15,19}},{{12,16},{15,17}}, |
270 | {{16,18},{19,19}},{{16,16},{19,17}}, |
271 | {{22,12},{23,15}},{{24,12},{25,15}}, |
272 | {{26,12},{29,13}},{{26,14},{29,15}}, |
273 | {{22,18},{25,19}},{{22,16},{25,17}}, |
274 | {{28,16},{29,19}},{{26,16},{27,19}}, |
275 | {{ 2,22},{ 3,25}},{{ 4,22},{ 5,25}}, |
276 | {{ 6,22},{ 9,23}},{{ 6,24},{ 9,25}}, |
277 | {{ 2,28},{ 5,29}},{{ 2,26},{ 5,27}}, |
278 | {{ 8,26},{ 9,29}},{{ 6,26},{ 7,29}}, |
279 | {{12,22},{13,25}},{{14,22},{15,25}}, |
280 | {{16,22},{19,23}},{{16,24},{19,25}}, |
281 | {{12,28},{15,29}},{{12,26},{15,27}}, |
282 | {{18,26},{19,29}},{{16,26},{17,29}}, |
283 | {{22,22},{23,25}},{{24,22},{25,25}}, |
284 | {{26,22},{29,23}},{{26,24},{29,25}}, |
285 | {{22,28},{25,29}},{{22,26},{25,27}}, |
286 | {{28,26},{29,29}},{{26,26},{27,29}}, |
287 | {{ 7, 7},{10, 8}},{{ 7, 9},{10,10}}, |
288 | {{11, 7},{12,10}},{{13, 7},{14,10}}, |
289 | {{ 7,11},{ 8,14}},{{ 9,11},{10,14}}, |
290 | {{11,11},{14,12}},{{11,13},{14,14}}, |
291 | {{17, 7},{20, 8}},{{17, 9},{20,10}}, |
292 | {{21, 7},{22,10}},{{23, 7},{24,10}}, |
293 | {{17,11},{18,14}},{{19,11},{20,14}}, |
294 | {{21,11},{24,12}},{{21,13},{24,14}}, |
295 | {{ 7,17},{10,18}},{{ 7,19},{10,20}}, |
296 | {{11,17},{12,20}},{{13,17},{14,20}}, |
297 | {{ 7,21},{ 8,24}},{{ 9,21},{10,24}}, |
298 | {{11,21},{14,22}},{{11,23},{14,24}}, |
299 | {{17,17},{20,18}},{{17,19},{20,20}}, |
300 | {{21,17},{22,20}},{{23,17},{24,20}}, |
301 | {{17,21},{18,24}},{{19,21},{20,24}}, |
302 | {{21,21},{24,22}},{{21,23},{24,24}} |
303 | }; |
304 | static const ElemCat elem_d1 = { 0, 1, 2, 116, elem_d1_data }; |
305 | |
306 | static const Block elem_d2_data[] = { |
307 | {{ 0, 0},{ 3, 3}},{{ 4, 4},{ 7, 7}},{{ 4, 0},{ 7, 3}},{{ 0, 4},{ 3, 7}}, |
308 | {{ 8, 0},{11, 3}},{{12, 4},{15, 7}},{{12, 0},{15, 3}},{{ 8, 4},{11, 7}}, |
309 | {{16, 0},{19, 3}},{{20, 4},{23, 7}},{{20, 0},{23, 3}},{{16, 4},{19, 7}}, |
310 | {{24, 0},{27, 3}},{{28, 4},{31, 7}},{{28, 0},{31, 3}},{{24, 4},{27, 7}}, |
311 | {{ 0, 8},{ 3,11}},{{ 4,12},{ 7,15}},{{ 4, 8},{ 7,11}},{{ 0,12},{ 3,15}}, |
312 | {{ 8, 8},{11,11}},{{12,12},{15,15}},{{12, 8},{15,11}},{{ 8,12},{11,15}}, |
313 | {{16, 8},{19,11}},{{20,12},{23,15}},{{20, 8},{23,11}},{{16,12},{19,15}}, |
314 | {{24, 8},{27,11}},{{28,12},{31,15}},{{28, 8},{31,11}},{{24,12},{27,15}}, |
315 | {{ 0,16},{ 3,19}},{{ 4,20},{ 7,23}},{{ 4,16},{ 7,19}},{{ 0,20},{ 3,23}}, |
316 | {{ 8,16},{11,19}},{{12,20},{15,23}},{{12,16},{15,19}},{{ 8,20},{11,23}}, |
317 | {{16,16},{19,19}},{{20,20},{23,23}},{{20,16},{23,19}},{{16,20},{19,23}}, |
318 | {{24,16},{27,19}},{{28,20},{31,23}},{{28,16},{31,19}},{{24,20},{27,23}}, |
319 | {{ 0,24},{ 3,27}},{{ 4,28},{ 7,31}},{{ 4,24},{ 7,27}},{{ 0,28},{ 3,31}}, |
320 | {{ 8,24},{11,27}},{{12,28},{15,31}},{{12,24},{15,27}},{{ 8,28},{11,31}}, |
321 | {{16,24},{19,27}},{{20,28},{23,31}},{{20,24},{23,27}},{{16,28},{19,31}}, |
322 | {{24,24},{27,27}},{{28,28},{31,31}},{{28,24},{31,27}},{{24,28},{27,31}}, |
323 | {{ 4, 4},{ 7, 7}},{{ 8, 8},{11,11}},{{ 8, 4},{11, 7}},{{ 4, 8},{ 7,11}}, |
324 | {{12, 4},{15, 7}},{{16, 8},{19,11}},{{16, 4},{19, 7}},{{12, 8},{15,11}}, |
325 | {{20, 4},{23, 7}},{{24, 8},{27,11}},{{24, 4},{27, 7}},{{20, 8},{23,11}}, |
326 | {{ 4,12},{ 7,15}},{{ 8,16},{11,19}},{{ 8,12},{11,15}},{{ 4,16},{ 7,19}}, |
327 | {{12,12},{15,15}},{{16,16},{19,19}},{{16,12},{19,15}},{{12,16},{15,19}}, |
328 | {{20,12},{23,15}},{{24,16},{27,19}},{{24,12},{27,15}},{{20,16},{23,19}}, |
329 | {{ 4,20},{ 7,23}},{{ 8,24},{11,27}},{{ 8,20},{11,23}},{{ 4,24},{ 7,27}}, |
330 | {{12,20},{15,23}},{{16,24},{19,27}},{{16,20},{19,23}},{{12,24},{15,27}}, |
331 | {{20,20},{23,23}},{{24,24},{27,27}},{{24,20},{27,23}},{{20,24},{23,27}} |
332 | }; |
333 | static const ElemCat elem_d2 = { 0, 2, 4, 25, elem_d2_data }; |
334 | |
335 | static const Block elem_d3_data[] = { |
336 | {{ 1, 1},{10,10}},{{11, 1},{20,10}}, |
337 | {{ 1, 1},{10,10}},{{21, 1},{30,10}}, |
338 | {{ 1, 1},{10,10}},{{ 1,11},{10,20}}, |
339 | {{ 1, 1},{10,10}},{{11,11},{20,20}}, |
340 | {{ 1, 1},{10,10}},{{21,11},{30,20}}, |
341 | {{ 1, 1},{10,10}},{{ 1,21},{10,30}}, |
342 | {{ 1, 1},{10,10}},{{11,21},{20,30}}, |
343 | {{ 1, 1},{10,10}},{{21,21},{30,30}}, |
344 | {{11, 1},{20,10}},{{21, 1},{30,10}}, |
345 | {{11, 1},{20,10}},{{ 1,11},{10,20}}, |
346 | {{11, 1},{20,10}},{{11,11},{20,20}}, |
347 | {{11, 1},{20,10}},{{21,11},{30,20}}, |
348 | {{11, 1},{20,10}},{{ 1,21},{10,30}}, |
349 | {{11, 1},{20,10}},{{11,21},{20,30}}, |
350 | {{11, 1},{20,10}},{{21,21},{30,30}}, |
351 | {{21, 1},{30,10}},{{ 1,11},{10,20}}, |
352 | {{21, 1},{30,10}},{{11,11},{20,20}}, |
353 | {{21, 1},{30,10}},{{21,11},{30,20}}, |
354 | {{21, 1},{30,10}},{{ 1,21},{10,30}}, |
355 | {{21, 1},{30,10}},{{11,21},{20,30}}, |
356 | {{21, 1},{30,10}},{{21,21},{30,30}}, |
357 | {{ 1,11},{10,20}},{{11,11},{20,20}}, |
358 | {{ 1,11},{10,20}},{{21,11},{30,20}}, |
359 | {{ 1,11},{10,20}},{{ 1,21},{10,30}}, |
360 | {{ 1,11},{10,20}},{{11,21},{20,30}}, |
361 | {{ 1,11},{10,20}},{{21,21},{30,30}}, |
362 | {{11,11},{20,20}},{{21,11},{30,20}}, |
363 | {{11,11},{20,20}},{{ 1,21},{10,30}}, |
364 | {{11,11},{20,20}},{{11,21},{20,30}}, |
365 | {{11,11},{20,20}},{{21,21},{30,30}}, |
366 | {{21,11},{30,20}},{{ 1,21},{10,30}}, |
367 | {{21,11},{30,20}},{{11,21},{20,30}}, |
368 | {{21,11},{30,20}},{{21,21},{30,30}}, |
369 | {{ 1,21},{10,30}},{{11,21},{20,30}}, |
370 | {{ 1,21},{10,30}},{{21,21},{30,30}}, |
371 | {{11,21},{20,30}},{{21,21},{30,30}} |
372 | }; |
373 | static const ElemCat elem_d3 = { 0, 1, 2, 36, elem_d3_data }; |
374 | |
375 | static const Block elem_d4_data[] = { |
376 | {{ 7,13},{12,18}},{{19,13},{24,18}}, |
377 | {{13, 7},{18,12}},{{13,19},{18,24}}, |
378 | {{ 7, 7},{12,12}},{{19,19},{24,24}}, |
379 | {{19, 7},{24,12}},{{ 7,19},{12,24}}, |
380 | {{13, 7},{18,12}},{{19,13},{24,18}}, |
381 | {{19,13},{24,18}},{{13,19},{18,24}}, |
382 | {{13,19},{18,24}},{{ 7,13},{12,18}}, |
383 | {{ 7,13},{12,18}},{{13, 7},{18,12}}, |
384 | {{ 7, 7},{12,12}},{{19, 7},{24,12}}, |
385 | {{19, 7},{24,12}},{{19,19},{24,24}}, |
386 | {{19,19},{24,24}},{{ 7,19},{12,24}}, |
387 | {{ 7,19},{12,24}},{{ 7, 7},{12,12}}, |
388 | {{13,13},{18,18}},{{13, 1},{18, 6}}, |
389 | {{13,13},{18,18}},{{25,13},{30,18}}, |
390 | {{13,13},{18,18}},{{13,25},{18,30}}, |
391 | {{13,13},{18,18}},{{ 1,13},{ 6,18}}, |
392 | {{13, 1},{18, 6}},{{13,25},{18,30}}, |
393 | {{ 1,13},{ 6,18}},{{25,13},{30,18}}, |
394 | {{ 7, 1},{12, 6}},{{19, 1},{24, 6}}, |
395 | {{ 7,25},{12,30}},{{19,25},{24,30}}, |
396 | {{ 1, 7},{ 6,12}},{{ 1,19},{ 6,24}}, |
397 | {{25, 7},{30,12}},{{25,19},{30,24}}, |
398 | {{ 7, 1},{12, 6}},{{ 1, 7},{ 6,12}}, |
399 | {{19, 1},{24, 6}},{{25, 7},{30,12}}, |
400 | {{25,19},{30,24}},{{19,25},{24,30}}, |
401 | {{ 1,19},{ 6,24}},{{ 7,25},{12,30}}, |
402 | {{ 1, 1},{ 6, 6}},{{25, 1},{30, 6}}, |
403 | {{25, 1},{30, 6}},{{25,25},{30,30}}, |
404 | {{25,25},{30,30}},{{ 1,25},{ 6,30}}, |
405 | {{ 1,25},{ 6,30}},{{ 1, 1},{ 6, 6}} |
406 | }; |
407 | static const ElemCat elem_d4 = { 0, 1, 2, 30, elem_d4_data }; |
408 | |
409 | static const Block elem_d5_data[] = { |
410 | {{ 1, 1},{10, 3}},{{ 1, 4},{ 3, 7}},{{ 8, 4},{10, 7}},{{ 1, 8},{10,10}},{{ 4, 4},{ 7, 7}}, |
411 | {{11, 1},{20, 3}},{{11, 4},{13, 7}},{{18, 4},{20, 7}},{{11, 8},{20,10}},{{14, 4},{17, 7}}, |
412 | {{21, 1},{30, 3}},{{21, 4},{23, 7}},{{28, 4},{30, 7}},{{21, 8},{30,10}},{{24, 4},{27, 7}}, |
413 | {{ 1,11},{10,13}},{{ 1,14},{ 3,17}},{{ 8,14},{10,17}},{{ 1,18},{10,20}},{{ 4,14},{ 7,17}}, |
414 | {{11,11},{20,13}},{{11,14},{13,17}},{{18,14},{20,17}},{{11,18},{20,20}},{{14,14},{17,17}}, |
415 | {{21,11},{30,13}},{{21,14},{23,17}},{{28,14},{30,17}},{{21,18},{30,20}},{{24,14},{27,17}}, |
416 | {{ 1,21},{10,23}},{{ 1,24},{ 3,27}},{{ 8,24},{10,27}},{{ 1,28},{10,30}},{{ 4,24},{ 7,27}}, |
417 | {{11,21},{20,23}},{{11,24},{13,27}},{{18,24},{20,27}},{{11,28},{20,30}},{{14,24},{17,27}}, |
418 | {{21,21},{30,23}},{{21,24},{23,27}},{{28,24},{30,27}},{{21,28},{30,30}},{{24,24},{27,27}}, |
419 | {{ 6, 6},{15, 8}},{{ 6, 9},{ 8,12}},{{13, 9},{15,12}},{{ 6,13},{15,15}},{{ 9, 9},{12,12}}, |
420 | {{16, 6},{25, 8}},{{16, 9},{18,12}},{{23, 9},{25,12}},{{16,13},{25,15}},{{19, 9},{22,12}}, |
421 | {{ 6,16},{15,18}},{{ 6,19},{ 8,22}},{{13,19},{15,22}},{{ 6,23},{15,25}},{{ 9,19},{12,22}}, |
422 | {{16,16},{25,18}},{{16,19},{18,22}},{{23,19},{25,22}},{{16,23},{25,25}},{{19,19},{22,22}}, |
423 | {{ 6, 1},{15, 3}},{{ 6, 4},{ 8, 7}},{{13, 4},{15, 7}},{{ 6, 8},{15,10}},{{ 9, 4},{12, 7}}, |
424 | {{16, 1},{25, 3}},{{16, 4},{18, 7}},{{23, 4},{25, 7}},{{16, 8},{25,10}},{{19, 4},{22, 7}}, |
425 | {{ 1, 6},{10, 8}},{{ 1, 9},{ 3,12}},{{ 8, 9},{10,12}},{{ 1,13},{10,15}},{{ 4, 9},{ 7,12}}, |
426 | {{11, 6},{20, 8}},{{11, 9},{13,12}},{{18, 9},{20,12}},{{11,13},{20,15}},{{14, 9},{17,12}}, |
427 | {{21, 6},{30, 8}},{{21, 9},{23,12}},{{28, 9},{30,12}},{{21,13},{30,15}},{{24, 9},{27,12}}, |
428 | {{ 6,11},{15,13}},{{ 6,14},{ 8,17}},{{13,14},{15,17}},{{ 6,18},{15,20}},{{ 9,14},{12,17}}, |
429 | {{16,11},{25,13}},{{16,14},{18,17}},{{23,14},{25,17}},{{16,18},{25,20}},{{19,14},{22,17}}, |
430 | {{ 1,16},{10,18}},{{ 1,19},{ 3,22}},{{ 8,19},{10,22}},{{ 1,23},{10,25}},{{ 4,19},{ 7,22}}, |
431 | {{11,16},{20,18}},{{11,19},{13,22}},{{18,19},{20,22}},{{11,23},{20,25}},{{14,19},{17,22}}, |
432 | {{21,16},{30,18}},{{21,19},{23,22}},{{28,19},{30,22}},{{21,23},{30,25}},{{24,19},{27,22}}, |
433 | {{ 6,21},{15,23}},{{ 6,24},{ 8,27}},{{13,24},{15,27}},{{ 6,28},{15,30}},{{ 9,24},{12,27}}, |
434 | {{16,21},{25,23}},{{16,24},{18,27}},{{23,24},{25,27}},{{16,28},{25,30}},{{19,24},{22,27}}, |
435 | {{ 2, 2},{14, 6}},{{ 2, 7},{ 6, 9}},{{10, 7},{14, 9}},{{ 2,10},{14,14}},{{ 7, 7},{ 9, 9}}, |
436 | {{ 7, 2},{19, 6}},{{ 7, 7},{11, 9}},{{15, 7},{19, 9}},{{ 7,10},{19,14}},{{12, 7},{14, 9}}, |
437 | {{12, 2},{24, 6}},{{12, 7},{16, 9}},{{20, 7},{24, 9}},{{12,10},{24,14}},{{17, 7},{19, 9}}, |
438 | {{17, 2},{29, 6}},{{17, 7},{21, 9}},{{25, 7},{29, 9}},{{17,10},{29,14}},{{22, 7},{24, 9}}, |
439 | {{ 2, 7},{14,11}},{{ 2,12},{ 6,14}},{{10,12},{14,14}},{{ 2,15},{14,19}},{{ 7,12},{ 9,14}}, |
440 | {{ 7, 7},{19,11}},{{ 7,12},{11,14}},{{15,12},{19,14}},{{ 7,15},{19,19}},{{12,12},{14,14}}, |
441 | {{12, 7},{24,11}},{{12,12},{16,14}},{{20,12},{24,14}},{{12,15},{24,19}},{{17,12},{19,14}}, |
442 | {{17, 7},{29,11}},{{17,12},{21,14}},{{25,12},{29,14}},{{17,15},{29,19}},{{22,12},{24,14}}, |
443 | {{ 2,12},{14,16}},{{ 2,17},{ 6,19}},{{10,17},{14,19}},{{ 2,20},{14,24}},{{ 7,17},{ 9,19}}, |
444 | {{ 7,12},{19,16}},{{ 7,17},{11,19}},{{15,17},{19,19}},{{ 7,20},{19,24}},{{12,17},{14,19}}, |
445 | {{12,12},{24,16}},{{12,17},{16,19}},{{20,17},{24,19}},{{12,20},{24,24}},{{17,17},{19,19}}, |
446 | {{17,12},{29,16}},{{17,17},{21,19}},{{25,17},{29,19}},{{17,20},{29,24}},{{22,17},{24,19}}, |
447 | {{ 2,17},{14,21}},{{ 2,22},{ 6,24}},{{10,22},{14,24}},{{ 2,25},{14,29}},{{ 7,22},{ 9,24}}, |
448 | {{ 7,17},{19,21}},{{ 7,22},{11,24}},{{15,22},{19,24}},{{ 7,25},{19,29}},{{12,22},{14,24}}, |
449 | {{12,17},{24,21}},{{12,22},{16,24}},{{20,22},{24,24}},{{12,25},{24,29}},{{17,22},{19,24}}, |
450 | {{17,17},{29,21}},{{17,22},{21,24}},{{25,22},{29,24}},{{17,25},{29,29}},{{22,22},{24,24}}, |
451 | {{ 8, 3},{13, 4}},{{ 8, 5},{ 9, 6}},{{12, 5},{13, 6}},{{ 8, 7},{13, 8}},{{10, 5},{11, 6}}, |
452 | {{13, 3},{18, 4}},{{13, 5},{14, 6}},{{17, 5},{18, 6}},{{13, 7},{18, 8}},{{15, 5},{16, 6}}, |
453 | {{18, 3},{23, 4}},{{18, 5},{19, 6}},{{22, 5},{23, 6}},{{18, 7},{23, 8}},{{20, 5},{21, 6}}, |
454 | {{ 3, 8},{ 8, 9}},{{ 3,10},{ 4,11}},{{ 7,10},{ 8,11}},{{ 3,12},{ 8,13}},{{ 5,10},{ 6,11}}, |
455 | {{ 8, 8},{13, 9}},{{ 8,10},{ 9,11}},{{12,10},{13,11}},{{ 8,12},{13,13}},{{10,10},{11,11}}, |
456 | {{13, 8},{18, 9}},{{13,10},{14,11}},{{17,10},{18,11}},{{13,12},{18,13}},{{15,10},{16,11}}, |
457 | {{18, 8},{23, 9}},{{18,10},{19,11}},{{22,10},{23,11}},{{18,12},{23,13}},{{20,10},{21,11}}, |
458 | {{23, 8},{28, 9}},{{23,10},{24,11}},{{27,10},{28,11}},{{23,12},{28,13}},{{25,10},{26,11}}, |
459 | {{ 3,13},{ 8,14}},{{ 3,15},{ 4,16}},{{ 7,15},{ 8,16}},{{ 3,17},{ 8,18}},{{ 5,15},{ 6,16}}, |
460 | {{ 8,13},{13,14}},{{ 8,15},{ 9,16}},{{12,15},{13,16}},{{ 8,17},{13,18}},{{10,15},{11,16}}, |
461 | {{13,13},{18,14}},{{13,15},{14,16}},{{17,15},{18,16}},{{13,17},{18,18}},{{15,15},{16,16}}, |
462 | {{18,13},{23,14}},{{18,15},{19,16}},{{22,15},{23,16}},{{18,17},{23,18}},{{20,15},{21,16}}, |
463 | {{23,13},{28,14}},{{23,15},{24,16}},{{27,15},{28,16}},{{23,17},{28,18}},{{25,15},{26,16}}, |
464 | {{ 3,18},{ 8,19}},{{ 3,20},{ 4,21}},{{ 7,20},{ 8,21}},{{ 3,22},{ 8,23}},{{ 5,20},{ 6,21}}, |
465 | {{ 8,18},{13,19}},{{ 8,20},{ 9,21}},{{12,20},{13,21}},{{ 8,22},{13,23}},{{10,20},{11,21}}, |
466 | {{13,18},{18,19}},{{13,20},{14,21}},{{17,20},{18,21}},{{13,22},{18,23}},{{15,20},{16,21}}, |
467 | {{18,18},{23,19}},{{18,20},{19,21}},{{22,20},{23,21}},{{18,22},{23,23}},{{20,20},{21,21}}, |
468 | {{23,18},{28,19}},{{23,20},{24,21}},{{27,20},{28,21}},{{23,22},{28,23}},{{25,20},{26,21}}, |
469 | {{ 8,23},{13,24}},{{ 8,25},{ 9,26}},{{12,25},{13,26}},{{ 8,27},{13,28}},{{10,25},{11,26}}, |
470 | {{13,23},{18,24}},{{13,25},{14,26}},{{17,25},{18,26}},{{13,27},{18,28}},{{15,25},{16,26}}, |
471 | {{18,23},{23,24}},{{18,25},{19,26}},{{22,25},{23,26}},{{18,27},{23,28}},{{20,25},{21,26}} |
472 | }; |
473 | static const ElemCat elem_d5 = { 0, 4, 5, 62, elem_d5_data }; |
474 | |
475 | static const Block elem_d6_data[] = { |
476 | {{ 3, 5},{12,10}},{{ 5, 3},{10,12}}, |
477 | {{11, 5},{20,10}},{{13, 3},{18,12}}, |
478 | {{19, 5},{28,10}},{{21, 3},{26,12}}, |
479 | {{ 3,13},{12,18}},{{ 5,11},{10,20}}, |
480 | {{11,13},{20,18}},{{13,11},{18,20}}, |
481 | {{19,13},{28,18}},{{21,11},{26,20}}, |
482 | {{ 3,21},{12,26}},{{ 5,19},{10,28}}, |
483 | {{11,21},{20,26}},{{13,19},{18,28}}, |
484 | {{19,21},{28,26}},{{21,19},{26,28}} |
485 | }; |
486 | static const ElemCat elem_d6 = { 0, 1, 2, 9, elem_d6_data }; |
487 | |
488 | static const Block elem_d7_data[] = { |
489 | {{ 0, 4},{ 3, 7}},{{ 8, 4},{11, 7}},{{ 4, 4},{ 7, 7}}, |
490 | {{ 4, 0},{ 7, 3}},{{ 4, 8},{ 7,11}},{{ 4, 4},{ 7, 7}}, |
491 | {{ 5, 4},{ 8, 7}},{{13, 4},{16, 7}},{{ 9, 4},{12, 7}}, |
492 | {{ 9, 0},{12, 3}},{{ 9, 8},{12,11}},{{ 9, 4},{12, 7}}, |
493 | {{10, 4},{13, 7}},{{18, 4},{21, 7}},{{14, 4},{17, 7}}, |
494 | {{14, 0},{17, 3}},{{14, 8},{17,11}},{{14, 4},{17, 7}}, |
495 | {{15, 4},{18, 7}},{{23, 4},{26, 7}},{{19, 4},{22, 7}}, |
496 | {{19, 0},{22, 3}},{{19, 8},{22,11}},{{19, 4},{22, 7}}, |
497 | {{20, 4},{23, 7}},{{28, 4},{31, 7}},{{24, 4},{27, 7}}, |
498 | {{24, 0},{27, 3}},{{24, 8},{27,11}},{{24, 4},{27, 7}}, |
499 | {{ 0, 9},{ 3,12}},{{ 8, 9},{11,12}},{{ 4, 9},{ 7,12}}, |
500 | {{ 4, 5},{ 7, 8}},{{ 4,13},{ 7,16}},{{ 4, 9},{ 7,12}}, |
501 | {{ 5, 9},{ 8,12}},{{13, 9},{16,12}},{{ 9, 9},{12,12}}, |
502 | {{ 9, 5},{12, 8}},{{ 9,13},{12,16}},{{ 9, 9},{12,12}}, |
503 | {{10, 9},{13,12}},{{18, 9},{21,12}},{{14, 9},{17,12}}, |
504 | {{14, 5},{17, 8}},{{14,13},{17,16}},{{14, 9},{17,12}}, |
505 | {{15, 9},{18,12}},{{23, 9},{26,12}},{{19, 9},{22,12}}, |
506 | {{19, 5},{22, 8}},{{19,13},{22,16}},{{19, 9},{22,12}}, |
507 | {{20, 9},{23,12}},{{28, 9},{31,12}},{{24, 9},{27,12}}, |
508 | {{24, 5},{27, 8}},{{24,13},{27,16}},{{24, 9},{27,12}}, |
509 | {{ 0,14},{ 3,17}},{{ 8,14},{11,17}},{{ 4,14},{ 7,17}}, |
510 | {{ 4,10},{ 7,13}},{{ 4,18},{ 7,21}},{{ 4,14},{ 7,17}}, |
511 | {{ 5,14},{ 8,17}},{{13,14},{16,17}},{{ 9,14},{12,17}}, |
512 | {{ 9,10},{12,13}},{{ 9,18},{12,21}},{{ 9,14},{12,17}}, |
513 | {{10,14},{13,17}},{{18,14},{21,17}},{{14,14},{17,17}}, |
514 | {{14,10},{17,13}},{{14,18},{17,21}},{{14,14},{17,17}}, |
515 | {{15,14},{18,17}},{{23,14},{26,17}},{{19,14},{22,17}}, |
516 | {{19,10},{22,13}},{{19,18},{22,21}},{{19,14},{22,17}}, |
517 | {{20,14},{23,17}},{{28,14},{31,17}},{{24,14},{27,17}}, |
518 | {{24,10},{27,13}},{{24,18},{27,21}},{{24,14},{27,17}}, |
519 | {{ 0,19},{ 3,22}},{{ 8,19},{11,22}},{{ 4,19},{ 7,22}}, |
520 | {{ 4,15},{ 7,18}},{{ 4,23},{ 7,26}},{{ 4,19},{ 7,22}}, |
521 | {{ 5,19},{ 8,22}},{{13,19},{16,22}},{{ 9,19},{12,22}}, |
522 | {{ 9,15},{12,18}},{{ 9,23},{12,26}},{{ 9,19},{12,22}}, |
523 | {{10,19},{13,22}},{{18,19},{21,22}},{{14,19},{17,22}}, |
524 | {{14,15},{17,18}},{{14,23},{17,26}},{{14,19},{17,22}}, |
525 | {{15,19},{18,22}},{{23,19},{26,22}},{{19,19},{22,22}}, |
526 | {{19,15},{22,18}},{{19,23},{22,26}},{{19,19},{22,22}}, |
527 | {{20,19},{23,22}},{{28,19},{31,22}},{{24,19},{27,22}}, |
528 | {{24,15},{27,18}},{{24,23},{27,26}},{{24,19},{27,22}}, |
529 | {{ 0,24},{ 3,27}},{{ 8,24},{11,27}},{{ 4,24},{ 7,27}}, |
530 | {{ 4,20},{ 7,23}},{{ 4,28},{ 7,31}},{{ 4,24},{ 7,27}}, |
531 | {{ 5,24},{ 8,27}},{{13,24},{16,27}},{{ 9,24},{12,27}}, |
532 | {{ 9,20},{12,23}},{{ 9,28},{12,31}},{{ 9,24},{12,27}}, |
533 | {{10,24},{13,27}},{{18,24},{21,27}},{{14,24},{17,27}}, |
534 | {{14,20},{17,23}},{{14,28},{17,31}},{{14,24},{17,27}}, |
535 | {{15,24},{18,27}},{{23,24},{26,27}},{{19,24},{22,27}}, |
536 | {{19,20},{22,23}},{{19,28},{22,31}},{{19,24},{22,27}}, |
537 | {{20,24},{23,27}},{{28,24},{31,27}},{{24,24},{27,27}}, |
538 | {{24,20},{27,23}},{{24,28},{27,31}},{{24,24},{27,27}} |
539 | }; |
540 | static const ElemCat elem_d7 = { 0, 2, 3, 50, elem_d7_data }; |
541 | |
542 | static const Block elem_d8_data[] = { |
543 | {{ 0, 0},{ 7, 3}},{{ 0, 4},{ 7, 7}}, |
544 | {{ 8, 0},{11, 7}},{{12, 0},{15, 7}}, |
545 | {{ 0, 8},{ 3,15}},{{ 4, 8},{ 7,15}}, |
546 | {{ 8, 8},{15,11}},{{ 8,12},{15,15}}, |
547 | {{16, 0},{19, 7}},{{20, 0},{23, 7}}, |
548 | {{24, 0},{31, 3}},{{24, 4},{31, 7}}, |
549 | {{16, 8},{23,11}},{{16,12},{23,15}}, |
550 | {{24, 8},{27,15}},{{28, 8},{31,15}}, |
551 | {{ 0,16},{ 3,23}},{{ 4,16},{ 7,23}}, |
552 | {{ 8,16},{15,19}},{{ 8,20},{15,23}}, |
553 | {{ 0,24},{ 7,27}},{{ 0,28},{ 7,31}}, |
554 | {{ 8,24},{11,31}},{{12,24},{15,31}}, |
555 | {{16,16},{23,19}},{{16,20},{23,23}}, |
556 | {{24,16},{27,23}},{{28,16},{31,23}}, |
557 | {{16,24},{19,31}},{{20,24},{23,31}}, |
558 | {{24,24},{31,27}},{{24,28},{31,31}}, |
559 | {{ 0, 0},{ 7,15}},{{ 8, 0},{15,15}}, |
560 | {{16, 0},{31, 7}},{{16, 8},{31,15}}, |
561 | {{ 0,16},{15,23}},{{ 0,24},{15,31}}, |
562 | {{16,16},{23,31}},{{24,16},{31,31}} |
563 | }; |
564 | static const ElemCat elem_d8 = { 0, 1, 2, 20, elem_d8_data }; |
565 | |
566 | static const ElemCat* elements[ELEMENT_COUNT] = { &elem_a1, &elem_a2, |
567 | &elem_d1, &elem_d2, &elem_d3, &elem_d4, |
568 | &elem_d5, &elem_d6, &elem_d7, &elem_d8 }; |
569 | #endif /* AVFILTER_SIGNATURE_H */ |
570 |