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

Side by Side Diff: media/audio/cras/cras_input.cc

Issue 15563004: Improved AGC update scheme for the audio backend in Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added Start/Stop APIs for the AGC part Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/cras/cras_input.h ('k') | media/audio/linux/alsa_input.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/cras/cras_input.h" 5 #include "media/audio/cras/cras_input.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 100 }
101 101
102 void CrasInputStream::Start(AudioInputCallback* callback) { 102 void CrasInputStream::Start(AudioInputCallback* callback) {
103 DCHECK(client_); 103 DCHECK(client_);
104 DCHECK(callback); 104 DCHECK(callback);
105 105
106 // If already playing, stop before re-starting. 106 // If already playing, stop before re-starting.
107 if (started_) 107 if (started_)
108 return; 108 return;
109 109
110 StartAgc();
111
110 callback_ = callback; 112 callback_ = callback;
111 LOG(ERROR) << "Input Start"; 113 LOG(ERROR) << "Input Start";
112 114
113 // Prepare |audio_format| and |stream_params| for the stream we 115 // Prepare |audio_format| and |stream_params| for the stream we
114 // will create. 116 // will create.
115 cras_audio_format* audio_format = cras_audio_format_create( 117 cras_audio_format* audio_format = cras_audio_format_create(
116 alsa_util::BitsToFormat(params_.bits_per_sample()), 118 alsa_util::BitsToFormat(params_.bits_per_sample()),
117 params_.sample_rate(), 119 params_.sample_rate(),
118 params_.channels()); 120 params_.channels());
119 if (!audio_format) { 121 if (!audio_format) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 164
163 started_ = true; 165 started_ = true;
164 } 166 }
165 167
166 void CrasInputStream::Stop() { 168 void CrasInputStream::Stop() {
167 DCHECK(client_); 169 DCHECK(client_);
168 170
169 if (!callback_ || !started_) 171 if (!callback_ || !started_)
170 return; 172 return;
171 173
174 StopAgc();
175
172 // Removing the stream from the client stops audio. 176 // Removing the stream from the client stops audio.
173 cras_client_rm_stream(client_, stream_id_); 177 cras_client_rm_stream(client_, stream_id_);
174 178
175 audio_manager_->DecreaseActiveInputStreamCount(); 179 audio_manager_->DecreaseActiveInputStreamCount();
176 180
177 started_ = false; 181 started_ = false;
178 } 182 }
179 183
180 // Static callback asking for samples. Run on high priority thread. 184 // Static callback asking for samples. Run on high priority thread.
181 int CrasInputStream::SamplesReady(cras_client* client, 185 int CrasInputStream::SamplesReady(cras_client* client,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 latency_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond; 219 latency_ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond;
216 double frames_latency = 220 double frames_latency =
217 latency_usec * params_.sample_rate() / base::Time::kMicrosecondsPerSecond; 221 latency_usec * params_.sample_rate() / base::Time::kMicrosecondsPerSecond;
218 unsigned int bytes_latency = 222 unsigned int bytes_latency =
219 static_cast<unsigned int>(frames_latency * bytes_per_frame_); 223 static_cast<unsigned int>(frames_latency * bytes_per_frame_);
220 224
221 // Update the AGC volume level once every second. Note that, |volume| is 225 // Update the AGC volume level once every second. Note that, |volume| is
222 // also updated each time SetVolume() is called through IPC by the 226 // also updated each time SetVolume() is called through IPC by the
223 // render-side AGC. 227 // render-side AGC.
224 double normalized_volume = 0.0; 228 double normalized_volume = 0.0;
225 QueryAgcVolume(&normalized_volume); 229 GetAgcVolume(&normalized_volume);
226 230
227 callback_->OnData(this, 231 callback_->OnData(this,
228 buffer, 232 buffer,
229 frames * bytes_per_frame_, 233 frames * bytes_per_frame_,
230 bytes_latency, 234 bytes_latency,
231 normalized_volume); 235 normalized_volume);
232 } 236 }
233 237
234 void CrasInputStream::NotifyStreamError(int err) { 238 void CrasInputStream::NotifyStreamError(int err) {
235 if (callback_) 239 if (callback_)
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 274
271 double CrasInputStream::GetVolumeRatioFromDecibels(double dB) const { 275 double CrasInputStream::GetVolumeRatioFromDecibels(double dB) const {
272 return pow(10, dB / 20.0); 276 return pow(10, dB / 20.0);
273 } 277 }
274 278
275 double CrasInputStream::GetDecibelsFromVolumeRatio(double volume_ratio) const { 279 double CrasInputStream::GetDecibelsFromVolumeRatio(double volume_ratio) const {
276 return 20 * log10(volume_ratio); 280 return 20 * log10(volume_ratio);
277 } 281 }
278 282
279 } // namespace media 283 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/cras/cras_input.h ('k') | media/audio/linux/alsa_input.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698