1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef IIRFilterNode_h_
8 #define IIRFilterNode_h_
9 
10 #include "AudioNode.h"
11 #include "AudioParam.h"
12 #include "mozilla/dom/IIRFilterNodeBinding.h"
13 
14 namespace mozilla {
15 namespace dom {
16 
17 class AudioContext;
18 struct IIRFilterOptions;
19 
20 class IIRFilterNode final : public AudioNode {
21  public:
22   static already_AddRefed<IIRFilterNode> Create(
23       AudioContext& aAudioContext, const IIRFilterOptions& aOptions,
24       ErrorResult& aRv);
25 
NS_INLINE_DECL_REFCOUNTING_INHERITED(IIRFilterNode,AudioNode)26   NS_INLINE_DECL_REFCOUNTING_INHERITED(IIRFilterNode, AudioNode)
27 
28   static already_AddRefed<IIRFilterNode> Constructor(
29       const GlobalObject& aGlobal, AudioContext& aAudioContext,
30       const IIRFilterOptions& aOptions, ErrorResult& aRv) {
31     return Create(aAudioContext, aOptions, aRv);
32   }
33 
34   JSObject* WrapObject(JSContext* aCx,
35                        JS::Handle<JSObject*> aGivenProto) override;
36 
37   void GetFrequencyResponse(const Float32Array& aFrequencyHz,
38                             const Float32Array& aMagResponse,
39                             const Float32Array& aPhaseResponse);
40 
NodeType()41   const char* NodeType() const override { return "IIRFilterNode"; }
42 
43   size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override;
44   size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override;
45 
46  private:
47   IIRFilterNode(AudioContext* aContext, const Sequence<double>& aFeedforward,
48                 const Sequence<double>& aFeedback);
49   ~IIRFilterNode() = default;
50 
51   nsTArray<double> mFeedback;
52   nsTArray<double> mFeedforward;
53 };
54 
55 }  // namespace dom
56 }  // namespace mozilla
57 
58 #endif
59