Chromium Code Reviews| 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_) |