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 #ifndef CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_FACTORY_H_ 6 #define CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_FACTORY_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "content/common/content_export.h" 11 12 namespace media { 13 class AudioInputDevice; 14 class AudioOutputDevice; 15 } 16 17 namespace content { 18 19 // A factory for creating AudioOutputDevices and AudioInputDevices. There is a 20 // global factory function that can be installed for the purposes of testing to 21 // provide specialized implementations. 22 class CONTENT_EXPORT AudioDeviceFactory { 23 public: 24 // Creates an AudioOutputDevice using the currently registered factory. 25 // |render_view_id| and |render_frame_id| refer to the render view and render 26 // frame containing the entity producing the audio. 27 static scoped_refptr<media::AudioOutputDevice> NewOutputDevice( 28 int render_view_id, int render_frame_id); 29 30 // Creates an AudioInputDevice using the currently registered factory. 31 // |render_view_id| refers to the render view containing the entity consuming 32 // the audio. 33 static scoped_refptr<media::AudioInputDevice> NewInputDevice( 34 int render_view_id); 35 36 protected: 37 AudioDeviceFactory(); 38 virtual ~AudioDeviceFactory(); 39 40 // You can derive from this class and specify an implementation for these 41 // functions to provide alternate audio device implementations. 42 // If the return value of either of these function is NULL, we fall back 43 // on the default implementation. 44 virtual media::AudioOutputDevice* CreateOutputDevice(int render_view_id) = 0; 45 virtual media::AudioInputDevice* CreateInputDevice(int render_view_id) = 0; 46 47 private: 48 // The current globally registered factory. This is NULL when we should 49 // create the default AudioRendererSinks. 50 static AudioDeviceFactory* factory_; 51 52 DISALLOW_COPY_AND_ASSIGN(AudioDeviceFactory); 53 }; 54 55 } // namespace content 56 57 #endif // CONTENT_RENDERER_MEDIA_AUDIO_DEVICE_FACTORY_H_ 58