Commit 515de762 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Refactor skipping code.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent cb30c155
......@@ -244,14 +244,16 @@ public:
size_t
skip (size_t zeros)
{
assert (zeros == Params::frame_size);
assert (zeros % Params::frame_size == 0 && zeros > 0);
size_t out = 0;
if (first_frame)
{
first_frame = false;
return 0;
return zeros - Params::frame_size;
}
else
return Params::frame_size;
return zeros;
}
};
......@@ -309,11 +311,12 @@ public:
size_t
skip (size_t zeros)
{
assert (zeros == Params::frame_size);
assert (zeros % Params::frame_size == 0);
bump_frame_number();
for (int i = 0; i < zeros / Params::frame_size; i++)
bump_frame_number();
return wm_synth.skip (Params::frame_size);
return wm_synth.skip (zeros);
}
void
bump_frame_number()
......@@ -563,23 +566,22 @@ public:
skip (size_t zeros)
{
assert (zeros % Params::frame_size == 0);
size_t out = 0;
while (zeros)
if (!need_resampler)
{
if (!need_resampler)
{
out += wm_gen.skip (Params::frame_size); /* cheap case */
}
else
return wm_gen.skip (zeros); /* cheap case */
}
else
{
/* FIXME: inefficient */
vector<float> samples (Params::frame_size * n_channels);
size_t out = 0;
while (zeros)
{
/* FIXME: inefficient */
vector<float> samples (Params::frame_size * n_channels);
size_t n_values = run (samples).size();
out += n_values / n_channels;
zeros -= Params::frame_size;
out += run (samples).size() / n_channels;
}
zeros -= Params::frame_size;
return out;
}
return out;
}
int
data_blocks() const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment