Index: media/audio/android/audio_manager_android.cc |
diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc |
index 502a8cbf8dc84955a99546cfabc3858b164e0e4e..234a0616bee43d58ee8c4ec59811304a323093df 100644 |
--- a/media/audio/android/audio_manager_android.cc |
+++ b/media/audio/android/audio_manager_android.cc |
@@ -11,6 +11,7 @@ |
#include "base/android/scoped_java_ref.h" |
#include "base/bind.h" |
#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
#include "base/message_loop/message_loop.h" |
#include "base/strings/string_number_conversions.h" |
#include "jni/AudioManagerAndroid_jni.h" |
@@ -46,39 +47,24 @@ const int kDefaultOutputBufferSize = 2048; |
} // namespace |
-ScopedAudioManagerPtr CreateAudioManager( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, |
+std::unique_ptr<AudioManager> CreateAudioManager( |
+ std::unique_ptr<AudioThread> audio_thread, |
AudioLogFactory* audio_log_factory) { |
- return ScopedAudioManagerPtr(new AudioManagerAndroid( |
- std::move(task_runner), std::move(worker_task_runner), |
- audio_log_factory)); |
+ return base::MakeUnique<AudioManagerAndroid>(std::move(audio_thread), |
+ audio_log_factory); |
} |
AudioManagerAndroid::AudioManagerAndroid( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, |
+ std::unique_ptr<AudioThread> audio_thread, |
AudioLogFactory* audio_log_factory) |
- : AudioManagerBase(std::move(task_runner), |
- std::move(worker_task_runner), |
- audio_log_factory), |
+ : AudioManagerBase(std::move(audio_thread), audio_log_factory), |
communication_mode_is_on_(false), |
output_volume_override_set_(false), |
output_volume_override_(0) { |
SetMaxOutputStreamsAllowed(kMaxOutputStreams); |
} |
-AudioManagerAndroid::~AudioManagerAndroid() { |
- DCHECK(GetTaskRunner()->BelongsToCurrentThread()); |
- Shutdown(); |
- |
- if (j_audio_manager_.is_null()) |
- return; |
- DVLOG(2) << "Destroying Java part of the audio manager"; |
- Java_AudioManagerAndroid_close(base::android::AttachCurrentThread(), |
- j_audio_manager_); |
- j_audio_manager_.Reset(); |
-} |
+AudioManagerAndroid::~AudioManagerAndroid() = default; |
void AudioManagerAndroid::InitializeIfNeeded() { |
GetTaskRunner()->PostTask( |
@@ -87,6 +73,19 @@ void AudioManagerAndroid::InitializeIfNeeded() { |
base::Unretained(this))); |
} |
+void AudioManagerAndroid::ShutdownOnAudioThread() { |
+ AudioManagerBase::ShutdownOnAudioThread(); |
+ |
+ // Destory java android manager here because it can only be accessed on the |
+ // audio thread. |
+ if (!j_audio_manager_.is_null()) { |
+ DVLOG(2) << "Destroying Java part of the audio manager"; |
+ Java_AudioManagerAndroid_close(base::android::AttachCurrentThread(), |
+ j_audio_manager_); |
+ j_audio_manager_.Reset(); |
+ } |
+} |
+ |
bool AudioManagerAndroid::HasAudioOutputDevices() { |
return true; |
} |