OLD | NEW |
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 28 matching lines...) Expand all Loading... |
39 #include "wtf/PassRefPtr.h" | 39 #include "wtf/PassRefPtr.h" |
40 #include "wtf/RefCounted.h" | 40 #include "wtf/RefCounted.h" |
41 #include "wtf/RefPtr.h" | 41 #include "wtf/RefPtr.h" |
42 #include "wtf/ThreadSafeRefCounted.h" | 42 #include "wtf/ThreadSafeRefCounted.h" |
43 #include "wtf/Threading.h" | 43 #include "wtf/Threading.h" |
44 #include "wtf/Vector.h" | 44 #include "wtf/Vector.h" |
45 #include "wtf/text/AtomicStringHash.h" | 45 #include "wtf/text/AtomicStringHash.h" |
46 | 46 |
47 namespace WebCore { | 47 namespace WebCore { |
48 | 48 |
49 class AnalyserNode; | |
50 class AudioBuffer; | 49 class AudioBuffer; |
51 class AudioBufferCallback; | 50 class AudioBufferCallback; |
52 class AudioBufferSourceNode; | 51 class AudioBufferSourceNode; |
| 52 class MediaElementAudioSourceNode; |
| 53 class MediaStreamAudioDestinationNode; |
| 54 class MediaStreamAudioSourceNode; |
| 55 class HTMLMediaElement; |
| 56 class ChannelMergerNode; |
| 57 class ChannelSplitterNode; |
| 58 class GainNode; |
| 59 class PannerNode; |
53 class AudioListener; | 60 class AudioListener; |
54 class AudioSummingJunction; | 61 class AudioSummingJunction; |
55 class BiquadFilterNode; | 62 class BiquadFilterNode; |
56 class ChannelMergerNode; | |
57 class ChannelSplitterNode; | |
58 class ConvolverNode; | |
59 class DelayNode; | 63 class DelayNode; |
60 class Document; | 64 class Document; |
| 65 class ConvolverNode; |
61 class DynamicsCompressorNode; | 66 class DynamicsCompressorNode; |
62 class ExceptionState; | 67 class AnalyserNode; |
63 class GainNode; | 68 class WaveShaperNode; |
64 class HTMLMediaElement; | 69 class ScriptProcessorNode; |
65 class MediaElementAudioSourceNode; | |
66 class MediaStreamAudioDestinationNode; | |
67 class MediaStreamAudioSourceNode; | |
68 class OscillatorNode; | 70 class OscillatorNode; |
69 class PannerNode; | |
70 class PeriodicWave; | 71 class PeriodicWave; |
71 class ScriptProcessorNode; | |
72 class WaveShaperNode; | |
73 | 72 |
74 // AudioContext is the cornerstone of the web audio API and all AudioNodes are c
reated from it. | 73 // AudioContext is the cornerstone of the web audio API and all AudioNodes are c
reated from it. |
75 // For thread safety between the audio thread and the main thread, it has a rend
ering graph locking mechanism. | 74 // For thread safety between the audio thread and the main thread, it has a rend
ering graph locking mechanism. |
76 | 75 |
77 class AudioContext : public ActiveDOMObject, public ScriptWrappable, public Thre
adSafeRefCounted<AudioContext>, public EventTarget { | 76 class AudioContext : public ActiveDOMObject, public ScriptWrappable, public Thre
adSafeRefCounted<AudioContext>, public EventTarget { |
78 public: | 77 public: |
79 // Create an AudioContext for rendering to the audio hardware. | 78 // Create an AudioContext for rendering to the audio hardware. |
80 static PassRefPtr<AudioContext> create(Document*); | 79 static PassRefPtr<AudioContext> create(Document*); |
81 | 80 |
82 // Create an AudioContext for offline (non-realtime) rendering. | 81 // Create an AudioContext for offline (non-realtime) rendering. |
83 static PassRefPtr<AudioContext> createOfflineContext(Document*, unsigned num
berOfChannels, size_t numberOfFrames, float sampleRate, ExceptionState&); | 82 static PassRefPtr<AudioContext> createOfflineContext(Document*, unsigned num
berOfChannels, size_t numberOfFrames, float sampleRate, ExceptionCode&); |
84 | 83 |
85 virtual ~AudioContext(); | 84 virtual ~AudioContext(); |
86 | 85 |
87 bool isInitialized() const; | 86 bool isInitialized() const; |
88 | 87 |
89 bool isOfflineContext() { return m_isOfflineContext; } | 88 bool isOfflineContext() { return m_isOfflineContext; } |
90 | 89 |
91 // Returns true when initialize() was called AND all asynchronous initializa
tion has completed. | 90 // Returns true when initialize() was called AND all asynchronous initializa
tion has completed. |
92 bool isRunnable() const; | 91 bool isRunnable() const; |
93 | 92 |
94 HRTFDatabaseLoader* hrtfDatabaseLoader() const { return m_hrtfDatabaseLoader
.get(); } | 93 HRTFDatabaseLoader* hrtfDatabaseLoader() const { return m_hrtfDatabaseLoader
.get(); } |
95 | 94 |
96 // Document notification | 95 // Document notification |
97 virtual void stop(); | 96 virtual void stop(); |
98 | 97 |
99 Document* document() const; // ASSERTs if document no longer exists. | 98 Document* document() const; // ASSERTs if document no longer exists. |
100 bool hasDocument(); | 99 bool hasDocument(); |
101 | 100 |
102 AudioDestinationNode* destination() { return m_destinationNode.get(); } | 101 AudioDestinationNode* destination() { return m_destinationNode.get(); } |
103 size_t currentSampleFrame() const { return m_destinationNode->currentSampleF
rame(); } | 102 size_t currentSampleFrame() const { return m_destinationNode->currentSampleF
rame(); } |
104 double currentTime() const { return m_destinationNode->currentTime(); } | 103 double currentTime() const { return m_destinationNode->currentTime(); } |
105 float sampleRate() const { return m_destinationNode->sampleRate(); } | 104 float sampleRate() const { return m_destinationNode->sampleRate(); } |
106 unsigned long activeSourceCount() const { return static_cast<unsigned long>(
m_activeSourceCount); } | 105 unsigned long activeSourceCount() const { return static_cast<unsigned long>(
m_activeSourceCount); } |
107 | 106 |
108 void incrementActiveSourceCount(); | 107 void incrementActiveSourceCount(); |
109 void decrementActiveSourceCount(); | 108 void decrementActiveSourceCount(); |
110 | 109 |
111 PassRefPtr<AudioBuffer> createBuffer(unsigned numberOfChannels, size_t numbe
rOfFrames, float sampleRate, ExceptionState&); | 110 PassRefPtr<AudioBuffer> createBuffer(unsigned numberOfChannels, size_t numbe
rOfFrames, float sampleRate, ExceptionCode&); |
112 PassRefPtr<AudioBuffer> createBuffer(ArrayBuffer*, bool mixToMono, Exception
State&); | 111 PassRefPtr<AudioBuffer> createBuffer(ArrayBuffer*, bool mixToMono, Exception
Code&); |
113 | 112 |
114 // Asynchronous audio file data decoding. | 113 // Asynchronous audio file data decoding. |
115 void decodeAudioData(ArrayBuffer*, PassRefPtr<AudioBufferCallback>, PassRefP
tr<AudioBufferCallback>, ExceptionState&); | 114 void decodeAudioData(ArrayBuffer*, PassRefPtr<AudioBufferCallback>, PassRefP
tr<AudioBufferCallback>, ExceptionCode&); |
116 | 115 |
117 AudioListener* listener() { return m_listener.get(); } | 116 AudioListener* listener() { return m_listener.get(); } |
118 | 117 |
119 // The AudioNode create methods are called on the main thread (from JavaScri
pt). | 118 // The AudioNode create methods are called on the main thread (from JavaScri
pt). |
120 PassRefPtr<AudioBufferSourceNode> createBufferSource(); | 119 PassRefPtr<AudioBufferSourceNode> createBufferSource(); |
121 PassRefPtr<MediaElementAudioSourceNode> createMediaElementSource(HTMLMediaEl
ement*, ExceptionState&); | 120 PassRefPtr<MediaElementAudioSourceNode> createMediaElementSource(HTMLMediaEl
ement*, ExceptionCode&); |
122 PassRefPtr<MediaStreamAudioSourceNode> createMediaStreamSource(MediaStream*,
ExceptionState&); | 121 PassRefPtr<MediaStreamAudioSourceNode> createMediaStreamSource(MediaStream*,
ExceptionCode&); |
123 PassRefPtr<MediaStreamAudioDestinationNode> createMediaStreamDestination(); | 122 PassRefPtr<MediaStreamAudioDestinationNode> createMediaStreamDestination(); |
124 PassRefPtr<GainNode> createGain(); | 123 PassRefPtr<GainNode> createGain(); |
125 PassRefPtr<BiquadFilterNode> createBiquadFilter(); | 124 PassRefPtr<BiquadFilterNode> createBiquadFilter(); |
126 PassRefPtr<WaveShaperNode> createWaveShaper(); | 125 PassRefPtr<WaveShaperNode> createWaveShaper(); |
127 PassRefPtr<DelayNode> createDelay(ExceptionState&); | 126 PassRefPtr<DelayNode> createDelay(ExceptionCode&); |
128 PassRefPtr<DelayNode> createDelay(double maxDelayTime, ExceptionState&); | 127 PassRefPtr<DelayNode> createDelay(double maxDelayTime, ExceptionCode&); |
129 PassRefPtr<PannerNode> createPanner(); | 128 PassRefPtr<PannerNode> createPanner(); |
130 PassRefPtr<ConvolverNode> createConvolver(); | 129 PassRefPtr<ConvolverNode> createConvolver(); |
131 PassRefPtr<DynamicsCompressorNode> createDynamicsCompressor(); | 130 PassRefPtr<DynamicsCompressorNode> createDynamicsCompressor(); |
132 PassRefPtr<AnalyserNode> createAnalyser(); | 131 PassRefPtr<AnalyserNode> createAnalyser(); |
133 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, Exc
eptionState&); | 132 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, Exc
eptionCode&); |
134 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, siz
e_t numberOfInputChannels, ExceptionState&); | 133 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, siz
e_t numberOfInputChannels, ExceptionCode&); |
135 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, siz
e_t numberOfInputChannels, size_t numberOfOutputChannels, ExceptionState&); | 134 PassRefPtr<ScriptProcessorNode> createScriptProcessor(size_t bufferSize, siz
e_t numberOfInputChannels, size_t numberOfOutputChannels, ExceptionCode&); |
136 PassRefPtr<ChannelSplitterNode> createChannelSplitter(ExceptionState&); | 135 PassRefPtr<ChannelSplitterNode> createChannelSplitter(ExceptionCode&); |
137 PassRefPtr<ChannelSplitterNode> createChannelSplitter(size_t numberOfOutputs
, ExceptionState&); | 136 PassRefPtr<ChannelSplitterNode> createChannelSplitter(size_t numberOfOutputs
, ExceptionCode&); |
138 PassRefPtr<ChannelMergerNode> createChannelMerger(ExceptionState&); | 137 PassRefPtr<ChannelMergerNode> createChannelMerger(ExceptionCode&); |
139 PassRefPtr<ChannelMergerNode> createChannelMerger(size_t numberOfInputs, Exc
eptionState&); | 138 PassRefPtr<ChannelMergerNode> createChannelMerger(size_t numberOfInputs, Exc
eptionCode&); |
140 PassRefPtr<OscillatorNode> createOscillator(); | 139 PassRefPtr<OscillatorNode> createOscillator(); |
141 PassRefPtr<PeriodicWave> createPeriodicWave(Float32Array* real, Float32Array
* imag, ExceptionState&); | 140 PassRefPtr<PeriodicWave> createPeriodicWave(Float32Array* real, Float32Array
* imag, ExceptionCode&); |
142 | 141 |
143 // When a source node has no more processing to do (has finished playing), t
hen it tells the context to dereference it. | 142 // When a source node has no more processing to do (has finished playing), t
hen it tells the context to dereference it. |
144 void notifyNodeFinishedProcessing(AudioNode*); | 143 void notifyNodeFinishedProcessing(AudioNode*); |
145 | 144 |
146 // Called at the start of each render quantum. | 145 // Called at the start of each render quantum. |
147 void handlePreRenderTasks(); | 146 void handlePreRenderTasks(); |
148 | 147 |
149 // Called at the end of each render quantum. | 148 // Called at the end of each render quantum. |
150 void handlePostRenderTasks(); | 149 void handlePostRenderTasks(); |
151 | 150 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 // It is somewhat arbitrary and could be increased if necessary. | 345 // It is somewhat arbitrary and could be increased if necessary. |
347 enum { MaxNumberOfChannels = 32 }; | 346 enum { MaxNumberOfChannels = 32 }; |
348 | 347 |
349 // Number of AudioBufferSourceNodes that are active (playing). | 348 // Number of AudioBufferSourceNodes that are active (playing). |
350 int m_activeSourceCount; | 349 int m_activeSourceCount; |
351 }; | 350 }; |
352 | 351 |
353 } // WebCore | 352 } // WebCore |
354 | 353 |
355 #endif // AudioContext_h | 354 #endif // AudioContext_h |
OLD | NEW |