diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-18 19:56:07 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-18 19:56:07 +0000 |
commit | 6e37eddefe929bec9d9cfefa15e784a10198104a (patch) | |
tree | 70b7c0eb804510e8968d94236571334ff3343718 /media/filters | |
parent | efc7664deb77ffe8d0e42d84487dd254c2994328 (diff) | |
download | chromium_src-6e37eddefe929bec9d9cfefa15e784a10198104a.zip chromium_src-6e37eddefe929bec9d9cfefa15e784a10198104a.tar.gz chromium_src-6e37eddefe929bec9d9cfefa15e784a10198104a.tar.bz2 |
Miscellaneous AudioRendererImpl cleanup salvaged from http://codereview.chromium.org/10918022/.
Review URL: https://chromiumcodereview.appspot.com/11183048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162766 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/filters')
-rw-r--r-- | media/filters/audio_renderer_impl.cc | 44 | ||||
-rw-r--r-- | media/filters/audio_renderer_impl.h | 6 |
2 files changed, 12 insertions, 38 deletions
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc index 20dffd6..51c19df 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()); @@ -210,14 +205,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(); @@ -225,15 +215,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. @@ -243,17 +233,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); } @@ -547,11 +529,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() { @@ -559,7 +540,6 @@ void AudioRendererImpl::OnRenderError() { } void AudioRendererImpl::DisableUnderflowForTesting() { - DCHECK(!is_initialized_); underflow_disabled_ = true; } diff --git a/media/filters/audio_renderer_impl.h b/media/filters/audio_renderer_impl.h index b154acf..47a498b 100644 --- a/media/filters/audio_renderer_impl.h +++ b/media/filters/audio_renderer_impl.h @@ -197,18 +197,12 @@ class MEDIA_EXPORT AudioRendererImpl uint32 bytes_per_frame_; - // Used to calculate audio delay given bytes. - uint32 bytes_per_second_; - // A flag that indicates this filter is called to stop. bool stopped_; // The sink (destination) for rendered audio. scoped_refptr<media::AudioRendererSink> sink_; - // Set to true when OnInitialize() is called. - bool is_initialized_; - // We're supposed to know amount of audio data OS or hardware buffered, but // that is not always so -- on my Linux box // AudioBuffersState::hardware_delay_bytes never reaches 0. |