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

Side by Side Diff: media/audio/audio_output_controller.cc

Issue 10830268: Allow audio system to handle synchronized low-latency audio I/O (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/audio_output_controller.h" 5 #include "media/audio/audio_output_controller.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 return; 276 return;
277 } 277 }
278 } 278 }
279 279
280 void AudioOutputController::DoReportError(int code) { 280 void AudioOutputController::DoReportError(int code) {
281 DCHECK(message_loop_->BelongsToCurrentThread()); 281 DCHECK(message_loop_->BelongsToCurrentThread());
282 if (state_ != kClosed) 282 if (state_ != kClosed)
283 handler_->OnError(this, code); 283 handler_->OnError(this, code);
284 } 284 }
285 285
286 int AudioOutputController::OnMoreData(AudioBus* audio_bus, 286 int AudioOutputController::OnMoreData(AudioBus* dest,
287 AudioBuffersState buffers_state) { 287 AudioBuffersState buffers_state) {
288 TRACE_EVENT0("audio", "AudioOutputController::OnMoreData"); 288 return OnMoreIOData(NULL, dest, buffers_state);
289 }
290
291 int AudioOutputController::OnMoreIOData(AudioBus* source,
292 AudioBus* dest,
293 AudioBuffersState buffers_state) {
294 TRACE_EVENT0("audio", "AudioOutputController::OnMoreIOData");
289 295
290 { 296 {
291 // Check state and do nothing if we are not playing. 297 // Check state and do nothing if we are not playing.
292 // We are on the hardware audio thread, so lock is needed. 298 // We are on the hardware audio thread, so lock is needed.
293 base::AutoLock auto_lock(lock_); 299 base::AutoLock auto_lock(lock_);
294 if (state_ != kPlaying) { 300 if (state_ != kPlaying) {
295 return 0; 301 return 0;
296 } 302 }
297 } 303 }
298 int frames = sync_reader_->Read(audio_bus); 304
305 int frames = sync_reader_->Read(source, dest);
299 sync_reader_->UpdatePendingBytes( 306 sync_reader_->UpdatePendingBytes(
300 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); 307 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame());
301 return frames; 308 return frames;
302 } 309 }
303 310
304 void AudioOutputController::WaitTillDataReady() { 311 void AudioOutputController::WaitTillDataReady() {
305 if (!sync_reader_->DataReady()) { 312 if (!sync_reader_->DataReady()) {
306 // In the different place we use different mechanism to poll, get max 313 // In the different place we use different mechanism to poll, get max
307 // polling delay from constants used there. 314 // polling delay from constants used there.
308 const base::TimeDelta kMaxPollingDelay = TimeDelta::FromMilliseconds( 315 const base::TimeDelta kMaxPollingDelay = TimeDelta::FromMilliseconds(
(...skipping 22 matching lines...) Expand all
331 stream_ = NULL; 338 stream_ = NULL;
332 weak_this_.InvalidateWeakPtrs(); 339 weak_this_.InvalidateWeakPtrs();
333 } 340 }
334 341
335 // Should be last in the method, do not touch "this" from here on. 342 // Should be last in the method, do not touch "this" from here on.
336 if (done != NULL) 343 if (done != NULL)
337 done->Signal(); 344 done->Signal();
338 } 345 }
339 346
340 } // namespace media 347 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698