diff options
Diffstat (limited to 'Source/WebCore/Modules/webaudio/AudioDestinationNode.h')
-rw-r--r-- | Source/WebCore/Modules/webaudio/AudioDestinationNode.h | 66 |
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 |