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

Side by Side Diff: media/audio/android/audio_manager_android.cc

Issue 93233003: Mute audio when volume is zero on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
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 "jni/AudioManagerAndroid_jni.h"
9 #include "media/audio/android/opensles_input.h" 9 #include "media/audio/android/opensles_input.h"
10 #include "media/audio/android/opensles_output.h" 10 #include "media/audio/android/opensles_output.h"
(...skipping 23 matching lines...) Expand all
34 AudioManager* CreateAudioManager() { 34 AudioManager* CreateAudioManager() {
35 return new AudioManagerAndroid(); 35 return new AudioManagerAndroid();
36 } 36 }
37 37
38 AudioManagerAndroid::AudioManagerAndroid() { 38 AudioManagerAndroid::AudioManagerAndroid() {
39 SetMaxOutputStreamsAllowed(kMaxOutputStreams); 39 SetMaxOutputStreamsAllowed(kMaxOutputStreams);
40 40
41 j_audio_manager_.Reset( 41 j_audio_manager_.Reset(
42 Java_AudioManagerAndroid_createAudioManagerAndroid( 42 Java_AudioManagerAndroid_createAudioManagerAndroid(
43 base::android::AttachCurrentThread(), 43 base::android::AttachCurrentThread(),
44 base::android::GetApplicationContext())); 44 base::android::GetApplicationContext(),
45 reinterpret_cast<intptr_t>(this)));
45 } 46 }
46 47
47 AudioManagerAndroid::~AudioManagerAndroid() { 48 AudioManagerAndroid::~AudioManagerAndroid() {
48 Shutdown(); 49 Shutdown();
49 } 50 }
50 51
51 bool AudioManagerAndroid::HasAudioOutputDevices() { 52 bool AudioManagerAndroid::HasAudioOutputDevices() {
52 return true; 53 return true;
53 } 54 }
54 55
(...skipping 20 matching lines...) Expand all
75 int buffer_size = Java_AudioManagerAndroid_getMinInputFrameSize( 76 int buffer_size = Java_AudioManagerAndroid_getMinInputFrameSize(
76 base::android::AttachCurrentThread(), GetNativeOutputSampleRate(), 77 base::android::AttachCurrentThread(), GetNativeOutputSampleRate(),
77 ChannelLayoutToChannelCount(channel_layout)); 78 ChannelLayoutToChannelCount(channel_layout));
78 79
79 return AudioParameters( 80 return AudioParameters(
80 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 81 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
81 GetNativeOutputSampleRate(), 16, 82 GetNativeOutputSampleRate(), 16,
82 buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size); 83 buffer_size <= 0 ? kDefaultInputBufferSize : buffer_size);
83 } 84 }
84 85
85 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( 86 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
tommi (sloooow) - chröme 2013/12/02 18:36:00 Can we DCHECK that all methods that touch streams_
wjia(left Chromium) 2013/12/02 21:49:49 Not now. Please refer to comments in AudioManagerB
tommi (sloooow) - chröme 2013/12/03 08:56:24 Ju On 2013/12/02 21:49:49, wjia wrote:
wjia(left Chromium) 2013/12/04 00:53:29 Done.
86 const AudioParameters& params, 87 const AudioParameters& params,
87 const std::string& device_id, 88 const std::string& device_id,
88 const std::string& input_device_id) { 89 const std::string& input_device_id) {
89 AudioOutputStream* stream = 90 AudioOutputStream* stream =
90 AudioManagerBase::MakeAudioOutputStream(params, std::string(), 91 AudioManagerBase::MakeAudioOutputStream(params, std::string(),
91 std::string()); 92 std::string());
92 if (stream && output_stream_count() == 1) { 93 if (stream && output_stream_count() == 1) {
93 SetAudioMode(kAudioModeInCommunication); 94 SetAudioMode(kAudioModeInCommunication);
94 RegisterHeadsetReceiver(); 95 RegisterHeadsetReceiver();
95 } 96 }
97 streams_.insert(reinterpret_cast<OpenSLESOutputStream*>(stream));
tommi (sloooow) - chröme 2013/12/02 18:36:00 static_cast
wjia(left Chromium) 2013/12/02 21:49:49 Done.
96 return stream; 98 return stream;
97 } 99 }
98 100
99 AudioInputStream* AudioManagerAndroid::MakeAudioInputStream( 101 AudioInputStream* AudioManagerAndroid::MakeAudioInputStream(
100 const AudioParameters& params, const std::string& device_id) { 102 const AudioParameters& params, const std::string& device_id) {
101 AudioInputStream* stream = 103 AudioInputStream* stream =
102 AudioManagerBase::MakeAudioInputStream(params, device_id); 104 AudioManagerBase::MakeAudioInputStream(params, device_id);
103 return stream; 105 return stream;
104 } 106 }
105 107
106 void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) { 108 void AudioManagerAndroid::ReleaseOutputStream(AudioOutputStream* stream) {
107 AudioManagerBase::ReleaseOutputStream(stream); 109 AudioManagerBase::ReleaseOutputStream(stream);
108 if (!output_stream_count()) { 110 if (!output_stream_count()) {
109 UnregisterHeadsetReceiver(); 111 UnregisterHeadsetReceiver();
110 SetAudioMode(kAudioModeNormal); 112 SetAudioMode(kAudioModeNormal);
111 } 113 }
114 streams_.erase(reinterpret_cast<OpenSLESOutputStream*>(stream));
tommi (sloooow) - chröme 2013/12/02 18:36:00 static_cast
wjia(left Chromium) 2013/12/02 21:49:49 Done.
tommi (sloooow) - chröme 2013/12/03 08:56:24 Looks like there's a race here too.
wjia(left Chromium) 2013/12/04 00:53:29 Done.
112 } 115 }
113 116
114 void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) { 117 void AudioManagerAndroid::ReleaseInputStream(AudioInputStream* stream) {
115 AudioManagerBase::ReleaseInputStream(stream); 118 AudioManagerBase::ReleaseInputStream(stream);
116 } 119 }
117 120
118 AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream( 121 AudioOutputStream* AudioManagerAndroid::MakeLinearOutputStream(
119 const AudioParameters& params) { 122 const AudioParameters& params) {
120 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); 123 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
121 return new OpenSLESOutputStream(this, params); 124 return new OpenSLESOutputStream(this, params);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 return AudioParameters( 184 return AudioParameters(
182 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, 185 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels,
183 sample_rate, bits_per_sample, buffer_size); 186 sample_rate, bits_per_sample, buffer_size);
184 } 187 }
185 188
186 // static 189 // static
187 bool AudioManagerAndroid::RegisterAudioManager(JNIEnv* env) { 190 bool AudioManagerAndroid::RegisterAudioManager(JNIEnv* env) {
188 return RegisterNativesImpl(env); 191 return RegisterNativesImpl(env);
189 } 192 }
190 193
194 void AudioManagerAndroid::SetMute(JNIEnv* env, jobject obj, jboolean state) {
195 message_loop_->PostTask(
196 FROM_HERE,
197 base::Bind(
198 &AudioManagerAndroid::DoSetMuteOnAudioThread,
199 base::Unretained(this),
200 state));
201 }
202
203 void AudioManagerAndroid::DoSetMuteOnAudioThread(bool state) {
204 for (OutputStreams::iterator it=streams_.begin();
tommi (sloooow) - chröme 2013/12/02 18:36:00 spaces around =
wjia(left Chromium) 2013/12/02 21:49:49 Done.
205 it != streams_.end(); ++it) {
206 (*it)->SetMute(state);
207 }
208 }
209
191 void AudioManagerAndroid::SetAudioMode(int mode) { 210 void AudioManagerAndroid::SetAudioMode(int mode) {
192 Java_AudioManagerAndroid_setMode( 211 Java_AudioManagerAndroid_setMode(
193 base::android::AttachCurrentThread(), 212 base::android::AttachCurrentThread(),
194 j_audio_manager_.obj(), mode); 213 j_audio_manager_.obj(), mode);
195 } 214 }
196 215
197 void AudioManagerAndroid::RegisterHeadsetReceiver() { 216 void AudioManagerAndroid::RegisterHeadsetReceiver() {
198 Java_AudioManagerAndroid_registerHeadsetReceiver( 217 Java_AudioManagerAndroid_registerHeadsetReceiver(
199 base::android::AttachCurrentThread(), 218 base::android::AttachCurrentThread(),
200 j_audio_manager_.obj()); 219 j_audio_manager_.obj());
(...skipping 17 matching lines...) Expand all
218 j_audio_manager_.obj()); 237 j_audio_manager_.obj());
219 } 238 }
220 239
221 int AudioManagerAndroid::GetAudioLowLatencyOutputFrameSize() { 240 int AudioManagerAndroid::GetAudioLowLatencyOutputFrameSize() {
222 return Java_AudioManagerAndroid_getAudioLowLatencyOutputFrameSize( 241 return Java_AudioManagerAndroid_getAudioLowLatencyOutputFrameSize(
223 base::android::AttachCurrentThread(), 242 base::android::AttachCurrentThread(),
224 j_audio_manager_.obj()); 243 j_audio_manager_.obj());
225 } 244 }
226 245
227 } // namespace media 246 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698