MediaStreamAudioDestinationNode.cpp [plain text]
#include "config.h"
#include "MediaStreamAudioDestinationNode.h"
#if ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
#include "AudioContext.h"
#include "AudioNodeInput.h"
#include "MediaStream.h"
#include "MediaStreamAudioSource.h"
#include <wtf/Locker.h>
namespace WebCore {
Ref<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 = MediaStreamAudioSource::create();
Vector<Ref<RealtimeMediaSource>> audioSources;
audioSources.append(*m_source);
m_stream = MediaStream::create(*context.scriptExecutionContext(), MediaStreamPrivate::create(audioSources, { }));
m_source->setAudioFormat(numberOfChannels, context.sampleRate());
initialize();
}
RealtimeMediaSource* 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)