LADSPA - Fix various floating point errors (#3927)
* swh - Dyson Compressor, fix NaN * swh - shaper_1187, division with 0 * Division with 0 in calf limiter
This commit is contained in:
@@ -731,6 +731,7 @@ void lookahead_limiter::process(float &left, float &right, float * multi_buffer)
|
||||
_peak = fabs(buffer[nextpos[j]]) > fabs(buffer[nextpos[j] + 1]) ? fabs(buffer[nextpos[j]]) : fabs(buffer[nextpos[j] + 1]);
|
||||
// calc a delta to use to reach our incoming peak from the
|
||||
// stored position
|
||||
_peak = std::max( _peak, 0.000001f );
|
||||
_delta = (_limit / peak - (limit * _multi_coeff * weight) / _peak) / (((buffer_size - nextpos[j] + pos) % buffer_size) / channels);
|
||||
if(_delta < nextdelta[j]) {
|
||||
// if the buffered delta is more important than the delta
|
||||
|
||||
@@ -836,7 +836,7 @@ static void __attribute__((constructor)) swh_init() {
|
||||
D_("Release time (s)");
|
||||
port_range_hints[DYSONCOMPRESS_RELEASE_TIME].HintDescriptor =
|
||||
LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW;
|
||||
port_range_hints[DYSONCOMPRESS_RELEASE_TIME].LowerBound = 0;
|
||||
port_range_hints[DYSONCOMPRESS_RELEASE_TIME].LowerBound = 0.0000001;
|
||||
port_range_hints[DYSONCOMPRESS_RELEASE_TIME].UpperBound = 1;
|
||||
|
||||
/* Parameters for Fast compression ratio */
|
||||
|
||||
@@ -115,8 +115,8 @@ static void runShaper(LADSPA_Handle instance, unsigned long sample_count) {
|
||||
|
||||
if (shapep < 1.0f && shapep > -1.0f) {
|
||||
shape = 1.0f;
|
||||
} else if (shape < 0) {
|
||||
shape = -1.0f / shape;
|
||||
} else if (shapep < 0) {
|
||||
shape = -1.0f / shapep;
|
||||
} else {
|
||||
shape = shapep;
|
||||
}
|
||||
@@ -160,8 +160,8 @@ static void runAddingShaper(LADSPA_Handle instance, unsigned long sample_count)
|
||||
|
||||
if (shapep < 1.0f && shapep > -1.0f) {
|
||||
shape = 1.0f;
|
||||
} else if (shape < 0) {
|
||||
shape = -1.0f / shape;
|
||||
} else if (shapep < 0) {
|
||||
shape = -1.0f / shapep;
|
||||
} else {
|
||||
shape = shapep;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user