/* GStreamer * Copyright (C) <1999> Erik Walthinsen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "paint.h" #include "gstmask.h" enum { BOX_VERTICAL = 1, BOX_HORIZONTAL = 2, BOX_CLOCK = 3, TRIGANLE_LINEAR = 4 }; static const gint boxes_1b[][7] = { #define WIPE_B1_1 0 {BOX_VERTICAL, 0, 0, 0, 1, 1, 1}, #define WIPE_B1_2 1 {BOX_HORIZONTAL, 0, 0, 0, 1, 1, 1} }; static const gint boxes_2b[][7 * 2] = { #define WIPE_B2_21 0 {BOX_VERTICAL, 0, 0, 1, 1, 2, 0, BOX_VERTICAL, 1, 0, 0, 2, 2, 1}, #define WIPE_B2_22 1 {BOX_HORIZONTAL, 0, 0, 1, 2, 1, 0, BOX_HORIZONTAL, 0, 1, 0, 2, 2, 1}, }; static const gint box_clock_1b[][1 * 10] = { #define WIPE_B1_241 0 {BOX_CLOCK, 0, 0, 0, 1, 0, 0, 0, 1, 1}, #define WIPE_B1_242 1 {BOX_CLOCK, 0, 1, 0, 1, 1, 0, 0, 0, 1}, #define WIPE_B1_243 2 {BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 0, 1}, #define WIPE_B1_244 3 {BOX_CLOCK, 1, 0, 0, 0, 0, 0, 1, 1, 1}, }; #define WIPE_B2_221 0 static const gint box_clock_2b[][2 * 10] = { #define WIPE_B2_221 0 {BOX_CLOCK, 1, 0, 0, 2, 0, 0, 1, 2, 1, BOX_CLOCK, 1, 0, 0, 1, 2, 1, 0, 0, 2}, #define WIPE_B2_222 1 {BOX_CLOCK, 2, 1, 0, 2, 2, 0, 0, 1, 1, BOX_CLOCK, 2, 1, 0, 0, 1, 1, 2, 0, 2}, #define WIPE_B2_223 2 {BOX_CLOCK, 1, 2, 0, 0, 2, 0, 1, 0, 1, BOX_CLOCK, 1, 2, 0, 1, 0, 1, 2, 2, 2}, #define WIPE_B2_224 3 {BOX_CLOCK, 0, 1, 0, 0, 0, 0, 2, 1, 1, BOX_CLOCK, 0, 1, 0, 2, 1, 1, 0, 2, 2}, #define WIPE_B2_225 4 {BOX_CLOCK, 1, 0, 0, 2, 0, 0, 1, 2, 1, BOX_CLOCK, 1, 2, 0, 0, 2, 0, 1, 0, 1}, #define WIPE_B2_226 5 {BOX_CLOCK, 0, 1, 0, 0, 0, 0, 2, 1, 1, BOX_CLOCK, 2, 1, 0, 2, 2, 0, 0, 1, 1}, #define WIPE_B2_231 6 {BOX_CLOCK, 1, 0, 0, 1, 2, 0, 2, 0, 1, BOX_CLOCK, 1, 0, 0, 1, 2, 0, 0, 0, 1}, #define WIPE_B2_232 7 {BOX_CLOCK, 2, 1, 0, 0, 1, 0, 2, 0, 1, BOX_CLOCK, 2, 1, 0, 0, 1, 0, 2, 2, 1}, #define WIPE_B2_233 8 {BOX_CLOCK, 1, 2, 0, 1, 0, 0, 2, 2, 1, BOX_CLOCK, 1, 2, 0, 1, 0, 0, 0, 2, 1}, #define WIPE_B2_234 9 {BOX_CLOCK, 0, 1, 0, 2, 1, 0, 0, 0, 1, BOX_CLOCK, 0, 1, 0, 2, 1, 0, 0, 2, 1}, #define WIPE_B2_251 10 {BOX_CLOCK, 0, 0, 0, 1, 0, 0, 0, 2, 1, BOX_CLOCK, 2, 0, 0, 1, 0, 0, 2, 2, 1}, #define WIPE_B2_252 11 {BOX_CLOCK, 0, 0, 0, 0, 1, 0, 2, 0, 1, BOX_CLOCK, 0, 2, 0, 0, 1, 0, 2, 2, 1}, #define WIPE_B2_253 12 {BOX_CLOCK, 0, 2, 0, 1, 2, 0, 0, 0, 1, BOX_CLOCK, 2, 2, 0, 1, 2, 0, 2, 0, 1}, #define WIPE_B2_254 13 {BOX_CLOCK, 2, 0, 0, 2, 1, 0, 0, 0, 1, BOX_CLOCK, 2, 2, 0, 2, 1, 0, 0, 2, 1}, }; static const gint box_clock_4b[][4 * 10] = { #define WIPE_B4_201 0 {BOX_CLOCK, 1, 1, 0, 1, 0, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 2, 1, 1, 1, 2, 2, BOX_CLOCK, 1, 1, 0, 1, 2, 2, 0, 1, 3, BOX_CLOCK, 1, 1, 0, 0, 1, 3, 1, 0, 4}, #define WIPE_B4_202 1 {BOX_CLOCK, 1, 1, 0, 1, 0, 3, 2, 1, 4, BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 2, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 1, 0, 1, 2, BOX_CLOCK, 1, 1, 0, 0, 1, 2, 1, 0, 3}, #define WIPE_B4_203 2 {BOX_CLOCK, 1, 1, 0, 1, 0, 2, 2, 1, 3, BOX_CLOCK, 1, 1, 0, 2, 1, 3, 1, 2, 4, BOX_CLOCK, 1, 1, 0, 1, 2, 0, 0, 1, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 1, 1, 0, 2}, #define WIPE_B4_204 3 {BOX_CLOCK, 1, 1, 0, 1, 0, 1, 2, 1, 2, BOX_CLOCK, 1, 1, 0, 2, 1, 2, 1, 2, 3, BOX_CLOCK, 1, 1, 0, 1, 2, 3, 0, 1, 4, BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 0, 1}, #define WIPE_B4_205 4 {BOX_CLOCK, 1, 1, 0, 1, 0, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 2, 1, 1, 1, 2, 2, BOX_CLOCK, 1, 1, 0, 1, 2, 0, 0, 1, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 1, 1, 0, 2}, #define WIPE_B4_206 5 {BOX_CLOCK, 1, 1, 0, 1, 0, 1, 2, 1, 2, BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 2, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 1, 0, 1, 2, BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 0, 1}, #define WIPE_B4_207 6 {BOX_CLOCK, 1, 1, 0, 1, 0, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 2, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 0, 0, 1, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 0, 1}, #define WIPE_B4_211 7 {BOX_CLOCK, 1, 1, 0, 1, 0, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 2, 1, 1, 1, 2, 2, BOX_CLOCK, 1, 1, 0, 1, 0, 0, 0, 1, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 1, 1, 2, 2}, #define WIPE_B4_212 8 {BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 0, 1, BOX_CLOCK, 1, 1, 0, 1, 0, 1, 0, 1, 2, BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 2, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 1, 0, 1, 2}, #define WIPE_B4_213 9 {BOX_CLOCK, 1, 1, 0, 1, 0, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 1, 0, 0, 0, 1, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 0, 2, 1, 1, BOX_CLOCK, 1, 1, 0, 1, 2, 0, 0, 1, 1}, #define WIPE_B4_214 10 {BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 0, 1, BOX_CLOCK, 1, 1, 0, 2, 1, 0, 1, 2, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 0, 1, BOX_CLOCK, 1, 1, 0, 0, 1, 0, 1, 2, 1}, #define WIPE_B4_227 11 {BOX_CLOCK, 1, 0, 0, 2, 0, 0, 1, 1, 1, BOX_CLOCK, 1, 0, 0, 1, 1, 1, 0, 0, 2, BOX_CLOCK, 1, 2, 0, 2, 2, 0, 1, 1, 1, BOX_CLOCK, 1, 2, 0, 1, 1, 1, 0, 2, 2}, #define WIPE_B4_228 12 {BOX_CLOCK, 0, 1, 0, 0, 0, 0, 1, 1, 1, BOX_CLOCK, 0, 1, 0, 1, 1, 1, 0, 2, 2, BOX_CLOCK, 2, 1, 0, 2, 0, 0, 1, 1, 1, BOX_CLOCK, 2, 1, 0, 1, 1, 1, 2, 2, 2}, #define WIPE_B4_235 13 {BOX_CLOCK, 1, 0, 0, 1, 1, 0, 0, 0, 1, BOX_CLOCK, 1, 0, 0, 1, 1, 0, 2, 0, 1, BOX_CLOCK, 1, 2, 0, 1, 1, 0, 2, 2, 1, BOX_CLOCK, 1, 2, 0, 1, 1, 0, 0, 2, 1}, #define WIPE_B4_236 14 {BOX_CLOCK, 0, 1, 0, 1, 1, 0, 0, 0, 1, BOX_CLOCK, 0, 1, 0, 1, 1, 0, 0, 2, 1, BOX_CLOCK, 2, 1, 0, 1, 1, 0, 2, 0, 1, BOX_CLOCK, 2, 1, 0, 1, 1, 0, 2, 2, 1}, }; static const gint box_clock_8b[][8 * 10] = { #define WIPE_B8_261 0 {BOX_CLOCK, 2, 1, 0, 2, 2, 0, 4, 1, 1, BOX_CLOCK, 2, 1, 0, 4, 1, 1, 2, 0, 2, BOX_CLOCK, 2, 1, 0, 2, 0, 2, 0, 1, 3, BOX_CLOCK, 2, 1, 0, 0, 1, 3, 2, 2, 4, BOX_CLOCK, 2, 3, 0, 2, 2, 0, 4, 3, 1, BOX_CLOCK, 2, 3, 0, 4, 3, 1, 2, 4, 2, BOX_CLOCK, 2, 3, 0, 2, 4, 2, 0, 3, 3, BOX_CLOCK, 2, 3, 0, 0, 3, 3, 2, 2, 4}, #define WIPE_B8_262 1 {BOX_CLOCK, 1, 2, 0, 2, 2, 0, 1, 0, 1, BOX_CLOCK, 1, 2, 0, 1, 0, 1, 0, 2, 2, BOX_CLOCK, 1, 2, 0, 0, 2, 2, 1, 4, 3, BOX_CLOCK, 1, 2, 0, 1, 4, 3, 2, 2, 4, BOX_CLOCK, 3, 2, 0, 2, 2, 0, 3, 0, 1, BOX_CLOCK, 3, 2, 0, 3, 0, 1, 4, 2, 2, BOX_CLOCK, 3, 2, 0, 4, 2, 2, 3, 4, 3, BOX_CLOCK, 3, 2, 0, 3, 4, 3, 2, 2, 4}, #define WIPE_B8_263 2 {BOX_CLOCK, 2, 1, 0, 2, 0, 0, 4, 1, 1, BOX_CLOCK, 2, 1, 0, 4, 1, 1, 2, 2, 2, BOX_CLOCK, 2, 1, 0, 2, 0, 0, 0, 1, 1, BOX_CLOCK, 2, 1, 0, 0, 1, 1, 2, 2, 2, BOX_CLOCK, 2, 3, 0, 2, 4, 0, 4, 3, 1, BOX_CLOCK, 2, 3, 0, 4, 3, 1, 2, 2, 2, BOX_CLOCK, 2, 3, 0, 2, 4, 0, 0, 3, 1, BOX_CLOCK, 2, 3, 0, 0, 3, 1, 2, 2, 2}, #define WIPE_B8_264 3 {BOX_CLOCK, 1, 2, 0, 0, 2, 0, 1, 0, 1, BOX_CLOCK, 1, 2, 0, 1, 0, 1, 2, 2, 2, BOX_CLOCK, 1, 2, 0, 0, 2, 0, 1, 4, 1, BOX_CLOCK, 1, 2, 0, 1, 4, 1, 2, 2, 2, BOX_CLOCK, 3, 2, 0, 4, 2, 0, 3, 0, 1, BOX_CLOCK, 3, 2, 0, 3, 0, 1, 2, 2, 2, BOX_CLOCK, 3, 2, 0, 4, 2, 0, 3, 4, 1, BOX_CLOCK, 3, 2, 0, 3, 4, 1, 2, 2, 2}, }; static const gint triangles_2t[][2 * 9] = { /* 3 -> 6 */ #define WIPE_T2_3 0 {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1}, #define WIPE_T2_4 WIPE_T2_3+1 {0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1}, #define WIPE_T2_5 WIPE_T2_4+1 {0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0}, #define WIPE_T2_6 WIPE_T2_5+1 {0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1}, #define WIPE_T2_41 WIPE_T2_6+1 {0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 2}, #define WIPE_T2_42 WIPE_T2_41+1 {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 2, 1, 1, 1}, #define WIPE_T2_45 WIPE_T2_42+1 {0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, #define WIPE_T2_46 WIPE_T2_45+1 {0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}, #define WIPE_T2_245 WIPE_T2_46+1 {0, 0, 0, 2, 0, 0, 2, 2, 1, 2, 2, 0, 0, 2, 0, 0, 0, 1}, #define WIPE_T2_246 WIPE_T2_245+1 {0, 2, 0, 0, 0, 0, 2, 0, 1, 2, 0, 0, 2, 2, 0, 0, 2, 1}, }; static const gint triangles_3t[][3 * 9] = { /* 23 -> 26 */ #define WIPE_T3_23 0 {0, 0, 1, 1, 0, 0, 0, 2, 1, 1, 0, 0, 0, 2, 1, 2, 2, 1, 1, 0, 0, 2, 0, 1, 2, 2, 1}, #define WIPE_T3_24 1 {0, 0, 1, 2, 0, 1, 2, 1, 0, 0, 0, 1, 2, 1, 0, 0, 2, 1, 2, 1, 0, 0, 2, 1, 2, 2, 1}, #define WIPE_T3_25 2 {0, 0, 1, 0, 2, 1, 1, 2, 0, 0, 0, 1, 2, 0, 1, 1, 2, 0, 2, 0, 1, 1, 2, 0, 2, 2, 1}, #define WIPE_T3_26 3 {0, 0, 1, 2, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 2, 2, 1, 0, 1, 0, 0, 2, 1, 2, 2, 1}, }; static const gint triangles_4t[][4 * 9] = { #define WIPE_T4_61 0 {0, 0, 1, 1, 0, 0, 1, 2, 1, 0, 0, 1, 0, 2, 2, 1, 2, 1, 1, 0, 0, 2, 0, 1, 1, 2, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2}, #define WIPE_T4_62 1 {0, 0, 2, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 1, 1, 2, 1, 0, 0, 1, 1, 2, 1, 0, 2, 2, 1, 0, 1, 1, 0, 2, 2, 2, 2, 1}, #define WIPE_T4_63 2 {0, 0, 2, 1, 0, 1, 0, 2, 1, 1, 0, 1, 0, 2, 1, 1, 2, 0, 1, 0, 1, 1, 2, 0, 2, 2, 1, 1, 0, 1, 2, 0, 2, 2, 2, 1}, #define WIPE_T4_64 3 {0, 0, 1, 2, 0, 2, 2, 1, 1, 0, 0, 1, 0, 1, 0, 2, 1, 1, 0, 1, 0, 2, 1, 1, 0, 2, 1, 2, 1, 1, 0, 2, 1, 2, 2, 2}, #define WIPE_T4_65 4 {0, 0, 0, 1, 0, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 1, 0, 1, 2, 0, 0, 1, 2, 0, 2, 0, 0, 1, 2, 0, 2, 2, 1}, #define WIPE_T4_66 5 {0, 0, 1, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 2, 1, 1, 0, 1, 0, 2, 1, 1, 2, 2, 0, 0, 1, 0, 0, 2, 1, 2, 2, 0}, #define WIPE_T4_67 6 {0, 0, 1, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 1, 2, 1, 1, 0, 0, 1, 2, 1, 2, 2, 0, 1, 0, 0, 2, 0, 1, 2, 2, 0}, #define WIPE_T4_68 7 {0, 0, 0, 2, 0, 1, 2, 1, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, 1, 1, 2, 1, 0, 0, 2, 0, 2, 1, 0, 0, 2, 0, 2, 2, 1}, #define WIPE_T4_101 8 {0, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 2, 2, 1, 2, 0, 1, 1, 1, 0, 2, 2, 1}, }; static const gint triangles_8t[][8 * 9] = { /* 7 */ #define WIPE_T8_7 0 {0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 1, 1, 1, 2, 0, 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 1, 2, 2, 0, 1, 1, 1, 0, 2, 0, 1, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, #define WIPE_T8_43 1 {0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 0, 2, 2, 1, 1, 1, 1, 0, 2, 1, 1, 2, 0, 0, 1, 2, 1, 1, 1, 0, 2, 1, 0, 0, 1, 0, 1, 2, 1, 1, 1}, #define WIPE_T8_44 2 {0, 0, 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 2, 1, 0, 1, 1, 1, 2, 1, 0, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 0, 2, 1, 1, 2, 2, 0, 1, 0, 1, 1, 1, 0, 2, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1}, #define WIPE_T8_47 3 {0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 2, 0, 0, 1, 1, 0, 2, 0, 0, 1, 1, 0, 2, 1, 1, 1, 1, 0, 2, 1, 1, 2, 2, 0, 1, 1, 0, 1, 2, 1, 2, 2, 0, 1, 1, 0, 0, 2, 0, 1, 2, 1, 0, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}, #define WIPE_T8_48 4 {0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, 0, 1, 2, 1, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 1, 0, 1, 1, 1, 1, 2, 0, 0, 1, 0, 0, 2, 1, 1, 2, 0, 1, 1, 1, 2, 1, 0, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 2, 1}, }; static const gint triangles_16t[][16 * 9] = { /* 8 */ #define WIPE_T16_8 0 {0, 0, 1, 2, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, 2, 2, 1, 1, 1, 0, 0, 2, 1, 2, 2, 1, 0, 0, 1, 1, 1, 0, 0, 2, 1, 2, 0, 1, 4, 0, 1, 3, 1, 0, 4, 0, 1, 3, 1, 0, 4, 2, 1, 3, 1, 0, 2, 2, 1, 4, 2, 1, 2, 0, 1, 3, 1, 0, 2, 2, 1, 0, 2, 1, 2, 2, 1, 1, 3, 0, 2, 2, 1, 1, 3, 0, 2, 4, 1, 1, 3, 0, 0, 4, 1, 2, 4, 1, 0, 2, 1, 1, 3, 0, 0, 4, 1, 2, 2, 1, 4, 2, 1, 3, 3, 0, 4, 2, 1, 3, 3, 0, 4, 4, 1, 3, 3, 0, 2, 4, 1, 4, 4, 1, 2, 2, 1, 3, 3, 0, 2, 4, 1} }; typedef struct _GstWipeConfig GstWipeConfig; struct _GstWipeConfig { const gint *objects; gint nobjects; gint xscale; gint yscale; gint cscale; }; static const GstWipeConfig wipe_config[] = { #define WIPE_CONFIG_1 0 {boxes_1b[WIPE_B1_1], 1, 0, 0, 0}, /* 1 */ #define WIPE_CONFIG_2 WIPE_CONFIG_1+1 {boxes_1b[WIPE_B1_2], 1, 0, 0, 0}, /* 2 */ #define WIPE_CONFIG_3 WIPE_CONFIG_2+1 {triangles_2t[WIPE_T2_3], 2, 0, 0, 0}, /* 3 */ #define WIPE_CONFIG_4 WIPE_CONFIG_3+1 {triangles_2t[WIPE_T2_4], 2, 0, 0, 0}, /* 4 */ #define WIPE_CONFIG_5 WIPE_CONFIG_4+1 {triangles_2t[WIPE_T2_5], 2, 0, 0, 0}, /* 5 */ #define WIPE_CONFIG_6 WIPE_CONFIG_5+1 {triangles_2t[WIPE_T2_6], 2, 0, 0, 0}, /* 6 */ #define WIPE_CONFIG_7 WIPE_CONFIG_6+1 {triangles_8t[WIPE_T8_7], 8, 1, 1, 0}, /* 7 */ #define WIPE_CONFIG_8 WIPE_CONFIG_7+1 {triangles_16t[WIPE_T16_8], 16, 2, 2, 0}, /* 8 */ #define WIPE_CONFIG_21 WIPE_CONFIG_8+1 {boxes_2b[WIPE_B2_21], 2, 1, 1, 0}, /* 21 */ #define WIPE_CONFIG_22 WIPE_CONFIG_21+1 {boxes_2b[WIPE_B2_22], 2, 1, 1, 0}, /* 22 */ #define WIPE_CONFIG_23 WIPE_CONFIG_22+1 {triangles_3t[WIPE_T3_23], 3, 1, 1, 0}, /* 23 */ #define WIPE_CONFIG_24 WIPE_CONFIG_23+1 {triangles_3t[WIPE_T3_24], 3, 1, 1, 0}, /* 24 */ #define WIPE_CONFIG_25 WIPE_CONFIG_24+1 {triangles_3t[WIPE_T3_25], 3, 1, 1, 0}, /* 25 */ #define WIPE_CONFIG_26 WIPE_CONFIG_25+1 {triangles_3t[WIPE_T3_26], 3, 1, 1, 0}, /* 26 */ #define WIPE_CONFIG_41 WIPE_CONFIG_26+1 {triangles_2t[WIPE_T2_41], 2, 0, 0, 1}, /* 41 */ #define WIPE_CONFIG_42 WIPE_CONFIG_41+1 {triangles_2t[WIPE_T2_42], 2, 0, 0, 1}, /* 42 */ #define WIPE_CONFIG_43 WIPE_CONFIG_42+1 {triangles_8t[WIPE_T8_43], 8, 1, 1, 1}, /* 43 */ #define WIPE_CONFIG_44 WIPE_CONFIG_43+1 {triangles_8t[WIPE_T8_44], 8, 1, 1, 1}, /* 44 */ #define WIPE_CONFIG_45 WIPE_CONFIG_44+1 {triangles_2t[WIPE_T2_45], 2, 0, 0, 0}, /* 45 */ #define WIPE_CONFIG_46 WIPE_CONFIG_45+1 {triangles_2t[WIPE_T2_46], 2, 0, 0, 0}, /* 46 */ #define WIPE_CONFIG_47 WIPE_CONFIG_46+1 {triangles_8t[WIPE_T8_47], 8, 1, 1, 0}, /* 47 */ #define WIPE_CONFIG_48 WIPE_CONFIG_47+1 {triangles_8t[WIPE_T8_48], 8, 1, 1, 0}, /* 48 */ #define WIPE_CONFIG_61 WIPE_CONFIG_48+1 {triangles_4t[WIPE_T4_61], 4, 1, 1, 1}, /* 61 */ #define WIPE_CONFIG_62 WIPE_CONFIG_61+1 {triangles_4t[WIPE_T4_62], 4, 1, 1, 1}, /* 62 */ #define WIPE_CONFIG_63 WIPE_CONFIG_62+1 {triangles_4t[WIPE_T4_63], 4, 1, 1, 1}, /* 63 */ #define WIPE_CONFIG_64 WIPE_CONFIG_63+1 {triangles_4t[WIPE_T4_64], 4, 1, 1, 1}, /* 64 */ #define WIPE_CONFIG_65 WIPE_CONFIG_64+1 {triangles_4t[WIPE_T4_65], 4, 1, 1, 0}, /* 65 */ #define WIPE_CONFIG_66 WIPE_CONFIG_65+1 {triangles_4t[WIPE_T4_66], 4, 1, 1, 0}, /* 66 */ #define WIPE_CONFIG_67 WIPE_CONFIG_66+1 {triangles_4t[WIPE_T4_67], 4, 1, 1, 0}, /* 67 */ #define WIPE_CONFIG_68 WIPE_CONFIG_67+1 {triangles_4t[WIPE_T4_68], 4, 1, 1, 0}, /* 68 */ #define WIPE_CONFIG_101 WIPE_CONFIG_68+1 {triangles_4t[WIPE_T4_101], 4, 1, 1, 0}, /* 101 */ #define WIPE_CONFIG_201 WIPE_CONFIG_101+1 {box_clock_4b[WIPE_B4_201], 4, 1, 1, 2}, /* 201 */ #define WIPE_CONFIG_202 WIPE_CONFIG_201+1 {box_clock_4b[WIPE_B4_202], 4, 1, 1, 2}, /* 202 */ #define WIPE_CONFIG_203 WIPE_CONFIG_202+1 {box_clock_4b[WIPE_B4_203], 4, 1, 1, 2}, /* 203 */ #define WIPE_CONFIG_204 WIPE_CONFIG_203+1 {box_clock_4b[WIPE_B4_204], 4, 1, 1, 2}, /* 204 */ #define WIPE_CONFIG_205 WIPE_CONFIG_204+1 {box_clock_4b[WIPE_B4_205], 4, 1, 1, 1}, /* 205 */ #define WIPE_CONFIG_206 WIPE_CONFIG_205+1 {box_clock_4b[WIPE_B4_206], 4, 1, 1, 1}, /* 206 */ #define WIPE_CONFIG_207 WIPE_CONFIG_206+1 {box_clock_4b[WIPE_B4_207], 4, 1, 1, 0}, /* 207 */ #define WIPE_CONFIG_211 WIPE_CONFIG_207+1 {box_clock_4b[WIPE_B4_211], 4, 1, 1, 1}, /* 211 */ #define WIPE_CONFIG_212 WIPE_CONFIG_211+1 {box_clock_4b[WIPE_B4_212], 4, 1, 1, 1}, /* 212 */ #define WIPE_CONFIG_213 WIPE_CONFIG_212+1 {box_clock_4b[WIPE_B4_213], 4, 1, 1, 0}, /* 213 */ #define WIPE_CONFIG_214 WIPE_CONFIG_213+1 {box_clock_4b[WIPE_B4_214], 4, 1, 1, 0}, /* 214 */ #define WIPE_CONFIG_221 WIPE_CONFIG_214+1 {box_clock_2b[WIPE_B2_221], 2, 1, 1, 1}, /* 221 */ #define WIPE_CONFIG_222 WIPE_CONFIG_221+1 {box_clock_2b[WIPE_B2_222], 2, 1, 1, 1}, /* 222 */ #define WIPE_CONFIG_223 WIPE_CONFIG_222+1 {box_clock_2b[WIPE_B2_223], 2, 1, 1, 1}, /* 223 */ #define WIPE_CONFIG_224 WIPE_CONFIG_223+1 {box_clock_2b[WIPE_B2_224], 2, 1, 1, 1}, /* 224 */ #define WIPE_CONFIG_225 WIPE_CONFIG_224+1 {box_clock_2b[WIPE_B2_225], 2, 1, 1, 0}, /* 225 */ #define WIPE_CONFIG_226 WIPE_CONFIG_225+1 {box_clock_2b[WIPE_B2_226], 2, 1, 1, 0}, /* 226 */ #define WIPE_CONFIG_227 WIPE_CONFIG_226+1 {box_clock_4b[WIPE_B4_227], 4, 1, 1, 1}, /* 227 */ #define WIPE_CONFIG_228 WIPE_CONFIG_227+1 {box_clock_4b[WIPE_B4_228], 4, 1, 1, 1}, /* 228 */ #define WIPE_CONFIG_231 WIPE_CONFIG_228+1 {box_clock_2b[WIPE_B2_231], 2, 1, 1, 0}, /* 231 */ #define WIPE_CONFIG_232 WIPE_CONFIG_231+1 {box_clock_2b[WIPE_B2_232], 2, 1, 1, 0}, /* 232 */ #define WIPE_CONFIG_233 WIPE_CONFIG_232+1 {box_clock_2b[WIPE_B2_233], 2, 1, 1, 0}, /* 233 */ #define WIPE_CONFIG_234 WIPE_CONFIG_233+1 {box_clock_2b[WIPE_B2_234], 2, 1, 1, 0}, /* 234 */ #define WIPE_CONFIG_235 WIPE_CONFIG_234+1 {box_clock_4b[WIPE_B4_235], 4, 1, 1, 0}, /* 235 */ #define WIPE_CONFIG_236 WIPE_CONFIG_235+1 {box_clock_4b[WIPE_B4_236], 4, 1, 1, 0}, /* 236 */ #define WIPE_CONFIG_241 WIPE_CONFIG_236+1 {box_clock_1b[WIPE_B1_241], 1, 0, 0, 0}, /* 241 */ #define WIPE_CONFIG_242 WIPE_CONFIG_241+1 {box_clock_1b[WIPE_B1_242], 1, 0, 0, 0}, /* 242 */ #define WIPE_CONFIG_243 WIPE_CONFIG_242+1 {box_clock_1b[WIPE_B1_243], 1, 0, 0, 0}, /* 243 */ #define WIPE_CONFIG_244 WIPE_CONFIG_243+1 {box_clock_1b[WIPE_B1_244], 1, 0, 0, 0}, /* 244 */ #define WIPE_CONFIG_245 WIPE_CONFIG_244+1 {triangles_2t[WIPE_T2_245], 2, 1, 1, 0}, /* 245 */ #define WIPE_CONFIG_246 WIPE_CONFIG_245+1 {triangles_2t[WIPE_T2_246], 2, 1, 1, 0}, /* 246 */ #define WIPE_CONFIG_251 WIPE_CONFIG_246+1 {box_clock_2b[WIPE_B2_251], 2, 1, 1, 0}, /* 251 */ #define WIPE_CONFIG_252 WIPE_CONFIG_251+1 {box_clock_2b[WIPE_B2_252], 2, 1, 1, 0}, /* 252 */ #define WIPE_CONFIG_253 WIPE_CONFIG_252+1 {box_clock_2b[WIPE_B2_253], 2, 1, 1, 0}, /* 253 */ #define WIPE_CONFIG_254 WIPE_CONFIG_253+1 {box_clock_2b[WIPE_B2_254], 2, 1, 1, 0}, /* 254 */ #define WIPE_CONFIG_261 WIPE_CONFIG_254+1 {box_clock_8b[WIPE_B8_261], 8, 2, 2, 2}, /* 261 */ #define WIPE_CONFIG_262 WIPE_CONFIG_261+1 {box_clock_8b[WIPE_B8_262], 8, 2, 2, 2}, /* 262 */ #define WIPE_CONFIG_263 WIPE_CONFIG_262+1 {box_clock_8b[WIPE_B8_263], 8, 2, 2, 1}, /* 263 */ #define WIPE_CONFIG_264 WIPE_CONFIG_263+1 {box_clock_8b[WIPE_B8_264], 8, 2, 2, 1}, /* 264 */ }; static void gst_wipe_boxes_draw (GstMask * mask) { const GstWipeConfig *config = mask->user_data; const gint *impacts = config->objects; gint width = (mask->width >> config->xscale); gint height = (mask->height >> config->yscale); gint depth = (1 << mask->bpp) >> config->cscale; gint i; for (i = 0; i < config->nobjects; i++) { switch (impacts[0]) { case BOX_VERTICAL: /* vbox does not draw last pixels */ gst_smpte_paint_vbox (mask->data, mask->width, impacts[1] * width, impacts[2] * height, impacts[3] * depth, impacts[4] * width, impacts[5] * height, impacts[6] * depth); impacts += 7; break; case BOX_HORIZONTAL: /* hbox does not draw last pixels */ gst_smpte_paint_hbox (mask->data, mask->width, impacts[1] * width, impacts[2] * height, impacts[3] * depth, impacts[4] * width, impacts[5] * height, impacts[6] * depth); impacts += 7; break; case BOX_CLOCK: { gint x0, y0, x1, y1, x2, y2; /* make sure not to draw outside the area */ x0 = MIN (impacts[1] * width, mask->width - 1); y0 = MIN (impacts[2] * height, mask->height - 1); x1 = MIN (impacts[4] * width, mask->width - 1); y1 = MIN (impacts[5] * height, mask->height - 1); x2 = MIN (impacts[7] * width, mask->width - 1); y2 = MIN (impacts[8] * height, mask->height - 1); gst_smpte_paint_box_clock (mask->data, mask->width, x0, y0, impacts[3] * depth, x1, y1, impacts[6] * depth, x2, y2, impacts[9] * depth); impacts += 10; } default: break; } } } static void gst_wipe_triangles_clock_draw (GstMask * mask) { const GstWipeConfig *config = mask->user_data; const gint *impacts = config->objects; gint width = (mask->width >> config->xscale); gint height = (mask->height >> config->yscale); gint depth = (1 << mask->bpp) >> config->cscale; gint i; for (i = 0; i < config->nobjects; i++) { gint x0, y0, x1, y1, x2, y2; /* make sure not to draw outside the area */ x0 = MIN (impacts[0] * width, mask->width - 1); y0 = MIN (impacts[1] * height, mask->height - 1); x1 = MIN (impacts[3] * width, mask->width - 1); y1 = MIN (impacts[4] * height, mask->height - 1); x2 = MIN (impacts[6] * width, mask->width - 1); y2 = MIN (impacts[7] * height, mask->height - 1); gst_smpte_paint_triangle_clock (mask->data, mask->width, x0, y0, impacts[2] * depth, x1, y1, impacts[5] * depth, x2, y2, impacts[8] * depth); impacts += 9; } } static void gst_wipe_triangles_draw (GstMask * mask) { const GstWipeConfig *config = mask->user_data; const gint *impacts = config->objects; gint width = (mask->width >> config->xscale); gint height = (mask->height >> config->yscale); gint depth = (1 << mask->bpp) >> config->cscale; gint i; for (i = 0; i < config->nobjects; i++) { gint x0, y0, x1, y1, x2, y2; /* make sure not to draw outside the area */ x0 = MIN (impacts[0] * width, mask->width - 1); y0 = MIN (impacts[1] * height, mask->height - 1); x1 = MIN (impacts[3] * width, mask->width - 1); y1 = MIN (impacts[4] * height, mask->height - 1); x2 = MIN (impacts[6] * width, mask->width - 1); y2 = MIN (impacts[7] * height, mask->height - 1); gst_smpte_paint_triangle_linear (mask->data, mask->width, x0, y0, impacts[2] * depth, x1, y1, impacts[5] * depth, x2, y2, impacts[8] * depth); impacts += 9; } } /* see also: * http://www.w3c.rl.ac.uk/pasttalks/slidemaker/XML_Multimedia/htmls/transitions.html */ static const GstMaskDefinition definitions[] = { {1, "bar-wipe-lr", "A bar moves from left to right", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_1]}, {2, "bar-wipe-tb", "A bar moves from top to bottom", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_2]}, {3, "box-wipe-tl", "A box expands from the upper-left corner to the lower-right corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_3]}, {4, "box-wipe-tr", "A box expands from the upper-right corner to the lower-left corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_4]}, {5, "box-wipe-br", "A box expands from the lower-right corner to the upper-left corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_5]}, {6, "box-wipe-bl", "A box expands from the lower-left corner to the upper-right corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_6]}, {7, "four-box-wipe-ci", "A box shape expands from each of the four corners toward the center", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_7]}, {8, "four-box-wipe-co", "A box shape expands from the center of each quadrant toward the corners of each quadrant", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_8]}, {21, "barndoor-v", "A central, vertical line splits and expands toward the left and right edges", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_21]}, {22, "barndoor-h", "A central, horizontal line splits and expands toward the top and bottom edges", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_22]}, {23, "box-wipe-tc", "A box expands from the top edge's midpoint to the bottom corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_23]}, {24, "box-wipe-rc", "A box expands from the right edge's midpoint to the left corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_24]}, {25, "box-wipe-bc", "A box expands from the bottom edge's midpoint to the top corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_25]}, {26, "box-wipe-lc", "A box expands from the left edge's midpoint to the right corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_26]}, {41, "diagonal-tl", "A diagonal line moves from the upper-left corner to the lower-right corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_41]}, {42, "diagonal-tr", "A diagonal line moves from the upper right corner to the lower-left corner", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_42]}, {43, "bowtie-v", "Two wedge shapes slide in from the top and bottom edges toward the center", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_43]}, {44, "bowtie-h", "Two wedge shapes slide in from the left and right edges toward the center", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_44]}, {45, "barndoor-dbl", "A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_45]}, {46, "barndoor-dtl", "A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_46]}, {47, "misc-diagonal-dbd", "Four wedge shapes split from the center and retract toward the four edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_47]}, {48, "misc-diagonal-dd", "A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_48]}, {61, "vee-d", "A wedge shape moves from top to bottom", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_61]}, {62, "vee-l", "A wedge shape moves from right to left", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_62]}, {63, "vee-u", "A wedge shape moves from bottom to top", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_63]}, {64, "vee-r", "A wedge shape moves from left to right", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_64]}, {65, "barnvee-d", "A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_65]}, {66, "barnvee-l", "A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_66]}, {67, "barnvee-u", "A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_67]}, {68, "barnvee-r", "A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_68]}, {101, "iris-rect", "A rectangle expands from the center.", gst_wipe_triangles_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_101]}, {201, "clock-cw12", "A radial hand sweeps clockwise from the twelve o'clock position", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_201]}, {202, "clock-cw3", "A radial hand sweeps clockwise from the three o'clock position", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_202]}, {203, "clock-cw6", "A radial hand sweeps clockwise from the six o'clock position", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_203]}, {204, "clock-cw9", "A radial hand sweeps clockwise from the nine o'clock position", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_204]}, {205, "pinwheel-tbv", "Two radial hands sweep clockwise from the twelve and six o'clock positions", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_205]}, {206, "pinwheel-tbh", "Two radial hands sweep clockwise from the nine and three o'clock positions", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_206]}, {207, "pinwheel-fb", "Four radial hands sweep clockwise", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_207]}, {211, "fan-ct", "A fan unfolds from the top edge, the fan axis at the center", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_211]}, {212, "fan-cr", "A fan unfolds from the right edge, the fan axis at the center", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_212]}, {213, "doublefan-fov", "Two fans, their axes at the center, unfold from the top and bottom", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_213]}, {214, "doublefan-foh", "Two fans, their axes at the center, unfold from the left and right", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_214]}, {221, "singlesweep-cwt", "A radial hand sweeps clockwise from the top edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_221]}, {222, "singlesweep-cwr", "A radial hand sweeps clockwise from the right edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_222]}, {223, "singlesweep-cwb", "A radial hand sweeps clockwise from the bottom edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_223]}, {224, "singlesweep-cwl", "A radial hand sweeps clockwise from the left edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_224]}, {225, "doublesweep-pv", "Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_225]}, {226, "doublesweep-pd", "Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_226]}, {227, "doublesweep-ov", "Two radial hands attached at the top and bottom edges' midpoints sweep from right to left", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_227]}, {228, "doublesweep-oh", "Two radial hands attached at the left and right edges' midpoints sweep from top to bottom", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_228]}, {231, "fan-t", "A fan unfolds from the bottom, the fan axis at the top edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_231]}, {232, "fan-r", "A fan unfolds from the left, the fan axis at the right edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_232]}, {233, "fan-b", "A fan unfolds from the top, the fan axis at the bottom edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_233]}, {234, "fan-l", "A fan unfolds from the right, the fan axis at the left edge's midpoint", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_234]}, {235, "doublefan-fiv", "Two fans, their axes at the top and bottom, unfold from the center", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_235]}, {236, "doublefan-fih", "Two fans, their axes at the left and right, unfold from the center", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_236]}, {241, "singlesweep-cwtl", "A radial hand sweeps clockwise from the upper-left corner", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_241]}, {242, "singlesweep-cwbl", "A radial hand sweeps counter-clockwise from the lower-left corner.", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_242]}, {243, "singlesweep-cwbr", "A radial hand sweeps clockwise from the lower-right corner", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_243]}, {244, "singlesweep-cwtr", "A radial hand sweeps counter-clockwise from the upper-right corner", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_244]}, {245, "doublesweep-pdtl", "Two radial hands attached at the upper-left and lower-right corners sweep down and up", gst_wipe_triangles_clock_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_245]}, {246, "doublesweep-pdbl", "Two radial hands attached at the lower-left and upper-right corners sweep down and up", gst_wipe_triangles_clock_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_246]}, {251, "saloondoor-t", "Two radial hands attached at the upper-left and upper-right corners sweep down", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_251]}, {252, "saloondoor-l", "Two radial hands attached at the upper-left and lower-left corners sweep to the right", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_252]}, {253, "saloondoor-b", "Two radial hands attached at the lower-left and lower-right corners sweep up", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_253]}, {254, "saloondoor-r", "Two radial hands attached at the upper-right and lower-right corners sweep to the left", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_254]}, {261, "windshield-r", "Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_261]}, {262, "windshield-u", "Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_262]}, {263, "windshield-v", "Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_263]}, {264, "windshield-h", "Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left", gst_wipe_boxes_draw, _gst_mask_default_destroy, &wipe_config[WIPE_CONFIG_264]}, {0, NULL, NULL, NULL} }; void _gst_barboxwipes_register (void) { gint i = 0; while (definitions[i].short_name) { _gst_mask_register (&definitions[i]); i++; } }