Index: media/audio/pulse/pulse_output.cc |
diff --git a/media/audio/pulse/pulse_output.cc b/media/audio/pulse/pulse_output.cc |
index 3aef9476720106208a92be3cab41ee5e4df0a81b..3c9f7f981dc9c5ddf8264cb9cbe1c9998c491604 100644 |
--- a/media/audio/pulse/pulse_output.cc |
+++ b/media/audio/pulse/pulse_output.cc |
@@ -8,6 +8,7 @@ |
#include <stdint.h> |
#include "base/single_thread_task_runner.h" |
+#include "base/time/time.h" |
#include "media/audio/audio_device_description.h" |
#include "media/audio/audio_manager_base.h" |
#include "media/audio/pulse/pulse_util.h" |
@@ -132,10 +133,12 @@ void PulseAudioOutputStream::FulfillWriteRequest(size_t requested_bytes) { |
int frames_filled = 0; |
if (source_callback_) { |
- const uint32_t hardware_delay = pulse::GetHardwareLatencyInBytes( |
- pa_stream_, params_.sample_rate(), params_.GetBytesPerFrame()); |
- frames_filled = |
- source_callback_->OnMoreData(audio_bus_.get(), hardware_delay, 0); |
+ const base::TimeDelta hardware_delay = |
+ pulse::GetHardwareLatency(pa_stream_); |
+ const base::TimeTicks target_playout_time = |
+ base::TimeTicks::Now() + hardware_delay; |
+ frames_filled = source_callback_->OnMoreData(target_playout_time, 0, |
+ audio_bus_.get()); |
// Zero any unfilled data so it plays back as silence. |
if (frames_filled < audio_bus_->frames()) { |