Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Side by Side Diff: chromeos/audio/cras_audio_handler.h

Issue 596603002: Supports multiple active input/output audio nodes in CrasAudioHandler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix another api name change in shell_audio_controller_chromeos_unittest.cc. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 80
81 // Adds an audio observer. 81 // Adds an audio observer.
82 virtual void AddAudioObserver(AudioObserver* observer); 82 virtual void AddAudioObserver(AudioObserver* observer);
83 83
84 // Removes an audio observer. 84 // Removes an audio observer.
85 virtual void RemoveAudioObserver(AudioObserver* observer); 85 virtual void RemoveAudioObserver(AudioObserver* observer);
86 86
87 // Returns true if keyboard mic exists. 87 // Returns true if keyboard mic exists.
88 virtual bool HasKeyboardMic(); 88 virtual bool HasKeyboardMic();
89 89
90 // Returns true if audio output is muted. 90 // Returns true if audio output is muted for the system.
91 virtual bool IsOutputMuted(); 91 virtual bool IsOutputMuted();
92 92
93 // Returns true if audio output is muted for a device. 93 // Returns true if audio output is muted for a device.
94 virtual bool IsOutputMutedForDevice(uint64 device_id); 94 virtual bool IsOutputMutedForDevice(uint64 device_id);
95 95
96 // Returns true if audio input is muted. 96 // Returns true if audio input is muted.
97 virtual bool IsInputMuted(); 97 virtual bool IsInputMuted();
98 98
99 // Returns true if audio input is muted for a device. 99 // Returns true if audio input is muted for a device.
100 virtual bool IsInputMutedForDevice(uint64 device_id); 100 virtual bool IsInputMutedForDevice(uint64 device_id);
(...skipping 11 matching lines...) Expand all
112 // Gets volume level in 0-100% range (0 being pure silence) for a device. 112 // Gets volume level in 0-100% range (0 being pure silence) for a device.
113 virtual int GetOutputVolumePercentForDevice(uint64 device_id); 113 virtual int GetOutputVolumePercentForDevice(uint64 device_id);
114 114
115 // Gets gain level in 0-100% range (0 being pure silence) for the current 115 // Gets gain level in 0-100% range (0 being pure silence) for the current
116 // active node. 116 // active node.
117 virtual int GetInputGainPercent(); 117 virtual int GetInputGainPercent();
118 118
119 // Gets volume level in 0-100% range (0 being pure silence) for a device. 119 // Gets volume level in 0-100% range (0 being pure silence) for a device.
120 virtual int GetInputGainPercentForDevice(uint64 device_id); 120 virtual int GetInputGainPercentForDevice(uint64 device_id);
121 121
122 // Returns node_id of the active output node. 122 // Returns node_id of the primary active output node.
123 virtual uint64 GetActiveOutputNode() const; 123 virtual uint64 GetPrimaryActiveOutputNode() const;
124 124
125 // Returns the node_id of the active input node. 125 // Returns the node_id of the primary active input node.
126 virtual uint64 GetActiveInputNode() const; 126 virtual uint64 GetPrimaryActiveInputNode() const;
127 127
128 // Gets the audio devices back in |device_list|. 128 // Gets the audio devices back in |device_list|.
129 virtual void GetAudioDevices(AudioDeviceList* device_list) const; 129 virtual void GetAudioDevices(AudioDeviceList* device_list) const;
130 130
131 virtual bool GetActiveOutputDevice(AudioDevice* device) const; 131 virtual bool GetPrimaryActiveOutputDevice(AudioDevice* device) const;
132 132
133 // Whether there is alternative input/output audio device. 133 // Whether there is alternative input/output audio device.
134 virtual bool has_alternative_input() const; 134 virtual bool has_alternative_input() const;
135 virtual bool has_alternative_output() const; 135 virtual bool has_alternative_output() const;
136 136
137 // Sets volume level to |volume_percent|, whose range is from 0-100%. 137 // Sets all active output devices' volume level to |volume_percent|, whose
138 // range is from 0-100%.
138 virtual void SetOutputVolumePercent(int volume_percent); 139 virtual void SetOutputVolumePercent(int volume_percent);
139 140
140 // Sets gain level to |gain_percent|, whose range is from 0-100%. 141 // Sets all active input devices' gain level to |gain_percent|, whose range is
142 // from 0-100%.
141 virtual void SetInputGainPercent(int gain_percent); 143 virtual void SetInputGainPercent(int gain_percent);
142 144
143 // Adjusts volume up (positive percentage) or down (negative percentage). 145 // Adjusts all active output devices' volume up (positive percentage) or down
146 // (negative percentage).
144 virtual void AdjustOutputVolumeByPercent(int adjust_by_percent); 147 virtual void AdjustOutputVolumeByPercent(int adjust_by_percent);
145 148
146 // Adjusts output volume to a minimum audible level if it is too low. 149 // Adjusts all active output devices' volume to a minimum audible level if it
150 // is too low.
147 virtual void AdjustOutputVolumeToAudibleLevel(); 151 virtual void AdjustOutputVolumeToAudibleLevel();
148 152
149 // Mutes or unmutes audio output device. 153 // Mutes or unmutes audio output device.
150 virtual void SetOutputMute(bool mute_on); 154 virtual void SetOutputMute(bool mute_on);
151 155
152 // Mutes or unmutes audio input device. 156 // Mutes or unmutes audio input device.
153 virtual void SetInputMute(bool mute_on); 157 virtual void SetInputMute(bool mute_on);
154 158
155 // Switches active audio device to |device|. 159 // Switches active audio device to |device|.
156 virtual void SwitchToDevice(const AudioDevice& device); 160 virtual void SwitchToDevice(const AudioDevice& device);
157 161
158 // Sets volume/gain level for a device. 162 // Sets volume/gain level for a device.
159 virtual void SetVolumeGainPercentForDevice(uint64 device_id, int value); 163 virtual void SetVolumeGainPercentForDevice(uint64 device_id, int value);
160 164
161 // Sets the mute for device. 165 // Sets the mute for device.
162 virtual void SetMuteForDevice(uint64 device_id, bool mute_on); 166 virtual void SetMuteForDevice(uint64 device_id, bool mute_on);
163 167
164 // Activates or deactivates keyboard mic if there's one. 168 // Activates or deactivates keyboard mic if there's one.
165 virtual void SetKeyboardMicActive(bool active); 169 virtual void SetKeyboardMicActive(bool active);
166 170
171 // Adds an active node.
172 // If there is no active node, |node_id| will be switched to become the
173 // primary active node. Otherwise, it will be added as an additional active
174 // node.
175 virtual void AddActiveNode(uint64 node_id);
176
177 // Removes an active audio node.
178 // If |node_id| is the only active input/output node, or is an additional
179 // active input/output node, it will be removed and becomes inactive.
180 // Note: It is not proper call this api to remove the primary active node
181 // while there are additional active nodes.
182 virtual void RemoveActiveNode(uint64 node_id);
183
184 // Removes all active audio nodes, including the primary active ones.
185 virtual void RemoveAllActiveNodes();
186
167 // Enables error logging. 187 // Enables error logging.
168 virtual void LogErrors(); 188 virtual void LogErrors();
169 189
170 protected: 190 protected:
171 explicit CrasAudioHandler( 191 explicit CrasAudioHandler(
172 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler); 192 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler);
173 virtual ~CrasAudioHandler(); 193 virtual ~CrasAudioHandler();
174 194
175 private: 195 private:
196 friend class CrasAudioHandlerTest;
197
176 // CrasAudioClient::Observer overrides. 198 // CrasAudioClient::Observer overrides.
177 virtual void AudioClientRestarted() OVERRIDE; 199 virtual void AudioClientRestarted() OVERRIDE;
178 virtual void NodesChanged() OVERRIDE; 200 virtual void NodesChanged() OVERRIDE;
179 virtual void ActiveOutputNodeChanged(uint64 node_id) OVERRIDE; 201 virtual void ActiveOutputNodeChanged(uint64 node_id) OVERRIDE;
180 virtual void ActiveInputNodeChanged(uint64 node_id) OVERRIDE; 202 virtual void ActiveInputNodeChanged(uint64 node_id) OVERRIDE;
181 203
182 // AudioPrefObserver overrides. 204 // AudioPrefObserver overrides.
183 virtual void OnAudioPolicyPrefChanged() OVERRIDE; 205 virtual void OnAudioPolicyPrefChanged() OVERRIDE;
184 206
185 // SessionManagerClient::Observer overrides. 207 // SessionManagerClient::Observer overrides.
186 virtual void EmitLoginPromptVisibleCalled() OVERRIDE; 208 virtual void EmitLoginPromptVisibleCalled() OVERRIDE;
187 209
188 // Sets the active audio output/input node to the node with |node_id|. 210 // Sets the active audio output/input node to the node with |node_id|.
189 void SetActiveOutputNode(uint64 node_id); 211 void SetActiveOutputNode(uint64 node_id);
190 void SetActiveInputNode(uint64 node_id); 212 void SetActiveInputNode(uint64 node_id);
191 213
192 // Sets up the audio device state based on audio policy and audio settings 214 // Sets up the audio device state based on audio policy and audio settings
193 // saved in prefs. 215 // saved in prefs.
194 void SetupAudioInputState(); 216 void SetupAudioInputState();
195 void SetupAudioOutputState(); 217 void SetupAudioOutputState();
196 218
219 // Sets up the additional active audio node's state.
220 void SetupAdditionalActiveAudioNodeState(uint64 node_id);
221
197 const AudioDevice* GetDeviceFromId(uint64 device_id) const; 222 const AudioDevice* GetDeviceFromId(uint64 device_id) const;
198 const AudioDevice* GetKeyboardMic() const; 223 const AudioDevice* GetKeyboardMic() const;
199 224
200 // Initializes audio state, which should only be called when CrasAudioHandler 225 // Initializes audio state, which should only be called when CrasAudioHandler
201 // is created or cras audio client is restarted. 226 // is created or cras audio client is restarted.
202 void InitializeAudioState(); 227 void InitializeAudioState();
203 228
204 // Applies the audio muting policies whenever the user logs in or policy 229 // Applies the audio muting policies whenever the user logs in or policy
205 // change notification is received. 230 // change notification is received.
206 void ApplyAudioPolicy(); 231 void ApplyAudioPolicy();
207 232
208 // Sets output volume of |node_id| to |volume|. 233 // Sets output volume of |node_id| to |volume|.
209 void SetOutputNodeVolume(uint64 node_id, int volume); 234 void SetOutputNodeVolume(uint64 node_id, int volume);
210 235
236 void SetOutputNodeVolumePercent(uint64 node_id, int volume_percent);
237
211 // Sets output mute state to |mute_on| internally, returns true if output mute 238 // Sets output mute state to |mute_on| internally, returns true if output mute
212 // is set. 239 // is set.
213 bool SetOutputMuteInternal(bool mute_on); 240 bool SetOutputMuteInternal(bool mute_on);
214 241
215 // Sets input gain of |node_id| to |gain|. 242 // Sets input gain of |node_id| to |gain|.
216 void SetInputNodeGain(uint64 node_id, int gain); 243 void SetInputNodeGain(uint64 node_id, int gain);
217 244
245 void SetInputNodeGainPercent(uint64 node_id, int gain_percent);
246
218 // Sets input mute state to |mute_on| internally, returns true if input mute 247 // Sets input mute state to |mute_on| internally, returns true if input mute
219 // is set. 248 // is set.
220 bool SetInputMuteInternal(bool mute_on); 249 bool SetInputMuteInternal(bool mute_on);
221 250
222 // Calling dbus to get nodes data. 251 // Calling dbus to get nodes data. |nodes_changed| is true if we are caling
hychao 2014/09/24 04:25:47 nit: s/caling/calling/
jennyz 2014/09/24 18:01:20 Done.
223 void GetNodes(); 252 // GetNodes due to receiving NodesChanged signal.
253 void GetNodes(bool nodes_changed);
224 254
225 // Updates the current audio nodes list and switches the active device 255 // Updates the current audio nodes list and switches the active device
226 // if needed. 256 // if needed.
227 void UpdateDevicesAndSwitchActive(const AudioNodeList& nodes); 257 void UpdateDevicesAndSwitchActive(const AudioNodeList& nodes);
228 258
229 // Returns true if *|current_active_node_id| device is changed to 259 // Returns true if *|current_active_node_id| device is changed to
230 // |new_active_device|. 260 // |new_active_device|.
231 bool ChangeActiveDevice(const AudioDevice& new_active_device, 261 bool ChangeActiveDevice(const AudioDevice& new_active_device,
232 uint64* current_active_node_id); 262 uint64* current_active_node_id);
233 263
234 // Returns true if the audio nodes change is caused by some non-active 264 // Returns true if the audio nodes change is caused by some non-active
235 // audio nodes unplugged. 265 // audio nodes unplugged.
236 bool NonActiveDeviceUnplugged(size_t old_devices_size, 266 bool NonActiveDeviceUnplugged(size_t old_devices_size,
237 size_t new_device_size, 267 size_t new_device_size,
238 uint64 current_active_node); 268 uint64 current_active_node);
239 269
240 // Returns true if there is any device change for for input or output, 270 // Returns true if there is any device change for for input or output,
241 // specified by |is_input|. 271 // specified by |is_input|.
242 bool HasDeviceChange(const AudioNodeList& new_nodes, bool is_input); 272 bool HasDeviceChange(const AudioNodeList& new_nodes, bool is_input);
243 273
244 // Handles dbus callback for GetNodes. 274 // Handles dbus callback for GetNodes.
245 void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success); 275 void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success);
246 276
277 // Handles GetNodes Callback NOT triggered by NodesChanged signal.
278 void HandleGetNodesWithoutNodesChange(
279 const chromeos::AudioNodeList& node_list,
280 bool success);
281
247 // Handles the dbus error callback. 282 // Handles the dbus error callback.
248 void HandleGetNodesError(const std::string& error_name, 283 void HandleGetNodesError(const std::string& error_name,
249 const std::string& error_msg); 284 const std::string& error_msg);
250 285
251 // Returns true if |device| is not found in audio_devices_. 286 // Adds |node_id| into additional active nodes.
252 bool FoundNewDevice(const AudioDevice& device); 287 void AddAdditionalActiveNode(uint64 node_id);
253 288
254 // Returns a sanitized AudioDevice from |node|. 289 // Removes |node_id| from additional active nodes.
255 AudioDevice GetSanitizedAudioDevice(const AudioNode& node); 290 void RemoveActiveNodeInternal(uint64 node_id);
291
292 // Returns true if |device| is not found in audio_devices_, or it is found
293 // but changed its |active| property.
294 bool FoundNewOrChangedDevice(const AudioDevice& device);
295
296 // Returns true if there are additional active output audio nodes.
297 bool HasAdditionalActiveOutputNode() const;
298
299 // Returns true if there are additional active input audio nodes.
300 bool HasAdditionalActiveInputNode() const;
256 301
257 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler_; 302 scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler_;
258 ObserverList<AudioObserver> observers_; 303 ObserverList<AudioObserver> observers_;
259 304
260 // Audio data and state. 305 // Audio data and state.
261 AudioDeviceMap audio_devices_; 306 AudioDeviceMap audio_devices_;
262 307
263 AudioDevicePriorityQueue input_devices_pq_; 308 AudioDevicePriorityQueue input_devices_pq_;
264 AudioDevicePriorityQueue output_devices_pq_; 309 AudioDevicePriorityQueue output_devices_pq_;
265 310
(...skipping 13 matching lines...) Expand all
279 bool log_errors_; 324 bool log_errors_;
280 325
281 base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_; 326 base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_;
282 327
283 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler); 328 DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler);
284 }; 329 };
285 330
286 } // namespace chromeos 331 } // namespace chromeos
287 332
288 #endif // CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_ 333 #endif // CHROMEOS_AUDIO_CRAS_AUDIO_HANDLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698