Commit 96011ffa authored by Erik de Castro Lopo's avatar Erik de Castro Lopo
Browse files

src/flac/encode.c : Improve perf of format_input() when compiled with MSVC.

MSVS profiler shows that the encoder spends too much time inside format_input()
when the input is 24-bit. Increases encoding speed:

FLAC -5: from 27.1 to 24.2 seconds
FLAC -8: from 76.2 to 73.1 seconds
(MSVS 2010, 32-bit flac.exe, 24-bit stereo input file)

For GCC compiles the encoding speed remains the same. I suspect that GCC is
smart enough to use strict aliasing rule to optimize the code, and MSVS doesn't
even know about it.

Path-from: lvqcl <lvqcl.mail@gmail.com>
parent 26b95461
......@@ -2395,19 +2395,23 @@ FLAC__bool format_input(FLAC__int32 *dest[], unsigned wide_samples, FLAC__bool i
unsigned b;
for(b = sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
for(channel = 0; channel < channels; channel++, sample++) {
out[channel][wide_sample] = ucbuffer_[b++]; out[channel][wide_sample] <<= 8;
out[channel][wide_sample] |= ucbuffer_[b++]; out[channel][wide_sample] <<= 8;
out[channel][wide_sample] |= ucbuffer_[b++];
out[channel][wide_sample] -= 0x800000;
FLAC__int32 t;
t = ucbuffer_[b++]; t <<= 8;
t |= ucbuffer_[b++]; t <<= 8;
t |= ucbuffer_[b++];
t -= 0x800000;
out[channel][wide_sample] = t;
}
}
else {
unsigned b;
for(b = sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
for(channel = 0; channel < channels; channel++, sample++) {
out[channel][wide_sample] = scbuffer_[b++]; out[channel][wide_sample] <<= 8;
out[channel][wide_sample] |= ucbuffer_[b++]; out[channel][wide_sample] <<= 8;
out[channel][wide_sample] |= ucbuffer_[b++];
FLAC__int32 t;
t = scbuffer_[b++]; t <<= 8;
t |= ucbuffer_[b++]; t <<= 8;
t |= ucbuffer_[b++];
out[channel][wide_sample] = t;
}
}
}
......
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