Index: media/audio/audio_manager_base.cc |
=================================================================== |
--- media/audio/audio_manager_base.cc (revision 189667) |
+++ media/audio/audio_manager_base.cc (working copy) |
@@ -63,6 +63,13 @@ |
CHECK(audio_thread_->Start()); |
#endif |
message_loop_ = audio_thread_->message_loop_proxy(); |
+ |
+#if defined(OS_ANDROID) |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ jobject context = base::android::GetApplicationContext(); |
+ j_audio_manager_.Reset( |
+ Java_AudioManagerAndroid_createAudioManagerAndroid(env, context)); |
+#endif |
} |
AudioManagerBase::~AudioManagerBase() { |
@@ -125,8 +132,13 @@ |
break; |
} |
- if (stream) |
+ if (stream) { |
++num_output_streams_; |
+#if defined(OS_ANDROID) |
+ if (num_output_streams_ == 1) |
+ RegisterHeadsetReceiver(); |
+#endif |
+ } |
return stream; |
} |
@@ -166,13 +178,13 @@ |
break; |
} |
- if (stream) |
+ if (stream) { |
++num_input_streams_; |
- |
#if defined(OS_ANDROID) |
- if (num_input_streams_ == 1) |
- SetAudioMode(kAudioModeInCommunication); |
+ if (num_input_streams_ == 1) |
+ SetAudioMode(kAudioModeInCommunication); |
#endif |
+ } |
return stream; |
} |
@@ -256,6 +268,10 @@ |
// streams. |
--num_output_streams_; |
delete stream; |
+#if defined(OS_ANDROID) |
+ if (!num_output_streams_) |
+ UnregisterHeadsetReceiver(); |
+#endif |
} |
void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) { |
@@ -371,12 +387,22 @@ |
#if defined(OS_ANDROID) |
void AudioManagerBase::SetAudioMode(int mode) { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- jobject context = base::android::GetApplicationContext(); |
- DCHECK(context); |
+ Java_AudioManagerAndroid_setMode( |
+ base::android::AttachCurrentThread(), |
+ j_audio_manager_.obj(), mode); |
+} |
- Java_AudioManagerAndroid_setMode(env, context, mode); |
+void AudioManagerBase::RegisterHeadsetReceiver() { |
+ Java_AudioManagerAndroid_registerHeadsetReceiver( |
+ base::android::AttachCurrentThread(), |
+ j_audio_manager_.obj()); |
} |
-#endif |
+void AudioManagerBase::UnregisterHeadsetReceiver() { |
+ Java_AudioManagerAndroid_unregisterHeadsetReceiver( |
+ base::android::AttachCurrentThread(), |
+ j_audio_manager_.obj()); |
+} |
+#endif // defined(OS_ANDROID) |
+ |
} // namespace media |