static gboolean gst_shagadelictv_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps) { GstShagadelicTV *filter = GST_SHAGADELICTV (btrans); GstStructure *structure; gboolean ret = FALSE; structure = gst_caps_get_structure (incaps, 0); GST_OBJECT_LOCK (filter); if (gst_structure_get_int (structure, "width", &filter->width) && gst_structure_get_int (structure, "height", &filter->height)) { gint area = filter->width * filter->height; g_free (filter->ripple); g_free (filter->spiral); filter->ripple = (guint8 *) g_malloc (area * 4); filter->spiral = (guint8 *) g_malloc (area); gst_shagadelic_initialize (filter); ret = TRUE; } GST_OBJECT_UNLOCK (filter); return ret; }
static gboolean gst_shagadelictv_set_info (GstVideoFilter * vfilter, GstCaps * incaps, GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info) { GstShagadelicTV *filter = GST_SHAGADELICTV (vfilter); gint width, height, area; width = GST_VIDEO_INFO_WIDTH (in_info); height = GST_VIDEO_INFO_HEIGHT (in_info); area = width * height; g_free (filter->ripple); g_free (filter->spiral); filter->ripple = (guint8 *) g_malloc (area * 4); filter->spiral = (guint8 *) g_malloc (area); gst_shagadelic_initialize (filter, in_info); return TRUE; }