Index: content/renderer/media/webrtc_audio_device_impl.cc |
diff --git a/content/renderer/media/webrtc_audio_device_impl.cc b/content/renderer/media/webrtc_audio_device_impl.cc |
index 37d2f3d6aeaba6d77bb7d890f373bb8e0d98a75c..85f3629652afd1048e01760f42f83d277450c290 100644 |
--- a/content/renderer/media/webrtc_audio_device_impl.cc |
+++ b/content/renderer/media/webrtc_audio_device_impl.cc |
@@ -8,6 +8,7 @@ |
#include "base/metrics/histogram.h" |
#include "base/string_util.h" |
#include "base/win/windows_version.h" |
+#include "content/renderer/media/audio_device_factory.h" |
#include "content/renderer/media/audio_hardware.h" |
#include "content/renderer/render_thread_impl.h" |
#include "media/audio/audio_util.h" |
@@ -126,7 +127,8 @@ static void AddHistogramFramesPerBuffer(HistogramDirection dir, int param) { |
} |
} |
-WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl() |
+WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl( |
+ AudioDeviceFactoryInterface* audio_device_factory) |
: ref_count_(0), |
render_loop_(base::MessageLoopProxy::current()), |
audio_transport_callback_(NULL), |
@@ -141,8 +143,13 @@ WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl() |
recording_(false), |
agc_is_enabled_(false) { |
DVLOG(1) << "WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl()"; |
+ DCHECK(audio_device_factory); |
+ // TODO(henrika): remove this restriction when factory is used for the |
+ // input side as well. |
DCHECK(RenderThreadImpl::current()) << |
"WebRtcAudioDeviceImpl must be constructed on the render thread"; |
+ audio_output_device_ = audio_device_factory->Create(); |
+ DCHECK(audio_output_device_); |
} |
WebRtcAudioDeviceImpl::~WebRtcAudioDeviceImpl() { |
@@ -410,7 +417,6 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
return 0; |
DCHECK(!audio_input_device_); |
- DCHECK(!audio_output_device_); |
DCHECK(!input_buffer_.get()); |
DCHECK(!output_buffer_.get()); |
@@ -583,11 +589,10 @@ int32_t WebRtcAudioDeviceImpl::Init() { |
AddHistogramFramesPerBuffer(kAudioOutput, out_buffer_size); |
AddHistogramFramesPerBuffer(kAudioInput, in_buffer_size); |
- // Create and configure the audio rendering client. |
- audio_output_device_ = new AudioDevice(output_audio_parameters_, this); |
+ // Configure the audio rendering client. |
+ audio_output_device_->Initialize(output_audio_parameters_, this); |
DCHECK(audio_input_device_); |
- DCHECK(audio_output_device_); |
// Allocate local audio buffers based on the parameters above. |
// It is assumed that each audio sample contains 16 bits and each |
@@ -627,13 +632,11 @@ int32_t WebRtcAudioDeviceImpl::Terminate() { |
return 0; |
DCHECK(audio_input_device_); |
- DCHECK(audio_output_device_); |
DCHECK(input_buffer_.get()); |
DCHECK(output_buffer_.get()); |
// Release all resources allocated in Init(). |
audio_input_device_ = NULL; |
- audio_output_device_ = NULL; |
input_buffer_.reset(); |
output_buffer_.reset(); |
@@ -697,7 +700,7 @@ int32_t WebRtcAudioDeviceImpl::SetRecordingDevice(WindowsDeviceType device) { |
int32_t WebRtcAudioDeviceImpl::PlayoutIsAvailable(bool* available) { |
DVLOG(1) << "PlayoutIsAvailable()"; |
- *available = (audio_output_device_ != NULL); |
+ *available = initialized(); |
return 0; |
} |
@@ -709,7 +712,7 @@ int32_t WebRtcAudioDeviceImpl::InitPlayout() { |
bool WebRtcAudioDeviceImpl::PlayoutIsInitialized() const { |
DVLOG(1) << "PlayoutIsInitialized()"; |
- return (audio_output_device_ != NULL); |
+ return initialized(); |
} |
int32_t WebRtcAudioDeviceImpl::RecordingIsAvailable(bool* available) { |