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
This commit is contained in:
Sebastian Dröge 2015-03-12 13:49:56 +00:00
parent c809bcd394
commit 7b90bf3215

View file

@ -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,