| Index: Source/platform/audio/AudioDestination.h
|
| diff --git a/Source/platform/audio/AudioDestination.h b/Source/platform/audio/AudioDestination.h
|
| index 785d58c4551baa966806b68623a43d45f2aa2efa..07903ede316c29e4d671de786d1fb1645b02958b 100644
|
| --- a/Source/platform/audio/AudioDestination.h
|
| +++ b/Source/platform/audio/AudioDestination.h
|
| @@ -29,33 +29,43 @@
|
| #ifndef AudioDestination_h
|
| #define AudioDestination_h
|
|
|
| -#include "platform/PlatformExport.h"
|
| -#include "wtf/OwnPtr.h"
|
| -#include "wtf/PassOwnPtr.h"
|
| +#include "platform/audio/AudioBus.h"
|
| +#include "platform/audio/AudioIOCallback.h"
|
| +#include "platform/audio/AudioSourceProvider.h"
|
| +#include "public/platform/WebAudioDevice.h"
|
| +#include "public/platform/WebVector.h"
|
| +#include "wtf/Noncopyable.h"
|
| #include "wtf/text/WTFString.h"
|
|
|
| namespace WebCore {
|
|
|
| -class AudioIOCallback;
|
| +class AudioFIFO;
|
| +class AudioPullFIFO;
|
|
|
| -// AudioDestination is an abstraction for audio hardware I/O.
|
| -// The audio hardware periodically calls the AudioIOCallback render() method asking it to render/output the next render quantum of audio.
|
| -// It optionally will pass in local/live audio input when it calls render().
|
| +// An AudioDestination using Chromium's audio system
|
|
|
| -class PLATFORM_EXPORT AudioDestination {
|
| +class PLATFORM_EXPORT AudioDestination : public blink::WebAudioDevice::RenderCallback, public AudioSourceProvider {
|
| + WTF_MAKE_NONCOPYABLE(AudioDestination);
|
| public:
|
| + AudioDestination(AudioIOCallback&, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate);
|
| + virtual ~AudioDestination();
|
| +
|
| // Pass in (numberOfInputChannels > 0) if live/local audio input is desired.
|
| // Port-specific device identification information for live/local input streams can be passed in the inputDeviceId.
|
| static PassOwnPtr<AudioDestination> create(AudioIOCallback&, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate);
|
|
|
| - virtual ~AudioDestination() { }
|
| + virtual void start();
|
| + virtual void stop();
|
| + bool isPlaying() { return m_isPlaying; }
|
| +
|
| + float sampleRate() const { return m_sampleRate; }
|
| +
|
| + // blink::WebAudioDevice::RenderCallback
|
| + virtual void render(const blink::WebVector<float*>& sourceData, const blink::WebVector<float*>& audioData, size_t numberOfFrames);
|
|
|
| - virtual void start() = 0;
|
| - virtual void stop() = 0;
|
| - virtual bool isPlaying() = 0;
|
| + // WebCore::AudioSourceProvider
|
| + virtual void provideInput(AudioBus*, size_t framesToProcess);
|
|
|
| - // Sample-rate conversion may happen in AudioDestination to the hardware sample-rate
|
| - virtual float sampleRate() const = 0;
|
| static float hardwareSampleRate();
|
|
|
| // maxChannelCount() returns the total number of output channels of the audio hardware.
|
| @@ -65,6 +75,19 @@ public:
|
| // be a value: 1 <= numberOfOutputChannels <= maxChannelCount(),
|
| // or if maxChannelCount() equals 0, then numberOfOutputChannels must be 2.
|
| static unsigned long maxChannelCount();
|
| +
|
| +private:
|
| + AudioIOCallback& m_callback;
|
| + unsigned m_numberOfOutputChannels;
|
| + RefPtr<AudioBus> m_inputBus;
|
| + RefPtr<AudioBus> m_renderBus;
|
| + float m_sampleRate;
|
| + bool m_isPlaying;
|
| + OwnPtr<blink::WebAudioDevice> m_audioDevice;
|
| + size_t m_callbackBufferSize;
|
| +
|
| + OwnPtr<AudioFIFO> m_inputFifo;
|
| + OwnPtr<AudioPullFIFO> m_fifo;
|
| };
|
|
|
| } // namespace WebCore
|
|
|