Index: media/blink/webaudiosourceprovider_impl.cc |
diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc |
index 5b70a3091ba7760878c7f5d9f80147af4a1292c6..142b450fe5d25eacb0e160992876664424d9800a 100644 |
--- a/media/blink/webaudiosourceprovider_impl.cc |
+++ b/media/blink/webaudiosourceprovider_impl.cc |
@@ -53,8 +53,8 @@ WebAudioSourceProviderImpl::WebAudioSourceProviderImpl( |
sample_rate_(0), |
volume_(1.0), |
state_(kStopped), |
- renderer_(NULL), |
- client_(NULL), |
+ renderer_(nullptr), |
+ client_(nullptr), |
sink_(sink), |
weak_factory_(this) {} |
@@ -172,12 +172,13 @@ OutputDevice* WebAudioSourceProviderImpl::GetOutputDevice() { |
void WebAudioSourceProviderImpl::Initialize( |
const AudioParameters& params, |
- RenderCallback* renderer) { |
+ AudioRendererSink::RenderCallback* renderer) { |
base::AutoLock auto_lock(sink_lock_); |
+ |
renderer_ = renderer; |
DCHECK_EQ(state_, kStopped); |
- sink_->Initialize(params, renderer); |
+ sink_->Initialize(params, this); // We act as forwarder to |renderer_|. |
// Keep track of the format in case the client hasn't yet been set. |
channels_ = params.channels(); |
@@ -187,6 +188,42 @@ void WebAudioSourceProviderImpl::Initialize( |
base::ResetAndReturn(&set_format_cb_).Run(); |
} |
+int WebAudioSourceProviderImpl::Render(AudioBus* audio_bus, |
+ uint32_t delay_milliseconds, |
+ uint32_t frames_skipped) { |
+ DCHECK(renderer_); |
+ DCHECK(!frames_skipped); |
DaleCurtis
2016/03/11 01:41:42
Is this reasonable?
mcasas
2016/03/11 04:06:23
Prob remainder of some test. Removed.
|
+ |
+ const int num_rendered_frames = |
+ renderer_->Render(audio_bus, delay_milliseconds, frames_skipped); |
+ |
+ if (!onaudiobus_callback_.is_null()) { |
+ scoped_ptr<AudioBus> bus_copy = |
+ AudioBus::Create(audio_bus->channels(), audio_bus->frames()); |
+ audio_bus->CopyTo(bus_copy.get()); |
+ onaudiobus_callback_.Run(std::move(bus_copy), delay_milliseconds); |
+ } |
+ |
+ return num_rendered_frames; |
+} |
+ |
+void WebAudioSourceProviderImpl::OnRenderError() { |
+ DCHECK(renderer_); |
+ renderer_->OnRenderError(); |
+} |
+ |
+void WebAudioSourceProviderImpl::RegisterOnAudioBusCallback( |
+ const OnAudioBusCB& callback) { |
+ DCHECK(!callback.is_null()); |
+ DCHECK(onaudiobus_callback_.is_null()); |
+ onaudiobus_callback_ = callback; |
+} |
+ |
+void WebAudioSourceProviderImpl::ResetOnAudioBusCallback() { |
+ DCHECK(!onaudiobus_callback_.is_null()); |
+ onaudiobus_callback_.Reset(); |
+} |
+ |
void WebAudioSourceProviderImpl::OnSetFormat() { |
base::AutoLock auto_lock(sink_lock_); |
if (!client_) |