diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 20:36:10 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 20:36:10 +0000 |
commit | ab34561dd992607626f7b7c7ee06d429de55df04 (patch) | |
tree | ec9f032f24ced4f86c4b866de1415cbc977ca7a7 /content/renderer | |
parent | b492263fad2d811e7d942e63a61ce2f6a3fdfa7c (diff) | |
download | chromium_src-ab34561dd992607626f7b7c7ee06d429de55df04.zip chromium_src-ab34561dd992607626f7b7c7ee06d429de55df04.tar.gz chromium_src-ab34561dd992607626f7b7c7ee06d429de55df04.tar.bz2 |
Detect errors in audio output and report them upstream.
Stop feeding audio packets to AUDIO DemuxerStreams once audio has been disabled.
BUG=111409
TEST=uninstall pulseaudio, make /dev/snd inaccessible, and observe <video> plays correctly (muted) instead of hanging.
Review URL: http://codereview.chromium.org/9234066
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119488 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/media/audio_device.cc | 1 | ||||
-rw-r--r-- | content/renderer/media/audio_renderer_impl.cc | 7 | ||||
-rw-r--r-- | content/renderer/media/audio_renderer_impl.h | 3 | ||||
-rw-r--r-- | content/renderer/media/webrtc_audio_device_impl.cc | 6 | ||||
-rw-r--r-- | content/renderer/media/webrtc_audio_device_impl.h | 3 | ||||
-rw-r--r-- | content/renderer/renderer_webaudiodevice_impl.cc | 6 | ||||
-rw-r--r-- | content/renderer/renderer_webaudiodevice_impl.h | 3 |
7 files changed, 23 insertions, 6 deletions
diff --git a/content/renderer/media/audio_device.cc b/content/renderer/media/audio_device.cc index 99b01f2..b6ed566 100644 --- a/content/renderer/media/audio_device.cc +++ b/content/renderer/media/audio_device.cc @@ -211,6 +211,7 @@ void AudioDevice::OnRequestPacket(AudioBuffersState buffers_state) { void AudioDevice::OnStateChanged(AudioStreamState state) { if (state == kAudioStreamError) { DLOG(WARNING) << "AudioDevice::OnStateChanged(kError)"; + callback_->OnError(); } } diff --git a/content/renderer/media/audio_renderer_impl.cc b/content/renderer/media/audio_renderer_impl.cc index eb54186..fda28ef 100644 --- a/content/renderer/media/audio_renderer_impl.cc +++ b/content/renderer/media/audio_renderer_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -14,6 +14,7 @@ #include "content/renderer/render_thread_impl.h" #include "media/audio/audio_buffers_state.h" #include "media/audio/audio_util.h" +#include "media/base/filter_host.h" // We define GetBufferSizeForSampleRate() instead of using // GetAudioHardwareBufferSize() in audio_util because we're using @@ -247,3 +248,7 @@ size_t AudioRendererImpl::Render(const std::vector<float*>& audio_data, } return filled_frames; } + +void AudioRendererImpl::OnError() { + host()->DisableAudioRenderer(); +} diff --git a/content/renderer/media/audio_renderer_impl.h b/content/renderer/media/audio_renderer_impl.h index ed09528..9e900d8 100644 --- a/content/renderer/media/audio_renderer_impl.h +++ b/content/renderer/media/audio_renderer_impl.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -80,6 +80,7 @@ class CONTENT_EXPORT AudioRendererImpl virtual size_t Render(const std::vector<float*>& audio_data, size_t number_of_frames, size_t audio_delay_milliseconds) OVERRIDE; + virtual void OnError() OVERRIDE; // Accessors used by tests. base::Time earliest_end_time() const { diff --git a/content/renderer/media/webrtc_audio_device_impl.cc b/content/renderer/media/webrtc_audio_device_impl.cc index 954b8c9..6cb3bc7 100644 --- a/content/renderer/media/webrtc_audio_device_impl.cc +++ b/content/renderer/media/webrtc_audio_device_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -118,6 +118,10 @@ size_t WebRtcAudioDeviceImpl::Render( return number_of_frames; } +void WebRtcAudioDeviceImpl::OnError() { + // TODO(henrika): Implement error handling. +} + void WebRtcAudioDeviceImpl::Capture( const std::vector<float*>& audio_data, size_t number_of_frames, diff --git a/content/renderer/media/webrtc_audio_device_impl.h b/content/renderer/media/webrtc_audio_device_impl.h index 28f4ae4..210b9ac 100644 --- a/content/renderer/media/webrtc_audio_device_impl.h +++ b/content/renderer/media/webrtc_audio_device_impl.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -115,6 +115,7 @@ class CONTENT_EXPORT WebRtcAudioDeviceImpl virtual size_t Render(const std::vector<float*>& audio_data, size_t number_of_frames, size_t audio_delay_milliseconds) OVERRIDE; + virtual void OnError() OVERRIDE; // AudioInputDevice::CaptureCallback implementation. virtual void Capture(const std::vector<float*>& audio_data, diff --git a/content/renderer/renderer_webaudiodevice_impl.cc b/content/renderer/renderer_webaudiodevice_impl.cc index 77c6ba37..623fb5a 100644 --- a/content/renderer/renderer_webaudiodevice_impl.cc +++ b/content/renderer/renderer_webaudiodevice_impl.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -51,3 +51,7 @@ size_t RendererWebAudioDeviceImpl::Render(const std::vector<float*>& audio_data, } return number_of_frames; } + +void RendererWebAudioDeviceImpl::OnError() { + // TODO(crogers): implement error handling. +} diff --git a/content/renderer/renderer_webaudiodevice_impl.h b/content/renderer/renderer_webaudiodevice_impl.h index e4a5bf1..4a6d462 100644 --- a/content/renderer/renderer_webaudiodevice_impl.h +++ b/content/renderer/renderer_webaudiodevice_impl.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -30,6 +30,7 @@ class RendererWebAudioDeviceImpl : public WebKit::WebAudioDevice, virtual size_t Render(const std::vector<float*>& audio_data, size_t number_of_frames, size_t audio_delay_milliseconds) OVERRIDE; + virtual void OnError() OVERRIDE; private: scoped_refptr<AudioDevice> audio_device_; |