Index: media/filters/audio_renderer_impl.cc |
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc |
index 1048aee4928b195f71063919f779d09c4c4b69ec..cbb280cd48061076f931b3facb24635a4adde5f9 100644 |
--- a/media/filters/audio_renderer_impl.cc |
+++ b/media/filters/audio_renderer_impl.cc |
@@ -25,10 +25,8 @@ AudioRendererImpl::AudioRendererImpl(media::AudioRendererSink* sink) |
audio_time_buffered_(kNoTimestamp()), |
current_time_(kNoTimestamp()), |
bytes_per_frame_(0), |
- bytes_per_second_(0), |
stopped_(false), |
sink_(sink), |
- is_initialized_(false), |
underflow_disabled_(false), |
preroll_aborted_(false) { |
} |
@@ -53,7 +51,6 @@ void AudioRendererImpl::Play(const base::Closure& callback) { |
void AudioRendererImpl::DoPlay() { |
earliest_end_time_ = base::Time::Now(); |
- DCHECK(sink_.get()); |
sink_->Play(); |
} |
@@ -77,7 +74,6 @@ void AudioRendererImpl::Pause(const base::Closure& callback) { |
} |
void AudioRendererImpl::DoPause() { |
- DCHECK(sink_.get()); |
sink_->Pause(false); |
} |
@@ -89,9 +85,7 @@ void AudioRendererImpl::Stop(const base::Closure& callback) { |
DCHECK(!callback.is_null()); |
if (!stopped_) { |
- DCHECK(sink_.get()); |
sink_->Stop(); |
- |
stopped_ = true; |
} |
{ |
@@ -149,6 +143,7 @@ void AudioRendererImpl::Initialize(const scoped_refptr<DemuxerStream>& stream, |
DCHECK(!decoders.empty()); |
DCHECK_EQ(stream->type(), DemuxerStream::AUDIO); |
DCHECK(!init_cb.is_null()); |
+ DCHECK(!statistics_cb.is_null()); |
DCHECK(!underflow_cb.is_null()); |
DCHECK(!time_cb.is_null()); |
DCHECK(!ended_cb.is_null()); |
@@ -208,14 +203,9 @@ void AudioRendererImpl::OnDecoderInitDone( |
return; |
} |
- // Create a callback so our algorithm can request more reads. |
- base::Closure cb = base::Bind(&AudioRendererImpl::ScheduleRead_Locked, this); |
- |
- // Construct the algorithm. |
- algorithm_.reset(new AudioRendererAlgorithm()); |
+ // We're all good! Continue initializing the rest of the audio renderer based |
+ // on the decoder format. |
- // Initialize our algorithm with media properties, initial playback rate, |
- // and a callback to request more reads from the data source. |
ChannelLayout channel_layout = decoder_->channel_layout(); |
int channels = ChannelLayoutToChannelCount(channel_layout); |
int bits_per_channel = decoder_->bits_per_channel(); |
@@ -223,15 +213,15 @@ void AudioRendererImpl::OnDecoderInitDone( |
// TODO(vrk): Add method to AudioDecoder to compute bytes per frame. |
bytes_per_frame_ = channels * bits_per_channel / 8; |
- bool config_ok = algorithm_->ValidateConfig(channels, sample_rate, |
- bits_per_channel); |
- if (!config_ok || is_initialized_) { |
+ algorithm_.reset(new AudioRendererAlgorithm()); |
+ if (!algorithm_->ValidateConfig(channels, sample_rate, bits_per_channel)) { |
base::ResetAndReturn(&init_cb_).Run(PIPELINE_ERROR_INITIALIZATION_FAILED); |
return; |
} |
- if (config_ok) |
- algorithm_->Initialize(channels, sample_rate, bits_per_channel, 0.0f, cb); |
+ algorithm_->Initialize( |
+ channels, sample_rate, bits_per_channel, 0.0f, |
+ base::Bind(&AudioRendererImpl::ScheduleRead_Locked, this)); |
// We use the AUDIO_PCM_LINEAR flag because AUDIO_PCM_LOW_LATENCY |
// does not currently support all the sample-rates that we require. |
@@ -241,17 +231,9 @@ void AudioRendererImpl::OnDecoderInitDone( |
AudioParameters::AUDIO_PCM_LINEAR, channel_layout, sample_rate, |
bits_per_channel, GetHighLatencyOutputBufferSize(sample_rate)); |
- bytes_per_second_ = audio_parameters_.GetBytesPerSecond(); |
- |
- DCHECK(sink_.get()); |
- DCHECK(!is_initialized_); |
- |
sink_->Initialize(audio_parameters_, this); |
- |
sink_->Start(); |
- is_initialized_ = true; |
- // Finally, execute the start callback. |
state_ = kPaused; |
base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); |
} |
@@ -545,11 +527,10 @@ void AudioRendererImpl::UpdateEarliestEndTime(int bytes_filled, |
} |
base::TimeDelta AudioRendererImpl::ConvertToDuration(int bytes) { |
- if (bytes_per_second_) { |
- return base::TimeDelta::FromMicroseconds( |
- base::Time::kMicrosecondsPerSecond * bytes / bytes_per_second_); |
- } |
- return base::TimeDelta(); |
+ int bytes_per_second = audio_parameters_.GetBytesPerSecond(); |
+ CHECK(bytes_per_second); |
+ return base::TimeDelta::FromMicroseconds( |
+ base::Time::kMicrosecondsPerSecond * bytes / bytes_per_second); |
} |
void AudioRendererImpl::OnRenderError() { |
@@ -557,7 +538,6 @@ void AudioRendererImpl::OnRenderError() { |
} |
void AudioRendererImpl::DisableUnderflowForTesting() { |
- DCHECK(!is_initialized_); |
underflow_disabled_ = true; |
} |