[flac-dev] PATCH for rice_parameter calculation
lvqcl
lvqcl.mail at gmail.com
Wed Oct 9 08:54:46 PDT 2013
MSVS profiler shows that the following code in stream_encoder.c takes
several percent of CPU time:
for(rice_parameter = 0, k = partition_samples; k < mean; rice_parameter++, k <<= 1)
;
this code is equivalent to:
rice_parameter = 0; k = partition_samples;
while(k < mean) {
rice_parameter++; k <<= 1;
}
The idea was to accelerate it:
rice_parameter = 0; k = partition_samples;
while(k*2 < mean) {
rice_parameter+=2; k <<= 2;
}
while(k < mean) {
rice_parameter++; k <<= 1;
}
or:
rice_parameter = 0; k = partition_samples;
while(k*4 < mean) {
rice_parameter+=3; k <<= 3;
}
while(k < mean) {
rice_parameter++; k <<= 1;
}
After tuning the code for 16-/24-bit WAV and 32-/64-bit compiles
I wrote more complex code (see attach). It doesn't look pretty but
it's faster than the current version. For highest compression preset,
24-bit input and 32-bit exe the encoding speed increases by 6..7%.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rice_parameter.patch
Type: application/octet-stream
Size: 1616 bytes
Desc: not available
Url : http://lists.xiph.org/pipermail/flac-dev/attachments/20131009/4934c85d/attachment.obj
More information about the flac-dev
mailing list