Index: media/audio/win/audio_manager_win.cc |
=================================================================== |
--- media/audio/win/audio_manager_win.cc (revision 57255) |
+++ media/audio/win/audio_manager_win.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include <windows.h> |
#include <mmsystem.h> |
+#include "base/at_exit.h" |
#include "base/basictypes.h" |
#include "media/audio/fake_audio_input_stream.h" |
#include "media/audio/fake_audio_output_stream.h" |
@@ -41,6 +42,8 @@ |
// play. |
const int kNumInputBuffers = 3; |
+AudioManagerWin* g_audio_manager = NULL; |
+ |
} // namespace. |
bool AudioManagerWin::HasAudioOutputDevices() { |
@@ -122,7 +125,15 @@ |
AudioManagerWin::~AudioManagerWin() { |
} |
-// static |
-AudioManager* AudioManager::CreateAudioManager() { |
- return new AudioManagerWin(); |
+void DestroyAudioManagerWin(void* param) { |
+ delete g_audio_manager; |
+ g_audio_manager = NULL; |
} |
+ |
+AudioManager* AudioManager::GetAudioManager() { |
+ if (!g_audio_manager) { |
+ g_audio_manager = new AudioManagerWin(); |
+ base::AtExitManager::RegisterCallback(&DestroyAudioManagerWin, NULL); |
+ } |
+ return g_audio_manager; |
+} |