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

Side by Side Diff: media/audio/mac/audio_low_latency_input_mac.cc

Issue 9655018: Make AudioParameters a class instead of a struct (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix copyright years Created 8 years, 9 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
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 24 matching lines...) Expand all
35 : manager_(manager), 35 : manager_(manager),
36 sink_(NULL), 36 sink_(NULL),
37 audio_unit_(0), 37 audio_unit_(0),
38 input_device_id_(audio_device_id), 38 input_device_id_(audio_device_id),
39 started_(false), 39 started_(false),
40 hardware_latency_frames_(0), 40 hardware_latency_frames_(0),
41 number_of_channels_in_frame_(0) { 41 number_of_channels_in_frame_(0) {
42 DCHECK(manager_); 42 DCHECK(manager_);
43 43
44 // Set up the desired (output) format specified by the client. 44 // Set up the desired (output) format specified by the client.
45 format_.mSampleRate = params.sample_rate; 45 format_.mSampleRate = params.sample_rate();
46 format_.mFormatID = kAudioFormatLinearPCM; 46 format_.mFormatID = kAudioFormatLinearPCM;
47 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked | 47 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked |
48 kLinearPCMFormatFlagIsSignedInteger; 48 kLinearPCMFormatFlagIsSignedInteger;
49 format_.mBitsPerChannel = params.bits_per_sample; 49 format_.mBitsPerChannel = params.bits_per_sample();
50 format_.mChannelsPerFrame = params.channels; 50 format_.mChannelsPerFrame = params.channels();
51 format_.mFramesPerPacket = 1; // uncompressed audio 51 format_.mFramesPerPacket = 1; // uncompressed audio
52 format_.mBytesPerPacket = (format_.mBitsPerChannel * 52 format_.mBytesPerPacket = (format_.mBitsPerChannel *
53 params.channels) / 8; 53 params.channels()) / 8;
54 format_.mBytesPerFrame = format_.mBytesPerPacket; 54 format_.mBytesPerFrame = format_.mBytesPerPacket;
55 format_.mReserved = 0; 55 format_.mReserved = 0;
56 56
57 DVLOG(1) << "Desired ouput format: " << format_; 57 DVLOG(1) << "Desired ouput format: " << format_;
58 58
59 // Calculate the number of sample frames per callback. 59 // Calculate the number of sample frames per callback.
60 number_of_frames_ = params.GetPacketSize() / format_.mBytesPerPacket; 60 number_of_frames_ = params.GetBytesPerBuffer() / format_.mBytesPerPacket;
61 DVLOG(1) << "Number of frames per callback: " << number_of_frames_; 61 DVLOG(1) << "Number of frames per callback: " << number_of_frames_;
62 62
63 // Derive size (in bytes) of the buffers that we will render to. 63 // Derive size (in bytes) of the buffers that we will render to.
64 UInt32 data_byte_size = number_of_frames_ * format_.mBytesPerFrame; 64 UInt32 data_byte_size = number_of_frames_ * format_.mBytesPerFrame;
65 DVLOG(1) << "Size of data buffer in bytes : " << data_byte_size; 65 DVLOG(1) << "Size of data buffer in bytes : " << data_byte_size;
66 66
67 // Allocate AudioBuffers to be used as storage for the received audio. 67 // Allocate AudioBuffers to be used as storage for the received audio.
68 // The AudioBufferList structure works as a placeholder for the 68 // The AudioBufferList structure works as a placeholder for the
69 // AudioBuffer structure, which holds a pointer to the actual data buffer. 69 // AudioBuffer structure, which holds a pointer to the actual data buffer.
70 audio_data_buffer_.reset(new uint8[data_byte_size]); 70 audio_data_buffer_.reset(new uint8[data_byte_size]);
71 audio_buffer_list_.mNumberBuffers = 1; 71 audio_buffer_list_.mNumberBuffers = 1;
72 72
73 AudioBuffer* audio_buffer = audio_buffer_list_.mBuffers; 73 AudioBuffer* audio_buffer = audio_buffer_list_.mBuffers;
74 audio_buffer->mNumberChannels = params.channels; 74 audio_buffer->mNumberChannels = params.channels();
75 audio_buffer->mDataByteSize = data_byte_size; 75 audio_buffer->mDataByteSize = data_byte_size;
76 audio_buffer->mData = audio_data_buffer_.get(); 76 audio_buffer->mData = audio_data_buffer_.get();
77 } 77 }
78 78
79 AUAudioInputStream::~AUAudioInputStream() {} 79 AUAudioInputStream::~AUAudioInputStream() {}
80 80
81 // Obtain and open the AUHAL AudioOutputUnit for recording. 81 // Obtain and open the AUHAL AudioOutputUnit for recording.
82 bool AUAudioInputStream::Open() { 82 bool AUAudioInputStream::Open() {
83 // Verify that we are not already opened. 83 // Verify that we are not already opened.
84 if (audio_unit_) 84 if (audio_unit_)
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 ((capture_latency_frames + 0.5) * format_.mBytesPerFrame); 439 ((capture_latency_frames + 0.5) * format_.mBytesPerFrame);
440 DCHECK(audio_data); 440 DCHECK(audio_data);
441 if (!audio_data) 441 if (!audio_data)
442 return kAudioUnitErr_InvalidElement; 442 return kAudioUnitErr_InvalidElement;
443 443
444 sink_->OnData(this, audio_data, buffer.mDataByteSize, capture_delay_bytes); 444 sink_->OnData(this, audio_data, buffer.mDataByteSize, capture_delay_bytes);
445 445
446 return noErr; 446 return noErr;
447 } 447 }
448 448
449 double AUAudioInputStream::HardwareSampleRate() { 449 int AUAudioInputStream::HardwareSampleRate() {
450 // Determine the default input device's sample-rate. 450 // Determine the default input device's sample-rate.
451 AudioDeviceID device_id = kAudioObjectUnknown; 451 AudioDeviceID device_id = kAudioObjectUnknown;
452 UInt32 info_size = sizeof(device_id); 452 UInt32 info_size = sizeof(device_id);
453 453
454 AudioObjectPropertyAddress default_input_device_address = { 454 AudioObjectPropertyAddress default_input_device_address = {
455 kAudioHardwarePropertyDefaultInputDevice, 455 kAudioHardwarePropertyDefaultInputDevice,
456 kAudioObjectPropertyScopeGlobal, 456 kAudioObjectPropertyScopeGlobal,
457 kAudioObjectPropertyElementMaster 457 kAudioObjectPropertyElementMaster
458 }; 458 };
459 OSStatus result = AudioObjectGetPropertyData(kAudioObjectSystemObject, 459 OSStatus result = AudioObjectGetPropertyData(kAudioObjectSystemObject,
(...skipping 17 matching lines...) Expand all
477 result = AudioObjectGetPropertyData(device_id, 477 result = AudioObjectGetPropertyData(device_id,
478 &nominal_sample_rate_address, 478 &nominal_sample_rate_address,
479 0, 479 0,
480 0, 480 0,
481 &info_size, 481 &info_size,
482 &nominal_sample_rate); 482 &nominal_sample_rate);
483 DCHECK_EQ(result, 0); 483 DCHECK_EQ(result, 0);
484 if (result) 484 if (result)
485 return 0.0; 485 return 0.0;
486 486
487 return nominal_sample_rate; 487 return static_cast<int>(nominal_sample_rate);
488 } 488 }
489 489
490 double AUAudioInputStream::GetHardwareLatency() { 490 double AUAudioInputStream::GetHardwareLatency() {
491 if (!audio_unit_ || input_device_id_ == kAudioObjectUnknown) { 491 if (!audio_unit_ || input_device_id_ == kAudioObjectUnknown) {
492 DLOG(WARNING) << "Audio unit object is NULL or device ID is unknown"; 492 DLOG(WARNING) << "Audio unit object is NULL or device ID is unknown";
493 return 0.0; 493 return 0.0;
494 } 494 }
495 495
496 // Get audio unit latency. 496 // Get audio unit latency.
497 Float64 audio_unit_latency_sec = 0.0; 497 Float64 audio_unit_latency_sec = 0.0;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 AudioObjectPropertyAddress property_address = { 575 AudioObjectPropertyAddress property_address = {
576 kAudioDevicePropertyVolumeScalar, 576 kAudioDevicePropertyVolumeScalar,
577 kAudioDevicePropertyScopeInput, 577 kAudioDevicePropertyScopeInput,
578 static_cast<UInt32>(channel) 578 static_cast<UInt32>(channel)
579 }; 579 };
580 OSStatus result = AudioObjectIsPropertySettable(input_device_id_, 580 OSStatus result = AudioObjectIsPropertySettable(input_device_id_,
581 &property_address, 581 &property_address,
582 &is_settable); 582 &is_settable);
583 return (result == noErr) ? is_settable : false; 583 return (result == noErr) ? is_settable : false;
584 } 584 }
OLDNEW
« no previous file with comments | « media/audio/mac/audio_low_latency_input_mac.h ('k') | media/audio/mac/audio_low_latency_output_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698