MediaStreamAudioSourceNode.h [plain text]
#pragma once
#if ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)
#include "AudioNode.h"
#include "AudioSourceProviderClient.h"
#include "MediaStream.h"
#include "MultiChannelResampler.h"
#include <wtf/Lock.h>
namespace WebCore {
class AudioContext;
struct MediaStreamAudioSourceOptions;
class MultiChannelResampler;
class MediaStreamAudioSourceNode final : public AudioNode, public AudioSourceProviderClient {
WTF_MAKE_ISO_ALLOCATED(MediaStreamAudioSourceNode);
public:
static ExceptionOr<Ref<MediaStreamAudioSourceNode>> create(BaseAudioContext&, MediaStreamAudioSourceOptions&&);
virtual ~MediaStreamAudioSourceNode();
MediaStream* mediaStream() { return &m_mediaStream.get(); }
void process(size_t framesToProcess) override;
void setFormat(size_t numberOfChannels, float sampleRate) override;
private:
MediaStreamAudioSourceNode(BaseAudioContext&, MediaStream&, MediaStreamTrack&);
void provideInput(AudioBus*, size_t framesToProcess);
double tailTime() const override { return 0; }
double latencyTime() const override { return 0; }
bool requiresTailProcessing() const final { return false; }
bool propagatesSilence() const override { return false; }
Ref<MediaStream> m_mediaStream;
Ref<MediaStreamTrack> m_audioTrack;
std::unique_ptr<MultiChannelResampler> m_multiChannelResampler;
Lock m_processLock;
unsigned m_sourceNumberOfChannels { 0 };
double m_sourceSampleRate { 0 };
};
}
#endif // ENABLE(WEB_AUDIO) && ENABLE(MEDIA_STREAM)