#include "paint.h"
#include "gstmask.h"
-static void
-gst_bar_wipe_lr_update (GstMask *mask,
- GstClockTime position,
- GstClockTime duration)
+enum
{
- gint width = mask->width;
- gint height = mask->height;
- gint split = (position * width) / duration;
+ BOX_VERTICAL = 1,
+ BOX_HORIZONTAL = 2,
+ TRIGANLE_LINEAR = 3,
+};
- gst_smpte_paint_rect (mask->data, width, split, 0, width - split, height, 0);
- gst_smpte_paint_rect (mask->data, width, 0, 0, split, height, 255);
-}
+static 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 void
-gst_bar_wipe_tb_update (GstMask *mask,
- GstClockTime position,
- GstClockTime duration)
+static gint boxes_2b[][7*2] =
{
- gint width = mask->width;
- gint height = mask->height;
- gint split = (position * height) / duration;
+#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 },
+};
- gst_smpte_paint_rect (mask->data, width, 0, 0, width, split, 255);
- gst_smpte_paint_rect (mask->data, width, 0, split, width, height - split, 0);
-}
+static 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 },
+};
+
+static 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 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 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 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 {
+ gint *objects;
+ gint nobjects;
+ gint xscale;
+ gint yscale;
+ gint cscale;
+};
+
+static 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_23], 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 */
+};
static void
-gst_box_wipe_update (GstMask *mask,
- GstClockTime position,
- GstClockTime duration)
+gst_wipe_boxes_draw (GstMask *mask)
{
- static gint box_wipe_impacts[8][4] =
- {
- /* 3 -> 6 */
- { 0, 0, 0, 0 },
- { 2, 2, 0, 0 },
- { 2, 2, 2, 2 },
- { 0, 0, 2, 2 },
- /* 23 -> 26 */
- { 1, 1, 0, 0 },
- { 2, 2, 1, 1 },
- { 1, 1, 2, 2 },
- { 0, 0, 1, 1 },
- };
- gint *impacts = box_wipe_impacts[(mask->type & 0x0F) - 3];
- gint width = mask->width;
- gint height = mask->height;
- gint splitx = (position * width) / duration;
- gint splity = (position * height) / duration;
-
- gst_smpte_paint_rect (mask->data, width, 0, 0, width, height, 0);
- gst_smpte_paint_rect (mask->data, width,
- (impacts[0] * width)/2 - (impacts[1] * splitx)/2,
- (impacts[2] * height)/2 - (impacts[3] * splity)/2,
- splitx, splity, 255);
+ GstWipeConfig *config = mask->user_data;
+ gint *impacts = config->objects;
+ gint width = (mask->width >> config->xscale) - 1;
+ gint height = (mask->height >> config->yscale) - 1;
+ gint depth = (1 << mask->bpp) >> config->cscale;
+
+ gint i;
+
+ for (i = 0; i < config->nobjects; i++) {
+ switch (impacts[0]) {
+ case BOX_VERTICAL:
+ 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:
+ 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;
+ default:
+ break;
+ }
+ }
}
static void
-gst_fourc_box_wipe_update (GstMask *mask,
- GstClockTime position,
- GstClockTime duration)
+gst_wipe_triangles_draw (GstMask *mask)
{
- static gint box_wipe_impacts[8][4] =
- {
- { 0, 0, 0, 0 },
- { 1, 1, 1, 1 },
- { 4, 2, 0, 0 },
- { 3, 1, 1, 1 },
- { 4, 2, 4, 2 },
- { 1, 1, 3, 1 },
- { 0, 0, 4, 2 },
- { 3, 1, 3, 1 },
- };
- gint *impacts;
- gint width = mask->width;
- gint height = mask->height;
- gint splitx = (position * width/2) / duration;
- gint splity = (position * height/2) / duration;
- gint i;
+ GstWipeConfig *config = mask->user_data;
+ gint *impacts = config->objects;
+ gint width = (mask->width >> config->xscale) - 1;
+ gint height = (mask->height >> config->yscale) - 1;
+ gint depth = (1 << mask->bpp) >> config->cscale;
- gst_smpte_paint_rect (mask->data, width, 0, 0, width, height, 0);
+ gint i;
- for (i = 7; i > 0; i -= 2) {
- impacts = box_wipe_impacts[mask->type - i];
- gst_smpte_paint_rect (mask->data, width,
- (impacts[0] * width)/4 - (impacts[1] * splitx)/2,
- (impacts[2] * height)/4 - (impacts[3] * splity)/2,
- splitx, splity, 255);
+ for (i = 0; i < config->nobjects; i++) {
+ gst_smpte_paint_triangle_linear (mask->data, mask->width,
+ impacts[0] * width, impacts[1] * height, impacts[2] * depth,
+ impacts[3] * width, impacts[4] * height, impacts[5] * depth,
+ impacts[6] * width, impacts[7] * height, impacts[8] * depth);
+ impacts += 9;
}
}
static GstMaskDefinition definitions[] = {
- { 1, "bar_wipe_lr", "A bar moves from left to right",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_bar_wipe_lr_update },
- { 2, "bar_wipe_tb", "A bar moves from top to bottom",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_bar_wipe_tb_update },
- { 3, "box_wipe_tl", "A box expands from the upper-left corner to the lower-right corner",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 4, "box_wipe_tr", "A box expands from the upper-right corner to the lower-left corner",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 5, "box_wipe_br", "A box expands from the lower-right corner to the upper-left corner",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 6, "box_wipe_bl", "A box expands from the lower-left corner to the upper-right corner",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 23, "box_wipe_tc", "A box expands from the top edge's midpoint to the bottom corners",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 24, "box_wipe_rc", "A box expands from the right edge's midpoint to the left corners",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 25, "box_wipe_bc", "A box expands from the bottom edge's midpoint to the top corners",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 26, "box_wipe_lc", "A box expands from the left edge's midpoint to the right corners",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_box_wipe_update },
- { 7 , "four_box_wipe_ci", "A box shape expands from each of the four corners toward the center",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_fourc_box_wipe_update },
- { 8 , "four_box_wipe_co", "A box shape expands from the center of each quadrant toward the corners of each quadrant",
- _gst_mask_default_new, _gst_mask_default_destroy, gst_fourc_box_wipe_update },
+ { 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] },
{ 0, NULL, NULL, NULL }
};