- add sources.
[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();
22
23   // Implementation of AudioManager.
24   virtual bool HasAudioOutputDevices() OVERRIDE;
25   virtual bool HasAudioInputDevices() OVERRIDE;
26   virtual 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,
43       const std::string& input_device_id) OVERRIDE;
44   virtual AudioInputStream* MakeLinearInputStream(
45       const AudioParameters& params, const std::string& device_id) OVERRIDE;
46   virtual AudioInputStream* MakeLowLatencyInputStream(
47       const AudioParameters& params, const std::string& device_id) OVERRIDE;
48   virtual std::string GetDefaultOutputDeviceID() OVERRIDE;
49
50  protected:
51   virtual ~AudioManagerWin();
52
53   virtual AudioParameters GetPreferredOutputStreamParameters(
54       const std::string& output_device_id,
55       const AudioParameters& input_params) OVERRIDE;
56
57  private:
58   enum EnumerationType {
59     kUninitializedEnumeration = 0,
60     kMMDeviceEnumeration,
61     kWaveEnumeration,
62   };
63
64   // Allow unit test to modify the utilized enumeration API.
65   friend class AudioManagerTest;
66
67   EnumerationType enumeration_type_;
68   EnumerationType enumeration_type() { return enumeration_type_; }
69   void SetEnumerationType(EnumerationType type) {
70     enumeration_type_ = type;
71   }
72
73   // Returns a PCMWaveInAudioInputStream instance or NULL on failure.
74   // This method converts MMDevice-style device ID to WaveIn-style device ID if
75   // necessary.
76   // (Please see device_enumeration_win.h for more info about the two kinds of
77   // device IDs.)
78   AudioInputStream* CreatePCMWaveInAudioInputStream(
79       const AudioParameters& params,
80       const std::string& device_id);
81
82   // Helper methods for constructing AudioDeviceListenerWin on the audio thread.
83   void CreateDeviceListener();
84   void DestroyDeviceListener();
85
86   void GetAudioDeviceNamesImpl(bool input, AudioDeviceNames* device_names);
87
88   // Listen for output device changes.
89   scoped_ptr<AudioDeviceListenerWin> output_device_listener_;
90
91   DISALLOW_COPY_AND_ASSIGN(AudioManagerWin);
92 };
93
94 }  // namespace media
95
96 #endif  // MEDIA_AUDIO_WIN_AUDIO_MANAGER_WIN_H_