Commit af83ac5e authored by Max Kellermann's avatar Max Kellermann

mp3: dither a whole block at a time

Fill the whole output buffer at a time by using dither_buffer()'s ability to decode blocks. Calculate how many samples fit into the output buffer before each invocation.
parent e99536e8
......@@ -932,12 +932,18 @@ static int mp3Read(mp3DecodeData * data, struct decoder *decoder,
pcm_length -= data->dropSamplesAtEnd;
}
for (; i < pcm_length; i++) {
unsigned int num_samples;
while (i < pcm_length) {
unsigned int num_samples =
(data->outputBufferEnd - data->outputPtr) /
(2 * MAD_NCHANNELS(&(data->frame).header));
if (num_samples > pcm_length - i)
num_samples = pcm_length - i;
i += num_samples;
num_samples = dither_buffer((mpd_sint16 *) data->outputPtr,
&data->synth, &data->dither,
i, i + 1,
i - num_samples, i,
MAD_NCHANNELS(&(data->frame).header));
data->outputPtr += 2 * num_samples;
......
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