| Index: media/blink/webaudiosourceprovider_impl.cc
|
| diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc
|
| index e54dbc81aa1f4e9d37989d16385b47f8707dae10..94be099c67b43238a05855b5a19f7fa08aa438f5 100644
|
| --- a/media/blink/webaudiosourceprovider_impl.cc
|
| +++ b/media/blink/webaudiosourceprovider_impl.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "media/base/audio_timestamp_helper.h"
|
| #include "media/base/bind_to_current_loop.h"
|
| #include "third_party/WebKit/public/platform/WebAudioSourceProviderClient.h"
|
|
|
| @@ -69,9 +70,10 @@ class WebAudioSourceProviderImpl::TeeFilter
|
| // AudioRendererSink::RenderCallback implementation.
|
| // These are forwarders to |renderer_| and are here to allow for a client to
|
| // get a copy of the rendered audio by SetCopyAudioCallback().
|
| - int Render(AudioBus* audio_bus,
|
| - uint32_t frames_delayed,
|
| - uint32_t frames_skipped) override;
|
| + int Render(AudioBus* dest,
|
| + base::TimeDelta delay,
|
| + base::TimeTicks delay_timestamp,
|
| + uint32_t prior_frames_skipped) override;
|
| void OnRenderError() override;
|
|
|
| bool IsInitialized() const { return !!renderer_; }
|
| @@ -156,7 +158,8 @@ void WebAudioSourceProviderImpl::provideInput(
|
|
|
| DCHECK(client_);
|
| DCHECK_EQ(tee_filter_->channels(), bus_wrapper_->channels());
|
| - const int frames = tee_filter_->Render(bus_wrapper_.get(), 0, 0);
|
| + const int frames = tee_filter_->Render(bus_wrapper_.get(), base::TimeDelta(),
|
| + base::TimeTicks::Now(), 0);
|
| if (frames < incoming_number_of_frames)
|
| bus_wrapper_->ZeroFramesPartial(frames, incoming_number_of_frames - frames);
|
|
|
| @@ -254,7 +257,8 @@ void WebAudioSourceProviderImpl::ClearCopyAudioCallback() {
|
| }
|
|
|
| int WebAudioSourceProviderImpl::RenderForTesting(AudioBus* audio_bus) {
|
| - return tee_filter_->Render(audio_bus, 0, 0);
|
| + return tee_filter_->Render(bus_wrapper_.get(), base::TimeDelta(),
|
| + base::TimeTicks::Now(), 0);
|
| }
|
|
|
| void WebAudioSourceProviderImpl::OnSetFormat() {
|
| @@ -266,15 +270,19 @@ void WebAudioSourceProviderImpl::OnSetFormat() {
|
| client_->setFormat(tee_filter_->channels(), tee_filter_->sample_rate());
|
| }
|
|
|
| -int WebAudioSourceProviderImpl::TeeFilter::Render(AudioBus* audio_bus,
|
| - uint32_t frames_delayed,
|
| - uint32_t frames_skipped) {
|
| +int WebAudioSourceProviderImpl::TeeFilter::Render(
|
| + AudioBus* audio_bus,
|
| + base::TimeDelta delay,
|
| + base::TimeTicks delay_timestamp,
|
| + uint32_t frames_skipped) {
|
| DCHECK(IsInitialized());
|
|
|
| const int num_rendered_frames =
|
| - renderer_->Render(audio_bus, frames_delayed, frames_skipped);
|
| + renderer_->Render(audio_bus, delay, delay_timestamp, frames_skipped);
|
|
|
| if (!copy_audio_bus_callback_.is_null()) {
|
| + const int64_t frames_delayed =
|
| + AudioTimestampHelper::TimeToFrames(delay, sample_rate_);
|
| std::unique_ptr<AudioBus> bus_copy =
|
| AudioBus::Create(audio_bus->channels(), audio_bus->frames());
|
| audio_bus->CopyTo(bus_copy.get());
|
|
|