[gst-cvs] gst-plugins-good: quarktv: Fix setting the planes property of quarktv
Sebastian Dröge
slomo at kemper.freedesktop.org
Mon Jun 15 12:13:44 PDT 2009
Module: gst-plugins-good
Branch: master
Commit: 426ff3bd9307dd6a0a1f7ba872de3093728f6373
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=426ff3bd9307dd6a0a1f7ba872de3093728f6373
Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date: Mon Jun 15 20:00:43 2009 +0200
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.
---
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 e7cd78a..b023c0c 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;
}
More information about the Gstreamer-commits
mailing list