From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- .../webaudio/DefaultAudioDestinationNode.cpp | 58 +++++++++++++++++----- 1 file changed, 46 insertions(+), 12 deletions(-) (limited to 'Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp') 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 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&& function) +{ + ASSERT(isInitialized()); + if (isInitialized()) + m_destination->start(); + if (auto scriptExecutionContext = context().scriptExecutionContext()) + scriptExecutionContext->postTask(WTFMove(function)); +} + +void DefaultAudioDestinationNode::suspend(Function&& function) +{ + ASSERT(isInitialized()); + if (isInitialized()) + m_destination->stop(); + if (auto scriptExecutionContext = context().scriptExecutionContext()) + scriptExecutionContext->postTask(WTFMove(function)); +} + +void DefaultAudioDestinationNode::close(Function&& 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 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 -- cgit v1.2.1