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