aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-10-30 16:50:34 +0100
committerMax Kellermann <max@duempel.org>2013-10-30 16:50:34 +0100
commita65f63747b4602cf227f7c0699b01bba5f7cd8df (patch)
treeef8d37fe937904634424e942643d987f0ee8bde3 /src
parenta21edddf277458cbff816dcbfced3a849f380f17 (diff)
downloadmpd-a65f63747b4602cf227f7c0699b01bba5f7cd8df.tar.gz
mpd-a65f63747b4602cf227f7c0699b01bba5f7cd8df.tar.xz
mpd-a65f63747b4602cf227f7c0699b01bba5f7cd8df.zip
CrossFade: use negative value for invalid mixramp_delay
Avoid NaN to allow -ffast-math.
Diffstat (limited to '')
-rw-r--r--src/CrossFade.cxx2
-rw-r--r--src/CrossFade.hxx7
-rw-r--r--src/PlayerThread.cxx2
3 files changed, 5 insertions, 6 deletions
diff --git a/src/CrossFade.cxx b/src/CrossFade.cxx
index 76820fb45..098987d19 100644
--- a/src/CrossFade.cxx
+++ b/src/CrossFade.cxx
@@ -108,7 +108,7 @@ CrossFadeSettings::Calculate(float total_time,
chunks_f = (float)af.GetTimeToSize() / (float)CHUNK_SIZE;
- if (std::isnan(mixramp_delay) || !mixramp_start || !mixramp_prev_end) {
+ if (mixramp_delay <= 0 || !mixramp_start || !mixramp_prev_end) {
chunks = (chunks_f * duration + 0.5);
} else {
/* Calculate mixramp overlap. */
diff --git a/src/CrossFade.hxx b/src/CrossFade.hxx
index eb81ae152..c47db84e1 100644
--- a/src/CrossFade.hxx
+++ b/src/CrossFade.hxx
@@ -22,8 +22,6 @@
#include "Compiler.h"
-#include <cmath>
-
struct AudioFormat;
struct CrossFadeSettings {
@@ -35,14 +33,15 @@ struct CrossFadeSettings {
float mixramp_db;
/**
- * The configured MixRapm delay [s].
+ * The configured MixRapm delay [s]. A non-positive value
+ * disables MixRamp.
*/
float mixramp_delay;
CrossFadeSettings()
:duration(0),
mixramp_db(0),
- mixramp_delay(std::nanf(""))
+ mixramp_delay(-1)
{}
diff --git a/src/PlayerThread.cxx b/src/PlayerThread.cxx
index 79efe7a9d..cb45885d5 100644
--- a/src/PlayerThread.cxx
+++ b/src/PlayerThread.cxx
@@ -779,7 +779,7 @@ Player::PlayNextChunk()
other_chunk->tag);
other_chunk->tag = nullptr;
- if (std::isnan(pc.cross_fade.mixramp_delay)) {
+ if (pc.cross_fade.mixramp_delay <= 0) {
chunk->mix_ratio = ((float)cross_fade_position)
/ cross_fade_chunks;
} else {