Chromium Code Reviews| Index: content/renderer/media/renderer_webaudiodevice_impl.h |
| diff --git a/content/renderer/media/renderer_webaudiodevice_impl.h b/content/renderer/media/renderer_webaudiodevice_impl.h |
| index 83b596f634e9a02a2c237f100b5464d060af1eb0..63fc422f29a276923a7291f63b285706c20aa09e 100644 |
| --- a/content/renderer/media/renderer_webaudiodevice_impl.h |
| +++ b/content/renderer/media/renderer_webaudiodevice_impl.h |
| @@ -10,31 +10,41 @@ |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/threading/thread_checker.h" |
| +#include "content/common/content_export.h" |
| #include "media/base/audio_parameters.h" |
| #include "media/base/audio_renderer_sink.h" |
| #include "third_party/WebKit/public/platform/WebAudioDevice.h" |
| +#include "third_party/WebKit/public/platform/WebAudioLatencyHint.h" |
| #include "third_party/WebKit/public/platform/WebVector.h" |
| #include "url/origin.h" |
| +namespace base { |
| +class SingleThreadTaskRunner; |
| +} |
| + |
| namespace media { |
| class SilentSinkSuspender; |
| } |
| namespace content { |
| -class RendererWebAudioDeviceImpl |
| - : public blink::WebAudioDevice, |
| - public media::AudioRendererSink::RenderCallback { |
| +class CONTENT_EXPORT RendererWebAudioDeviceImpl |
| + : NON_EXPORTED_BASE(public blink::WebAudioDevice), |
| + NON_EXPORTED_BASE(public media::AudioRendererSink::RenderCallback) { |
| public: |
| - RendererWebAudioDeviceImpl(const media::AudioParameters& params, |
| - blink::WebAudioDevice::RenderCallback* callback, |
| - int session_id, |
| - const url::Origin& security_origin); |
| ~RendererWebAudioDeviceImpl() override; |
| + static RendererWebAudioDeviceImpl* Create( |
| + media::ChannelLayout layout, |
| + const blink::WebAudioLatencyHint& latency_hint, |
| + blink::WebAudioDevice::RenderCallback* callback, |
| + int session_id, |
| + const url::Origin& security_origin); |
| + |
| // blink::WebAudioDevice implementation. |
| void start() override; |
| void stop() override; |
| double sampleRate() override; |
| + int framesPerBuffer() override; |
| // AudioRendererSink::RenderCallback implementation. |
| int Render(base::TimeDelta delay, |
| @@ -44,8 +54,34 @@ class RendererWebAudioDeviceImpl |
| void OnRenderError() override; |
| + void SetMediaTaskRunnerForTesting( |
| + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner); |
| + |
| + protected: |
| + // Callback to get output device params (for tests). |
| + using OutputDeviceParamsCallback = base::Callback<media::AudioParameters( |
| + int frame_id, |
| + int session_id, |
| + const std::string& device_id, |
| + const url::Origin& security_origin)>; |
| + |
| + // Callback get render frame ID for current context (for tests). |
| + using RenderFrameIdCallback = base::Callback<int()>; |
| + |
| + RendererWebAudioDeviceImpl(media::ChannelLayout layout, |
| + const blink::WebAudioLatencyHint& latency_hint, |
| + blink::WebAudioDevice::RenderCallback* callback, |
| + int session_id, |
| + const url::Origin& security_origin, |
| + const OutputDeviceParamsCallback& device_params_cb, |
| + const RenderFrameIdCallback& render_frame_id_cb); |
| + |
| + const scoped_refptr<base::SingleThreadTaskRunner>& GetMediaTaskRunner(); |
|
o1ka
2017/02/13 08:29:30
private?
Andrew MacPherson
2017/02/13 08:52:21
Done.
|
| + |
| private: |
| - const media::AudioParameters params_; |
| + media::AudioParameters sink_params_; |
| + |
| + const blink::WebAudioLatencyHint latency_hint_; |
| // Weak reference to the callback into WebKit code. |
| blink::WebAudioDevice::RenderCallback* const client_callback_; |
| @@ -66,6 +102,12 @@ class RendererWebAudioDeviceImpl |
| // Used to suspend |sink_| usage when silence has been detected for too long. |
| std::unique_ptr<media::SilentSinkSuspender> webaudio_suspender_; |
| + // Render frame routing ID for the current context. |
| + int frame_id_; |
| + |
| + // Allow unit tests to set a custom MediaThreadTaskRunner. |
| + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(RendererWebAudioDeviceImpl); |
| }; |