summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 20:36:10 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 20:36:10 +0000
commitab34561dd992607626f7b7c7ee06d429de55df04 (patch)
treeec9f032f24ced4f86c4b866de1415cbc977ca7a7 /content/renderer
parentb492263fad2d811e7d942e63a61ce2f6a3fdfa7c (diff)
downloadchromium_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.cc1
-rw-r--r--content/renderer/media/audio_renderer_impl.cc7
-rw-r--r--content/renderer/media/audio_renderer_impl.h3
-rw-r--r--content/renderer/media/webrtc_audio_device_impl.cc6
-rw-r--r--content/renderer/media/webrtc_audio_device_impl.h3
-rw-r--r--content/renderer/renderer_webaudiodevice_impl.cc6
-rw-r--r--content/renderer/renderer_webaudiodevice_impl.h3
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_;