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

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

Issue 14049003: Set default sampling rate to 44100 and query the native output sampling rate. (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: rebase 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
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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 void AudioManagerAndroid::GetAudioInputDeviceNames( 50 void AudioManagerAndroid::GetAudioInputDeviceNames(
51 media::AudioDeviceNames* device_names) { 51 media::AudioDeviceNames* device_names) {
52 DCHECK(device_names->empty()); 52 DCHECK(device_names->empty());
53 device_names->push_front( 53 device_names->push_front(
54 media::AudioDeviceName(kDefaultDeviceName, kDefaultDeviceId)); 54 media::AudioDeviceName(kDefaultDeviceName, kDefaultDeviceId));
55 } 55 }
56 56
57 AudioParameters AudioManagerAndroid::GetInputStreamParameters( 57 AudioParameters AudioManagerAndroid::GetInputStreamParameters(
58 const std::string& device_id) { 58 const std::string& device_id) {
59 // TODO(xians): figure out the right input sample rate and buffer size to 59 // TODO(leozwang): Android defines the minimal buffer size requirment
60 // achieve the best audio performance for Android devices. 60 // we should use it.
61 static const int kDefaultBufferSize = 1024;
61 // TODO(xians): query the native channel layout for the specific device. 62 // TODO(xians): query the native channel layout for the specific device.
62 static const int kDefaultSampleRate = 16000;
63 static const int kDefaultBufferSize = 1024;
64 return AudioParameters( 63 return AudioParameters(
65 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, 64 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
66 kDefaultSampleRate, 16, kDefaultBufferSize); 65 GetNativeOutputSampleRate(), 16, kDefaultBufferSize);
Raymond Toy (Google) 2013/05/15 23:19:46 Is it right to set the input sample rate to the ou
leozwang1 2013/05/16 01:11:55 There is no api to query input sampling rate now.
67 } 66 }
68 67
69 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream( 68 AudioOutputStream* AudioManagerAndroid::MakeAudioOutputStream(
70 const AudioParameters& params) { 69 const AudioParameters& params) {
71 AudioOutputStream* stream = 70 AudioOutputStream* stream =
72 AudioManagerBase::MakeAudioOutputStream(params); 71 AudioManagerBase::MakeAudioOutputStream(params);
73 if (stream && output_stream_count() == 1) 72 if (stream && output_stream_count() == 1)
74 RegisterHeadsetReceiver(); 73 RegisterHeadsetReceiver();
75 return stream; 74 return stream;
76 } 75 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } 114 }
116 115
117 AudioInputStream* AudioManagerAndroid::MakeLowLatencyInputStream( 116 AudioInputStream* AudioManagerAndroid::MakeLowLatencyInputStream(
118 const AudioParameters& params, const std::string& device_id) { 117 const AudioParameters& params, const std::string& device_id) {
119 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); 118 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
120 return new OpenSLESInputStream(this, params); 119 return new OpenSLESInputStream(this, params);
121 } 120 }
122 121
123 AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters( 122 AudioParameters AudioManagerAndroid::GetPreferredOutputStreamParameters(
124 const AudioParameters& input_params) { 123 const AudioParameters& input_params) {
125 // TODO(xians): figure out the right output sample rate and buffer size to 124 // TODO(leozwang): Android defines the minimal buffer size requirment
126 // achieve the best audio performance for Android devices. 125 // we should use it.
127 static const int kDefaultSampleRate = 44100;
128 static const int kDefaultBufferSize = 2048; 126 static const int kDefaultBufferSize = 2048;
129 127
130 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 128 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
131 int sample_rate = kDefaultSampleRate; 129 int sample_rate = GetNativeOutputSampleRate();
132 int buffer_size = kDefaultBufferSize; 130 int buffer_size = kDefaultBufferSize;
133 int bits_per_sample = 16; 131 int bits_per_sample = 16;
134 int input_channels = 0; 132 int input_channels = 0;
135 if (input_params.IsValid()) { 133 if (input_params.IsValid()) {
136 // Use the client's input parameters if they are valid. 134 // Use the client's input parameters if they are valid.
137 sample_rate = input_params.sample_rate(); 135 sample_rate = input_params.sample_rate();
138 bits_per_sample = input_params.bits_per_sample(); 136 bits_per_sample = input_params.bits_per_sample();
139 channel_layout = input_params.channel_layout(); 137 channel_layout = input_params.channel_layout();
140 input_channels = input_params.input_channels(); 138 input_channels = input_params.input_channels();
141 139
142 // TODO(leozwang): Android defines the minimal buffer size requirment
143 // we should follow it. From Android 4.1, a new audio low latency api
144 // set was introduced and is under development, we want to take advantage
145 // of it.
146 buffer_size = std::min(buffer_size, input_params.frames_per_buffer()); 140 buffer_size = std::min(buffer_size, input_params.frames_per_buffer());
147 } 141 }
148 142
149 int user_buffer_size = GetUserBufferSize(); 143 int user_buffer_size = GetUserBufferSize();
150 if (user_buffer_size) 144 if (user_buffer_size)
151 buffer_size = user_buffer_size; 145 buffer_size = user_buffer_size;
152 146
153 return AudioParameters( 147 return AudioParameters(
154 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, 148 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels,
155 sample_rate, bits_per_sample, buffer_size); 149 sample_rate, bits_per_sample, buffer_size);
(...skipping 15 matching lines...) Expand all
171 base::android::AttachCurrentThread(), 165 base::android::AttachCurrentThread(),
172 j_audio_manager_.obj()); 166 j_audio_manager_.obj());
173 } 167 }
174 168
175 void AudioManagerAndroid::UnregisterHeadsetReceiver() { 169 void AudioManagerAndroid::UnregisterHeadsetReceiver() {
176 Java_AudioManagerAndroid_unregisterHeadsetReceiver( 170 Java_AudioManagerAndroid_unregisterHeadsetReceiver(
177 base::android::AttachCurrentThread(), 171 base::android::AttachCurrentThread(),
178 j_audio_manager_.obj()); 172 j_audio_manager_.obj());
179 } 173 }
180 174
175 int AudioManagerAndroid::GetNativeOutputSampleRate() {
176 return Java_AudioManagerAndroid_getNativeOutputSampleRate(
177 base::android::AttachCurrentThread(),
178 j_audio_manager_.obj());
179 }
180
181 } // namespace media 181 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698