Commit 867dadcd authored by Stefan Westerfeld's avatar Stefan Westerfeld

Refactor skipping code.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent e9de5719
...@@ -245,14 +245,16 @@ public: ...@@ -245,14 +245,16 @@ public:
size_t size_t
skip (size_t zeros) skip (size_t zeros)
{ {
assert (zeros == Params::frame_size); assert (zeros % Params::frame_size == 0 && zeros > 0);
size_t out = 0;
if (first_frame) if (first_frame)
{ {
first_frame = false; first_frame = false;
return 0; return zeros - Params::frame_size;
} }
else else
return Params::frame_size; return zeros;
} }
}; };
...@@ -310,11 +312,12 @@ public: ...@@ -310,11 +312,12 @@ public:
size_t size_t
skip (size_t zeros) skip (size_t zeros)
{ {
assert (zeros == Params::frame_size); assert (zeros % Params::frame_size == 0);
for (int i = 0; i < zeros / Params::frame_size; i++)
bump_frame_number(); bump_frame_number();
return wm_synth.skip (Params::frame_size); return wm_synth.skip (zeros);
} }
void void
bump_frame_number() bump_frame_number()
...@@ -564,24 +567,23 @@ public: ...@@ -564,24 +567,23 @@ public:
skip (size_t zeros) skip (size_t zeros)
{ {
assert (zeros % Params::frame_size == 0); 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 */ return wm_gen.skip (zeros); /* cheap case */
} }
else else
{ {
/* FIXME: inefficient */ /* FIXME: inefficient */
vector<float> samples (Params::frame_size * n_channels); vector<float> samples (Params::frame_size * n_channels);
size_t n_values = run (samples).size(); size_t out = 0;
out += n_values / n_channels; while (zeros)
} {
zeros -= Params::frame_size; zeros -= Params::frame_size;
out += run (samples).size() / n_channels;
} }
return out; return out;
} }
}
int int
data_blocks() const 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