Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: third_party/WebKit/Source/modules/webaudio/AudioNode.h

Issue 1865583002: Implement BaseAudioContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010, Google Inc. All rights reserved. 2 * Copyright (C) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 21 matching lines...) Expand all
32 #include "wtf/OwnPtr.h" 32 #include "wtf/OwnPtr.h"
33 #include "wtf/PassOwnPtr.h" 33 #include "wtf/PassOwnPtr.h"
34 #include "wtf/RefPtr.h" 34 #include "wtf/RefPtr.h"
35 #include "wtf/Vector.h" 35 #include "wtf/Vector.h"
36 #include "wtf/build_config.h" 36 #include "wtf/build_config.h"
37 37
38 #define DEBUG_AUDIONODE_REFERENCES 0 38 #define DEBUG_AUDIONODE_REFERENCES 0
39 39
40 namespace blink { 40 namespace blink {
41 41
42 class AbstractAudioContext; 42 class BaseAudioContext;
43 class AudioNode; 43 class AudioNode;
44 class AudioNodeInput; 44 class AudioNodeInput;
45 class AudioNodeOutput; 45 class AudioNodeOutput;
46 class AudioParam; 46 class AudioParam;
47 class ExceptionState; 47 class ExceptionState;
48 48
49 // An AudioNode is the basic building block for handling audio within an Abstrac tAudioContext. 49 // An AudioNode is the basic building block for handling audio within an BaseAud ioContext.
50 // It may be an audio source, an intermediate processing module, or an audio des tination. 50 // It may be an audio source, an intermediate processing module, or an audio des tination.
51 // Each AudioNode can have inputs and/or outputs. An AudioSourceNode has no inpu ts and a single output. 51 // Each AudioNode can have inputs and/or outputs. An AudioSourceNode has no inpu ts and a single output.
52 // An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware. 52 // An AudioDestinationNode has one input and no outputs and represents the final destination to the audio hardware.
53 // Most processing nodes such as filters will have one input and one output, alt hough multiple inputs and outputs are possible. 53 // Most processing nodes such as filters will have one input and one output, alt hough multiple inputs and outputs are possible.
54 54
55 // Each of AudioNode objects owns its dedicated AudioHandler object. AudioNode 55 // Each of AudioNode objects owns its dedicated AudioHandler object. AudioNode
56 // is responsible to provide IDL-accessible interface and its lifetime is 56 // is responsible to provide IDL-accessible interface and its lifetime is
57 // managed by Oilpan GC. AudioHandler is responsible for anything else. We must 57 // managed by Oilpan GC. AudioHandler is responsible for anything else. We must
58 // not touch AudioNode objects in an audio rendering thread. 58 // not touch AudioNode objects in an audio rendering thread.
59 59
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // dispose() is called when the owner AudioNode is about to be 98 // dispose() is called when the owner AudioNode is about to be
99 // destructed. This must be called in the main thread, and while the graph 99 // destructed. This must be called in the main thread, and while the graph
100 // lock is held. 100 // lock is held.
101 // Do not release resources used by an audio rendering thread in dispose(). 101 // Do not release resources used by an audio rendering thread in dispose().
102 virtual void dispose(); 102 virtual void dispose();
103 103
104 // node() returns a valid object until dispose() is called. This returns 104 // node() returns a valid object until dispose() is called. This returns
105 // nullptr after dispose(). We must not call node() in an audio rendering 105 // nullptr after dispose(). We must not call node() in an audio rendering
106 // thread. 106 // thread.
107 AudioNode* node() const; 107 AudioNode* node() const;
108 // context() returns a valid object until the AbstractAudioContext dies, and returns 108 // context() returns a valid object until the BaseAudioContext dies, and ret urns
109 // nullptr otherwise. This always returns a valid object in an audio 109 // nullptr otherwise. This always returns a valid object in an audio
110 // rendering thread, and inside dispose(). We must not call context() in 110 // rendering thread, and inside dispose(). We must not call context() in
111 // the destructor. 111 // the destructor.
112 virtual AbstractAudioContext* context() const; 112 virtual BaseAudioContext* context() const;
113 void clearContext() { m_context = nullptr; } 113 void clearContext() { m_context = nullptr; }
114 114
115 enum ChannelCountMode { 115 enum ChannelCountMode {
116 Max, 116 Max,
117 ClampedMax, 117 ClampedMax,
118 Explicit 118 Explicit
119 }; 119 };
120 120
121 NodeType getNodeType() const { return m_nodeType; } 121 NodeType getNodeType() const { return m_nodeType; }
122 String nodeTypeName() const; 122 String nodeTypeName() const;
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 volatile bool m_isInitialized; 237 volatile bool m_isInitialized;
238 NodeType m_nodeType; 238 NodeType m_nodeType;
239 239
240 // The owner AudioNode. This untraced member is safe because dispose() is 240 // The owner AudioNode. This untraced member is safe because dispose() is
241 // called before the AudioNode death, and it clears m_node. Do not access 241 // called before the AudioNode death, and it clears m_node. Do not access
242 // m_node directly, use node() instead. 242 // m_node directly, use node() instead.
243 // See http://crbug.com/404527 for the detail. 243 // See http://crbug.com/404527 for the detail.
244 UntracedMember<AudioNode> m_node; 244 UntracedMember<AudioNode> m_node;
245 245
246 // This untraced member is safe because this is cleared for all of live 246 // This untraced member is safe because this is cleared for all of live
247 // AudioHandlers when the AbstractAudioContext dies. Do not access m_contex t 247 // AudioHandlers when the BaseAudioContext dies. Do not access m_context
248 // directly, use context() instead. 248 // directly, use context() instead.
249 // See http://crbug.com/404527 for the detail. 249 // See http://crbug.com/404527 for the detail.
250 UntracedMember<AbstractAudioContext> m_context; 250 UntracedMember<BaseAudioContext> m_context;
251 251
252 float m_sampleRate; 252 float m_sampleRate;
253 Vector<OwnPtr<AudioNodeInput>> m_inputs; 253 Vector<OwnPtr<AudioNodeInput>> m_inputs;
254 Vector<OwnPtr<AudioNodeOutput>> m_outputs; 254 Vector<OwnPtr<AudioNodeOutput>> m_outputs;
255 255
256 double m_lastProcessingTime; 256 double m_lastProcessingTime;
257 double m_lastNonSilentTime; 257 double m_lastNonSilentTime;
258 258
259 volatile int m_connectionRefCount; 259 volatile int m_connectionRefCount;
260 260
(...skipping 23 matching lines...) Expand all
284 284
285 virtual AudioNode* connect(AudioNode*, unsigned outputIndex, unsigned inputI ndex, ExceptionState&); 285 virtual AudioNode* connect(AudioNode*, unsigned outputIndex, unsigned inputI ndex, ExceptionState&);
286 void connect(AudioParam*, unsigned outputIndex, ExceptionState&); 286 void connect(AudioParam*, unsigned outputIndex, ExceptionState&);
287 void disconnect(); 287 void disconnect();
288 virtual void disconnect(unsigned outputIndex, ExceptionState&); 288 virtual void disconnect(unsigned outputIndex, ExceptionState&);
289 void disconnect(AudioNode*, ExceptionState&); 289 void disconnect(AudioNode*, ExceptionState&);
290 void disconnect(AudioNode*, unsigned outputIndex, ExceptionState&); 290 void disconnect(AudioNode*, unsigned outputIndex, ExceptionState&);
291 void disconnect(AudioNode*, unsigned outputIndex, unsigned inputIndex, Excep tionState&); 291 void disconnect(AudioNode*, unsigned outputIndex, unsigned inputIndex, Excep tionState&);
292 void disconnect(AudioParam*, ExceptionState&); 292 void disconnect(AudioParam*, ExceptionState&);
293 void disconnect(AudioParam*, unsigned outputIndex, ExceptionState&); 293 void disconnect(AudioParam*, unsigned outputIndex, ExceptionState&);
294 AbstractAudioContext* context() const; 294 BaseAudioContext* context() const;
295 unsigned numberOfInputs() const; 295 unsigned numberOfInputs() const;
296 unsigned numberOfOutputs() const; 296 unsigned numberOfOutputs() const;
297 unsigned long channelCount() const; 297 unsigned long channelCount() const;
298 void setChannelCount(unsigned long, ExceptionState&); 298 void setChannelCount(unsigned long, ExceptionState&);
299 String channelCountMode() const; 299 String channelCountMode() const;
300 void setChannelCountMode(const String&, ExceptionState&); 300 void setChannelCountMode(const String&, ExceptionState&);
301 String channelInterpretation() const; 301 String channelInterpretation() const;
302 void setChannelInterpretation(const String&, ExceptionState&); 302 void setChannelInterpretation(const String&, ExceptionState&);
303 303
304 // EventTarget 304 // EventTarget
305 const AtomicString& interfaceName() const final; 305 const AtomicString& interfaceName() const final;
306 ExecutionContext* getExecutionContext() const final; 306 ExecutionContext* getExecutionContext() const final;
307 307
308 // Called inside AudioHandler constructors. 308 // Called inside AudioHandler constructors.
309 void didAddOutput(unsigned numberOfOutputs); 309 void didAddOutput(unsigned numberOfOutputs);
310 // Like disconnect, but no exception is thrown if the outputIndex is invalid . Just do nothing 310 // Like disconnect, but no exception is thrown if the outputIndex is invalid . Just do nothing
311 // in that case. 311 // in that case.
312 void disconnectWithoutException(unsigned outputIndex); 312 void disconnectWithoutException(unsigned outputIndex);
313 313
314 protected: 314 protected:
315 explicit AudioNode(AbstractAudioContext&); 315 explicit AudioNode(BaseAudioContext&);
316 // This should be called in a constructor. 316 // This should be called in a constructor.
317 void setHandler(PassRefPtr<AudioHandler>); 317 void setHandler(PassRefPtr<AudioHandler>);
318 318
319 private: 319 private:
320 void dispose(); 320 void dispose();
321 void disconnectAllFromOutput(unsigned outputIndex); 321 void disconnectAllFromOutput(unsigned outputIndex);
322 // Returns true if the specified AudioNodeInput was connected. 322 // Returns true if the specified AudioNodeInput was connected.
323 bool disconnectFromOutputIfConnected(unsigned outputIndex, AudioNode& destin ation, unsigned inputIndexOfDestination); 323 bool disconnectFromOutputIfConnected(unsigned outputIndex, AudioNode& destin ation, unsigned inputIndexOfDestination);
324 // Returns true if the specified AudioParam was connected. 324 // Returns true if the specified AudioParam was connected.
325 bool disconnectFromOutputIfConnected(unsigned outputIndex, AudioParam&); 325 bool disconnectFromOutputIfConnected(unsigned outputIndex, AudioParam&);
326 326
327 Member<AbstractAudioContext> m_context; 327 Member<BaseAudioContext> m_context;
328 RefPtr<AudioHandler> m_handler; 328 RefPtr<AudioHandler> m_handler;
329 // Represents audio node graph with Oilpan references. N-th HeapHashSet 329 // Represents audio node graph with Oilpan references. N-th HeapHashSet
330 // represents a set of AudioNode objects connected to this AudioNode's N-th 330 // represents a set of AudioNode objects connected to this AudioNode's N-th
331 // output. 331 // output.
332 HeapVector<Member<HeapHashSet<Member<AudioNode>>>> m_connectedNodes; 332 HeapVector<Member<HeapHashSet<Member<AudioNode>>>> m_connectedNodes;
333 // Represents audio node graph with Oilpan references. N-th HeapHashSet 333 // Represents audio node graph with Oilpan references. N-th HeapHashSet
334 // represents a set of AudioParam objects connected to this AudioNode's N-th 334 // represents a set of AudioParam objects connected to this AudioNode's N-th
335 // output. 335 // output.
336 HeapVector<Member<HeapHashSet<Member<AudioParam>>>> m_connectedParams; 336 HeapVector<Member<HeapHashSet<Member<AudioParam>>>> m_connectedParams;
337 }; 337 };
338 338
339 } // namespace blink 339 } // namespace blink
340 340
341 #endif // AudioNode_h 341 #endif // AudioNode_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698