MediaStreamAudioDestinationNode.cpp [plain text]
#include "config.h"
#if ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
#include "MediaStreamAudioDestinationNode.h"
#include "AudioContext.h"
#include "AudioNodeInput.h"
#include "LocalMediaStream.h"
#include "MediaStreamCenter.h"
#include "RTCPeerConnectionHandler.h"
#include "UUID.h"
#include <wtf/Locker.h>
namespace WebCore {
PassRefPtr<MediaStreamAudioDestinationNode> MediaStreamAudioDestinationNode::create(AudioContext* context, size_t numberOfChannels)
{
return adoptRef(new MediaStreamAudioDestinationNode(context, numberOfChannels));
}
MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode(AudioContext* context, size_t numberOfChannels)
: AudioBasicInspectorNode(context, context->sampleRate(), numberOfChannels)
, m_mixBus(AudioBus::create(numberOfChannels, ProcessingSizeInFrames))
{
setNodeType(NodeTypeMediaStreamAudioDestination);
m_source = MediaStreamSource::create(ASCIILiteral("WebAudio-") + createCanonicalUUIDString(), MediaStreamSource::TypeAudio, "MediaStreamAudioDestinationNode", MediaStreamSource::ReadyStateLive, true);
MediaStreamSourceVector audioSources;
audioSources.append(m_source);
MediaStreamSourceVector videoSources;
m_stream = LocalMediaStream::create(context->scriptExecutionContext(), audioSources, videoSources);
MediaStreamCenter::instance().didCreateMediaStream(m_stream->descriptor());
m_source->setAudioFormat(numberOfChannels, context->sampleRate());
initialize();
}
MediaStreamSource* MediaStreamAudioDestinationNode::mediaStreamSource()
{
return m_source.get();
}
MediaStreamAudioDestinationNode::~MediaStreamAudioDestinationNode()
{
uninitialize();
}
void MediaStreamAudioDestinationNode::process(size_t numberOfFrames)
{
m_mixBus->copyFrom(*input(0)->bus());
m_source->consumeAudio(m_mixBus.get(), numberOfFrames);
}
void MediaStreamAudioDestinationNode::reset()
{
}
}
#endif // ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)