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

Side by Side Diff: media/filters/audio_renderer_impl.cc

Issue 10753021: Move AudioRenderer out of Filter heirarchy. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: docs Created 8 years, 5 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
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/filters/audio_renderer_impl.h" 5 #include "media/filters/audio_renderer_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 15 matching lines...) Expand all
26 bytes_per_frame_(0), 26 bytes_per_frame_(0),
27 bytes_per_second_(0), 27 bytes_per_second_(0),
28 stopped_(false), 28 stopped_(false),
29 sink_(sink), 29 sink_(sink),
30 is_initialized_(false), 30 is_initialized_(false),
31 underflow_disabled_(false), 31 underflow_disabled_(false),
32 read_cb_(base::Bind(&AudioRendererImpl::DecodedAudioReady, 32 read_cb_(base::Bind(&AudioRendererImpl::DecodedAudioReady,
33 base::Unretained(this))) { 33 base::Unretained(this))) {
34 } 34 }
35 35
36 void AudioRendererImpl::SetHost(FilterHost* host) { 36 void AudioRendererImpl::SetHost(AudioRendererHost* host) {
37 DCHECK(host); 37 DCHECK(host);
38 DCHECK(!host_); 38 DCHECK(!host_);
39 host_ = host; 39 host_ = host;
40 } 40 }
41 41
42 void AudioRendererImpl::Play(const base::Closure& callback) { 42 void AudioRendererImpl::Play(const base::Closure& callback) {
43 { 43 {
44 base::AutoLock auto_lock(lock_); 44 base::AutoLock auto_lock(lock_);
45 DCHECK_EQ(kPaused, state_); 45 DCHECK_EQ(kPaused, state_);
46 state_ = kPlaying; 46 state_ = kPlaying;
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 // 417 //
418 // We use the following conditions to determine underflow: 418 // We use the following conditions to determine underflow:
419 // 1) Algorithm can not fill the audio callback buffer 419 // 1) Algorithm can not fill the audio callback buffer
420 // 2) We have NOT received an end of stream buffer 420 // 2) We have NOT received an end of stream buffer
421 // 3) We are in the kPlaying state 421 // 3) We are in the kPlaying state
422 // 422 //
423 // Otherwise fill the buffer with whatever data we can send to the device. 423 // Otherwise fill the buffer with whatever data we can send to the device.
424 if (!algorithm_->CanFillBuffer() && received_end_of_stream_ && 424 if (!algorithm_->CanFillBuffer() && received_end_of_stream_ &&
425 !rendered_end_of_stream_ && base::Time::Now() >= earliest_end_time_) { 425 !rendered_end_of_stream_ && base::Time::Now() >= earliest_end_time_) {
426 rendered_end_of_stream_ = true; 426 rendered_end_of_stream_ = true;
427 host_->NotifyEnded(); 427 host_->AudioRendererEnded();
428 } else if (!algorithm_->CanFillBuffer() && !received_end_of_stream_ && 428 } else if (!algorithm_->CanFillBuffer() && !received_end_of_stream_ &&
429 state_ == kPlaying && !underflow_disabled_) { 429 state_ == kPlaying && !underflow_disabled_) {
430 state_ = kUnderflow; 430 state_ = kUnderflow;
431 underflow_cb = underflow_cb_; 431 underflow_cb = underflow_cb_;
432 } else if (algorithm_->CanFillBuffer()) { 432 } else if (algorithm_->CanFillBuffer()) {
433 frames_written = algorithm_->FillBuffer(dest, requested_frames); 433 frames_written = algorithm_->FillBuffer(dest, requested_frames);
434 DCHECK_GT(frames_written, 0u); 434 DCHECK_GT(frames_written, 0u);
435 } else { 435 } else {
436 // We can't write any data this cycle. For example, we may have 436 // We can't write any data this cycle. For example, we may have
437 // sent all available data to the audio device while not reaching 437 // sent all available data to the audio device while not reaching
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 500
501 base::TimeDelta AudioRendererImpl::ConvertToDuration(int bytes) { 501 base::TimeDelta AudioRendererImpl::ConvertToDuration(int bytes) {
502 if (bytes_per_second_) { 502 if (bytes_per_second_) {
503 return base::TimeDelta::FromMicroseconds( 503 return base::TimeDelta::FromMicroseconds(
504 base::Time::kMicrosecondsPerSecond * bytes / bytes_per_second_); 504 base::Time::kMicrosecondsPerSecond * bytes / bytes_per_second_);
505 } 505 }
506 return base::TimeDelta(); 506 return base::TimeDelta();
507 } 507 }
508 508
509 void AudioRendererImpl::OnRenderError() { 509 void AudioRendererImpl::OnRenderError() {
510 host_->DisableAudioRenderer(); 510 host_->AudioRendererDisabled();
511 } 511 }
512 512
513 void AudioRendererImpl::DisableUnderflowForTesting() { 513 void AudioRendererImpl::DisableUnderflowForTesting() {
514 DCHECK(!is_initialized_); 514 DCHECK(!is_initialized_);
515 underflow_disabled_ = true; 515 underflow_disabled_ = true;
516 } 516 }
517 517
518 } // namespace media 518 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698