CrossFade: eliminate NaN from mixramp_interpolate()
Use a boolean flag instead.
This commit is contained in:
parent
c6f101884b
commit
c4d3030d24
@ -25,8 +25,6 @@
|
|||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
#include "Log.hxx"
|
#include "Log.hxx"
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -37,7 +35,8 @@ gcc_pure
|
|||||||
static float
|
static float
|
||||||
mixramp_interpolate(const char *ramp_list, float required_db)
|
mixramp_interpolate(const char *ramp_list, float required_db)
|
||||||
{
|
{
|
||||||
float last_db = nan(""), last_secs = 0;
|
float last_db = 0, last_secs = 0;
|
||||||
|
bool have_last = false;
|
||||||
|
|
||||||
/* ramp_list is a string of pairs of dBs and seconds that describe the
|
/* ramp_list is a string of pairs of dBs and seconds that describe the
|
||||||
* volume profile. Delimiters are semi-colons between pairs and spaces
|
* volume profile. Delimiters are semi-colons between pairs and spaces
|
||||||
@ -71,11 +70,12 @@ mixramp_interpolate(const char *ramp_list, float required_db)
|
|||||||
if (db < required_db) {
|
if (db < required_db) {
|
||||||
last_db = db;
|
last_db = db;
|
||||||
last_secs = secs;
|
last_secs = secs;
|
||||||
|
have_last = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If required db < any stored value, use the least. */
|
/* If required db < any stored value, use the least. */
|
||||||
if (std::isnan(last_db))
|
if (!have_last)
|
||||||
return secs;
|
return secs;
|
||||||
|
|
||||||
/* Finally, interpolate linearly. */
|
/* Finally, interpolate linearly. */
|
||||||
|
Loading…
Reference in New Issue
Block a user