summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2009-06-15 20:00:43 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-06-15 21:13:33 +0200
commit426ff3bd9307dd6a0a1f7ba872de3093728f6373 (patch)
tree0689a3f60b7578f5c208eac7c75de57f9c98a8d1
parentc116c301af4de1ba9ef76c81bd5bbb2c75d504e5 (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.
-rw-r--r--gst/effectv/gstquark.c21
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;
}