From a7d7f6d210ac7c396fd81e4b660a6c19b11871bb Mon Sep 17 00:00:00 2001 From: "fbarchard@chromium.org" Date: Tue, 21 Jul 2009 01:06:35 +0000 Subject: Avoid dereferencing null pointer when an audio initialization error occurs. BUG=17283 TRY=play multichannel audio (ie trek6.mp4) in media player and a crash occurs. This fix avoids the crash. Review URL: http://codereview.chromium.org/159099 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21138 0039d316-1c4b-4281-b951-d872f2087c98 --- media/filters/audio_renderer_base.cc | 10 +++++----- media/filters/audio_renderer_impl.cc | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc index 675fdd6..35a49dc 100644 --- a/media/filters/audio_renderer_base.cc +++ b/media/filters/audio_renderer_base.cc @@ -60,17 +60,17 @@ void AudioRendererBase::Initialize(AudioDecoder* decoder, decoder_ = decoder; initialize_callback_.reset(callback); - // Schedule our initial reads. - for (size_t i = 0; i < max_queue_size_; ++i) { - ScheduleRead(); - } - // Defer initialization until all scheduled reads have completed. if (!OnInitialize(decoder_->media_format())) { host()->SetError(PIPELINE_ERROR_INITIALIZATION_FAILED); initialize_callback_->Run(); initialize_callback_.reset(); } + + // Schedule our initial reads. + for (size_t i = 0; i < max_queue_size_; ++i) { + ScheduleRead(); + } } void AudioRendererBase::OnReadComplete(Buffer* buffer_in) { diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc index 180aa76..f944c88 100644 --- a/media/filters/audio_renderer_impl.cc +++ b/media/filters/audio_renderer_impl.cc @@ -83,7 +83,6 @@ bool AudioRendererImpl::OnInitialize(const MediaFormat& media_format) { // Create our audio stream. stream_ = AudioManager::GetAudioManager()->MakeAudioStream( AudioManager::AUDIO_PCM_LINEAR, channels, sample_rate, sample_bits); - DCHECK(stream_); if (!stream_) return false; @@ -98,8 +97,8 @@ bool AudioRendererImpl::OnInitialize(const MediaFormat& media_format) { } void AudioRendererImpl::OnStop() { - DCHECK(stream_); - stream_->Stop(); + if (stream_) + stream_->Stop(); } } // namespace media -- cgit v1.1