audio_manager_win.h revision 58537e28ecd584eab876aee8be7156509866d23a
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 12namespace media { 13 14class 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. 19class 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(AudioDeviceNames* device_names) 29 OVERRIDE; 30 virtual void GetAudioOutputDeviceNames(AudioDeviceNames* device_names) 31 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 // TODO(joi): Collapse these tests into one. 66 friend class AudioManagerTest; 67 friend class AudioInputDeviceTest; 68 69 EnumerationType enumeration_type_; 70 EnumerationType enumeration_type() { return enumeration_type_; } 71 void SetEnumerationType(EnumerationType type) { 72 enumeration_type_ = type; 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 constructing AudioDeviceListenerWin on the audio thread. 85 void CreateDeviceListener(); 86 void DestroyDeviceListener(); 87 88 void GetAudioDeviceNamesImpl(bool input, AudioDeviceNames* device_names); 89 90 // Listen for output device changes. 91 scoped_ptr<AudioDeviceListenerWin> output_device_listener_; 92 93 DISALLOW_COPY_AND_ASSIGN(AudioManagerWin); 94}; 95 96} // namespace media 97 98#endif // MEDIA_AUDIO_WIN_AUDIO_MANAGER_WIN_H_ 99