a490f632a6055808d60fc09fa9f6d9173009f2f7
[platform/upstream/gst-plugins-good.git] / gst / smpte / barboxwipes.c
1 /* GStreamer
2  * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23
24 #include "paint.h"
25 #include "gstmask.h"
26
27 enum
28 {
29   BOX_VERTICAL          = 1,
30   BOX_HORIZONTAL        = 2,
31   BOX_CLOCK             = 3,
32   TRIGANLE_LINEAR       = 4,
33 };
34
35 static gint boxes_1b[][7] = 
36 {
37 #define WIPE_B1_1       0
38   { BOX_VERTICAL,   0, 0, 0,  1, 1, 1 },
39 #define WIPE_B1_2       1
40   { BOX_HORIZONTAL, 0, 0, 0,  1, 1, 1 }
41 };
42
43 static gint boxes_2b[][7*2] = 
44 {
45 #define WIPE_B2_21      0
46   { BOX_VERTICAL,   0, 0, 1,  1, 2, 0,
47     BOX_VERTICAL,   1, 0, 0,  2, 2, 1 },
48 #define WIPE_B2_22      1
49   { BOX_HORIZONTAL, 0, 0, 1,  2, 1, 0,
50     BOX_HORIZONTAL, 0, 1, 0,  2, 2, 1 },
51 };
52
53 static gint box_clock_1b[][1*10] = 
54 {
55 #define WIPE_B1_241     0
56   { BOX_CLOCK, 0, 0, 0,  1, 0, 0,  0, 1, 1 },   
57 #define WIPE_B1_242     1
58   { BOX_CLOCK, 0, 1, 0,  1, 1, 0,  0, 0, 1 },   
59 #define WIPE_B1_243     2
60   { BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 0, 1 },   
61 #define WIPE_B1_244     3
62   { BOX_CLOCK, 1, 0, 0,  0, 0, 0,  1, 1, 1 },   
63 };
64
65 #define WIPE_B2_221     0
66 static gint box_clock_2b[][2*10] = 
67 {
68 #define WIPE_B2_221     0
69   { BOX_CLOCK, 1, 0, 0,  2, 0, 0,  1, 2, 1,   
70     BOX_CLOCK, 1, 0, 0,  1, 2, 1,  0, 0, 2 },
71 #define WIPE_B2_222     1
72   { BOX_CLOCK, 2, 1, 0,  2, 2, 0,  0, 1, 1,   
73     BOX_CLOCK, 2, 1, 0,  0, 1, 1,  2, 0, 2 },
74 #define WIPE_B2_223     2
75   { BOX_CLOCK, 1, 2, 0,  0, 2, 0,  1, 0, 1,   
76     BOX_CLOCK, 1, 2, 0,  1, 0, 1,  2, 2, 2 },
77 #define WIPE_B2_224     3
78   { BOX_CLOCK, 0, 1, 0,  0, 0, 0,  2, 1, 1,   
79     BOX_CLOCK, 0, 1, 0,  2, 1, 1,  0, 2, 2 },
80 #define WIPE_B2_225     4
81   { BOX_CLOCK, 1, 0, 0,  2, 0, 0,  1, 2, 1,   
82     BOX_CLOCK, 1, 2, 0,  0, 2, 0,  1, 0, 1 },
83 #define WIPE_B2_226     5
84   { BOX_CLOCK, 0, 1, 0,  0, 0, 0,  2, 1, 1,   
85     BOX_CLOCK, 2, 1, 0,  2, 2, 0,  0, 1, 1 },
86 #define WIPE_B2_231     6
87   { BOX_CLOCK, 1, 0, 0,  1, 2, 0,  2, 0, 1,   
88     BOX_CLOCK, 1, 0, 0,  1, 2, 0,  0, 0, 1 },
89 #define WIPE_B2_232     7
90   { BOX_CLOCK, 2, 1, 0,  0, 1, 0,  2, 0, 1,   
91     BOX_CLOCK, 2, 1, 0,  0, 1, 0,  2, 2, 1 },
92 #define WIPE_B2_233     8
93   { BOX_CLOCK, 1, 2, 0,  1, 0, 0,  2, 2, 1,   
94     BOX_CLOCK, 1, 2, 0,  1, 0, 0,  0, 2, 1 },
95 #define WIPE_B2_234     9
96   { BOX_CLOCK, 0, 1, 0,  2, 1, 0,  0, 0, 1,   
97     BOX_CLOCK, 0, 1, 0,  2, 1, 0,  0, 2, 1 },
98 #define WIPE_B2_251     10
99   { BOX_CLOCK, 0, 0, 0,  1, 0, 0,  0, 2, 1,   
100     BOX_CLOCK, 2, 0, 0,  1, 0, 0,  2, 2, 1 },
101 #define WIPE_B2_252     11
102   { BOX_CLOCK, 0, 0, 0,  0, 1, 0,  2, 0, 1,   
103     BOX_CLOCK, 0, 2, 0,  0, 1, 0,  2, 2, 1 },
104 #define WIPE_B2_253     12
105   { BOX_CLOCK, 0, 2, 0,  1, 2, 0,  0, 0, 1,   
106     BOX_CLOCK, 2, 2, 0,  1, 2, 0,  2, 0, 1 },
107 #define WIPE_B2_254     13
108   { BOX_CLOCK, 2, 0, 0,  2, 1, 0,  0, 0, 1,   
109     BOX_CLOCK, 2, 2, 0,  2, 1, 0,  0, 2, 1 },
110 };
111
112 static gint box_clock_4b[][4*10] = 
113 {
114 #define WIPE_B4_201     0
115   { BOX_CLOCK, 1, 1, 0,  1, 0, 0,  2, 1, 1,   
116     BOX_CLOCK, 1, 1, 0,  2, 1, 1,  1, 2, 2,
117     BOX_CLOCK, 1, 1, 0,  1, 2, 2,  0, 1, 3,
118     BOX_CLOCK, 1, 1, 0,  0, 1, 3,  1, 0, 4 },
119 #define WIPE_B4_202     1
120   { BOX_CLOCK, 1, 1, 0,  1, 0, 3,  2, 1, 4,   
121     BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 2, 1,
122     BOX_CLOCK, 1, 1, 0,  1, 2, 1,  0, 1, 2,
123     BOX_CLOCK, 1, 1, 0,  0, 1, 2,  1, 0, 3 },
124 #define WIPE_B4_203     2
125   { BOX_CLOCK, 1, 1, 0,  1, 0, 2,  2, 1, 3,   
126     BOX_CLOCK, 1, 1, 0,  2, 1, 3,  1, 2, 4,
127     BOX_CLOCK, 1, 1, 0,  1, 2, 0,  0, 1, 1,
128     BOX_CLOCK, 1, 1, 0,  0, 1, 1,  1, 0, 2 },
129 #define WIPE_B4_204     3
130   { BOX_CLOCK, 1, 1, 0,  1, 0, 1,  2, 1, 2,   
131     BOX_CLOCK, 1, 1, 0,  2, 1, 2,  1, 2, 3,
132     BOX_CLOCK, 1, 1, 0,  1, 2, 3,  0, 1, 4,
133     BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 0, 1 },
134 #define WIPE_B4_205     4
135   { BOX_CLOCK, 1, 1, 0,  1, 0, 0,  2, 1, 1,   
136     BOX_CLOCK, 1, 1, 0,  2, 1, 1,  1, 2, 2,
137     BOX_CLOCK, 1, 1, 0,  1, 2, 0,  0, 1, 1,
138     BOX_CLOCK, 1, 1, 0,  0, 1, 1,  1, 0, 2 },
139 #define WIPE_B4_206     5
140   { BOX_CLOCK, 1, 1, 0,  1, 0, 1,  2, 1, 2,   
141     BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 2, 1,
142     BOX_CLOCK, 1, 1, 0,  1, 2, 1,  0, 1, 2,
143     BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 0, 1 },
144 #define WIPE_B4_207     6
145   { BOX_CLOCK, 1, 1, 0,  1, 0, 0,  2, 1, 1,   
146     BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 2, 1,
147     BOX_CLOCK, 1, 1, 0,  1, 2, 0,  0, 1, 1,
148     BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 0, 1 },
149 #define WIPE_B4_211     7
150   { BOX_CLOCK, 1, 1, 0,  1, 0, 0,  2, 1, 1,   
151     BOX_CLOCK, 1, 1, 0,  2, 1, 1,  1, 2, 2,
152     BOX_CLOCK, 1, 1, 0,  1, 0, 0,  0, 1, 1,
153     BOX_CLOCK, 1, 1, 0,  0, 1, 1,  1, 2, 2 },
154 #define WIPE_B4_212     8
155   { BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 0, 1,   
156     BOX_CLOCK, 1, 1, 0,  1, 0, 1,  0, 1, 2,
157     BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 2, 1,
158     BOX_CLOCK, 1, 1, 0,  1, 2, 1,  0, 1, 2 },
159 #define WIPE_B4_213     9
160   { BOX_CLOCK, 1, 1, 0,  1, 0, 0,  2, 1, 1,   
161     BOX_CLOCK, 1, 1, 0,  1, 0, 0,  0, 1, 1,
162     BOX_CLOCK, 1, 1, 0,  1, 2, 0,  2, 1, 1,
163     BOX_CLOCK, 1, 1, 0,  1, 2, 0,  0, 1, 1 },
164 #define WIPE_B4_214     10
165   { BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 0, 1,   
166     BOX_CLOCK, 1, 1, 0,  2, 1, 0,  1, 2, 1,
167     BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 0, 1,
168     BOX_CLOCK, 1, 1, 0,  0, 1, 0,  1, 2, 1 },
169 #define WIPE_B4_227     11
170   { BOX_CLOCK, 1, 0, 0,  2, 0, 0,  1, 1, 1,   
171     BOX_CLOCK, 1, 0, 0,  1, 1, 1,  0, 0, 2,
172     BOX_CLOCK, 1, 2, 0,  2, 2, 0,  1, 1, 1,
173     BOX_CLOCK, 1, 2, 0,  1, 1, 1,  0, 2, 2 },
174 #define WIPE_B4_228     12
175   { BOX_CLOCK, 0, 1, 0,  0, 0, 0,  1, 1, 1,   
176     BOX_CLOCK, 0, 1, 0,  1, 1, 1,  0, 2, 2,
177     BOX_CLOCK, 2, 1, 0,  2, 0, 0,  1, 1, 1,
178     BOX_CLOCK, 2, 1, 0,  1, 1, 1,  2, 2, 2 },
179 #define WIPE_B4_235     13
180   { BOX_CLOCK, 1, 0, 0,  1, 1, 0,  0, 0, 1,   
181     BOX_CLOCK, 1, 0, 0,  1, 1, 0,  2, 0, 1,
182     BOX_CLOCK, 1, 2, 0,  1, 1, 0,  2, 2, 1,
183     BOX_CLOCK, 1, 2, 0,  1, 1, 0,  0, 2, 1 },
184 #define WIPE_B4_236     14
185   { BOX_CLOCK, 0, 1, 0,  1, 1, 0,  0, 0, 1,   
186     BOX_CLOCK, 0, 1, 0,  1, 1, 0,  0, 2, 1,
187     BOX_CLOCK, 2, 1, 0,  1, 1, 0,  2, 0, 1,
188     BOX_CLOCK, 2, 1, 0,  1, 1, 0,  2, 2, 1 },
189 };
190
191 static gint box_clock_8b[][8*10] = 
192 {
193 #define WIPE_B8_261     0
194   { BOX_CLOCK, 2, 1, 0,  2, 2, 0,  4, 1, 1,   
195     BOX_CLOCK, 2, 1, 0,  4, 1, 1,  2, 0, 2,
196     BOX_CLOCK, 2, 1, 0,  2, 0, 2,  0, 1, 3,
197     BOX_CLOCK, 2, 1, 0,  0, 1, 3,  2, 2, 4,
198     BOX_CLOCK, 2, 3, 0,  2, 2, 0,  4, 3, 1,
199     BOX_CLOCK, 2, 3, 0,  4, 3, 1,  2, 4, 2,
200     BOX_CLOCK, 2, 3, 0,  2, 4, 2,  0, 3, 3,
201     BOX_CLOCK, 2, 3, 0,  0, 3, 3,  2, 2, 4 },
202 #define WIPE_B8_262     1
203   { BOX_CLOCK, 1, 2, 0,  2, 2, 0,  1, 0, 1,   
204     BOX_CLOCK, 1, 2, 0,  1, 0, 1,  0, 2, 2,
205     BOX_CLOCK, 1, 2, 0,  0, 2, 2,  1, 4, 3,
206     BOX_CLOCK, 1, 2, 0,  1, 4, 3,  2, 2, 4,
207     BOX_CLOCK, 3, 2, 0,  2, 2, 0,  3, 0, 1,
208     BOX_CLOCK, 3, 2, 0,  3, 0, 1,  4, 2, 2,
209     BOX_CLOCK, 3, 2, 0,  4, 2, 2,  3, 4, 3,
210     BOX_CLOCK, 3, 2, 0,  3, 4, 3,  2, 2, 4 },
211 #define WIPE_B8_263     2
212   { BOX_CLOCK, 2, 1, 0,  2, 0, 0,  4, 1, 1,   
213     BOX_CLOCK, 2, 1, 0,  4, 1, 1,  2, 2, 2,
214     BOX_CLOCK, 2, 1, 0,  2, 0, 0,  0, 1, 1,
215     BOX_CLOCK, 2, 1, 0,  0, 1, 1,  2, 2, 2,
216     BOX_CLOCK, 2, 3, 0,  2, 4, 0,  4, 3, 1,
217     BOX_CLOCK, 2, 3, 0,  4, 3, 1,  2, 2, 2,
218     BOX_CLOCK, 2, 3, 0,  2, 4, 0,  0, 3, 1,
219     BOX_CLOCK, 2, 3, 0,  0, 3, 1,  2, 2, 2 },
220 #define WIPE_B8_264     3
221   { BOX_CLOCK, 1, 2, 0,  0, 2, 0,  1, 0, 1,   
222     BOX_CLOCK, 1, 2, 0,  1, 0, 1,  2, 2, 2,
223     BOX_CLOCK, 1, 2, 0,  0, 2, 0,  1, 4, 1,
224     BOX_CLOCK, 1, 2, 0,  1, 4, 1,  2, 2, 2,
225     BOX_CLOCK, 3, 2, 0,  4, 2, 0,  3, 0, 1,
226     BOX_CLOCK, 3, 2, 0,  3, 0, 1,  2, 2, 2,
227     BOX_CLOCK, 3, 2, 0,  4, 2, 0,  3, 4, 1,
228     BOX_CLOCK, 3, 2, 0,  3, 4, 1,  2, 2, 2 },
229 };
230
231 static gint triangles_2t[][2*9] = 
232 {
233   /* 3 -> 6 */
234 #define WIPE_T2_3       0
235   { 0, 0, 0,  0, 1, 1,  1, 1, 1,   
236     1, 0, 1,  0, 0, 0,  1, 1, 1 },
237 #define WIPE_T2_4       WIPE_T2_3+1
238   { 0, 0, 1,  1, 0, 0,  0, 1, 1, 
239     1, 0, 0,  0, 1, 1,  1, 1, 1 },
240 #define WIPE_T2_5       WIPE_T2_4+1
241   { 0, 0, 1,  0, 1, 1,  1, 1, 0,
242     1, 0, 1,  0, 0, 1,  1, 1, 0 },
243 #define WIPE_T2_6       WIPE_T2_5+1
244   { 0, 0, 1,  1, 0, 1,  0, 1, 0,
245     1, 0, 1,  0, 1, 0,  1, 1, 1 },
246 #define WIPE_T2_41      WIPE_T2_6+1
247   { 0, 0, 0,  1, 0, 1,  0, 1, 1,
248     1, 0, 1,  0, 1, 1,  1, 1, 2 },
249 #define WIPE_T2_42      WIPE_T2_41+1
250   { 0, 0, 1,  1, 0, 0,  1, 1, 1,
251     0, 0, 1,  0, 1, 2,  1, 1, 1 },
252 #define WIPE_T2_45      WIPE_T2_42+1
253   { 0, 0, 1,  1, 0, 0,  0, 1, 0,
254     1, 0, 0,  0, 1, 0,  1, 1, 1 },
255 #define WIPE_T2_46      WIPE_T2_45+1
256   { 0, 0, 0,  1, 0, 1,  1, 1, 0,
257     0, 0, 0,  0, 1, 1,  1, 1, 0 },
258 #define WIPE_T2_245     WIPE_T2_46+1
259   { 0, 0, 0,  2, 0, 0,  2, 2, 1,   
260     2, 2, 0,  0, 2, 0,  0, 0, 1 },
261 #define WIPE_T2_246     WIPE_T2_245+1
262   { 0, 2, 0,  0, 0, 0,  2, 0, 1,   
263     2, 0, 0,  2, 2, 0,  0, 2, 1 },
264 };
265
266 static gint triangles_3t[][3*9] = 
267 {
268   /* 23 -> 26 */
269 #define WIPE_T3_23      0
270   { 0, 0, 1,  1, 0, 0,  0, 2, 1,   
271     1, 0, 0,  0, 2, 1,  2, 2, 1,
272     1, 0, 0,  2, 0, 1,  2, 2, 1 },
273 #define WIPE_T3_24      1
274   { 0, 0, 1,  2, 0, 1,  2, 1, 0,
275     0, 0, 1,  2, 1, 0,  0, 2, 1,
276     2, 1, 0,  0, 2, 1,  2, 2, 1 },
277 #define WIPE_T3_25      2
278   { 0, 0, 1,  0, 2, 1,  1, 2, 0,
279     0, 0, 1,  2, 0, 1,  1, 2, 0,
280     2, 0, 1,  1, 2, 0,  2, 2, 1 },
281 #define WIPE_T3_26      3
282   { 0, 0, 1,  2, 0, 1,  0, 1, 0,
283     2, 0, 1,  0, 1, 0,  2, 2, 1,
284     0, 1, 0,  0, 2, 1,  2, 2, 1 },
285 };
286
287 static gint triangles_4t[][4*9] = 
288 {
289 #define WIPE_T4_61      0
290   { 0, 0, 1,  1, 0, 0,  1, 2, 1,   
291     0, 0, 1,  0, 2, 2,  1, 2, 1,
292     1, 0, 0,  2, 0, 1,  1, 2, 1,
293     2, 0, 1,  1, 2, 1,  2, 2, 2 },
294 #define WIPE_T4_62      1
295   { 0, 0, 2,  2, 0, 1,  0, 1, 1,   
296     2, 0, 1,  0, 1, 1,  2, 1, 0,
297     0, 1, 1,  2, 1, 0,  2, 2, 1,
298     0, 1, 1,  0, 2, 2,  2, 2, 1 },
299 #define WIPE_T4_63      2
300   { 0, 0, 2,  1, 0, 1,  0, 2, 1,   
301     1, 0, 1,  0, 2, 1,  1, 2, 0,
302     1, 0, 1,  1, 2, 0,  2, 2, 1,
303     1, 0, 1,  2, 0, 2,  2, 2, 1 },
304 #define WIPE_T4_64      3
305   { 0, 0, 1,  2, 0, 2,  2, 1, 1,   
306     0, 0, 1,  0, 1, 0,  2, 1, 1,
307     0, 1, 0,  2, 1, 1,  0, 2, 1,
308     2, 1, 1,  0, 2, 1,  2, 2, 2 },
309 #define WIPE_T4_65      4
310   { 0, 0, 0,  1, 0, 1,  1, 2, 0,   
311     0, 0, 0,  0, 2, 1,  1, 2, 0,
312     1, 0, 1,  2, 0, 0,  1, 2, 0,
313     2, 0, 0,  1, 2, 0,  2, 2, 1 },
314 #define WIPE_T4_66      5
315   { 0, 0, 1,  2, 0, 0,  0, 1, 0,   
316     2, 0, 0,  0, 1, 0,  2, 1, 1,
317     0, 1, 0,  2, 1, 1,  2, 2, 0,
318     0, 1, 0,  0, 2, 1,  2, 2, 0 },
319 #define WIPE_T4_67      6
320   { 0, 0, 1,  1, 0, 0,  0, 2, 0,   
321     1, 0, 0,  0, 2, 0,  1, 2, 1,
322     1, 0, 0,  1, 2, 1,  2, 2, 0,
323     1, 0, 0,  2, 0, 1,  2, 2, 0 },
324 #define WIPE_T4_68      7
325   { 0, 0, 0,  2, 0, 1,  2, 1, 0,   
326     0, 0, 0,  0, 1, 1,  2, 1, 0,
327     0, 1, 1,  2, 1, 0,  0, 2, 0,
328     2, 1, 0,  0, 2, 0,  2, 2, 1 },
329 #define WIPE_T4_101     8
330   { 0, 0, 1,  2, 0, 1,  1, 1, 0,   
331     0, 0, 1,  1, 1, 0,  0, 2, 1,
332     1, 1, 0,  0, 2, 1,  2, 2, 1,
333     2, 0, 1,  1, 1, 0,  2, 2, 1 },
334 };
335
336 static gint triangles_8t[][8*9] = 
337 {
338   /* 7 */
339 #define WIPE_T8_7       0
340   { 0, 0, 0,  1, 0, 1,  1, 1, 1,   
341     1, 0, 1,  2, 0, 0,  1, 1, 1,
342     2, 0, 0,  1, 1, 1,  2, 1, 1,
343     1, 1, 1,  2, 1, 1,  2, 2, 0,
344     1, 1, 1,  1, 2, 1,  2, 2, 0,
345     1, 1, 1,  0, 2, 0,  1, 2, 1,
346     0, 1, 1,  1, 1, 1,  0, 2, 0,
347     0, 0, 0,  0, 1, 1,  1, 1, 1 },
348 #define WIPE_T8_43      1
349   { 0, 0, 1,  1, 0, 0,  1, 1, 1,   
350     1, 0, 0,  2, 0, 1,  1, 1, 1,
351     2, 0, 1,  1, 1, 1,  2, 1, 2,
352     1, 1, 1,  2, 1, 2,  2, 2, 1,
353     1, 1, 1,  1, 2, 0,  2, 2, 1,
354     1, 1, 1,  0, 2, 1,  1, 2, 0,
355     0, 1, 2,  1, 1, 1,  0, 2, 1,
356     0, 0, 1,  0, 1, 2,  1, 1, 1 },
357 #define WIPE_T8_44      2
358   { 0, 0, 1,  1, 0, 2,  1, 1, 1,   
359     1, 0, 2,  2, 0, 1,  1, 1, 1,
360     2, 0, 1,  1, 1, 1,  2, 1, 0,
361     1, 1, 1,  2, 1, 0,  2, 2, 1,
362     1, 1, 1,  1, 2, 2,  2, 2, 1,
363     1, 1, 1,  0, 2, 1,  1, 2, 2,
364     0, 1, 0,  1, 1, 1,  0, 2, 1,
365     0, 0, 1,  0, 1, 0,  1, 1, 1 },
366 #define WIPE_T8_47      3
367   { 0, 0, 0,  1, 0, 1,  1, 1, 0,   
368     1, 0, 1,  2, 0, 0,  1, 1, 0,
369     2, 0, 0,  1, 1, 0,  2, 1, 1,
370     1, 1, 0,  2, 1, 1,  2, 2, 0,
371     1, 1, 0,  1, 2, 1,  2, 2, 0,
372     1, 1, 0,  0, 2, 0,  1, 2, 1,
373     0, 1, 1,  1, 1, 0,  0, 2, 0,
374     0, 0, 0,  0, 1, 1,  1, 1, 0 },
375 #define WIPE_T8_48      4
376   { 0, 0, 1,  1, 0, 0,  0, 1, 0,   
377     1, 0, 0,  0, 1, 0,  1, 1, 1,
378     1, 0, 0,  2, 0, 1,  2, 1, 0,
379     1, 0, 0,  1, 1, 1,  2, 1, 0,
380     0, 1, 0,  1, 1, 1,  1, 2, 0,
381     0, 1, 0,  0, 2, 1,  1, 2, 0,
382     1, 1, 1,  2, 1, 0,  1, 2, 0,
383     2, 1, 0,  1, 2, 0,  2, 2, 1 },
384 };
385
386 static gint triangles_16t[][16*9] = 
387 {
388   /* 8 */
389 #define WIPE_T16_8      0
390   { 0, 0, 1,  2, 0, 1,  1, 1, 0,   
391     2, 0, 1,  1, 1, 0,  2, 2, 1,
392     1, 1, 0,  0, 2, 1,  2, 2, 1,
393     0, 0, 1,  1, 1, 0,  0, 2, 1,
394     2, 0, 1,  4, 0, 1,  3, 1, 0,   
395     4, 0, 1,  3, 1, 0,  4, 2, 1,
396     3, 1, 0,  2, 2, 1,  4, 2, 1,
397     2, 0, 1,  3, 1, 0,  2, 2, 1,
398     0, 2, 1,  2, 2, 1,  1, 3, 0,   
399     2, 2, 1,  1, 3, 0,  2, 4, 1,
400     1, 3, 0,  0, 4, 1,  2, 4, 1,
401     0, 2, 1,  1, 3, 0,  0, 4, 1,
402     2, 2, 1,  4, 2, 1,  3, 3, 0,   
403     4, 2, 1,  3, 3, 0,  4, 4, 1,
404     3, 3, 0,  2, 4, 1,  4, 4, 1,
405     2, 2, 1,  3, 3, 0,  2, 4, 1 }
406 };
407
408 typedef struct _GstWipeConfig GstWipeConfig;
409
410 struct _GstWipeConfig {
411   gint  *objects;
412   gint   nobjects;
413   gint   xscale;
414   gint   yscale;
415   gint   cscale;
416 };
417
418 static GstWipeConfig wipe_config[] = 
419 {
420 #define WIPE_CONFIG_1   0
421   { boxes_1b[WIPE_B1_1],       1,  0, 0, 0 }, /* 1 */
422 #define WIPE_CONFIG_2   WIPE_CONFIG_1+1
423   { boxes_1b[WIPE_B1_2],       1,  0, 0, 0 }, /* 2 */
424 #define WIPE_CONFIG_3   WIPE_CONFIG_2+1
425   { triangles_2t[WIPE_T2_3],   2,  0, 0, 0 }, /* 3 */
426 #define WIPE_CONFIG_4   WIPE_CONFIG_3+1
427   { triangles_2t[WIPE_T2_4],   2,  0, 0, 0 }, /* 4 */
428 #define WIPE_CONFIG_5   WIPE_CONFIG_4+1
429   { triangles_2t[WIPE_T2_5],   2,  0, 0, 0 }, /* 5 */
430 #define WIPE_CONFIG_6   WIPE_CONFIG_5+1
431   { triangles_2t[WIPE_T2_6],   2,  0, 0, 0 }, /* 6 */
432 #define WIPE_CONFIG_7   WIPE_CONFIG_6+1
433   { triangles_8t[WIPE_T8_7],   8,  1, 1, 0 }, /* 7 */
434 #define WIPE_CONFIG_8   WIPE_CONFIG_7+1
435   { triangles_16t[WIPE_T16_8], 16, 2, 2, 0 }, /* 8 */
436
437 #define WIPE_CONFIG_21  WIPE_CONFIG_8+1
438   { boxes_2b[WIPE_B2_21],      2, 1, 1, 0 }, /* 21 */
439 #define WIPE_CONFIG_22  WIPE_CONFIG_21+1
440   { boxes_2b[WIPE_B2_22],      2, 1, 1, 0 }, /* 22 */
441
442 #define WIPE_CONFIG_23  WIPE_CONFIG_22+1
443   { triangles_3t[WIPE_T3_23],   3,  1, 1, 0 }, /* 23 */
444 #define WIPE_CONFIG_24  WIPE_CONFIG_23+1
445   { triangles_3t[WIPE_T3_24],   3,  1, 1, 0 }, /* 24 */
446 #define WIPE_CONFIG_25  WIPE_CONFIG_24+1
447   { triangles_3t[WIPE_T3_23],   3,  1, 1, 0 }, /* 25 */
448 #define WIPE_CONFIG_26  WIPE_CONFIG_25+1
449   { triangles_3t[WIPE_T3_26],   3,  1, 1, 0 }, /* 26 */
450 #define WIPE_CONFIG_41  WIPE_CONFIG_26+1
451   { triangles_2t[WIPE_T2_41],   2,  0, 0, 1 }, /* 41 */
452 #define WIPE_CONFIG_42  WIPE_CONFIG_41+1
453   { triangles_2t[WIPE_T2_42],   2,  0, 0, 1 }, /* 42 */
454 #define WIPE_CONFIG_43  WIPE_CONFIG_42+1
455   { triangles_8t[WIPE_T8_43],   8,  1, 1, 1 }, /* 43 */
456 #define WIPE_CONFIG_44  WIPE_CONFIG_43+1
457   { triangles_8t[WIPE_T8_44],   8,  1, 1, 1 }, /* 44 */
458 #define WIPE_CONFIG_45  WIPE_CONFIG_44+1
459   { triangles_2t[WIPE_T2_45],   2,  0, 0, 0 }, /* 45 */
460 #define WIPE_CONFIG_46  WIPE_CONFIG_45+1
461   { triangles_2t[WIPE_T2_46],   2,  0, 0, 0 }, /* 46 */
462 #define WIPE_CONFIG_47  WIPE_CONFIG_46+1
463   { triangles_8t[WIPE_T8_47],   8,  1, 1, 0 }, /* 47 */
464 #define WIPE_CONFIG_48  WIPE_CONFIG_47+1
465   { triangles_8t[WIPE_T8_48],   8,  1, 1, 0 }, /* 48 */
466 #define WIPE_CONFIG_61  WIPE_CONFIG_48+1
467   { triangles_4t[WIPE_T4_61],   4,  1, 1, 1 }, /* 61 */
468 #define WIPE_CONFIG_62  WIPE_CONFIG_61+1
469   { triangles_4t[WIPE_T4_62],   4,  1, 1, 1 }, /* 62 */
470 #define WIPE_CONFIG_63  WIPE_CONFIG_62+1
471   { triangles_4t[WIPE_T4_63],   4,  1, 1, 1 }, /* 63 */
472 #define WIPE_CONFIG_64  WIPE_CONFIG_63+1
473   { triangles_4t[WIPE_T4_64],   4,  1, 1, 1 }, /* 64 */
474 #define WIPE_CONFIG_65  WIPE_CONFIG_64+1
475   { triangles_4t[WIPE_T4_65],   4,  1, 1, 0 }, /* 65 */
476 #define WIPE_CONFIG_66  WIPE_CONFIG_65+1
477   { triangles_4t[WIPE_T4_66],   4,  1, 1, 0 }, /* 66 */
478 #define WIPE_CONFIG_67  WIPE_CONFIG_66+1
479   { triangles_4t[WIPE_T4_67],   4,  1, 1, 0 }, /* 67 */
480 #define WIPE_CONFIG_68  WIPE_CONFIG_67+1
481   { triangles_4t[WIPE_T4_68],   4,  1, 1, 0 }, /* 68 */
482 #define WIPE_CONFIG_101 WIPE_CONFIG_68+1
483   { triangles_4t[WIPE_T4_101],  4,  1, 1, 0 }, /* 101 */
484 #define WIPE_CONFIG_201 WIPE_CONFIG_101+1
485   { box_clock_4b[WIPE_B4_201],  4,  1, 1, 2 }, /* 201 */
486 #define WIPE_CONFIG_202 WIPE_CONFIG_201+1
487   { box_clock_4b[WIPE_B4_202],  4,  1, 1, 2 }, /* 202 */
488 #define WIPE_CONFIG_203 WIPE_CONFIG_202+1
489   { box_clock_4b[WIPE_B4_203],  4,  1, 1, 2 }, /* 203 */
490 #define WIPE_CONFIG_204 WIPE_CONFIG_203+1
491   { box_clock_4b[WIPE_B4_204],  4,  1, 1, 2 }, /* 204 */
492 #define WIPE_CONFIG_205 WIPE_CONFIG_204+1
493   { box_clock_4b[WIPE_B4_205],  4,  1, 1, 1 }, /* 205 */
494 #define WIPE_CONFIG_206 WIPE_CONFIG_205+1
495   { box_clock_4b[WIPE_B4_206],  4,  1, 1, 1 }, /* 206 */
496 #define WIPE_CONFIG_207 WIPE_CONFIG_206+1
497   { box_clock_4b[WIPE_B4_207],  4,  1, 1, 0 }, /* 207 */
498 #define WIPE_CONFIG_211 WIPE_CONFIG_207+1
499   { box_clock_4b[WIPE_B4_211],  4,  1, 1, 1 }, /* 211 */
500 #define WIPE_CONFIG_212 WIPE_CONFIG_211+1
501   { box_clock_4b[WIPE_B4_212],  4,  1, 1, 1 }, /* 212 */
502 #define WIPE_CONFIG_213 WIPE_CONFIG_212+1
503   { box_clock_4b[WIPE_B4_213],  4,  1, 1, 0 }, /* 213 */
504 #define WIPE_CONFIG_214 WIPE_CONFIG_213+1
505   { box_clock_4b[WIPE_B4_214],  4,  1, 1, 0 }, /* 214 */
506 #define WIPE_CONFIG_221 WIPE_CONFIG_214+1
507   { box_clock_2b[WIPE_B2_221],  2,  1, 1, 1 }, /* 221 */
508 #define WIPE_CONFIG_222 WIPE_CONFIG_221+1
509   { box_clock_2b[WIPE_B2_222],  2,  1, 1, 1 }, /* 222 */
510 #define WIPE_CONFIG_223 WIPE_CONFIG_222+1
511   { box_clock_2b[WIPE_B2_223],  2,  1, 1, 1 }, /* 223 */
512 #define WIPE_CONFIG_224 WIPE_CONFIG_223+1
513   { box_clock_2b[WIPE_B2_224],  2,  1, 1, 1 }, /* 224 */
514 #define WIPE_CONFIG_225 WIPE_CONFIG_224+1
515   { box_clock_2b[WIPE_B2_225],  2,  1, 1, 0 }, /* 225 */
516 #define WIPE_CONFIG_226 WIPE_CONFIG_225+1
517   { box_clock_2b[WIPE_B2_226],  2,  1, 1, 0 }, /* 226 */
518 #define WIPE_CONFIG_227 WIPE_CONFIG_226+1
519   { box_clock_4b[WIPE_B4_227],  4,  1, 1, 1 }, /* 227 */
520 #define WIPE_CONFIG_228 WIPE_CONFIG_227+1
521   { box_clock_4b[WIPE_B4_228],  4,  1, 1, 1 }, /* 228 */
522 #define WIPE_CONFIG_231 WIPE_CONFIG_228+1
523   { box_clock_2b[WIPE_B2_231],  2,  1, 1, 0 }, /* 231 */
524 #define WIPE_CONFIG_232 WIPE_CONFIG_231+1
525   { box_clock_2b[WIPE_B2_232],  2,  1, 1, 0 }, /* 232 */
526 #define WIPE_CONFIG_233 WIPE_CONFIG_232+1
527   { box_clock_2b[WIPE_B2_233],  2,  1, 1, 0 }, /* 233 */
528 #define WIPE_CONFIG_234 WIPE_CONFIG_233+1
529   { box_clock_2b[WIPE_B2_234],  2,  1, 1, 0 }, /* 234 */
530 #define WIPE_CONFIG_235 WIPE_CONFIG_234+1
531   { box_clock_4b[WIPE_B4_235],  4,  1, 1, 0 }, /* 235 */
532 #define WIPE_CONFIG_236 WIPE_CONFIG_235+1
533   { box_clock_4b[WIPE_B4_236],  4,  1, 1, 0 }, /* 236 */
534 #define WIPE_CONFIG_241 WIPE_CONFIG_236+1
535   { box_clock_1b[WIPE_B1_241],  1,  0, 0, 0 }, /* 241 */
536 #define WIPE_CONFIG_242 WIPE_CONFIG_241+1
537   { box_clock_1b[WIPE_B1_242],  1,  0, 0, 0 }, /* 242 */
538 #define WIPE_CONFIG_243 WIPE_CONFIG_242+1
539   { box_clock_1b[WIPE_B1_243],  1,  0, 0, 0 }, /* 243 */
540 #define WIPE_CONFIG_244 WIPE_CONFIG_243+1
541   { box_clock_1b[WIPE_B1_244],  1,  0, 0, 0 }, /* 244 */
542 #define WIPE_CONFIG_245 WIPE_CONFIG_244+1
543   { triangles_2t[WIPE_T2_245],  2,  1, 1, 0 }, /* 245 */
544 #define WIPE_CONFIG_246 WIPE_CONFIG_245+1
545   { triangles_2t[WIPE_T2_246],  2,  1, 1, 0 }, /* 246 */
546 #define WIPE_CONFIG_251 WIPE_CONFIG_246+1
547   { box_clock_2b[WIPE_B2_251],  2,  1, 1, 0 }, /* 251 */
548 #define WIPE_CONFIG_252 WIPE_CONFIG_251+1
549   { box_clock_2b[WIPE_B2_252],  2,  1, 1, 0 }, /* 252 */
550 #define WIPE_CONFIG_253 WIPE_CONFIG_252+1
551   { box_clock_2b[WIPE_B2_253],  2,  1, 1, 0 }, /* 253 */
552 #define WIPE_CONFIG_254 WIPE_CONFIG_253+1
553   { box_clock_2b[WIPE_B2_254],  2,  1, 1, 0 }, /* 254 */
554
555 #define WIPE_CONFIG_261 WIPE_CONFIG_254+1
556   { box_clock_8b[WIPE_B8_261],  8,  2, 2, 2 }, /* 261 */
557 #define WIPE_CONFIG_262 WIPE_CONFIG_261+1
558   { box_clock_8b[WIPE_B8_262],  8,  2, 2, 2 }, /* 262 */
559 #define WIPE_CONFIG_263 WIPE_CONFIG_262+1
560   { box_clock_8b[WIPE_B8_263],  8,  2, 2, 1 }, /* 263 */
561 #define WIPE_CONFIG_264 WIPE_CONFIG_263+1
562   { box_clock_8b[WIPE_B8_264],  8,  2, 2, 1 }, /* 264 */
563 };
564
565 static void
566 gst_wipe_boxes_draw (GstMask *mask)
567 {
568   GstWipeConfig *config = mask->user_data;
569   gint *impacts = config->objects;
570   gint width = (mask->width >> config->xscale);
571   gint height = (mask->height >> config->yscale);
572   gint depth = (1 << mask->bpp) >> config->cscale;
573
574   gint i;
575
576   for (i = 0; i < config->nobjects; i++) {
577     switch (impacts[0]) {
578       case BOX_VERTICAL:
579         gst_smpte_paint_vbox (mask->data, mask->width, 
580                           impacts[1] * width, impacts[2] * height, impacts[3] * depth,
581                           impacts[4] * width, impacts[5] * height, impacts[6] * depth);
582         impacts += 7;
583         break;
584       case BOX_HORIZONTAL:
585         gst_smpte_paint_hbox (mask->data, mask->width, 
586                           impacts[1] * width, impacts[2] * height, impacts[3] * depth,
587                           impacts[4] * width, impacts[5] * height, impacts[6] * depth);
588         impacts += 7;
589       case BOX_CLOCK:
590         gst_smpte_paint_box_clock (mask->data, mask->width,
591                           impacts[1] * width, impacts[2] * height, impacts[3] * depth,
592                           impacts[4] * width, impacts[5] * height, impacts[6] * depth,
593                           impacts[7] * width, impacts[8] * height, impacts[9] * depth);
594         impacts += 10;
595       default:
596         break;
597     }
598   }
599 }
600
601 static void
602 gst_wipe_triangles_clock_draw (GstMask *mask)
603 {
604   GstWipeConfig *config = mask->user_data;
605   gint *impacts = config->objects;
606   gint width = (mask->width >> config->xscale);
607   gint height = (mask->height >> config->yscale);
608   gint depth = (1 << mask->bpp) >> config->cscale;
609   gint i;
610
611   for (i = 0; i < config->nobjects; i++) {
612     gst_smpte_paint_triangle_clock (mask->data, mask->width,
613                            impacts[0] * width, impacts[1] * height, impacts[2] * depth,
614                            impacts[3] * width, impacts[4] * height, impacts[5] * depth,
615                            impacts[6] * width, impacts[7] * height, impacts[8] * depth);
616     impacts += 9;
617   }
618 }
619
620 static void
621 gst_wipe_triangles_draw (GstMask *mask)
622 {
623   GstWipeConfig *config = mask->user_data;
624   gint *impacts = config->objects;
625   gint width = (mask->width >> config->xscale);
626   gint height = (mask->height >> config->yscale);
627   gint depth = (1 << mask->bpp) >> config->cscale;
628
629   gint i;
630
631   for (i = 0; i < config->nobjects; i++) {
632     gst_smpte_paint_triangle_linear (mask->data, mask->width,
633                            impacts[0] * width, impacts[1] * height, impacts[2] * depth,
634                            impacts[3] * width, impacts[4] * height, impacts[5] * depth,
635                            impacts[6] * width, impacts[7] * height, impacts[8] * depth);
636     impacts += 9;
637   }
638 }
639
640 static GstMaskDefinition definitions[] = { 
641  { 1,  "bar_wipe_lr", 
642        "A bar moves from left to right", 
643         gst_wipe_boxes_draw, _gst_mask_default_destroy, 
644         &wipe_config[WIPE_CONFIG_1] },
645  { 2,  "bar_wipe_tb", 
646        "A bar moves from top to bottom", 
647         gst_wipe_boxes_draw, _gst_mask_default_destroy, 
648         &wipe_config[WIPE_CONFIG_2] },
649  { 3,  "box_wipe_tl", 
650        "A box expands from the upper-left corner to the lower-right corner", 
651         gst_wipe_triangles_draw, _gst_mask_default_destroy, 
652         &wipe_config[WIPE_CONFIG_3] },
653  { 4,  "box_wipe_tr", 
654        "A box expands from the upper-right corner to the lower-left corner", 
655         gst_wipe_triangles_draw, _gst_mask_default_destroy, 
656         &wipe_config[WIPE_CONFIG_4] },
657  { 5,  "box_wipe_br", 
658        "A box expands from the lower-right corner to the upper-left corner", 
659         gst_wipe_triangles_draw, _gst_mask_default_destroy, 
660         &wipe_config[WIPE_CONFIG_5] },
661  { 6,  "box_wipe_bl", 
662        "A box expands from the lower-left corner to the upper-right corner", 
663         gst_wipe_triangles_draw, _gst_mask_default_destroy,
664         &wipe_config[WIPE_CONFIG_6] },
665  { 7 , "four_box_wipe_ci", 
666        "A box shape expands from each of the four corners toward the center", 
667         gst_wipe_triangles_draw, _gst_mask_default_destroy,
668         &wipe_config[WIPE_CONFIG_7] },
669  { 8 , "four_box_wipe_co", 
670        "A box shape expands from the center of each quadrant toward the corners of each quadrant", 
671         gst_wipe_triangles_draw, _gst_mask_default_destroy,
672         &wipe_config[WIPE_CONFIG_8] },
673  { 21, "barndoor_v",
674        "A central, vertical line splits and expands toward the left and right edges", 
675         gst_wipe_boxes_draw, _gst_mask_default_destroy, 
676         &wipe_config[WIPE_CONFIG_21] },
677  { 22, "barndoor_h",
678        "A central, horizontal line splits and expands toward the top and bottom edges", 
679         gst_wipe_boxes_draw, _gst_mask_default_destroy, 
680         &wipe_config[WIPE_CONFIG_22] },
681  { 23, "box_wipe_tc",
682        "A box expands from the top edge's midpoint to the bottom corners", 
683         gst_wipe_triangles_draw, _gst_mask_default_destroy,
684         &wipe_config[WIPE_CONFIG_23] },
685  { 24, "box_wipe_rc",
686        "A box expands from the right edge's midpoint to the left corners", 
687         gst_wipe_triangles_draw, _gst_mask_default_destroy,
688         &wipe_config[WIPE_CONFIG_24] },
689  { 25, "box_wipe_bc",
690        "A box expands from the bottom edge's midpoint to the top corners", 
691         gst_wipe_triangles_draw, _gst_mask_default_destroy,
692         &wipe_config[WIPE_CONFIG_25] },
693  { 26, "box_wipe_lc",
694        "A box expands from the left edge's midpoint to the right corners", 
695         gst_wipe_triangles_draw, _gst_mask_default_destroy,
696         &wipe_config[WIPE_CONFIG_26] },
697  { 41, "diagonal_tl",
698        "A diagonal line moves from the upper-left corner to the lower-right corner", 
699         gst_wipe_triangles_draw, _gst_mask_default_destroy,
700         &wipe_config[WIPE_CONFIG_41] },
701  { 42, "diagonal_tr",
702        "A diagonal line moves from the upper right corner to the lower-left corner", 
703         gst_wipe_triangles_draw, _gst_mask_default_destroy,
704         &wipe_config[WIPE_CONFIG_42] },
705  { 43, "bowtie_v",
706        "Two wedge shapes slide in from the top and bottom edges toward the center", 
707         gst_wipe_triangles_draw, _gst_mask_default_destroy,
708         &wipe_config[WIPE_CONFIG_43] },
709  { 44, "bowtie_h",
710        "Two wedge shapes slide in from the left and right edges toward the center", 
711         gst_wipe_triangles_draw, _gst_mask_default_destroy,
712         &wipe_config[WIPE_CONFIG_44] },
713  { 45, "barndoor_dbl",
714        "A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners", 
715         gst_wipe_triangles_draw, _gst_mask_default_destroy,
716         &wipe_config[WIPE_CONFIG_45] },
717  { 46, "barndoor_dtl",
718        "A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners", 
719         gst_wipe_triangles_draw, _gst_mask_default_destroy,
720         &wipe_config[WIPE_CONFIG_46] },
721  { 47, "misc_diagonal_dbd",
722        "Four wedge shapes split from the center and retract toward the four edges", 
723         gst_wipe_triangles_draw, _gst_mask_default_destroy,
724         &wipe_config[WIPE_CONFIG_47] },
725  { 48, "misc_diagonal_dd",
726        "A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges", 
727         gst_wipe_triangles_draw, _gst_mask_default_destroy,
728         &wipe_config[WIPE_CONFIG_48] },
729  { 61, "vee_d",
730        "A wedge shape moves from top to bottom", 
731         gst_wipe_triangles_draw, _gst_mask_default_destroy,
732         &wipe_config[WIPE_CONFIG_61] },
733  { 62, "vee_l",
734        "A wedge shape moves from right to left", 
735         gst_wipe_triangles_draw, _gst_mask_default_destroy,
736         &wipe_config[WIPE_CONFIG_62] },
737  { 63, "vee_u",
738        "A wedge shape moves from bottom to top", 
739         gst_wipe_triangles_draw, _gst_mask_default_destroy,
740         &wipe_config[WIPE_CONFIG_63] },
741  { 64, "vee_r",
742        "A wedge shape moves from left to right", 
743         gst_wipe_triangles_draw, _gst_mask_default_destroy,
744         &wipe_config[WIPE_CONFIG_64] },
745  { 65, "barnvee_d",
746        "A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", 
747         gst_wipe_triangles_draw, _gst_mask_default_destroy,
748         &wipe_config[WIPE_CONFIG_65] },
749  { 66, "barnvee_l",
750        "A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", 
751         gst_wipe_triangles_draw, _gst_mask_default_destroy,
752         &wipe_config[WIPE_CONFIG_66] },
753  { 67, "barnvee_u",
754        "A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", 
755         gst_wipe_triangles_draw, _gst_mask_default_destroy,
756         &wipe_config[WIPE_CONFIG_67] },
757  { 68, "barnvee_r",
758        "A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", 
759         gst_wipe_triangles_draw, _gst_mask_default_destroy,
760         &wipe_config[WIPE_CONFIG_68] },
761  { 101, "iris_rect",
762         "A rectangle expands from the center.", 
763         gst_wipe_triangles_draw, _gst_mask_default_destroy,
764         &wipe_config[WIPE_CONFIG_101] },
765  { 201, "clock_cw12",
766         "A radial hand sweeps clockwise from the twelve o'clock position", 
767         gst_wipe_boxes_draw, _gst_mask_default_destroy,
768         &wipe_config[WIPE_CONFIG_201] },
769  { 202, "clock_cw3",
770         "A radial hand sweeps clockwise from the three o'clock position", 
771         gst_wipe_boxes_draw, _gst_mask_default_destroy,
772         &wipe_config[WIPE_CONFIG_202] },
773  { 203, "clock_cw6",
774         "A radial hand sweeps clockwise from the six o'clock position", 
775         gst_wipe_boxes_draw, _gst_mask_default_destroy,
776         &wipe_config[WIPE_CONFIG_203] },
777  { 204, "clock_cw9",
778         "A radial hand sweeps clockwise from the nine o'clock position", 
779         gst_wipe_boxes_draw, _gst_mask_default_destroy,
780         &wipe_config[WIPE_CONFIG_204] },
781  { 205, "pinwheel_tbv",
782         "Two radial hands sweep clockwise from the twelve and six o'clock positions", 
783         gst_wipe_boxes_draw, _gst_mask_default_destroy,
784         &wipe_config[WIPE_CONFIG_205] },
785  { 206, "pinwheel_tbh",
786         "Two radial hands sweep clockwise from the nine and three o'clock positions", 
787         gst_wipe_boxes_draw, _gst_mask_default_destroy,
788         &wipe_config[WIPE_CONFIG_206] },
789  { 207, "pinwheel_fb",
790         "Four radial hands sweep clockwise", 
791         gst_wipe_boxes_draw, _gst_mask_default_destroy,
792         &wipe_config[WIPE_CONFIG_207] },
793  { 211, "fan_ct",
794         "A fan unfolds from the top edge, the fan axis at the center", 
795         gst_wipe_boxes_draw, _gst_mask_default_destroy,
796         &wipe_config[WIPE_CONFIG_211] },
797  { 212, "fan_cr",
798         "A fan unfolds from the right edge, the fan axis at the center", 
799         gst_wipe_boxes_draw, _gst_mask_default_destroy,
800         &wipe_config[WIPE_CONFIG_212] },
801  { 213, "doublefan_fov",
802         "Two fans, their axes at the center, unfold from the top and bottom", 
803         gst_wipe_boxes_draw, _gst_mask_default_destroy,
804         &wipe_config[WIPE_CONFIG_213] },
805  { 214, "doublefan_foh",
806         "Two fans, their axes at the center, unfold from the left and right", 
807         gst_wipe_boxes_draw, _gst_mask_default_destroy,
808         &wipe_config[WIPE_CONFIG_214] },
809  { 221, "singlesweep_cwt",
810         "A radial hand sweeps clockwise from the top edge's midpoint", 
811         gst_wipe_boxes_draw, _gst_mask_default_destroy,
812         &wipe_config[WIPE_CONFIG_221] },
813  { 222, "singlesweep_cwr",
814         "A radial hand sweeps clockwise from the right edge's midpoint", 
815         gst_wipe_boxes_draw, _gst_mask_default_destroy,
816         &wipe_config[WIPE_CONFIG_222] },
817  { 223, "singlesweep_cwb",
818         "A radial hand sweeps clockwise from the bottom edge's midpoint", 
819         gst_wipe_boxes_draw, _gst_mask_default_destroy,
820         &wipe_config[WIPE_CONFIG_223] },
821  { 224, "singlesweep_cwl",
822         "A radial hand sweeps clockwise from the left edge's midpoint", 
823         gst_wipe_boxes_draw, _gst_mask_default_destroy,
824         &wipe_config[WIPE_CONFIG_224] },
825  { 225, "doublesweep_pv",
826         "Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints", 
827         gst_wipe_boxes_draw, _gst_mask_default_destroy,
828         &wipe_config[WIPE_CONFIG_225] },
829  { 226, "doublesweep_pd",
830         "Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints", 
831         gst_wipe_boxes_draw, _gst_mask_default_destroy,
832         &wipe_config[WIPE_CONFIG_226] },
833  { 227, "doublesweep_ov",
834         "Two radial hands attached at the top and bottom edges' midpoints sweep from right to left", 
835         gst_wipe_boxes_draw, _gst_mask_default_destroy,
836         &wipe_config[WIPE_CONFIG_227] },
837  { 228, "doublesweep_oh",
838         "Two radial hands attached at the left and right edges' midpoints sweep from top to bottom", 
839         gst_wipe_boxes_draw, _gst_mask_default_destroy,
840         &wipe_config[WIPE_CONFIG_228] },
841  { 231, "fan_t",
842         "A fan unfolds from the bottom, the fan axis at the top edge's midpoint", 
843         gst_wipe_boxes_draw, _gst_mask_default_destroy,
844         &wipe_config[WIPE_CONFIG_231] },
845  { 232, "fan_r",
846         "A fan unfolds from the left, the fan axis at the right edge's midpoint", 
847         gst_wipe_boxes_draw, _gst_mask_default_destroy,
848         &wipe_config[WIPE_CONFIG_232] },
849  { 233, "fan_b",
850         "A fan unfolds from the top, the fan axis at the bottom edge's midpoint", 
851         gst_wipe_boxes_draw, _gst_mask_default_destroy,
852         &wipe_config[WIPE_CONFIG_233] },
853  { 234, "fan_l",
854         "A fan unfolds from the right, the fan axis at the left edge's midpoint", 
855         gst_wipe_boxes_draw, _gst_mask_default_destroy,
856         &wipe_config[WIPE_CONFIG_234] },
857  { 235, "doublefan_fiv",
858         "Two fans, their axes at the top and bottom, unfold from the center", 
859         gst_wipe_boxes_draw, _gst_mask_default_destroy,
860         &wipe_config[WIPE_CONFIG_235] },
861  { 236, "doublefan_fih",
862         "Two fans, their axes at the left and right, unfold from the center", 
863         gst_wipe_boxes_draw, _gst_mask_default_destroy,
864         &wipe_config[WIPE_CONFIG_236] },
865  { 241, "singlesweep_cwtl",
866         "A radial hand sweeps clockwise from the upper-left corner", 
867         gst_wipe_boxes_draw, _gst_mask_default_destroy,
868         &wipe_config[WIPE_CONFIG_241] },
869  { 242, "singlesweep_cwbl",
870         "A radial hand sweeps counter-clockwise from the lower-left corner.", 
871         gst_wipe_boxes_draw, _gst_mask_default_destroy,
872         &wipe_config[WIPE_CONFIG_242] },
873  { 243, "singlesweep_cwbr",
874         "A radial hand sweeps clockwise from the lower-right corner", 
875         gst_wipe_boxes_draw, _gst_mask_default_destroy,
876         &wipe_config[WIPE_CONFIG_243] },
877  { 244, "singlesweep_cwtr",
878         "A radial hand sweeps counter-clockwise from the upper-right corner", 
879         gst_wipe_boxes_draw, _gst_mask_default_destroy,
880         &wipe_config[WIPE_CONFIG_244] },
881  { 245, "doublesweep_pdtl",
882         "Two radial hands attached at the upper-left and lower-right corners sweep down and up", 
883         gst_wipe_triangles_clock_draw, _gst_mask_default_destroy,
884         &wipe_config[WIPE_CONFIG_245] },
885  { 246, "doublesweep_pdbl",
886         "Two radial hands attached at the lower-left and upper-right corners sweep down and up", 
887         gst_wipe_triangles_clock_draw, _gst_mask_default_destroy,
888         &wipe_config[WIPE_CONFIG_246] },
889  { 251, "saloondoor_t",
890         "Two radial hands attached at the upper-left and upper-right corners sweep down", 
891         gst_wipe_boxes_draw, _gst_mask_default_destroy,
892         &wipe_config[WIPE_CONFIG_251] },
893  { 252, "saloondoor_l",
894         "Two radial hands attached at the upper-left and lower-left corners sweep to the right", 
895         gst_wipe_boxes_draw, _gst_mask_default_destroy,
896         &wipe_config[WIPE_CONFIG_252] },
897  { 253, "saloondoor_b",
898         "Two radial hands attached at the lower-left and lower-right corners sweep up", 
899         gst_wipe_boxes_draw, _gst_mask_default_destroy,
900         &wipe_config[WIPE_CONFIG_253] },
901  { 254, "saloondoor_r",
902         "Two radial hands attached at the upper-right and lower-right corners sweep to the left", 
903         gst_wipe_boxes_draw, _gst_mask_default_destroy,
904         &wipe_config[WIPE_CONFIG_254] },
905  { 261, "windshield_r",
906         "Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left", 
907         gst_wipe_boxes_draw, _gst_mask_default_destroy,
908         &wipe_config[WIPE_CONFIG_261] },
909  { 262, "windshield_u",
910         "Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom", 
911         gst_wipe_boxes_draw, _gst_mask_default_destroy,
912         &wipe_config[WIPE_CONFIG_262] },
913  { 263, "windshield_v",
914         "Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top", 
915         gst_wipe_boxes_draw, _gst_mask_default_destroy,
916         &wipe_config[WIPE_CONFIG_263] },
917  { 264, "windshield_h",
918         "Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left", 
919         gst_wipe_boxes_draw, _gst_mask_default_destroy,
920         &wipe_config[WIPE_CONFIG_264] },
921  { 0, NULL, NULL, NULL }
922 };
923
924 void
925 _gst_barboxwipes_register (void)
926 {
927   gint i = 0;
928
929   while (definitions[i].short_name) {
930     _gst_mask_register (&definitions[i]);
931     i++;
932   }
933 }
934