Index: media/audio/mac/audio_manager_mac.cc |
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc |
index a0562837d43ec7fbb82a408e7e5826b5e675505b..ca9485503e44d61a47dd8f535689d9460251d412 100644 |
--- a/media/audio/mac/audio_manager_mac.cc |
+++ b/media/audio/mac/audio_manager_mac.cc |
@@ -6,10 +6,12 @@ |
#include <string> |
+#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/mac/mac_logging.h" |
#include "base/mac/scoped_cftyperef.h" |
#include "base/sys_string_conversions.h" |
+#include "media/audio/mac/audio_device_listener_mac.h" |
#include "media/audio/mac/audio_input_mac.h" |
#include "media/audio/mac/audio_low_latency_input_mac.h" |
#include "media/audio/mac/audio_low_latency_output_mac.h" |
@@ -17,6 +19,7 @@ |
#include "media/audio/mac/audio_output_mac.h" |
#include "media/audio/mac/audio_synchronized_mac.h" |
#include "media/audio/mac/audio_unified_mac.h" |
+#include "media/base/bind_to_loop.h" |
#include "media/base/limits.h" |
#include "media/base/media_switches.h" |
@@ -235,6 +238,10 @@ AudioManagerMac::AudioManagerMac() { |
} |
AudioManagerMac::~AudioManagerMac() { |
+ // It's safe to post a task here since Shutdown() will wait for all tasks to |
+ // complete before returning. |
+ GetMessageLoop()->PostTask(FROM_HERE, base::Bind( |
+ &AudioManagerMac::DestructOnAudioThread, base::Unretained(this))); |
Shutdown(); |
} |
@@ -305,6 +312,17 @@ AudioInputStream* AudioManagerMac::MakeLowLatencyInputStream( |
return stream; |
} |
+void AudioManagerMac::InitializeOnAudioThread() { |
+ output_device_listener_.reset(new AudioDeviceListenerMac(BindToLoop( |
+ GetMessageLoop(), |
+ base::Bind(&AudioManagerMac::NotifyAllOutputDeviceChangeListeners, |
+ base::Unretained(this))))); |
+} |
+ |
+void AudioManagerMac::DestructOnAudioThread() { |
+ output_device_listener_.reset(); |
+} |
+ |
AudioManager* CreateAudioManager() { |
return new AudioManagerMac(); |
} |