| Index: media/audio/win/audio_low_latency_input_win.cc
|
| diff --git a/media/audio/win/audio_low_latency_input_win.cc b/media/audio/win/audio_low_latency_input_win.cc
|
| index 22355580aac45b2c656ae6066bd25fd1b72f1a3f..94fc69e9ad05c6d90031a8331e653ba816fca7e0 100644
|
| --- a/media/audio/win/audio_low_latency_input_win.cc
|
| +++ b/media/audio/win/audio_low_latency_input_win.cc
|
| @@ -326,7 +326,6 @@ void WASAPIAudioInputStream::Run() {
|
| 2 * packet_size_frames_ * frame_size_);
|
| std::unique_ptr<uint8_t[]> capture_buffer(new uint8_t[capture_buffer_size]);
|
|
|
| - LARGE_INTEGER now_count = {};
|
| bool recording = true;
|
| bool error = false;
|
| double volume = GetVolume();
|
| @@ -401,8 +400,21 @@ void WASAPIAudioInputStream::Run() {
|
| // The value contains two parts (A+B), where A is the delay of the
|
| // first audio frame in the packet and B is the extra delay
|
| // contained in any stored data. Unit is in audio frames.
|
| - QueryPerformanceCounter(&now_count);
|
| // first_audio_frame_timestamp will be 0 if we didn't get a timestamp.
|
| +
|
| + base::TimeTicks delay_timestamp =
|
| + base::TimeTicks::FromQPCValue(first_audio_frame_timestamp);
|
| +
|
| + // TODO(dalecurtis): This is all wrong and brain is mush, fix tomorrow.
|
| + // Needs to compensate for input buffers from past cycles.
|
| + base::TimeDelta delay =
|
| + first_audio_frame_timestamp
|
| + ? base::TimeTicks::Now() - delay_timestamp
|
| + : base::TimeDelta::FromSecondsD(
|
| + num_frames_to_read /
|
| + static_cast<double>(format_.nSamplesPerSec));
|
| +
|
| +#if 0
|
| double audio_delay_frames =
|
| first_audio_frame_timestamp == 0
|
| ? num_frames_to_read
|
| @@ -411,7 +423,7 @@ void WASAPIAudioInputStream::Run() {
|
| 10000.0) *
|
| ms_to_frame_count_ +
|
| buffer_frame_index - num_frames_to_read;
|
| -
|
| +#endif
|
| // Get a cached AGC volume level which is updated once every second
|
| // on the audio manager thread. Note that, |volume| is also updated
|
| // each time SetVolume() is called through IPC by the render-side AGC.
|
| @@ -419,7 +431,6 @@ void WASAPIAudioInputStream::Run() {
|
|
|
| // Deliver captured data to the registered consumer using a packet
|
| // size which was specified at construction.
|
| - uint32_t delay_frames = static_cast<uint32_t>(audio_delay_frames + 0.5);
|
| while (buffer_frame_index >= packet_size_frames_) {
|
| // Copy data to audio bus to match the OnData interface.
|
| uint8_t* audio_data =
|
| @@ -429,8 +440,7 @@ void WASAPIAudioInputStream::Run() {
|
|
|
| // Deliver data packet, delay estimation and volume level to
|
| // the user.
|
| - sink_->OnData(this, audio_bus_.get(), delay_frames * frame_size_,
|
| - volume);
|
| + sink_->OnData(this, audio_bus_.get(), delay, delay_timestamp, volume);
|
|
|
| // Store parts of the recorded data which can't be delivered
|
| // using the current packet size. The stored section will be used
|
| @@ -445,11 +455,6 @@ void WASAPIAudioInputStream::Run() {
|
|
|
| DCHECK_GE(buffer_frame_index, packet_size_frames_);
|
| buffer_frame_index -= packet_size_frames_;
|
| - if (delay_frames > packet_size_frames_) {
|
| - delay_frames -= packet_size_frames_;
|
| - } else {
|
| - delay_frames = 0;
|
| - }
|
| }
|
| } break;
|
| default:
|
|
|