Skip to content

Commit

Permalink
fix various AudioFileProcessor bugs (#7533)
Browse files Browse the repository at this point in the history
* fix out-of-bounds crash in AudioFileProcessor

by correctly setting m_from and m_to without them interfering with each other

* fixed flattened wave caused by inaccurate math

see PR for before/after

* simply stop drawing AFP waveform when there's no more data

this fixes the single point at the end of waveforms that sometimes shows up

* fixed seemingly insignificant type confusion (?)

execution seemed fine but my debugger started freaking out,
and if gdb is telling me I got a negative-sized vector,
I'd rather fix this issue than speculate "it's probably fine"

* fixed data offset for AFP waveform vis

the data itself isn't reversed, so we have to account for that
  • Loading branch information
RiedleroD authored Oct 6, 2024
1 parent e0ae8a1 commit 0363ee6
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
8 changes: 6 additions & 2 deletions plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,10 +338,12 @@ void AudioFileProcessorWaveView::updateGraph()
m_graph.fill(Qt::transparent);
QPainter p(&m_graph);
p.setPen(QColor(255, 255, 255));

const auto dataOffset = m_reversed ? m_sample->sampleSize() - m_to : m_from;

const auto rect = QRect{0, 0, m_graph.width(), m_graph.height()};
const auto waveform = SampleWaveform::Parameters{
m_sample->data() + m_from, static_cast<size_t>(range()), m_sample->amplification(), m_sample->reversed()};
m_sample->data() + dataOffset, static_cast<size_t>(range()), m_sample->amplification(), m_sample->reversed()};
SampleWaveform::visualize(waveform, p, rect);
}

Expand Down Expand Up @@ -467,9 +469,11 @@ void AudioFileProcessorWaveView::reverse()
- m_sample->endFrame()
- m_sample->startFrame()
);

const int fromTmp = m_from;

setFrom(m_sample->sampleSize() - m_to);
setTo(m_sample->sampleSize() - m_from);
setTo(m_sample->sampleSize() - fromTmp);
m_reversed = ! m_reversed;
}

Expand Down
11 changes: 4 additions & 7 deletions src/gui/SampleWaveform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ void SampleWaveform::visualize(Parameters parameters, QPainter& painter, const Q
const float resolution = std::max(1.0f, framesPerPixel / maxFramesPerPixel);
const float framesPerResolution = framesPerPixel / resolution;

const size_t numPixels = std::min<size_t>(parameters.size, width);
size_t numPixels = std::min(parameters.size, static_cast<size_t>(width));
auto min = std::vector<float>(numPixels, 1);
auto max = std::vector<float>(numPixels, -1);
auto squared = std::vector<float>(numPixels, 0);

const size_t maxFrames = numPixels * static_cast<size_t>(framesPerPixel);
const size_t maxFrames = static_cast<size_t>(numPixels * framesPerPixel);

auto pixelIndex = std::size_t{0};

Expand All @@ -67,12 +67,9 @@ void SampleWaveform::visualize(Parameters parameters, QPainter& painter, const Q
squared[pixelIndex] += value * value;
}

while (pixelIndex < numPixels)
if (pixelIndex < numPixels)
{
max[pixelIndex] = 0.0;
min[pixelIndex] = 0.0;

pixelIndex++;
numPixels = pixelIndex;
}

for (auto i = std::size_t{0}; i < numPixels; i++)
Expand Down

0 comments on commit 0363ee6

Please sign in to comment.