| 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
 | 
| 
 |