Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1168)

Unified Diff: content/renderer/media/renderer_webaudiodevice_impl.h

Issue 2501863003: Support for AudioContextOptions latencyHint. (Closed)
Patch Set: Fix WebAudioDeviceImpl unit test on Android. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698