Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: media/audio/android/audio_manager_android.cc

Issue 14265014: Refactor android specific code in AudioManagerBase class. (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/android/audio_manager_android.cc
===================================================================
--- media/audio/android/audio_manager_android.cc (revision 194203)
+++ media/audio/android/audio_manager_android.cc (working copy)
@@ -5,6 +5,7 @@
#include "media/audio/android/audio_manager_android.h"
#include "base/logging.h"
+#include "jni/AudioManagerAndroid_jni.h"
#include "media/audio/android/opensles_input.h"
#include "media/audio/android/opensles_output.h"
#include "media/audio/audio_manager.h"
@@ -18,12 +19,20 @@
// Maximum number of output streams that can be open simultaneously.
static const int kMaxOutputStreams = 10;
+static const int kAudioModeNormal = 0x00000000;
+static const int kAudioModeInCommunication = 0x00000003;
+
AudioManager* CreateAudioManager() {
return new AudioManagerAndroid();
}
AudioManagerAndroid::AudioManagerAndroid() {
SetMaxOutputStreamsAllowed(kMaxOutputStreams);
+
+ j_audio_manager_.Reset(
+ Java_AudioManagerAndroid_createAudioManagerAndroid(
+ base::android::AttachCurrentThread(),
+ base::android::GetApplicationContext()));
}
AudioManagerAndroid::~AudioManagerAndroid() {
@@ -57,6 +66,36 @@
kDefaultSampleRate, 16, kDefaultBufferSize);
}
+AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
+ const AudioParameters& params) {
+ AudioOutputStream* stream =
+ AudioManagerBase::MakeAudioOutputStream(params);
+ if (GetNumOutputStreams() == 1)
+ RegisterHeadsetReceiver();
+ return stream;
+}
+
+AudioInputStream* AudioManagerAndroid::MakeAudioInputStream(
+ const AudioParameters& params, const std::string& device_id) {
+ AudioInputStream* stream =
+ AudioManagerBase::MakeAudioInputStream(params, device_id);
+ if (GetNumInputStreams() == 1)
+ SetAudioMode(kAudioModeInCommunication);
+ return stream;
+}
+
+void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) {
+ AudioManagerBase::ReleaseOutputStream(stream);
+ if (!GetNumOutputStreams())
+ UnregisterHeadsetReceiver();
+}
+
+void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) {
+ AudioManagerBase::ReleaseInputStream(stream);
+ if (!GetNumInputStreams())
+ SetAudioMode(kAudioModeNormal);
+}
+
AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream(
const AudioParameters& params) {
DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
@@ -116,4 +155,27 @@
sample_rate, bits_per_sample, buffer_size);
}
+// static
+bool AudioManagerAndroid::RegisterAudioManager(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+void AudioManagerAndroid::SetAudioMode(int mode) {
+ Java_AudioManagerAndroid_setMode(
+ base::android::AttachCurrentThread(),
+ j_audio_manager_.obj(), mode);
+}
+
+void AudioManagerAndroid::RegisterHeadsetReceiver() {
+ Java_AudioManagerAndroid_registerHeadsetReceiver(
+ base::android::AttachCurrentThread(),
+ j_audio_manager_.obj());
+}
+
+void AudioManagerAndroid::UnregisterHeadsetReceiver() {
+ Java_AudioManagerAndroid_unregisterHeadsetReceiver(
+ base::android::AttachCurrentThread(),
+ j_audio_manager_.obj());
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698