Index: third_party/WebKit/Source/platform/audio/AudioDestination.h |
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestination.h b/third_party/WebKit/Source/platform/audio/AudioDestination.h |
index f1d13c3d6ce715714496458f324d1c2cd7459813..f50c70017d0f21467cd7a56cda89c6802820fe1a 100644 |
--- a/third_party/WebKit/Source/platform/audio/AudioDestination.h |
+++ b/third_party/WebKit/Source/platform/audio/AudioDestination.h |
@@ -36,7 +36,6 @@ |
#include "public/platform/WebVector.h" |
#include "wtf/Allocator.h" |
#include "wtf/Noncopyable.h" |
-#include "wtf/PassRefPtr.h" |
#include "wtf/text/WTFString.h" |
#include <memory> |
@@ -45,8 +44,10 @@ namespace blink { |
class AudioPullFIFO; |
class SecurityOrigin; |
-// An AudioDestination using Chromium's audio system |
- |
+// The AudioDestination class is an audio sink interface between the media |
+// renderer and the Blink's WebAudio module. It has a FIFO to adapt the |
Raymond Toy
2016/12/22 16:59:59
s/and the/and/
hongchan
2016/12/22 17:19:49
Acknowledged.
hongchan
2016/12/22 18:59:46
Done.
|
+// different frequency of WebAudio renderer and the actual hardware audio |
Raymond Toy
2016/12/22 16:59:59
"frequency" may not be the right word here. Maybe
hongchan
2016/12/22 17:19:49
Acknowledged.
hongchan
2016/12/22 18:59:46
Done.
|
+// callback. |
class PLATFORM_EXPORT AudioDestination : public WebAudioDevice::RenderCallback, |
public AudioSourceProvider { |
USING_FAST_MALLOC(AudioDestination); |
@@ -54,66 +55,60 @@ class PLATFORM_EXPORT AudioDestination : public WebAudioDevice::RenderCallback, |
public: |
AudioDestination(AudioIOCallback&, |
- const String& inputDeviceId, |
- unsigned numberOfInputChannels, |
unsigned numberOfOutputChannels, |
float sampleRate, |
PassRefPtr<SecurityOrigin>); |
~AudioDestination() override; |
- // 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 std::unique_ptr<AudioDestination> create( |
AudioIOCallback&, |
- const String& inputDeviceId, |
- unsigned numberOfInputChannels, |
unsigned numberOfOutputChannels, |
float sampleRate, |
PassRefPtr<SecurityOrigin>); |
- virtual void start(); |
- virtual void stop(); |
- bool isPlaying() { return m_isPlaying; } |
- |
- float sampleRate() const { return m_sampleRate; } |
- |
- // WebAudioDevice::RenderCallback |
- void render(const WebVector<float*>& audioData, |
+ // The actual render function (WebAudioDevice::RenderCallback) isochronously |
+ // invoked by the media renderer. |
+ void render(const WebVector<float*>& destinationData, |
size_t numberOfFrames, |
double delay, |
double delayTimestamp, |
size_t priorFramesSkipped) override; |
- // AudioSourceProvider |
- void provideInput(AudioBus*, size_t framesToProcess) override; |
+ // AudioSourceProvider (FIFO) |
+ void provideInput(AudioBus* outputBus, size_t framesToProcess) override; |
- static float hardwareSampleRate(); |
+ virtual void start(); |
Raymond Toy
2016/12/22 17:00:00
Why move these around?
hongchan
2016/12/22 17:19:49
render() and provideInput() are the core methods o
|
+ virtual void stop(); |
size_t callbackBufferSize() const { return m_callbackBufferSize; } |
+ float sampleRate() const { return m_sampleRate; } |
+ bool isPlaying() { return m_isPlaying; } |
Raymond Toy
2016/12/22 16:59:59
Why are these no longer static? And why change th
hongchan
2016/12/22 17:19:49
They have never been static. These are regular mem
Raymond Toy
2016/12/22 17:29:38
Sorry. I misread this and the following functions.
|
- // maxChannelCount() returns the total number of output channels of the audio |
- // hardware. A value of 0 indicates that the number of channels cannot be |
- // configured and that only stereo (2-channel) destinations can be created. |
- // The numberOfOutputChannels parameter of AudioDestination::create() is |
- // allowed to be a value: 1 <= numberOfOutputChannels <= maxChannelCount(), |
- // or if maxChannelCount() equals 0, then numberOfOutputChannels must be 2. |
Raymond Toy
2016/12/22 17:00:00
Where did this comment go?
hongchan
2016/12/22 17:19:49
First, not sure what these comments mean here. Non
|
+ // The information from the actual audio hardware. (via Platform::current) |
+ static size_t hardwareBufferSize(); |
+ static float hardwareSampleRate(); |
Raymond Toy
2016/12/22 18:38:39
This is a new public API. Who needs it?
hongchan
2016/12/22 18:59:46
This class does. Here's what I am thinking:
- Aud
Raymond Toy
2016/12/22 21:46:06
Yes, but these could be private.
hongchan
2017/01/03 18:50:26
I'll make hardwareBufferSize private, but leave ha
|
static unsigned long maxChannelCount(); |
private: |
- AudioIOCallback& m_callback; |
+ std::unique_ptr<WebAudioDevice> m_webAudioDevice; |
unsigned m_numberOfOutputChannels; |
- RefPtr<AudioBus> m_renderBus; |
+ size_t m_callbackBufferSize; |
float m_sampleRate; |
bool m_isPlaying; |
- std::unique_ptr<WebAudioDevice> m_audioDevice; |
- size_t m_callbackBufferSize; |
Raymond Toy
2016/12/22 17:00:00
Why move these things around? The order isn't imp
hongchan
2016/12/22 17:19:49
The right/meaningful order is certainly important
|
+ // The render callback function of WebAudio engine. (i.e. DestinationNode) |
+ AudioIOCallback& m_callback; |
+ |
+ RefPtr<AudioBus> m_outputBus; |
std::unique_ptr<AudioPullFIFO> m_fifo; |
size_t m_framesElapsed; |
AudioIOPosition m_outputPosition; |
base::TimeTicks m_outputPositionReceivedTimestamp; |
+ |
+ // Calculate the optimum buffer size for a given platform. Return false if the |
+ // buffer size calculation fails. |
+ bool calculateBufferSize(); |
}; |
} // namespace blink |