MediaElementAudioSourceNode.h [plain text]
#ifndef MediaElementAudioSourceNode_h
#define MediaElementAudioSourceNode_h
#if ENABLE(WEB_AUDIO) && ENABLE(VIDEO)
#include "AudioNode.h"
#include "AudioSourceProviderClient.h"
#include "HTMLMediaElement.h"
#include "MultiChannelResampler.h"
#include <memory>
#include <mutex>
#include <wtf/PassRefPtr.h>
namespace WebCore {
class AudioContext;
class MediaElementAudioSourceNode : public AudioNode, public AudioSourceProviderClient {
public:
static PassRefPtr<MediaElementAudioSourceNode> create(AudioContext*, HTMLMediaElement*);
virtual ~MediaElementAudioSourceNode();
HTMLMediaElement* mediaElement() { return m_mediaElement.get(); }
virtual void process(size_t framesToProcess) override;
virtual void reset() override;
virtual void setFormat(size_t numberOfChannels, float sampleRate) override;
void lock();
void unlock();
private:
MediaElementAudioSourceNode(AudioContext*, HTMLMediaElement*);
virtual double tailTime() const override { return 0; }
virtual double latencyTime() const override { return 0; }
virtual bool propagatesSilence() const override { return false; }
RefPtr<HTMLMediaElement> m_mediaElement;
std::mutex m_processMutex;
unsigned m_sourceNumberOfChannels;
double m_sourceSampleRate;
std::unique_ptr<MultiChannelResampler> m_multiChannelResampler;
};
}
#endif // ENABLE(WEB_AUDIO) && ENABLE(VIDEO)
#endif // MediaElementAudioSourceNode_h