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

Side by Side Diff: media/audio/mac/audio_manager_mac.cc

Issue 11344005: Handle audio device changes on Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 8 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | media/media.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 #include <CoreAudio/AudioHardware.h> 5 #include <CoreAudio/AudioHardware.h>
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h"
9 #include "base/command_line.h" 10 #include "base/command_line.h"
10 #include "base/mac/mac_logging.h" 11 #include "base/mac/mac_logging.h"
11 #include "base/mac/scoped_cftyperef.h" 12 #include "base/mac/scoped_cftyperef.h"
12 #include "base/sys_string_conversions.h" 13 #include "base/sys_string_conversions.h"
14 #include "media/audio/mac/audio_device_listener_mac.h"
13 #include "media/audio/mac/audio_input_mac.h" 15 #include "media/audio/mac/audio_input_mac.h"
14 #include "media/audio/mac/audio_low_latency_input_mac.h" 16 #include "media/audio/mac/audio_low_latency_input_mac.h"
15 #include "media/audio/mac/audio_low_latency_output_mac.h" 17 #include "media/audio/mac/audio_low_latency_output_mac.h"
16 #include "media/audio/mac/audio_manager_mac.h" 18 #include "media/audio/mac/audio_manager_mac.h"
17 #include "media/audio/mac/audio_output_mac.h" 19 #include "media/audio/mac/audio_output_mac.h"
18 #include "media/audio/mac/audio_synchronized_mac.h" 20 #include "media/audio/mac/audio_synchronized_mac.h"
19 #include "media/audio/mac/audio_unified_mac.h" 21 #include "media/audio/mac/audio_unified_mac.h"
22 #include "media/base/bind_to_loop.h"
20 #include "media/base/limits.h" 23 #include "media/base/limits.h"
21 #include "media/base/media_switches.h" 24 #include "media/base/media_switches.h"
22 25
23 namespace media { 26 namespace media {
24 27
25 // Maximum number of output streams that can be open simultaneously. 28 // Maximum number of output streams that can be open simultaneously.
26 static const int kMaxOutputStreams = 50; 29 static const int kMaxOutputStreams = 50;
27 30
28 static bool HasAudioHardware(AudioObjectPropertySelector selector) { 31 static bool HasAudioHardware(AudioObjectPropertySelector selector) {
29 AudioDeviceID output_device_id = kAudioObjectUnknown; 32 AudioDeviceID output_device_id = kAudioObjectUnknown;
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 } 231 }
229 232
230 return audio_device_id; 233 return audio_device_id;
231 } 234 }
232 235
233 AudioManagerMac::AudioManagerMac() { 236 AudioManagerMac::AudioManagerMac() {
234 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 237 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
235 } 238 }
236 239
237 AudioManagerMac::~AudioManagerMac() { 240 AudioManagerMac::~AudioManagerMac() {
241 // It's safe to post a task here since Shutdown() will wait for all tasks to
242 // complete before returning.
243 GetMessageLoop()->PostTask(FROM_HERE, base::Bind(
244 &AudioManagerMac::DestructOnAudioThread, base::Unretained(this)));
238 Shutdown(); 245 Shutdown();
239 } 246 }
240 247
241 bool AudioManagerMac::HasAudioOutputDevices() { 248 bool AudioManagerMac::HasAudioOutputDevices() {
242 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice); 249 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice);
243 } 250 }
244 251
245 bool AudioManagerMac::HasAudioInputDevices() { 252 bool AudioManagerMac::HasAudioInputDevices() {
246 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice); 253 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice);
247 } 254 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 // Gets the AudioDeviceID that refers to the AudioOutputDevice with the device 305 // Gets the AudioDeviceID that refers to the AudioOutputDevice with the device
299 // unique id. This AudioDeviceID is used to set the device for Audio Unit. 306 // unique id. This AudioDeviceID is used to set the device for Audio Unit.
300 AudioDeviceID audio_device_id = GetAudioDeviceIdByUId(true, device_id); 307 AudioDeviceID audio_device_id = GetAudioDeviceIdByUId(true, device_id);
301 AudioInputStream* stream = NULL; 308 AudioInputStream* stream = NULL;
302 if (audio_device_id != kAudioObjectUnknown) 309 if (audio_device_id != kAudioObjectUnknown)
303 stream = new AUAudioInputStream(this, params, audio_device_id); 310 stream = new AUAudioInputStream(this, params, audio_device_id);
304 311
305 return stream; 312 return stream;
306 } 313 }
307 314
315 void AudioManagerMac::InitializeOnAudioThread() {
316 output_device_listener_.reset(new AudioDeviceListenerMac(BindToLoop(
317 GetMessageLoop(),
318 base::Bind(&AudioManagerMac::NotifyAllOutputDeviceChangeListeners,
319 base::Unretained(this)))));
320 }
321
322 void AudioManagerMac::DestructOnAudioThread() {
323 output_device_listener_.reset();
324 }
325
308 AudioManager* CreateAudioManager() { 326 AudioManager* CreateAudioManager() {
309 return new AudioManagerMac(); 327 return new AudioManagerMac();
310 } 328 }
311 329
312 } // namespace media 330 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | media/media.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698