Merge "aaudio: use fmin and fmax to block Nan" into pi-dev
diff --git a/media/libaaudio/src/utility/AAudioUtilities.cpp b/media/libaaudio/src/utility/AAudioUtilities.cpp
index 4a2a0a8..40ebb76 100644
--- a/media/libaaudio/src/utility/AAudioUtilities.cpp
+++ b/media/libaaudio/src/utility/AAudioUtilities.cpp
@@ -59,10 +59,15 @@
return (int16_t) roundf(fmaxf(fminf(f * scale, scale - 1.f), -scale));
}
+// Clip to valid range of a float sample to prevent excessive volume.
+// By using fmin and fmax we also protect against NaN.
+static float clipToMinMaxHeadroom(float input) {
+ return fmin(MAX_HEADROOM, fmax(MIN_HEADROOM, input));
+}
+
static float clipAndClampFloatToPcm16(float sample, float scaler) {
// Clip to valid range of a float sample to prevent excessive volume.
- if (sample > MAX_HEADROOM) sample = MAX_HEADROOM;
- else if (sample < MIN_HEADROOM) sample = MIN_HEADROOM;
+ sample = clipToMinMaxHeadroom(sample);
// Scale and convert to a short.
float fval = sample * scaler;
@@ -127,6 +132,7 @@
}
}
+
// This code assumes amplitude1 and amplitude2 are between 0.0 and 1.0
void AAudio_linearRamp(const float *source,
float *destination,
@@ -139,10 +145,8 @@
for (int frameIndex = 0; frameIndex < numFrames; frameIndex++) {
for (int sampleIndex = 0; sampleIndex < samplesPerFrame; sampleIndex++) {
float sample = *source++;
-
// Clip to valid range of a float sample to prevent excessive volume.
- if (sample > MAX_HEADROOM) sample = MAX_HEADROOM;
- else if (sample < MIN_HEADROOM) sample = MIN_HEADROOM;
+ sample = clipToMinMaxHeadroom(sample);
*destination++ = sample * scaler;
}
@@ -240,8 +244,7 @@
float sample = *source++;
// Clip to valid range of a float sample to prevent excessive volume.
- if (sample > MAX_HEADROOM) sample = MAX_HEADROOM;
- else if (sample < MIN_HEADROOM) sample = MIN_HEADROOM;
+ sample = clipToMinMaxHeadroom(sample);
const float scaler = amplitude1 + (frameIndex * delta);
float sampleScaled = sample * scaler;