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 13namespace content { 14 15// static 16AudioDeviceFactory* AudioDeviceFactory::factory_ = NULL; 17 18// static 19scoped_refptr<media::AudioOutputDevice> AudioDeviceFactory::NewOutputDevice( 20 int render_view_id, int render_frame_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, render_frame_id), 31 filter->io_message_loop()); 32} 33 34// static 35scoped_refptr<media::AudioInputDevice> AudioDeviceFactory::NewInputDevice( 36 int render_view_id) { 37 if (factory_) { 38 media::AudioInputDevice* const device = 39 factory_->CreateInputDevice(render_view_id); 40 if (device) 41 return device; 42 } 43 44 AudioInputMessageFilter* const filter = AudioInputMessageFilter::Get(); 45 return new media::AudioInputDevice( 46 filter->CreateAudioInputIPC(render_view_id), filter->io_message_loop()); 47} 48 49AudioDeviceFactory::AudioDeviceFactory() { 50 DCHECK(!factory_) << "Can't register two factories at once."; 51 factory_ = this; 52} 53 54AudioDeviceFactory::~AudioDeviceFactory() { 55 factory_ = NULL; 56} 57 58} // namespace content 59