AudioDestinationMac.h [plain text]
#ifndef AudioDestinationMac_h
#define AudioDestinationMac_h
#include "AudioBus.h"
#include "AudioDestination.h"
#include "MediaSession.h"
#include <AudioUnit/AudioUnit.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class AudioDestinationMac : public AudioDestination, public MediaSessionClient {
public:
AudioDestinationMac(AudioIOCallback&, float sampleRate);
virtual ~AudioDestinationMac();
private:
void configure();
static OSStatus inputProc(void* userData, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 busNumber, UInt32 numberOfFrames, AudioBufferList* ioData);
OSStatus render(UInt32 numberOfFrames, AudioBufferList* ioData);
virtual MediaSession::MediaType mediaType() const override { return MediaSession::WebAudio; }
virtual MediaSession::MediaType presentationType() const { return MediaSession::WebAudio; }
virtual bool canReceiveRemoteControlCommands() const override { return false; }
virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) override { }
virtual bool overrideBackgroundPlaybackRestriction() const override { return false; }
virtual void start() override;
virtual void stop() override;
virtual bool isPlaying() override { return m_isPlaying; }
virtual void pausePlayback() override { stop(); }
virtual void resumePlayback() override { start(); }
virtual float sampleRate() const override { return m_sampleRate; }
AudioUnit m_outputUnit;
AudioIOCallback& m_callback;
RefPtr<AudioBus> m_renderBus;
float m_sampleRate;
bool m_isPlaying;
#if USE(AUDIO_SESSION)
std::unique_ptr<MediaSession> m_mediaSession;
#endif
};
}
#endif // AudioDestinationMac_h