1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/media/audio_device_factory.h" 6 7 #include "base/logging.h" 8 #include "content/renderer/media/audio_input_message_filter.h" 9 #include "content/renderer/media/audio_message_filter.h" 10 #include "media/audio/audio_input_device.h" 11 #include "media/audio/audio_output_device.h" 12 13 namespace content { 14 15 // static 16 AudioDeviceFactory* AudioDeviceFactory::factory_ = NULL; 17 18 // static 19 scoped_refptr<media::AudioOutputDevice> AudioDeviceFactory::NewOutputDevice( 20 int render_view_id) { 21 if (factory_) { 22 media::AudioOutputDevice* const device = 23 factory_->CreateOutputDevice(render_view_id); 24 if (device) 25 return device; 26 } 27 28 AudioMessageFilter* const filter = AudioMessageFilter::Get(); 29 return new media::AudioOutputDevice( 30 filter->CreateAudioOutputIPC(render_view_id), filter->io_message_loop()); 31 } 32 33 // static 34 scoped_refptr<media::AudioInputDevice> AudioDeviceFactory::NewInputDevice( 35 int render_view_id) { 36 if (factory_) { 37 media::AudioInputDevice* const device = 38 factory_->CreateInputDevice(render_view_id); 39 if (device) 40 return device; 41 } 42 43 AudioInputMessageFilter* const filter = AudioInputMessageFilter::Get(); 44 return new media::AudioInputDevice( 45 filter->CreateAudioInputIPC(render_view_id), filter->io_message_loop()); 46 } 47 48 AudioDeviceFactory::AudioDeviceFactory() { 49 DCHECK(!factory_) << "Can't register two factories at once."; 50 factory_ = this; 51 } 52 53 AudioDeviceFactory::~AudioDeviceFactory() { 54 factory_ = NULL; 55 } 56 57 } // namespace content 58