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

Side by Side 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: remove OVERRIDE for mac 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 unified diff | Download patch
« no previous file with comments | « media/audio/android/audio_manager_android.h ('k') | media/audio/audio_manager_base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/android/audio_manager_android.h" 5 #include "media/audio/android/audio_manager_android.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "jni/AudioManagerAndroid_jni.h"
8 #include "media/audio/android/opensles_input.h" 9 #include "media/audio/android/opensles_input.h"
9 #include "media/audio/android/opensles_output.h" 10 #include "media/audio/android/opensles_output.h"
10 #include "media/audio/audio_manager.h" 11 #include "media/audio/audio_manager.h"
11 #include "media/audio/audio_parameters.h" 12 #include "media/audio/audio_parameters.h"
12 #include "media/audio/audio_util.h" 13 #include "media/audio/audio_util.h"
13 #include "media/audio/fake_audio_input_stream.h" 14 #include "media/audio/fake_audio_input_stream.h"
14 #include "media/base/channel_layout.h" 15 #include "media/base/channel_layout.h"
15 16
16 namespace media { 17 namespace media {
17 18
18 // Maximum number of output streams that can be open simultaneously. 19 // Maximum number of output streams that can be open simultaneously.
19 static const int kMaxOutputStreams = 10; 20 static const int kMaxOutputStreams = 10;
20 21
22 static const int kAudioModeNormal = 0x00000000;
23 static const int kAudioModeInCommunication = 0x00000003;
24
21 AudioManager* CreateAudioManager() { 25 AudioManager* CreateAudioManager() {
22 return new AudioManagerAndroid(); 26 return new AudioManagerAndroid();
23 } 27 }
24 28
25 AudioManagerAndroid::AudioManagerAndroid() { 29 AudioManagerAndroid::AudioManagerAndroid() {
26 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 30 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
31
32 j_audio_manager_.Reset(
33 Java_AudioManagerAndroid_createAudioManagerAndroid(
34 base::android::AttachCurrentThread(),
35 base::android::GetApplicationContext()));
27 } 36 }
28 37
29 AudioManagerAndroid::~AudioManagerAndroid() { 38 AudioManagerAndroid::~AudioManagerAndroid() {
30 Shutdown(); 39 Shutdown();
31 } 40 }
32 41
33 bool AudioManagerAndroid::HasAudioOutputDevices() { 42 bool AudioManagerAndroid::HasAudioOutputDevices() {
34 return true; 43 return true;
35 } 44 }
36 45
(...skipping 13 matching lines...) Expand all
50 // TODO(xians): figure out the right input sample rate and buffer size to 59 // TODO(xians): figure out the right input sample rate and buffer size to
51 // achieve the best audio performance for Android devices. 60 // achieve the best audio performance for Android devices.
52 // TODO(xians): query the native channel layout for the specific device. 61 // TODO(xians): query the native channel layout for the specific device.
53 static const int kDefaultSampleRate = 16000; 62 static const int kDefaultSampleRate = 16000;
54 static const int kDefaultBufferSize = 1024; 63 static const int kDefaultBufferSize = 1024;
55 return AudioParameters( 64 return AudioParameters(
56 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, 65 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
57 kDefaultSampleRate, 16, kDefaultBufferSize); 66 kDefaultSampleRate, 16, kDefaultBufferSize);
58 } 67 }
59 68
69 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
70 const AudioParameters& params) {
71 AudioOutputStream* stream =
72 AudioManagerBase::MakeAudioOutputStream(params);
73 if (stream && output_stream_count() == 1)
74 RegisterHeadsetReceiver();
75 return stream;
76 }
77
78 AudioInputStream* AudioManagerAndroid::MakeAudioInputStream(
79 const AudioParameters& params, const std::string& device_id) {
80 AudioInputStream* stream =
81 AudioManagerBase::MakeAudioInputStream(params, device_id);
82 if (stream && input_stream_count() == 1)
83 SetAudioMode(kAudioModeInCommunication);
84 return stream;
85 }
86
87 void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) {
88 AudioManagerBase::ReleaseOutputStream(stream);
89 if (!output_stream_count())
90 UnregisterHeadsetReceiver();
91 }
92
93 void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) {
94 AudioManagerBase::ReleaseInputStream(stream);
95 if (!input_stream_count())
96 SetAudioMode(kAudioModeNormal);
97 }
98
60 AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream( 99 AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream(
61 const AudioParameters& params) { 100 const AudioParameters& params) {
62 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); 101 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
63 return new OpenSLESOutputStream(this, params); 102 return new OpenSLESOutputStream(this, params);
64 } 103 }
65 104
66 AudioOutputStream* AudioManagerAndroid::MakeLowLatencyOutputStream( 105 AudioOutputStream* AudioManagerAndroid::MakeLowLatencyOutputStream(
67 const AudioParameters& params) { 106 const AudioParameters& params) {
68 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); 107 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
69 return new OpenSLESOutputStream(this, params); 108 return new OpenSLESOutputStream(this, params);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 148
110 int user_buffer_size = GetUserBufferSize(); 149 int user_buffer_size = GetUserBufferSize();
111 if (user_buffer_size) 150 if (user_buffer_size)
112 buffer_size = user_buffer_size; 151 buffer_size = user_buffer_size;
113 152
114 return AudioParameters( 153 return AudioParameters(
115 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, 154 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels,
116 sample_rate, bits_per_sample, buffer_size); 155 sample_rate, bits_per_sample, buffer_size);
117 } 156 }
118 157
158 // static
159 bool AudioManagerAndroid::RegisterAudioManager(JNIEnv* env) {
160 return RegisterNativesImpl(env);
161 }
162
163 void AudioManagerAndroid::SetAudioMode(int mode) {
164 Java_AudioManagerAndroid_setMode(
165 base::android::AttachCurrentThread(),
166 j_audio_manager_.obj(), mode);
167 }
168
169 void AudioManagerAndroid::RegisterHeadsetReceiver() {
170 Java_AudioManagerAndroid_registerHeadsetReceiver(
171 base::android::AttachCurrentThread(),
172 j_audio_manager_.obj());
173 }
174
175 void AudioManagerAndroid::UnregisterHeadsetReceiver() {
176 Java_AudioManagerAndroid_unregisterHeadsetReceiver(
177 base::android::AttachCurrentThread(),
178 j_audio_manager_.obj());
179 }
180
119 } // namespace media 181 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/android/audio_manager_android.h ('k') | media/audio/audio_manager_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698