summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/webaudio/AudioDestinationNode.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/webaudio/AudioDestinationNode.h')
-rw-r--r--Source/WebCore/Modules/webaudio/AudioDestinationNode.h66
1 files changed, 23 insertions, 43 deletions
diff --git a/Source/WebCore/Modules/webaudio/AudioDestinationNode.h b/Source/WebCore/Modules/webaudio/AudioDestinationNode.h
index e742c605e..9ebaf1399 100644
--- a/Source/WebCore/Modules/webaudio/AudioDestinationNode.h
+++ b/Source/WebCore/Modules/webaudio/AudioDestinationNode.h
@@ -22,83 +22,63 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef AudioDestinationNode_h
-#define AudioDestinationNode_h
+#pragma once
#include "AudioBuffer.h"
#include "AudioBus.h"
#include "AudioIOCallback.h"
#include "AudioNode.h"
#include "AudioSourceProvider.h"
+#include <wtf/Function.h>
namespace WebCore {
-class AudioBus;
class AudioContext;
-
+
class AudioDestinationNode : public AudioNode, public AudioIOCallback {
public:
- AudioDestinationNode(AudioContext*, float sampleRate);
+ AudioDestinationNode(AudioContext&, float sampleRate);
virtual ~AudioDestinationNode();
// AudioNode
- virtual void process(size_t) override { }; // we're pulled by hardware so this is never called
- virtual void reset() override { m_currentSampleFrame = 0; }
+ void process(size_t) override { }; // we're pulled by hardware so this is never called
+ void reset() override { m_currentSampleFrame = 0; }
// The audio hardware calls render() to get the next render quantum of audio into destinationBus.
// It will optionally give us local/live audio input in sourceBus (if it's not 0).
- virtual void render(AudioBus* sourceBus, AudioBus* destinationBus, size_t numberOfFrames) override;
+ void render(AudioBus* sourceBus, AudioBus* destinationBus, size_t numberOfFrames) override;
size_t currentSampleFrame() const { return m_currentSampleFrame; }
double currentTime() const { return currentSampleFrame() / static_cast<double>(sampleRate()); }
- virtual unsigned long maxChannelCount() const { return 0; }
+ virtual unsigned maxChannelCount() const { return 0; }
// Enable local/live input for the specified device.
virtual void enableInput(const String& inputDeviceId) = 0;
virtual void startRendering() = 0;
+ virtual void resume(WTF::Function<void ()>&&) { }
+ virtual void suspend(WTF::Function<void ()>&&) { }
+ virtual void close(WTF::Function<void ()>&&) { }
- AudioSourceProvider* localAudioInputProvider() { return &m_localAudioInputProvider; }
-
-protected:
- // LocalAudioInputProvider allows us to expose an AudioSourceProvider for local/live audio input.
- // If there is local/live audio input, we call set() with the audio input data every render quantum.
- class LocalAudioInputProvider : public AudioSourceProvider {
- public:
- LocalAudioInputProvider()
- : m_sourceBus(AudioBus::create(2, AudioNode::ProcessingSizeInFrames)) // FIXME: handle non-stereo local input.
- {
- }
-
- void set(AudioBus* bus)
- {
- if (bus)
- m_sourceBus->copyFrom(*bus);
- }
-
- // AudioSourceProvider.
- virtual void provideInput(AudioBus* destinationBus, size_t numberOfFrames) override
- {
- bool isGood = destinationBus && destinationBus->length() == numberOfFrames && m_sourceBus->length() == numberOfFrames;
- ASSERT(isGood);
- if (isGood)
- destinationBus->copyFrom(*m_sourceBus);
- }
+ virtual bool isPlaying() { return false; }
+ void isPlayingDidChange() override;
+ bool isPlayingAudio() const { return m_isEffectivelyPlayingAudio; }
+ void setMuted(bool muted) { m_muted = muted; }
- private:
- RefPtr<AudioBus> m_sourceBus;
- };
+protected:
+ double tailTime() const override { return 0; }
+ double latencyTime() const override { return 0; }
- virtual double tailTime() const override { return 0; }
- virtual double latencyTime() const override { return 0; }
+ void setIsSilent(bool);
+ void updateIsEffectivelyPlayingAudio();
// Counts the number of sample-frames processed by the destination.
size_t m_currentSampleFrame;
- LocalAudioInputProvider m_localAudioInputProvider;
+ bool m_isSilent;
+ bool m_isEffectivelyPlayingAudio;
+ bool m_muted;
};
} // namespace WebCore
-
-#endif // AudioDestinationNode_h