Index: media/filters/audio_renderer_impl.cc |
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc |
index 1fa0d387ea7f981299c5719d35a850f357ed2931..a9e936d36d9fbe2f09604f2d5f88815fd3fb11b5 100644 |
--- a/media/filters/audio_renderer_impl.cc |
+++ b/media/filters/audio_renderer_impl.cc |
@@ -16,8 +16,7 @@ |
namespace media { |
AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) |
- : host_(NULL), |
- state_(kUninitialized), |
+ : state_(kUninitialized), |
pending_read_(false), |
received_end_of_stream_(false), |
rendered_end_of_stream_(false), |
@@ -33,12 +32,6 @@ AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) |
base::Unretained(this))) { |
} |
-void AudioRendererImpl::SetHost(FilterHost* host) { |
- DCHECK(host); |
- DCHECK(!host_); |
- host_ = host; |
-} |
- |
void AudioRendererImpl::Play(const base::Closure& callback) { |
{ |
base::AutoLock auto_lock(lock_); |
@@ -145,15 +138,24 @@ void AudioRendererImpl::DoSeek() { |
void AudioRendererImpl::Initialize(const scoped_refptr<AudioDecoder>& decoder, |
const PipelineStatusCB& init_cb, |
const base::Closure& underflow_cb, |
- const TimeCB& time_cb) { |
+ const TimeCB& time_cb, |
+ const base::Closure& ended_cb, |
+ const base::Closure& disabled_cb, |
+ const PipelineStatusCB& error_cb) { |
DCHECK(decoder); |
DCHECK(!init_cb.is_null()); |
DCHECK(!underflow_cb.is_null()); |
DCHECK(!time_cb.is_null()); |
+ DCHECK(!ended_cb.is_null()); |
+ DCHECK(!disabled_cb.is_null()); |
+ DCHECK(!error_cb.is_null()); |
DCHECK_EQ(kUninitialized, state_); |
decoder_ = decoder; |
underflow_cb_ = underflow_cb; |
time_cb_ = time_cb; |
+ ended_cb_ = ended_cb; |
+ disabled_cb_ = disabled_cb; |
+ error_cb_ = error_cb; |
// Create a callback so our algorithm can request more reads. |
base::Closure cb = base::Bind(&AudioRendererImpl::ScheduleRead_Locked, this); |
@@ -436,7 +438,7 @@ uint32 AudioRendererImpl::FillBuffer(uint8* dest, |
if (!algorithm_->CanFillBuffer() && received_end_of_stream_ && |
!rendered_end_of_stream_ && base::Time::Now() >= earliest_end_time_) { |
rendered_end_of_stream_ = true; |
- host_->NotifyEnded(); |
+ ended_cb_.Run(); |
} else if (!algorithm_->CanFillBuffer() && !received_end_of_stream_ && |
state_ == kPlaying && !underflow_disabled_) { |
state_ = kUnderflow; |
@@ -519,7 +521,7 @@ base::TimeDelta AudioRendererImpl::ConvertToDuration(int bytes) { |
} |
void AudioRendererImpl::OnRenderError() { |
- host_->DisableAudioRenderer(); |
+ disabled_cb_.Run(); |
} |
void AudioRendererImpl::DisableUnderflowForTesting() { |
@@ -535,7 +537,7 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(bool is_decode_error) { |
return; |
case kPaused: |
if (status != PIPELINE_OK) |
- host_->SetError(status); |
+ error_cb_.Run(status); |
base::ResetAndReturn(&pause_cb_).Run(); |
return; |
case kSeeking: |
@@ -547,7 +549,7 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(bool is_decode_error) { |
case kRebuffering: |
case kStopped: |
if (status != PIPELINE_OK) |
- host_->SetError(status); |
+ error_cb_.Run(status); |
return; |
} |
} |