Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / media / audio / win / audio_manager_win.h
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 MEDIA_AUDIO_WIN_AUDIO_MANAGER_WIN_H_
6 #define MEDIA_AUDIO_WIN_AUDIO_MANAGER_WIN_H_
7
8 #include <string>
9
10 #include "media/audio/audio_manager_base.h"
11
12 namespace media {
13
14 class AudioDeviceListenerWin;
15
16 // Windows implementation of the AudioManager singleton. This class is internal
17 // to the audio output and only internal users can call methods not exposed by
18 // the AudioManager class.
19 class MEDIA_EXPORT AudioManagerWin : public AudioManagerBase {
20  public:
21   AudioManagerWin(AudioLogFactory* audio_log_factory);
22
23   // Implementation of AudioManager.
24   virtual bool HasAudioOutputDevices() OVERRIDE;
25   virtual bool HasAudioInputDevices() OVERRIDE;
26   virtual base::string16 GetAudioInputDeviceModel() OVERRIDE;
27   virtual void ShowAudioInputSettings() OVERRIDE;
28   virtual void GetAudioInputDeviceNames(
29       AudioDeviceNames* device_names) OVERRIDE;
30   virtual void GetAudioOutputDeviceNames(
31       AudioDeviceNames* device_names) OVERRIDE;
32   virtual AudioParameters GetInputStreamParameters(
33       const std::string& device_id) OVERRIDE;
34   virtual std::string GetAssociatedOutputDeviceID(
35       const std::string& input_device_id) OVERRIDE;
36
37   // Implementation of AudioManagerBase.
38   virtual AudioOutputStream* MakeLinearOutputStream(
39       const AudioParameters& params) OVERRIDE;
40   virtual AudioOutputStream* MakeLowLatencyOutputStream(
41       const AudioParameters& params,
42       const std::string& device_id) OVERRIDE;
43   virtual AudioInputStream* MakeLinearInputStream(
44       const AudioParameters& params, const std::string& device_id) OVERRIDE;
45   virtual AudioInputStream* MakeLowLatencyInputStream(
46       const AudioParameters& params, const std::string& device_id) OVERRIDE;
47   virtual std::string GetDefaultOutputDeviceID() OVERRIDE;
48
49  protected:
50   virtual ~AudioManagerWin();
51
52   virtual AudioParameters GetPreferredOutputStreamParameters(
53       const std::string& output_device_id,
54       const AudioParameters& input_params) OVERRIDE;
55
56  private:
57   enum EnumerationType {
58     kMMDeviceEnumeration,
59     kWaveEnumeration,
60   };
61
62   // Allow unit test to modify the utilized enumeration API.
63   friend class AudioManagerTest;
64
65   EnumerationType enumeration_type_;
66   EnumerationType enumeration_type() { return enumeration_type_; }
67   void SetEnumerationType(EnumerationType type) {
68     enumeration_type_ = type;
69   }
70
71   inline bool core_audio_supported() const {
72     return enumeration_type_ == kMMDeviceEnumeration;
73   }
74
75   // Returns a PCMWaveInAudioInputStream instance or NULL on failure.
76   // This method converts MMDevice-style device ID to WaveIn-style device ID if
77   // necessary.
78   // (Please see device_enumeration_win.h for more info about the two kinds of
79   // device IDs.)
80   AudioInputStream* CreatePCMWaveInAudioInputStream(
81       const AudioParameters& params,
82       const std::string& device_id);
83
84   // Helper methods for performing expensive initialization tasks on the audio
85   // thread instead of on the UI thread which AudioManager is constructed on.
86   void InitializeOnAudioThread();
87   void ShutdownOnAudioThread();
88
89   void GetAudioDeviceNamesImpl(bool input, AudioDeviceNames* device_names);
90
91   // Listen for output device changes.
92   scoped_ptr<AudioDeviceListenerWin> output_device_listener_;
93
94   DISALLOW_COPY_AND_ASSIGN(AudioManagerWin);
95 };
96
97 }  // namespace media
98
99 #endif  // MEDIA_AUDIO_WIN_AUDIO_MANAGER_WIN_H_