Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: media/audio/pulse/pulse_output.cc

Issue 2101303004: Pass delay and timestamp to AudioSourceCallback::OnMoreData. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix Mac CQ errors. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/pulse/pulse_output.h" 5 #include "media/audio/pulse/pulse_output.h"
6 6
7 #include <pulse/pulseaudio.h> 7 #include <pulse/pulseaudio.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/time/time.h"
11 #include "media/audio/audio_device_description.h" 12 #include "media/audio/audio_device_description.h"
12 #include "media/audio/audio_manager_base.h" 13 #include "media/audio/audio_manager_base.h"
13 #include "media/audio/pulse/pulse_util.h" 14 #include "media/audio/pulse/pulse_util.h"
14 15
15 namespace media { 16 namespace media {
16 17
17 using pulse::AutoPulseLock; 18 using pulse::AutoPulseLock;
18 using pulse::WaitForOperationCompletion; 19 using pulse::WaitForOperationCompletion;
19 20
20 // static, pa_stream_notify_cb 21 // static, pa_stream_notify_cb
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 size_t bytes_to_fill = params_.GetBytesPerBuffer(); 126 size_t bytes_to_fill = params_.GetBytesPerBuffer();
126 CHECK_GE(pa_stream_begin_write(pa_stream_, &buffer, &bytes_to_fill), 0); 127 CHECK_GE(pa_stream_begin_write(pa_stream_, &buffer, &bytes_to_fill), 0);
127 CHECK_EQ(bytes_to_fill, static_cast<size_t>(params_.GetBytesPerBuffer())); 128 CHECK_EQ(bytes_to_fill, static_cast<size_t>(params_.GetBytesPerBuffer()));
128 129
129 // NOTE: |bytes_to_fill| may be larger than |requested_bytes| now, this is 130 // NOTE: |bytes_to_fill| may be larger than |requested_bytes| now, this is
130 // okay since pa_stream_begin_write() is the authoritative source on how 131 // okay since pa_stream_begin_write() is the authoritative source on how
131 // much can be written. 132 // much can be written.
132 133
133 int frames_filled = 0; 134 int frames_filled = 0;
134 if (source_callback_) { 135 if (source_callback_) {
135 const uint32_t hardware_delay = pulse::GetHardwareLatencyInBytes( 136 const base::TimeDelta delay = pulse::GetHardwareLatency(pa_stream_);
136 pa_stream_, params_.sample_rate(), params_.GetBytesPerFrame()); 137 frames_filled = source_callback_->OnMoreData(
137 frames_filled = 138 delay, base::TimeTicks::Now(), 0, audio_bus_.get());
138 source_callback_->OnMoreData(audio_bus_.get(), hardware_delay, 0);
139 139
140 // Zero any unfilled data so it plays back as silence. 140 // Zero any unfilled data so it plays back as silence.
141 if (frames_filled < audio_bus_->frames()) { 141 if (frames_filled < audio_bus_->frames()) {
142 audio_bus_->ZeroFramesPartial( 142 audio_bus_->ZeroFramesPartial(
143 frames_filled, audio_bus_->frames() - frames_filled); 143 frames_filled, audio_bus_->frames() - frames_filled);
144 } 144 }
145 145
146 // Note: If this ever changes to output raw float the data must be clipped 146 // Note: If this ever changes to output raw float the data must be clipped
147 // and sanitized since it may come from an untrusted source such as NaCl. 147 // and sanitized since it may come from an untrusted source such as NaCl.
148 audio_bus_->Scale(volume_); 148 audio_bus_->Scale(volume_);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 volume_ = static_cast<float>(volume); 230 volume_ = static_cast<float>(volume);
231 } 231 }
232 232
233 void PulseAudioOutputStream::GetVolume(double* volume) { 233 void PulseAudioOutputStream::GetVolume(double* volume) {
234 DCHECK(thread_checker_.CalledOnValidThread()); 234 DCHECK(thread_checker_.CalledOnValidThread());
235 235
236 *volume = volume_; 236 *volume = volume_;
237 } 237 }
238 238
239 } // namespace media 239 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698