diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-10 04:38:56 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-10 04:38:56 +0000 |
commit | bf424edf6b8ac7cf26b6537ff72c786ebabaa751 (patch) | |
tree | 51d698ca54e77b7b6253299c0c9b383db1daf048 /content/renderer | |
parent | d90579d1532a3b8736bfd68de450c54e0b3d741f (diff) | |
download | chromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.zip chromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.tar.gz chromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.tar.bz2 |
Fix crash in UMA-reporting aspect ratio when video height is zero.
Also fixed a DCHECK that gets triggered in the same case (audio renderer is
destroyed without ever having been created, so DCHECK_NE(stream_id_, 0) was
failing).
BUG=103552
TEST=failing video stops crashing renderer
Review URL: http://codereview.chromium.org/8510017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109379 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/media/audio_renderer_impl.cc | 19 | ||||
-rw-r--r-- | content/renderer/media/audio_renderer_impl.h | 3 |
2 files changed, 18 insertions, 4 deletions
diff --git a/content/renderer/media/audio_renderer_impl.cc b/content/renderer/media/audio_renderer_impl.cc index bdbefe7..3e617f5 100644 --- a/content/renderer/media/audio_renderer_impl.cc +++ b/content/renderer/media/audio_renderer_impl.cc @@ -28,6 +28,7 @@ AudioRendererImpl::LatencyType AudioRendererImpl::latency_type_ = AudioRendererImpl::AudioRendererImpl() : AudioRendererBase(), bytes_per_second_(0), + stream_created_(false), stream_id_(0), shared_memory_(NULL), shared_memory_size_(0), @@ -340,6 +341,8 @@ void AudioRendererImpl::CreateStreamTask(const AudioParameters& audio_params) { if (stopped_) return; + stream_created_ = true; + // Make sure we don't call create more than once. DCHECK_EQ(0, stream_id_); stream_id_ = filter_->AddDelegate(this); @@ -379,6 +382,12 @@ void AudioRendererImpl::SeekTask() { void AudioRendererImpl::DestroyTask() { DCHECK(MessageLoop::current() == ChildProcess::current()->io_message_loop()); + base::AutoLock auto_lock(lock_); + // Errors can cause us to get here before CreateStreamTask ever ran, in which + // case there's nothing to do. + if (!stream_created_) + return; + // Make sure we don't call destroy more than once. DCHECK_NE(0, stream_id_); filter_->RemoveDelegate(stream_id_); @@ -458,11 +467,13 @@ void AudioRendererImpl::WillDestroyCurrentMessageLoop() { ChildProcess::current()->io_message_loop())); // We treat the IO loop going away the same as stopping. - base::AutoLock auto_lock(lock_); - if (stopped_) - return; + { + base::AutoLock auto_lock(lock_); + if (stopped_) + return; - stopped_ = true; + stopped_ = true; + } DestroyTask(); } diff --git a/content/renderer/media/audio_renderer_impl.h b/content/renderer/media/audio_renderer_impl.h index a3b3995..e38f407 100644 --- a/content/renderer/media/audio_renderer_impl.h +++ b/content/renderer/media/audio_renderer_impl.h @@ -173,6 +173,9 @@ class CONTENT_EXPORT AudioRendererImpl // Used to calculate audio delay given bytes. uint32 bytes_per_second_; + // Whether the stream has been created yet. + bool stream_created_; + // ID of the stream created in the browser process. int32 stream_id_; |