Commit a0eb47d1 authored by cpu@chromium.org's avatar cpu@chromium.org

Revert 194371

Looks like its breaking blink build. Contact jchaffraix for more info.

> Refactor android specific code in AudioManagerBase class.
> 
> Move android specific code into AudioManagerAndroid class.
> 
> Contributed by leozwang@chromium.org (https://chromiumcodereview.appspot.com/14265014/).
> 
> BUG=231468
> 
> Review URL: https://codereview.chromium.org/14053012

TBR=wjia@chromium.org
Review URL: https://codereview.chromium.org/14302003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194407 0039d316-1c4b-4281-b951-d872f2087c98
parent 5c307f90
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include "media/audio/android/audio_manager_android.h" #include "media/audio/android/audio_manager_android.h"
#include "base/logging.h" #include "base/logging.h"
#include "jni/AudioManagerAndroid_jni.h"
#include "media/audio/android/opensles_input.h" #include "media/audio/android/opensles_input.h"
#include "media/audio/android/opensles_output.h" #include "media/audio/android/opensles_output.h"
#include "media/audio/audio_manager.h" #include "media/audio/audio_manager.h"
...@@ -19,20 +18,12 @@ namespace media { ...@@ -19,20 +18,12 @@ namespace media {
// Maximum number of output streams that can be open simultaneously. // Maximum number of output streams that can be open simultaneously.
static const int kMaxOutputStreams = 10; static const int kMaxOutputStreams = 10;
static const int kAudioModeNormal = 0x00000000;
static const int kAudioModeInCommunication = 0x00000003;
AudioManager* CreateAudioManager() { AudioManager* CreateAudioManager() {
return new AudioManagerAndroid(); return new AudioManagerAndroid();
} }
AudioManagerAndroid::AudioManagerAndroid() { AudioManagerAndroid::AudioManagerAndroid() {
SetMaxOutputStreamsAllowed(kMaxOutputStreams); SetMaxOutputStreamsAllowed(kMaxOutputStreams);
j_audio_manager_.Reset(
Java_AudioManagerAndroid_createAudioManagerAndroid(
base::android::AttachCurrentThread(),
base::android::GetApplicationContext()));
} }
AudioManagerAndroid::~AudioManagerAndroid() { AudioManagerAndroid::~AudioManagerAndroid() {
...@@ -66,36 +57,6 @@ AudioParameters AudioManagerAndroid::GetInputStreamParameters( ...@@ -66,36 +57,6 @@ AudioParameters AudioManagerAndroid::GetInputStreamParameters(
kDefaultSampleRate, 16, kDefaultBufferSize); kDefaultSampleRate, 16, kDefaultBufferSize);
} }
AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
const AudioParameters& params) {
AudioOutputStream* stream =
AudioManagerBase::MakeAudioOutputStream(params);
if (stream && output_stream_count() == 1)
RegisterHeadsetReceiver();
return stream;
}
AudioInputStream* AudioManagerAndroid::MakeAudioInputStream(
const AudioParameters& params, const std::string& device_id) {
AudioInputStream* stream =
AudioManagerBase::MakeAudioInputStream(params, device_id);
if (stream && input_stream_count() == 1)
SetAudioMode(kAudioModeInCommunication);
return stream;
}
void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) {
AudioManagerBase::ReleaseOutputStream(stream);
if (!output_stream_count())
UnregisterHeadsetReceiver();
}
void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) {
AudioManagerBase::ReleaseInputStream(stream);
if (!input_stream_count())
SetAudioMode(kAudioModeNormal);
}
AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream( AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream(
const AudioParameters& params) { const AudioParameters& params) {
DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
...@@ -155,27 +116,4 @@ AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters( ...@@ -155,27 +116,4 @@ AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters(
sample_rate, bits_per_sample, buffer_size); 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 } // namespace media
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#ifndef MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_ #ifndef MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_
#define MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_ #define MEDIA_AUDIO_ANDROID_AUDIO_MANAGER_ANDROID_H_
#include "base/android/jni_android.h"
#include "media/audio/audio_manager_base.h" #include "media/audio/audio_manager_base.h"
namespace media { namespace media {
...@@ -23,13 +22,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase { ...@@ -23,13 +22,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase {
virtual AudioParameters GetInputStreamParameters( virtual AudioParameters GetInputStreamParameters(
const std::string& device_id) OVERRIDE; const std::string& device_id) OVERRIDE;
virtual AudioOutputStream* MakeAudioOutputStream(
const AudioParameters& params) OVERRIDE;
virtual AudioInputStream* MakeAudioInputStream(
const AudioParameters& params, const std::string& device_id) OVERRIDE;
virtual void ReleaseOutputStream(AudioOutputStream* stream) OVERRIDE;
virtual void ReleaseInputStream(AudioInputStream* stream) OVERRIDE;
// Implementation of AudioManagerBase. // Implementation of AudioManagerBase.
virtual AudioOutputStream* MakeLinearOutputStream( virtual AudioOutputStream* MakeLinearOutputStream(
const AudioParameters& params) OVERRIDE; const AudioParameters& params) OVERRIDE;
...@@ -40,8 +32,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase { ...@@ -40,8 +32,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase {
virtual AudioInputStream* MakeLowLatencyInputStream( virtual AudioInputStream* MakeLowLatencyInputStream(
const AudioParameters& params, const std::string& device_id) OVERRIDE; const AudioParameters& params, const std::string& device_id) OVERRIDE;
static bool RegisterAudioManager(JNIEnv* env);
protected: protected:
virtual ~AudioManagerAndroid(); virtual ~AudioManagerAndroid();
...@@ -49,13 +39,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase { ...@@ -49,13 +39,6 @@ class MEDIA_EXPORT AudioManagerAndroid : public AudioManagerBase {
const AudioParameters& input_params) OVERRIDE; const AudioParameters& input_params) OVERRIDE;
private: private:
void SetAudioMode(int mode);
void RegisterHeadsetReceiver();
void UnregisterHeadsetReceiver();
// Java AudioManager instance.
base::android::ScopedJavaGlobalRef<jobject> j_audio_manager_;
DISALLOW_COPY_AND_ASSIGN(AudioManagerAndroid); DISALLOW_COPY_AND_ASSIGN(AudioManagerAndroid);
}; };
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/message_loop_proxy.h" #include "base/message_loop_proxy.h"
#include "base/threading/thread.h" #include "base/threading/thread.h"
#if defined(OS_ANDROID)
#include "jni/AudioManagerAndroid_jni.h"
#endif
#include "media/audio/audio_output_dispatcher_impl.h" #include "media/audio/audio_output_dispatcher_impl.h"
#include "media/audio/audio_output_proxy.h" #include "media/audio/audio_output_proxy.h"
#include "media/audio/audio_output_resampler.h" #include "media/audio/audio_output_resampler.h"
...@@ -31,6 +34,11 @@ static const int kDefaultMaxInputStreams = 16; ...@@ -31,6 +34,11 @@ static const int kDefaultMaxInputStreams = 16;
static const int kMaxInputChannels = 2; static const int kMaxInputChannels = 2;
#if defined(OS_ANDROID)
static const int kAudioModeNormal = 0x00000000;
static const int kAudioModeInCommunication = 0x00000003;
#endif
const char AudioManagerBase::kDefaultDeviceName[] = "Default"; const char AudioManagerBase::kDefaultDeviceName[] = "Default";
const char AudioManagerBase::kDefaultDeviceId[] = "default"; const char AudioManagerBase::kDefaultDeviceId[] = "default";
...@@ -55,6 +63,13 @@ AudioManagerBase::AudioManagerBase() ...@@ -55,6 +63,13 @@ AudioManagerBase::AudioManagerBase()
CHECK(audio_thread_->Start()); CHECK(audio_thread_->Start());
#endif #endif
message_loop_ = audio_thread_->message_loop_proxy(); 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() { AudioManagerBase::~AudioManagerBase() {
...@@ -119,6 +134,10 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( ...@@ -119,6 +134,10 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream(
if (stream) { if (stream) {
++num_output_streams_; ++num_output_streams_;
#if defined(OS_ANDROID)
if (num_output_streams_ == 1)
RegisterHeadsetReceiver();
#endif
} }
return stream; return stream;
...@@ -161,6 +180,10 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream( ...@@ -161,6 +180,10 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
if (stream) { if (stream) {
++num_input_streams_; ++num_input_streams_;
#if defined(OS_ANDROID)
if (num_input_streams_ == 1)
SetAudioMode(kAudioModeInCommunication);
#endif
} }
return stream; return stream;
...@@ -245,6 +268,10 @@ void AudioManagerBase::ReleaseOutputStream(AudioOutputStream* stream) { ...@@ -245,6 +268,10 @@ void AudioManagerBase::ReleaseOutputStream(AudioOutputStream* stream) {
// streams. // streams.
--num_output_streams_; --num_output_streams_;
delete stream; delete stream;
#if defined(OS_ANDROID)
if (!num_output_streams_)
UnregisterHeadsetReceiver();
#endif
} }
void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) { void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) {
...@@ -252,6 +279,10 @@ void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) { ...@@ -252,6 +279,10 @@ void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) {
// TODO(xians) : Have a clearer destruction path for the AudioInputStream. // TODO(xians) : Have a clearer destruction path for the AudioInputStream.
--num_input_streams_; --num_input_streams_;
delete stream; delete stream;
#if defined(OS_ANDROID)
if (!num_input_streams_)
SetAudioMode(kAudioModeNormal);
#endif
} }
void AudioManagerBase::IncreaseActiveInputStreamCount() { void AudioManagerBase::IncreaseActiveInputStreamCount() {
...@@ -319,6 +350,13 @@ void AudioManagerBase::ShutdownOnAudioThread() { ...@@ -319,6 +350,13 @@ void AudioManagerBase::ShutdownOnAudioThread() {
#endif // defined(OS_IOS) #endif // defined(OS_IOS)
} }
#if defined(OS_ANDROID)
// static
bool AudioManagerBase::RegisterAudioManager(JNIEnv* env) {
return RegisterNativesImpl(env);
}
#endif
void AudioManagerBase::AddOutputDeviceChangeListener( void AudioManagerBase::AddOutputDeviceChangeListener(
AudioDeviceListener* listener) { AudioDeviceListener* listener) {
DCHECK(message_loop_->BelongsToCurrentThread()); DCHECK(message_loop_->BelongsToCurrentThread());
...@@ -347,4 +385,24 @@ AudioParameters AudioManagerBase::GetInputStreamParameters( ...@@ -347,4 +385,24 @@ AudioParameters AudioManagerBase::GetInputStreamParameters(
return AudioParameters(); return AudioParameters();
} }
#if defined(OS_ANDROID)
void AudioManagerBase::SetAudioMode(int mode) {
Java_AudioManagerAndroid_setMode(
base::android::AttachCurrentThread(),
j_audio_manager_.obj(), mode);
}
void AudioManagerBase::RegisterHeadsetReceiver() {
Java_AudioManagerAndroid_registerHeadsetReceiver(
base::android::AttachCurrentThread(),
j_audio_manager_.obj());
}
void AudioManagerBase::UnregisterHeadsetReceiver() {
Java_AudioManagerAndroid_unregisterHeadsetReceiver(
base::android::AttachCurrentThread(),
j_audio_manager_.obj());
}
#endif // defined(OS_ANDROID)
} // namespace media } // namespace media
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
#include "base/win/scoped_com_initializer.h" #include "base/win/scoped_com_initializer.h"
#endif #endif
#if defined(OS_ANDROID)
#include "base/android/jni_android.h"
#endif
namespace base { namespace base {
class Thread; class Thread;
} }
...@@ -93,6 +97,10 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { ...@@ -93,6 +97,10 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
virtual AudioParameters GetInputStreamParameters( virtual AudioParameters GetInputStreamParameters(
const std::string& device_id) OVERRIDE; const std::string& device_id) OVERRIDE;
#if defined(OS_ANDROID)
static bool RegisterAudioManager(JNIEnv* env);
#endif
protected: protected:
AudioManagerBase(); AudioManagerBase();
...@@ -128,14 +136,16 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { ...@@ -128,14 +136,16 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
// from the audio thread (no locking). // from the audio thread (no locking).
AudioOutputDispatchersMap output_dispatchers_; AudioOutputDispatchersMap output_dispatchers_;
// Get number of input or output streams.
int input_stream_count() { return num_input_streams_; }
int output_stream_count() { return num_output_streams_; }
private: private:
// Called by Shutdown(). // Called by Shutdown().
void ShutdownOnAudioThread(); void ShutdownOnAudioThread();
#if defined(OS_ANDROID)
void SetAudioMode(int mode);
void RegisterHeadsetReceiver();
void UnregisterHeadsetReceiver();
#endif
// Counts the number of active input streams to find out if something else // Counts the number of active input streams to find out if something else
// is currently recording in Chrome. // is currently recording in Chrome.
base::AtomicRefCount num_active_input_streams_; base::AtomicRefCount num_active_input_streams_;
...@@ -165,6 +175,11 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { ...@@ -165,6 +175,11 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
// and GetMessageLoop() starts returning NULL. // and GetMessageLoop() starts returning NULL.
scoped_refptr<base::MessageLoopProxy> message_loop_; scoped_refptr<base::MessageLoopProxy> message_loop_;
#if defined(OS_ANDROID)
// Java AudioManager instance.
base::android::ScopedJavaGlobalRef<jobject> j_audio_manager_;
#endif
DISALLOW_COPY_AND_ASSIGN(AudioManagerBase); DISALLOW_COPY_AND_ASSIGN(AudioManagerBase);
}; };
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_registrar.h" #include "base/android/jni_registrar.h"
#include "media/audio/android/audio_manager_android.h" #include "media/audio/audio_manager_base.h"
#include "media/base/android/media_player_bridge.h" #include "media/base/android/media_player_bridge.h"
#include "media/base/android/media_player_listener.h" #include "media/base/android/media_player_listener.h"
#include "media/base/android/webaudio_media_codec_bridge.h" #include "media/base/android/webaudio_media_codec_bridge.h"
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
namespace media { namespace media {
static base::android::RegistrationMethod kMediaRegisteredMethods[] = { static base::android::RegistrationMethod kMediaRegisteredMethods[] = {
{ "AudioManagerAndroid", { "AudioManagerBase",
AudioManagerAndroid::RegisterAudioManager }, AudioManagerBase::RegisterAudioManager },
{ "MediaPlayerBridge", { "MediaPlayerBridge",
MediaPlayerBridge::RegisterMediaPlayerBridge }, MediaPlayerBridge::RegisterMediaPlayerBridge },
{ "MediaPlayerListener", { "MediaPlayerListener",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment