| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ | 5 #ifndef CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ |
| 6 #define CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ | 6 #define CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ |
| 7 | 7 |
| 8 #include <queue> | 8 #include <queue> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
| 13 #include "base/observer_list.h" | 13 #include "base/observer_list.h" |
| 14 #include "chromeos/audio/audio_device.h" | 14 #include "chromeos/audio/audio_device.h" |
| 15 #include "chromeos/audio/audio_pref_observer.h" | 15 #include "chromeos/audio/audio_pref_observer.h" |
| 16 #include "chromeos/dbus/audio_node.h" | 16 #include "chromeos/dbus/audio_node.h" |
| 17 #include "chromeos/dbus/cras_audio_client.h" | 17 #include "chromeos/dbus/cras_audio_client.h" |
| 18 #include "chromeos/dbus/session_manager_client.h" |
| 18 #include "chromeos/dbus/volume_state.h" | 19 #include "chromeos/dbus/volume_state.h" |
| 19 | 20 |
| 20 class PrefRegistrySimple; | 21 class PrefRegistrySimple; |
| 21 class PrefService; | 22 class PrefService; |
| 22 | 23 |
| 23 namespace chromeos { | 24 namespace chromeos { |
| 24 | 25 |
| 25 class AudioDevicesPrefHandler; | 26 class AudioDevicesPrefHandler; |
| 26 | 27 |
| 27 class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer, | 28 class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer, |
| 28 public AudioPrefObserver { | 29 public AudioPrefObserver, |
| 30 public SessionManagerClient::Observer { |
| 29 public: | 31 public: |
| 30 typedef std::priority_queue<AudioDevice, | 32 typedef std::priority_queue<AudioDevice, |
| 31 std::vector<AudioDevice>, | 33 std::vector<AudioDevice>, |
| 32 AudioDeviceCompare> AudioDevicePriorityQueue; | 34 AudioDeviceCompare> AudioDevicePriorityQueue; |
| 33 | 35 |
| 34 class AudioObserver { | 36 class AudioObserver { |
| 35 public: | 37 public: |
| 36 // Called when output volume changed. | 38 // Called when output volume changed. |
| 37 virtual void OnOutputVolumeChanged(); | 39 virtual void OnOutputVolumeChanged(); |
| 38 | 40 |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 | 148 |
| 147 // Switches active audio device to |device|. | 149 // Switches active audio device to |device|. |
| 148 virtual void SwitchToDevice(const AudioDevice& device); | 150 virtual void SwitchToDevice(const AudioDevice& device); |
| 149 | 151 |
| 150 // Sets volume/gain level for a device. | 152 // Sets volume/gain level for a device. |
| 151 virtual void SetVolumeGainPercentForDevice(uint64 device_id, int value); | 153 virtual void SetVolumeGainPercentForDevice(uint64 device_id, int value); |
| 152 | 154 |
| 153 // Sets the mute for device. | 155 // Sets the mute for device. |
| 154 virtual void SetMuteForDevice(uint64 device_id, bool mute_on); | 156 virtual void SetMuteForDevice(uint64 device_id, bool mute_on); |
| 155 | 157 |
| 158 // Enables error logging. |
| 159 virtual void LogErrors(); |
| 160 |
| 156 protected: | 161 protected: |
| 157 explicit CrasAudioHandler( | 162 explicit CrasAudioHandler( |
| 158 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler); | 163 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler); |
| 159 virtual ~CrasAudioHandler(); | 164 virtual ~CrasAudioHandler(); |
| 160 | 165 |
| 161 private: | 166 private: |
| 162 // Overriden from CrasAudioClient::Observer. | 167 // CrasAudioClient::Observer overrides. |
| 163 virtual void AudioClientRestarted() OVERRIDE; | 168 virtual void AudioClientRestarted() OVERRIDE; |
| 164 virtual void NodesChanged() OVERRIDE; | 169 virtual void NodesChanged() OVERRIDE; |
| 165 virtual void ActiveOutputNodeChanged(uint64 node_id) OVERRIDE; | 170 virtual void ActiveOutputNodeChanged(uint64 node_id) OVERRIDE; |
| 166 virtual void ActiveInputNodeChanged(uint64 node_id) OVERRIDE; | 171 virtual void ActiveInputNodeChanged(uint64 node_id) OVERRIDE; |
| 167 | 172 |
| 168 // Overriden from AudioPrefObserver. | 173 // AudioPrefObserver overrides. |
| 169 virtual void OnAudioPolicyPrefChanged() OVERRIDE; | 174 virtual void OnAudioPolicyPrefChanged() OVERRIDE; |
| 170 | 175 |
| 176 // SessionManagerClient::Observer overrides. |
| 177 virtual void EmitLoginPromptVisibleCalled() OVERRIDE; |
| 178 |
| 171 // Sets the active audio output/input node to the node with |node_id|. | 179 // Sets the active audio output/input node to the node with |node_id|. |
| 172 void SetActiveOutputNode(uint64 node_id); | 180 void SetActiveOutputNode(uint64 node_id); |
| 173 void SetActiveInputNode(uint64 node_id); | 181 void SetActiveInputNode(uint64 node_id); |
| 174 | 182 |
| 175 // Sets up the audio device state based on audio policy and audio settings | 183 // Sets up the audio device state based on audio policy and audio settings |
| 176 // saved in prefs. | 184 // saved in prefs. |
| 177 void SetupAudioInputState(); | 185 void SetupAudioInputState(); |
| 178 void SetupAudioOutputState(); | 186 void SetupAudioOutputState(); |
| 179 | 187 |
| 180 const AudioDevice* GetDeviceFromId(uint64 device_id) const; | 188 const AudioDevice* GetDeviceFromId(uint64 device_id) const; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 size_t new_device_size, | 227 size_t new_device_size, |
| 220 uint64 current_active_node); | 228 uint64 current_active_node); |
| 221 | 229 |
| 222 // Returns true if there is any device change for for input or output, | 230 // Returns true if there is any device change for for input or output, |
| 223 // specified by |is_input|. | 231 // specified by |is_input|. |
| 224 bool HasDeviceChange(const AudioNodeList& new_nodes, bool is_input); | 232 bool HasDeviceChange(const AudioNodeList& new_nodes, bool is_input); |
| 225 | 233 |
| 226 // Handles dbus callback for GetNodes. | 234 // Handles dbus callback for GetNodes. |
| 227 void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success); | 235 void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success); |
| 228 | 236 |
| 237 // Handles the dbus error callback. |
| 238 void HandleGetNodesError(const std::string& error_name, |
| 239 const std::string& error_msg); |
| 240 |
| 229 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler_; | 241 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler_; |
| 230 base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_; | 242 base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_; |
| 231 ObserverList<AudioObserver> observers_; | 243 ObserverList<AudioObserver> observers_; |
| 232 | 244 |
| 233 // Audio data and state. | 245 // Audio data and state. |
| 234 AudioDeviceMap audio_devices_; | 246 AudioDeviceMap audio_devices_; |
| 235 | 247 |
| 236 AudioDevicePriorityQueue input_devices_pq_; | 248 AudioDevicePriorityQueue input_devices_pq_; |
| 237 AudioDevicePriorityQueue output_devices_pq_; | 249 AudioDevicePriorityQueue output_devices_pq_; |
| 238 | 250 |
| 239 bool output_mute_on_; | 251 bool output_mute_on_; |
| 240 bool input_mute_on_; | 252 bool input_mute_on_; |
| 241 int output_volume_; | 253 int output_volume_; |
| 242 int input_gain_; | 254 int input_gain_; |
| 243 uint64 active_output_node_id_; | 255 uint64 active_output_node_id_; |
| 244 uint64 active_input_node_id_; | 256 uint64 active_input_node_id_; |
| 245 bool has_alternative_input_; | 257 bool has_alternative_input_; |
| 246 bool has_alternative_output_; | 258 bool has_alternative_output_; |
| 247 | 259 |
| 248 bool output_mute_locked_; | 260 bool output_mute_locked_; |
| 249 bool input_mute_locked_; | 261 bool input_mute_locked_; |
| 250 | 262 |
| 263 // Failures are not logged at startup, since CRAS may not be running yet. |
| 264 bool log_errors_; |
| 265 |
| 251 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler); | 266 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler); |
| 252 }; | 267 }; |
| 253 | 268 |
| 254 } // namespace chromeos | 269 } // namespace chromeos |
| 255 | 270 |
| 256 #endif // CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ | 271 #endif // CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ |
| OLD | NEW |