diff options
Diffstat (limited to 'gst/smpte/gstmask.c')
-rw-r--r-- | gst/smpte/gstmask.c | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/gst/smpte/gstmask.c b/gst/smpte/gstmask.c new file mode 100644 index 00000000..a26d7190 --- /dev/null +++ b/gst/smpte/gstmask.c @@ -0,0 +1,124 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> + * + * 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. + */ + + +#include "gstmask.h" + +extern void _gst_barboxwipes_register (void); + +static GList *masks = NULL; + +void +_gst_mask_init (void) +{ + _gst_barboxwipes_register (); +} + +static gint +gst_mask_compare (GstMaskDefinition *def1, + GstMaskDefinition *def2) +{ + return (def1->type - def2->type); +} + +void +_gst_mask_register (GstMaskDefinition *definition) +{ + masks = g_list_insert_sorted (masks, definition, (GCompareFunc) gst_mask_compare); +} + +const GList* +gst_mask_get_definitions (void) +{ + return masks; +} + +static GstMaskDefinition* +gst_mask_find_definition (gint type) +{ + GList *walk = masks; + + while (walk) { + GstMaskDefinition *def = (GstMaskDefinition *) walk->data; + + if (def->type == type) + return def; + + walk = g_list_next (walk); + } + return NULL; +} + +GstMask* +gst_mask_factory_new (gint type, gint bpp, gint width, gint height) +{ + GstMaskDefinition *definition; + GstMask *mask = NULL; + + definition = gst_mask_find_definition (type); + if (definition) { + mask = definition->new_func (definition, bpp, width, height); + } + + return mask; +} + +GstMask* +_gst_mask_default_new (GstMaskDefinition *definition, + gint bpp, gint width, gint height) +{ + GstMask *mask; + + mask = g_new0 (GstMask, 1); + + mask->type = definition->type; + mask->bpp = bpp; + mask->width = width; + mask->height = height; + mask->update_func = definition->update_func; + mask->destroy_func = definition->destroy_func; + mask->data = g_malloc (width * height * (bpp+7)>>3); + + return mask; +} + +void +_gst_mask_default_destroy (GstMask *mask) +{ + g_free (mask->data); + g_free (mask); +} + +void +gst_mask_destroy (GstMask *mask) +{ + if (mask->destroy_func) + mask->destroy_func (mask); +} + +void +gst_mask_update (GstMask *mask, + GstClockTime position, + GstClockTime duration) +{ + g_return_if_fail (mask != NULL); + + if (mask->update_func) + mask->update_func (mask, position, duration); +} |