diff options
Diffstat (limited to 'media/audio/mac/audio_manager_mac.cc')
-rw-r--r-- | media/audio/mac/audio_manager_mac.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index 528fd6e..312ecbb 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc @@ -4,6 +4,7 @@ #include <CoreAudio/AudioHardware.h> +#include "base/at_exit.h" #include "media/audio/fake_audio_input_stream.h" #include "media/audio/fake_audio_output_stream.h" #include "media/audio/mac/audio_manager_mac.h" @@ -74,7 +75,22 @@ void AudioManagerMac::ReleaseOutputStream( delete stream; } -// static -AudioManager* AudioManager::CreateAudioManager() { - return new AudioManagerMac(); +namespace { + +AudioManagerMac* g_audio_manager = NULL; + +} // namespace. + +void DestroyAudioManagerMac(void* param) { + delete g_audio_manager; + g_audio_manager = NULL; +} + +// By convention, the AudioManager is not thread safe. +AudioManager* AudioManager::GetAudioManager() { + if (!g_audio_manager) { + g_audio_manager = new AudioManagerMac(); + base::AtExitManager::RegisterCallback(&DestroyAudioManagerMac, NULL); + } + return g_audio_manager; } |