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

Side by Side Diff: media/audio/mac/audio_low_latency_input_mac.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/mac/audio_low_latency_input_mac.h ('k') | media/audio/pulse/pulse_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/mac/audio_low_latency_input_mac.h" 5 #include "media/audio/mac/audio_low_latency_input_mac.h"
6 6
7 #include <CoreServices/CoreServices.h> 7 #include <CoreServices/CoreServices.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 261
262 return true; 262 return true;
263 } 263 }
264 264
265 void AUAudioInputStream::Start(AudioInputCallback* callback) { 265 void AUAudioInputStream::Start(AudioInputCallback* callback) {
266 DCHECK(callback); 266 DCHECK(callback);
267 DLOG_IF(ERROR, !audio_unit_) << "Open() has not been called successfully"; 267 DLOG_IF(ERROR, !audio_unit_) << "Open() has not been called successfully";
268 if (started_ || !audio_unit_) 268 if (started_ || !audio_unit_)
269 return; 269 return;
270 sink_ = callback; 270 sink_ = callback;
271 StartAgc();
271 OSStatus result = AudioOutputUnitStart(audio_unit_); 272 OSStatus result = AudioOutputUnitStart(audio_unit_);
272 if (result == noErr) { 273 if (result == noErr) {
273 started_ = true; 274 started_ = true;
274 } 275 }
275 OSSTATUS_DLOG_IF(ERROR, result != noErr, result) 276 OSSTATUS_DLOG_IF(ERROR, result != noErr, result)
276 << "Failed to start acquiring data"; 277 << "Failed to start acquiring data";
277 } 278 }
278 279
279 void AUAudioInputStream::Stop() { 280 void AUAudioInputStream::Stop() {
280 if (!started_) 281 if (!started_)
281 return; 282 return;
283 StopAgc();
282 OSStatus result = AudioOutputUnitStop(audio_unit_); 284 OSStatus result = AudioOutputUnitStop(audio_unit_);
283 if (result == noErr) { 285 if (result == noErr) {
284 started_ = false; 286 started_ = false;
285 } 287 }
286 OSSTATUS_DLOG_IF(ERROR, result != noErr, result) 288 OSSTATUS_DLOG_IF(ERROR, result != noErr, result)
287 << "Failed to stop acquiring data"; 289 << "Failed to stop acquiring data";
288 } 290 }
289 291
290 void AUAudioInputStream::Close() { 292 void AUAudioInputStream::Close() {
291 // It is valid to call Close() before calling open or Start(). 293 // It is valid to call Close() before calling open or Start().
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 audio_input->audio_buffer_list(), 478 audio_input->audio_buffer_list(),
477 time_stamp); 479 time_stamp);
478 } 480 }
479 481
480 OSStatus AUAudioInputStream::Provide(UInt32 number_of_frames, 482 OSStatus AUAudioInputStream::Provide(UInt32 number_of_frames,
481 AudioBufferList* io_data, 483 AudioBufferList* io_data,
482 const AudioTimeStamp* time_stamp) { 484 const AudioTimeStamp* time_stamp) {
483 // Update the capture latency. 485 // Update the capture latency.
484 double capture_latency_frames = GetCaptureLatency(time_stamp); 486 double capture_latency_frames = GetCaptureLatency(time_stamp);
485 487
486 // Update the AGC volume level once every second. Note that, |volume| is 488 // The AGC volume level is updated once every second on a separate thread.
487 // also updated each time SetVolume() is called through IPC by the 489 // Note that, |volume| is also updated each time SetVolume() is called
488 // render-side AGC. 490 // through IPC by the render-side AGC.
489 double normalized_volume = 0.0; 491 double normalized_volume = 0.0;
490 QueryAgcVolume(&normalized_volume); 492 GetAgcVolume(&normalized_volume);
491 493
492 AudioBuffer& buffer = io_data->mBuffers[0]; 494 AudioBuffer& buffer = io_data->mBuffers[0];
493 uint8* audio_data = reinterpret_cast<uint8*>(buffer.mData); 495 uint8* audio_data = reinterpret_cast<uint8*>(buffer.mData);
494 uint32 capture_delay_bytes = static_cast<uint32> 496 uint32 capture_delay_bytes = static_cast<uint32>
495 ((capture_latency_frames + 0.5) * format_.mBytesPerFrame); 497 ((capture_latency_frames + 0.5) * format_.mBytesPerFrame);
496 DCHECK(audio_data); 498 DCHECK(audio_data);
497 if (!audio_data) 499 if (!audio_data)
498 return kAudioUnitErr_InvalidElement; 500 return kAudioUnitErr_InvalidElement;
499 501
500 // Accumulate captured audio in FIFO until we can match the output size 502 // Accumulate captured audio in FIFO until we can match the output size
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 kAudioDevicePropertyScopeInput, 652 kAudioDevicePropertyScopeInput,
651 static_cast<UInt32>(channel) 653 static_cast<UInt32>(channel)
652 }; 654 };
653 OSStatus result = AudioObjectIsPropertySettable(input_device_id_, 655 OSStatus result = AudioObjectIsPropertySettable(input_device_id_,
654 &property_address, 656 &property_address,
655 &is_settable); 657 &is_settable);
656 return (result == noErr) ? is_settable : false; 658 return (result == noErr) ? is_settable : false;
657 } 659 }
658 660
659 } // namespace media 661 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/mac/audio_low_latency_input_mac.h ('k') | media/audio/pulse/pulse_input.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698