frei0rfilter: fix memory corruption on sink caps changes.

When the input size changed, the frei0r filters didn't take
it into account and ended up corrupting memory.

Fixes #726069
This commit is contained in:
Mathieu Duponchelle 2014-03-10 22:48:04 +01:00
parent cba13ef301
commit 09989e7c71

View file

@ -40,15 +40,25 @@ gst_frei0r_filter_set_caps (GstBaseTransform * trans, GstCaps * incaps,
GstCaps * outcaps)
{
GstFrei0rFilter *self = GST_FREI0R_FILTER (trans);
GstFrei0rFilterClass *klass = GST_FREI0R_FILTER_GET_CLASS (trans);
GstVideoInfo info;
gboolean destroy_f0r_instance = FALSE;
gst_video_info_init (&info);
if (!gst_video_info_from_caps (&info, incaps))
return FALSE;
if (self->width != info.width || self->height != info.height)
destroy_f0r_instance = TRUE;
self->width = info.width;
self->height = info.height;
if (self->f0r_instance && destroy_f0r_instance) {
klass->ftable->destruct (self->f0r_instance);
self->f0r_instance = NULL;
}
return TRUE;
}