stream_encoder.c : Improve fix for arithmetic overflow.
The previous fix (patch 6f7ec60c
) had the undesireable effect of slowing
down encoding speed on 16 bit files where the arithmetic overflow was
less likely to happen.
This fix forces the use of a FLAC__uint64 accumulator for 24 bit files
and restores the use of a FLAC_uint32 accumulator for 16 (and less) bit
files.
Unfortunately, I have not been able to prove to myself that this overflow
*cannot* happen with 16 bit files.
This commit is contained in:
parent
dd9460e7a5
commit
f34f31dac0
@ -3772,7 +3772,7 @@ void precompute_partition_info_sums_(
|
||||
#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && defined FLAC__HAS_NASM
|
||||
/* slightly pessimistic but still catches all common cases */
|
||||
/* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */
|
||||
if(FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
|
||||
if(bps < 24 && FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
|
||||
precompute_partition_info_sums_32bit_asm_ia32_(residual, abs_residual_partition_sums, residual_samples + predictor_order, predictor_order, min_partition_order, max_partition_order);
|
||||
return;
|
||||
}
|
||||
@ -3783,8 +3783,8 @@ void precompute_partition_info_sums_(
|
||||
unsigned partition, residual_sample, end = (unsigned)(-(int)predictor_order);
|
||||
/* slightly pessimistic but still catches all common cases */
|
||||
/* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */
|
||||
if(FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
|
||||
FLAC__uint64 abs_residual_partition_sum;
|
||||
if(bps < 24 && FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) {
|
||||
FLAC__uint32 abs_residual_partition_sum;
|
||||
|
||||
for(partition = residual_sample = 0; partition < partitions; partition++) {
|
||||
end += default_partition_samples;
|
||||
|
Loading…
Reference in New Issue
Block a user