commit a9e02918815c2a76fc0053a91ae483cfac014852
parent 7d01ef28639c81386899e4b0827e7be2cf978047
Author: Paul Adenot <paul@paul.cx>
Date: Tue, 25 Nov 2025 13:16:13 +0000
Bug 1999307 - Check detune for NaN in addition to frequency in AudioBufferSourceNode. r=karlt
The convolver node ends up outputing NaNs, probably because of a malformed file.
Differential Revision: https://phabricator.services.mozilla.com/D272112
Diffstat:
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/dom/media/webaudio/AudioBufferSourceNode.cpp b/dom/media/webaudio/AudioBufferSourceNode.cpp
@@ -443,10 +443,13 @@ class AudioBufferSourceNodeEngine final : public AudioNodeEngine {
int32_t ComputeFinalOutSampleRate(float aPlaybackRate, float aDetune) {
float computedPlaybackRate = aPlaybackRate * fdlibm_exp2f(aDetune / 1200.f);
- // Make sure the playback rate is something our resampler can work with.
+ if (std::isnan(computedPlaybackRate)) {
+ computedPlaybackRate = 1.0f;
+ }
+ // Make sure the playback rate is something our resampler can work with
int32_t rate = WebAudioUtils::TruncateFloatToInt<int32_t>(
mSource->mSampleRate / computedPlaybackRate);
- return rate ? rate : mBufferSampleRate;
+ return rate > 0 ? rate : mBufferSampleRate;
}
void UpdateSampleRateIfNeeded(uint32_t aChannels, TrackTime aTrackPosition) {
@@ -471,9 +474,6 @@ class AudioBufferSourceNodeEngine final : public AudioNodeEngine {
} else {
detune = mDetuneTimeline.GetComplexValueAtTime(aTrackPosition);
}
- if (playbackRate <= 0 || std::isnan(playbackRate)) {
- playbackRate = 1.0f;
- }
int32_t outRate = ComputeFinalOutSampleRate(playbackRate, detune);
UpdateResampler(outRate, aChannels);