Line data Source code
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 ScriptProcessorNode_h_
8 : #define ScriptProcessorNode_h_
9 :
10 : #include "AudioNode.h"
11 :
12 : namespace mozilla {
13 : namespace dom {
14 :
15 : class AudioContext;
16 : class SharedBuffers;
17 :
18 : class ScriptProcessorNode final : public AudioNode
19 : {
20 : public:
21 : ScriptProcessorNode(AudioContext* aContext,
22 : uint32_t aBufferSize,
23 : uint32_t aNumberOfInputChannels,
24 : uint32_t aNumberOfOutputChannels);
25 :
26 : NS_DECL_ISUPPORTS_INHERITED
27 :
28 0 : IMPL_EVENT_HANDLER(audioprocess)
29 :
30 : using EventTarget::EventListenerAdded;
31 : void EventListenerAdded(nsIAtom* aType) override;
32 :
33 : using EventTarget::EventListenerRemoved;
34 : void EventListenerRemoved(nsIAtom* aType) override;
35 :
36 : JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
37 :
38 0 : AudioNode* Connect(AudioNode& aDestination, uint32_t aOutput,
39 : uint32_t aInput, ErrorResult& aRv) override
40 : {
41 0 : AudioNode* node = AudioNode::Connect(aDestination, aOutput, aInput, aRv);
42 0 : if (!aRv.Failed()) {
43 0 : UpdateConnectedStatus();
44 : }
45 0 : return node;
46 : }
47 :
48 0 : void Connect(AudioParam& aDestination, uint32_t aOutput,
49 : ErrorResult& aRv) override
50 : {
51 0 : AudioNode::Connect(aDestination, aOutput, aRv);
52 0 : if (!aRv.Failed()) {
53 0 : UpdateConnectedStatus();
54 : }
55 0 : }
56 0 : void Disconnect(ErrorResult& aRv) override
57 : {
58 0 : AudioNode::Disconnect(aRv);
59 0 : UpdateConnectedStatus();
60 0 : }
61 0 : void Disconnect(uint32_t aOutput, ErrorResult& aRv) override
62 : {
63 0 : AudioNode::Disconnect(aOutput, aRv);
64 0 : UpdateConnectedStatus();
65 0 : }
66 0 : void NotifyInputsChanged() override
67 : {
68 0 : UpdateConnectedStatus();
69 0 : }
70 0 : void NotifyHasPhantomInput() override
71 : {
72 0 : mHasPhantomInput = true;
73 : // No need to UpdateConnectedStatus() because there was previously an
74 : // input in InputNodes().
75 0 : }
76 0 : void Disconnect(AudioNode& aDestination, ErrorResult& aRv) override
77 : {
78 0 : AudioNode::Disconnect(aDestination, aRv);
79 0 : UpdateConnectedStatus();
80 0 : }
81 0 : void Disconnect(AudioNode& aDestination, uint32_t aOutput, ErrorResult& aRv) override
82 : {
83 0 : AudioNode::Disconnect(aDestination, aOutput, aRv);
84 0 : UpdateConnectedStatus();
85 0 : }
86 0 : void Disconnect(AudioNode& aDestination, uint32_t aOutput, uint32_t aInput, ErrorResult& aRv) override
87 : {
88 0 : AudioNode::Disconnect(aDestination, aOutput, aInput, aRv);
89 0 : UpdateConnectedStatus();
90 0 : }
91 0 : void Disconnect(AudioParam& aDestination, ErrorResult& aRv) override
92 : {
93 0 : AudioNode::Disconnect(aDestination, aRv);
94 0 : UpdateConnectedStatus();
95 0 : }
96 0 : void Disconnect(AudioParam& aDestination, uint32_t aOutput, ErrorResult& aRv) override
97 : {
98 0 : AudioNode::Disconnect(aDestination, aOutput, aRv);
99 0 : UpdateConnectedStatus();
100 0 : }
101 0 : void SetChannelCount(uint32_t aChannelCount, ErrorResult& aRv) override
102 : {
103 0 : if (aChannelCount != ChannelCount()) {
104 0 : aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
105 : }
106 0 : return;
107 : }
108 0 : void SetChannelCountModeValue(ChannelCountMode aMode, ErrorResult& aRv) override
109 : {
110 0 : if (aMode != ChannelCountMode::Explicit) {
111 0 : aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
112 : }
113 0 : return;
114 : }
115 :
116 0 : uint32_t BufferSize() const
117 : {
118 0 : return mBufferSize;
119 : }
120 :
121 0 : uint32_t NumberOfOutputChannels() const
122 : {
123 0 : return mNumberOfOutputChannels;
124 : }
125 :
126 : using DOMEventTargetHelper::DispatchTrustedEvent;
127 :
128 0 : const char* NodeType() const override
129 : {
130 0 : return "ScriptProcessorNode";
131 : }
132 :
133 : size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override;
134 : size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override;
135 :
136 : private:
137 : virtual ~ScriptProcessorNode();
138 :
139 : void UpdateConnectedStatus();
140 :
141 : const uint32_t mBufferSize;
142 : const uint32_t mNumberOfOutputChannels;
143 : bool mHasPhantomInput = false;
144 : };
145 :
146 : } // namespace dom
147 : } // namespace mozilla
148 :
149 : #endif
150 :
|