From 7b90bf32150897a141a29a12ecab555d8c5b7fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 12 Mar 2015 13:49:56 +0000 Subject: [PATCH] level: Don't read over the end of the input memory Previously we advanced the in_data pointer by bps for every channel, and then later again for block_size*bps. This caused us to be one sample further than expected if an input buffer covered two analysis frames. And in the end lead to completely bogus values reported by level. https://bugzilla.gnome.org/show_bug.cgi?id=746065 --- gst/level/gstlevel.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c index 7cd5a8f8d4..a308267d69 100644 --- a/gst/level/gstlevel.c +++ b/gst/level/gstlevel.c @@ -624,7 +624,7 @@ gst_level_transform_ip (GstBaseTransform * trans, GstBuffer * in) for (i = 0; i < channels; ++i) { if (!GST_BUFFER_FLAG_IS_SET (in, GST_BUFFER_FLAG_GAP)) { - filter->process (in_data, block_int_size, channels, &CS, + filter->process (in_data + (bps * i), block_int_size, channels, &CS, &filter->peak[i]); GST_LOG_OBJECT (filter, "[%d]: cumulative squares %lf, over %d samples/%d channels", @@ -633,7 +633,6 @@ gst_level_transform_ip (GstBaseTransform * trans, GstBuffer * in) } else { filter->peak[i] = 0.0; } - in_data += bps; filter->decay_peak_age[i] += GST_FRAMES_TO_CLOCK_TIME (num_frames, rate); GST_LOG_OBJECT (filter,