Chromium Code Reviews| Index: third_party/WebKit/Source/platform/audio/IIRFilter.h |
| diff --git a/third_party/WebKit/Source/platform/audio/IIRFilter.h b/third_party/WebKit/Source/platform/audio/IIRFilter.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..07171344be15f2c3a942c3554bc8e93e3906b285 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/platform/audio/IIRFilter.h |
| @@ -0,0 +1,58 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
|
tkent
2016/01/13 03:28:29
2016
Raymond Toy
2016/01/13 18:30:54
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef IIRFilter_h |
| +#define IIRFilter_h |
| + |
| +#include "platform/PlatformExport.h" |
| +#include "platform/audio/AudioArray.h" |
| +#include "wtf/Vector.h" |
| + |
| +namespace blink { |
| + |
| +class PLATFORM_EXPORT IIRFilter final { |
| +public: |
| + // The maximum IIR filter order. This also limits the number of feedforward coefficients. The |
| + // maximum number of coefficients is 20 according to the spec. |
| + const static size_t kMaxOrder = 19; |
| + IIRFilter(const AudioDoubleArray* feedforwardCoef, const AudioDoubleArray* feedbackCoef); |
| + ~IIRFilter(); |
| + |
| + void process(const float* sourceP, float* destP, size_t framesToProcess); |
| + |
| + void reset(); |
| + |
| + void getFrequencyResponse(int nFrequencies, |
| + const float* frequency, |
| + float* magResponse, |
| + float* phaseResponse); |
| + |
| +private: |
| + // Filter memory |
| + // |
| + // For simplicity, we assume |m_xBuffer| and |m_yBuffer| have the same length, and the length is |
| + // a power of two. Since the number of coefficients has a fixed upper length, the size of |
| + // xBuffer and yBuffer is fixed. |m_xBuffer| holds the old input values and |m_yBuffer| holds |
| + // the old output values needed to compute the new output value. |
| + // |
| + // m_yBuffer[m_bufferIndex] holds the most recent output value, say, y[n]. Then |
| + // m_yBuffer[m_bufferIndex - k] is y[n - k]. Similarly for m_xBuffer. |
| + // |
| + // To minimize roundoff, these arrays are double's instead of floats. |
| + AudioDoubleArray m_xBuffer; |
| + AudioDoubleArray m_yBuffer; |
| + |
| + // Index into the xBuffer and yBuffer arrays where the most current x and y values should be |
| + // stored. xBuffer[bufferIndex] corresponds to x[n], the current x input value and |
| + // yBuffer[bufferIndex] is where y[n], the current output value. |
| + int m_bufferIndex; |
| + |
| + // Coefficients of the IIR filter. To minimize storage, these point to the arrays given in the |
| + // constructor. |
| + const AudioDoubleArray* m_feedback; |
| + const AudioDoubleArray* m_feedforward; |
| +}; |
| +} // blink |
|
tkent
2016/01/13 03:28:28
nit: blink -> namespace blink
|
| + |
| +#endif // IIRFilter_h |