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

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

Issue 14273018: Use the browser UI thread for audio on OSX. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/mac/audio_device_listener_mac.cc ('k') | media/audio/mock_audio_manager.h » ('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 "media/audio/mac/audio_manager_mac.h" 5 #include "media/audio/mac/audio_manager_mac.h"
6 6
7 #include <CoreAudio/AudioHardware.h> 7 #include <CoreAudio/AudioHardware.h>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 return audio_device_id; 229 return audio_device_id;
230 } 230 }
231 231
232 AudioManagerMac::AudioManagerMac() 232 AudioManagerMac::AudioManagerMac()
233 : current_sample_rate_(0) { 233 : current_sample_rate_(0) {
234 current_output_device_ = kAudioDeviceUnknown; 234 current_output_device_ = kAudioDeviceUnknown;
235 235
236 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 236 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
237 237
238 // Task must be posted last to avoid races from handing out "this" to the 238 // Task must be posted last to avoid races from handing out "this" to the
239 // audio thread. 239 // audio thread. Always PostTask even if we're on the right thread since
240 // AudioManager creation is on the startup path and this may be slow.
240 GetMessageLoop()->PostTask(FROM_HERE, base::Bind( 241 GetMessageLoop()->PostTask(FROM_HERE, base::Bind(
241 &AudioManagerMac::CreateDeviceListener, base::Unretained(this))); 242 &AudioManagerMac::CreateDeviceListener, base::Unretained(this)));
242 } 243 }
243 244
244 AudioManagerMac::~AudioManagerMac() { 245 AudioManagerMac::~AudioManagerMac() {
245 // It's safe to post a task here since Shutdown() will wait for all tasks to 246 if (GetMessageLoop()->BelongsToCurrentThread()) {
246 // complete before returning. 247 DestroyDeviceListener();
247 GetMessageLoop()->PostTask(FROM_HERE, base::Bind( 248 } else {
248 &AudioManagerMac::DestroyDeviceListener, base::Unretained(this))); 249 // It's safe to post a task here since Shutdown() will wait for all tasks to
250 // complete before returning.
251 GetMessageLoop()->PostTask(FROM_HERE, base::Bind(
252 &AudioManagerMac::DestroyDeviceListener, base::Unretained(this)));
253 }
249 254
250 Shutdown(); 255 Shutdown();
251 } 256 }
252 257
253 bool AudioManagerMac::HasAudioOutputDevices() { 258 bool AudioManagerMac::HasAudioOutputDevices() {
254 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice); 259 return HasAudioHardware(kAudioHardwarePropertyDefaultOutputDevice);
255 } 260 }
256 261
257 bool AudioManagerMac::HasAudioInputDevices() { 262 bool AudioManagerMac::HasAudioInputDevices() {
258 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice); 263 return HasAudioHardware(kAudioHardwarePropertyDefaultInputDevice);
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 548
544 void AudioManagerMac::CreateDeviceListener() { 549 void AudioManagerMac::CreateDeviceListener() {
545 DCHECK(GetMessageLoop()->BelongsToCurrentThread()); 550 DCHECK(GetMessageLoop()->BelongsToCurrentThread());
546 551
547 // Get a baseline for the sample-rate and current device, 552 // Get a baseline for the sample-rate and current device,
548 // so we can intelligently handle device notifications only when necessary. 553 // so we can intelligently handle device notifications only when necessary.
549 current_sample_rate_ = HardwareSampleRate(); 554 current_sample_rate_ = HardwareSampleRate();
550 if (!GetDefaultOutputDevice(&current_output_device_)) 555 if (!GetDefaultOutputDevice(&current_output_device_))
551 current_output_device_ = kAudioDeviceUnknown; 556 current_output_device_ = kAudioDeviceUnknown;
552 557
553 output_device_listener_.reset(new AudioDeviceListenerMac(BindToLoop( 558 output_device_listener_.reset(new AudioDeviceListenerMac(base::Bind(
554 GetMessageLoop(), base::Bind( 559 &AudioManagerMac::HandleDeviceChanges, base::Unretained(this))));
555 &AudioManagerMac::HandleDeviceChanges,
556 base::Unretained(this)))));
557 } 560 }
558 561
559 void AudioManagerMac::DestroyDeviceListener() { 562 void AudioManagerMac::DestroyDeviceListener() {
560 DCHECK(GetMessageLoop()->BelongsToCurrentThread()); 563 DCHECK(GetMessageLoop()->BelongsToCurrentThread());
561 output_device_listener_.reset(); 564 output_device_listener_.reset();
562 } 565 }
563 566
564 void AudioManagerMac::HandleDeviceChanges() { 567 void AudioManagerMac::HandleDeviceChanges() {
565 int new_sample_rate = HardwareSampleRate(); 568 int new_sample_rate = HardwareSampleRate();
566 AudioDeviceID new_output_device; 569 AudioDeviceID new_output_device;
567 GetDefaultOutputDevice(&new_output_device); 570 GetDefaultOutputDevice(&new_output_device);
568 571
569 if (current_sample_rate_ == new_sample_rate && 572 if (current_sample_rate_ == new_sample_rate &&
570 current_output_device_ == new_output_device) 573 current_output_device_ == new_output_device)
571 return; 574 return;
572 575
573 current_sample_rate_ = new_sample_rate; 576 current_sample_rate_ = new_sample_rate;
574 current_output_device_ = new_output_device; 577 current_output_device_ = new_output_device;
575 NotifyAllOutputDeviceChangeListeners(); 578 NotifyAllOutputDeviceChangeListeners();
576 } 579 }
577 580
578 AudioManager* CreateAudioManager() { 581 AudioManager* CreateAudioManager() {
579 return new AudioManagerMac(); 582 return new AudioManagerMac();
580 } 583 }
581 584
582 } // namespace media 585 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/mac/audio_device_listener_mac.cc ('k') | media/audio/mock_audio_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698