summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Mamonov <samamonov@gmail.com>2016-09-29 13:36:11 +0300
committerStefan Sauer <ensonic@users.sf.net>2016-09-29 19:59:28 +0200
commite98575417c2c4a52e97c1f4e1e6e96b3d43955b5 (patch)
tree99652b41dfcc24035b1549c88c2140a4dc52decd
parenta07bc9231991d3f0c8c158cf2f94e198c798f4fc (diff)
downloadgstreamer-plugins-bad-e98575417c2c4a52e97c1f4e1e6e96b3d43955b5.tar.gz
fix for https://bugzilla.gnome.org/show_bug.cgi?id=771871
-rw-r--r--ext/lv2/gstlv2filter.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/ext/lv2/gstlv2filter.c b/ext/lv2/gstlv2filter.c
index 0ef6aded0..03181e5c9 100644
--- a/ext/lv2/gstlv2filter.c
+++ b/ext/lv2/gstlv2filter.c
@@ -390,13 +390,18 @@ gst_lv2_filter_transform_data (GstLV2Filter * self,
/* multi channel inputs */
lv2_group = &lv2_class->in_group;
samples = nframes / lv2_group->ports->len;
- in = g_new0 (gfloat, nframes);
GST_LOG_OBJECT (self, "in : samples=%u, nframes=%u, ports=%d", samples,
nframes, lv2_group->ports->len);
- if (lv2_group->ports->len > 1)
+ if (lv2_group->ports->len > 1) {
+ in = g_new0 (gfloat, nframes);
+ out = g_new0 (gfloat, samples * lv2_group->ports->len);
gst_lv2_filter_deinterleave_data (lv2_group->ports->len, in,
samples, (gfloat *) in_map->data);
+ } else {
+ in = (gfloat *) in_map->data;
+ out = (gfloat *) out_map->data;
+ }
for (j = 0; j < lv2_group->ports->len; ++j) {
lv2_port = &g_array_index (lv2_group->ports, GstLV2Port, j);
@@ -407,7 +412,7 @@ gst_lv2_filter_transform_data (GstLV2Filter * self,
/* multi channel outputs */
lv2_group = &lv2_class->out_group;
out_samples = nframes / lv2_group->ports->len;
- out = g_new0 (gfloat, samples * lv2_group->ports->len);
+
GST_LOG_OBJECT (self, "out: samples=%u, nframes=%u, ports=%d", out_samples,
nframes, lv2_group->ports->len);
for (j = 0; j < lv2_group->ports->len; ++j) {
@@ -434,11 +439,12 @@ gst_lv2_filter_transform_data (GstLV2Filter * self,
lilv_instance_run (self->lv2.instance, samples);
- if (lv2_group->ports->len > 1)
+ if (lv2_group->ports->len > 1) {
gst_lv2_filter_interleave_data (lv2_group->ports->len,
(gfloat *) out_map->data, out_samples, out);
- g_free (out);
- g_free (in);
+ g_free (out);
+ g_free (in);
+ }
g_free (cv);
return GST_FLOW_OK;