diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp')
-rw-r--r-- | Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp b/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp index 6b4f9b85a..b2542d326 100644 --- a/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp +++ b/Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp @@ -28,17 +28,18 @@ #include "DefaultAudioDestinationNode.h" -#include "ExceptionCode.h" +#include "AudioContext.h" +#include "AudioDestination.h" #include "Logging.h" +#include "ScriptExecutionContext.h" #include <wtf/MainThread.h> const unsigned EnabledInputChannels = 2; namespace WebCore { -DefaultAudioDestinationNode::DefaultAudioDestinationNode(AudioContext* context) +DefaultAudioDestinationNode::DefaultAudioDestinationNode(AudioContext& context) : AudioDestinationNode(context, AudioDestination::hardwareSampleRate()) - , m_numberOfInputChannels(0) { // Node-specific default mixing rules. m_channelCount = 2; @@ -104,12 +105,38 @@ void DefaultAudioDestinationNode::startRendering() m_destination->start(); } -unsigned long DefaultAudioDestinationNode::maxChannelCount() const +void DefaultAudioDestinationNode::resume(Function<void ()>&& function) +{ + ASSERT(isInitialized()); + if (isInitialized()) + m_destination->start(); + if (auto scriptExecutionContext = context().scriptExecutionContext()) + scriptExecutionContext->postTask(WTFMove(function)); +} + +void DefaultAudioDestinationNode::suspend(Function<void ()>&& function) +{ + ASSERT(isInitialized()); + if (isInitialized()) + m_destination->stop(); + if (auto scriptExecutionContext = context().scriptExecutionContext()) + scriptExecutionContext->postTask(WTFMove(function)); +} + +void DefaultAudioDestinationNode::close(Function<void()>&& function) +{ + ASSERT(isInitialized()); + uninitialize(); + if (auto scriptExecutionContext = context().scriptExecutionContext()) + scriptExecutionContext->postTask(WTFMove(function)); +} + +unsigned DefaultAudioDestinationNode::maxChannelCount() const { return AudioDestination::maxChannelCount(); } -void DefaultAudioDestinationNode::setChannelCount(unsigned long channelCount, ExceptionCode& ec) +ExceptionOr<void> DefaultAudioDestinationNode::setChannelCount(unsigned channelCount) { // The channelCount for the input to this node controls the actual number of channels we // send to the audio hardware. It can only be set depending on the maximum number of @@ -117,20 +144,27 @@ void DefaultAudioDestinationNode::setChannelCount(unsigned long channelCount, Ex ASSERT(isMainThread()); - if (!maxChannelCount() || channelCount > maxChannelCount()) { - ec = INVALID_STATE_ERR; - return; - } + if (!maxChannelCount() || channelCount > maxChannelCount()) + return Exception { INVALID_STATE_ERR }; - unsigned long oldChannelCount = this->channelCount(); - AudioNode::setChannelCount(channelCount, ec); + auto oldChannelCount = this->channelCount(); + auto result = AudioNode::setChannelCount(channelCount); + if (result.hasException()) + return result; - if (!ec && this->channelCount() != oldChannelCount && isInitialized()) { + if (this->channelCount() != oldChannelCount && isInitialized()) { // Re-create destination. m_destination->stop(); createDestination(); m_destination->start(); } + + return { }; +} + +bool DefaultAudioDestinationNode::isPlaying() +{ + return m_destination && m_destination->isPlaying(); } } // namespace WebCore |