From bca3f10dd499e9f57180260ef0e719ee3bdd6646 Mon Sep 17 00:00:00 2001 From: Karl Tomlinson Date: Wed, 9 Oct 2013 15:33:02 +1300 Subject: [PATCH] b=924286 handle non-unit mVolume in BiquadFilterNode r=ehsan --HG-- extra : transplant_source : %E5%9E%3E%5D%F2%E5%99%7B%88%DB%21%7D%1C%82%1A.q%26%F0%EA --- content/media/webaudio/BiquadFilterNode.cpp | 23 ++++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/content/media/webaudio/BiquadFilterNode.cpp b/content/media/webaudio/BiquadFilterNode.cpp index ca4aa346f70..9a5f95922e9 100644 --- a/content/media/webaudio/BiquadFilterNode.cpp +++ b/content/media/webaudio/BiquadFilterNode.cpp @@ -25,13 +25,14 @@ NS_INTERFACE_MAP_END_INHERITING(AudioNode) NS_IMPL_ADDREF_INHERITED(BiquadFilterNode, AudioNode) NS_IMPL_RELEASE_INHERITED(BiquadFilterNode, AudioNode) -void SetParamsOnBiquad(WebCore::Biquad& aBiquad, - float aSampleRate, - BiquadFilterType aType, - double aFrequency, - double aQ, - double aGain, - double aDetune) +static void +SetParamsOnBiquad(WebCore::Biquad& aBiquad, + float aSampleRate, + BiquadFilterType aType, + double aFrequency, + double aQ, + double aGain, + double aDetune) { const double nyquist = aSampleRate * 0.5; double normalizedFrequency = aFrequency / nyquist; @@ -158,10 +159,16 @@ public: double gain = mGain.GetValueAtTime(pos); double detune = mDetune.GetValueAtTime(pos); + float inputBuffer[WEBAUDIO_BLOCK_SIZE]; for (uint32_t i = 0; i < numberOfChannels; ++i) { + auto input = static_cast(aInput.mChannelData[i]); + if (aInput.mVolume != 1.0) { + AudioBlockCopyChannelWithScale(input, aInput.mVolume, inputBuffer); + input = inputBuffer; + } SetParamsOnBiquad(mBiquads[i], aStream->SampleRate(), mType, freq, q, gain, detune); - mBiquads[i].process(static_cast(aInput.mChannelData[i]), + mBiquads[i].process(input, static_cast(const_cast(aOutput->mChannelData[i])), aInput.GetDuration()); }