diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-06-15 20:00:43 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-06-15 21:13:33 +0200 |
commit | 426ff3bd9307dd6a0a1f7ba872de3093728f6373 (patch) | |
tree | 0689a3f60b7578f5c208eac7c75de57f9c98a8d1 /gst/effectv | |
parent | c116c301af4de1ba9ef76c81bd5bbb2c75d504e5 (diff) |
quarktv: Fix setting the planes property of quarktv
Setting it to a value<16 would cause crashes before because
current_plane was set to the old number of planes-1. Also
fix calculations for non-2^n planes values.
Diffstat (limited to 'gst/effectv')
-rw-r--r-- | gst/effectv/gstquark.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gst/effectv/gstquark.c b/gst/effectv/gstquark.c index e7cd78a0c..b023c0c02 100644 --- a/gst/effectv/gstquark.c +++ b/gst/effectv/gstquark.c @@ -171,7 +171,7 @@ gst_quarktv_transform (GstBaseTransform * trans, GstBuffer * in, /* pick a random buffer */ rand = filter->planetable[(filter->current_plane + - (fastrand () >> 24)) & (filter->planes - 1)]; + (fastrand () >> 24)) % filter->planes]; /* Copy the pixel from the random buffer to dest */ dest[area] = (rand ? ((guint32 *) GST_BUFFER_DATA (rand))[area] : 0); @@ -250,17 +250,20 @@ gst_quarktv_set_property (GObject * object, guint prop_id, const GValue * value, new_planetable = (GstBuffer **) g_malloc0 (new_n_planes * sizeof (GstBuffer *)); - for (i = 0; (i < new_n_planes) && (i < filter->planes); i++) { - new_planetable[i] = filter->planetable[i]; + if (filter->planetable) { + for (i = 0; (i < new_n_planes) && (i < filter->planes); i++) { + new_planetable[i] = filter->planetable[i]; + } + for (; i < filter->planes; i++) { + if (filter->planetable[i]) + gst_buffer_unref (filter->planetable[i]); + } + g_free (filter->planetable); } - for (; i < filter->planes; i++) { - if (filter->planetable[i]) - gst_buffer_unref (filter->planetable[i]); - } - g_free (filter->planetable); + filter->planetable = new_planetable; - filter->current_plane = filter->planes - 1; filter->planes = new_n_planes; + filter->current_plane = filter->planes - 1; } break; } |