Fix hermite cracking when ratio < 1.0.

This commit is contained in:
Themaister 2012-11-25 12:32:24 +01:00
parent b023687d04
commit ccd1449aa8
2 changed files with 22 additions and 21 deletions

View File

@ -64,8 +64,22 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
const float *in_data = data->data_in;
float *out_data = data->data_out;
for (size_t i = 0; i < in_frames; i++)
size_t i = 0;
while (i < in_frames)
{
while (re->r_frac >= 1.0 && i < in_frames)
{
re->r_frac -= 1.0;
for (unsigned i = 0; i < CHANNELS; i++)
{
re->chan_data[i][0] = re->chan_data[i][1];
re->chan_data[i][1] = re->chan_data[i][2];
re->chan_data[i][2] = re->chan_data[i][3];
re->chan_data[i][3] = *in_data++;
}
i++;
}
while (re->r_frac <= 1.0)
{
re->r_frac += r_step;
@ -77,18 +91,6 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
}
processed_out++;
}
while (re->r_frac >= 1.0)
{
re->r_frac -= 1.0;
for (unsigned i = 0; i < CHANNELS; i++)
{
re->chan_data[i][0] = re->chan_data[i][1];
re->chan_data[i][1] = re->chan_data[i][2];
re->chan_data[i][2] = re->chan_data[i][3];
re->chan_data[i][3] = *in_data++;
}
}
}
data->output_frames = processed_out;

View File

@ -254,14 +254,13 @@ void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
frames--;
}
if (re->time >= PHASES)
break;
process_sinc(re, output);
output += 2;
out_frames++;
re->time += ratio;
while (re->time < PHASES)
{
process_sinc(re, output);
output += 2;
out_frames++;
re->time += ratio;
}
}
data->output_frames = out_frames;