OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_input_mac.h" | 5 #include "media/audio/mac/audio_input_mac.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "media/audio/audio_util.h" | 9 #include "media/audio/audio_util.h" |
10 #include "media/audio/mac/audio_manager_mac.h" | 10 #include "media/audio/mac/audio_manager_mac.h" |
11 | 11 |
12 #if !defined(MAC_OS_X_VERSION_10_6) || \ | 12 #if !defined(MAC_OS_X_VERSION_10_6) || \ |
13 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 | 13 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 |
14 enum { | 14 enum { |
15 kAudioQueueErr_EnqueueDuringReset = -66632 | 15 kAudioQueueErr_EnqueueDuringReset = -66632 |
16 }; | 16 }; |
17 #endif | 17 #endif |
18 | 18 |
19 PCMQueueInAudioInputStream::PCMQueueInAudioInputStream( | 19 PCMQueueInAudioInputStream::PCMQueueInAudioInputStream( |
20 AudioManagerMac* manager, | 20 AudioManagerMac* manager, AudioParameters params) |
21 AudioParameters params, | |
22 int samples_per_buffer) | |
23 : manager_(manager), | 21 : manager_(manager), |
24 callback_(NULL), | 22 callback_(NULL), |
25 audio_queue_(NULL), | 23 audio_queue_(NULL), |
26 buffer_size_bytes_(0) { | 24 buffer_size_bytes_(0) { |
27 // We must have a manager. | 25 // We must have a manager. |
28 DCHECK(manager_); | 26 DCHECK(manager_); |
29 // A frame is one sample across all channels. In interleaved audio the per | 27 // A frame is one sample across all channels. In interleaved audio the per |
30 // frame fields identify the set of n |channels|. In uncompressed audio, a | 28 // frame fields identify the set of n |channels|. In uncompressed audio, a |
31 // packet is always one frame. | 29 // packet is always one frame. |
32 format_.mSampleRate = params.sample_rate; | 30 format_.mSampleRate = params.sample_rate; |
33 format_.mFormatID = kAudioFormatLinearPCM; | 31 format_.mFormatID = kAudioFormatLinearPCM; |
34 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked | | 32 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked | |
35 kLinearPCMFormatFlagIsSignedInteger; | 33 kLinearPCMFormatFlagIsSignedInteger; |
36 format_.mBitsPerChannel = params.bits_per_sample; | 34 format_.mBitsPerChannel = params.bits_per_sample; |
37 format_.mChannelsPerFrame = params.channels; | 35 format_.mChannelsPerFrame = params.channels; |
38 format_.mFramesPerPacket = 1; | 36 format_.mFramesPerPacket = 1; |
39 format_.mBytesPerPacket = (params.bits_per_sample * params.channels) / 8; | 37 format_.mBytesPerPacket = (params.bits_per_sample * params.channels) / 8; |
40 format_.mBytesPerFrame = format_.mBytesPerPacket; | 38 format_.mBytesPerFrame = format_.mBytesPerPacket; |
41 | 39 |
42 buffer_size_bytes_ = format_.mBytesPerFrame * samples_per_buffer; | 40 buffer_size_bytes_ = params.GetPacketSize(); |
43 } | 41 } |
44 | 42 |
45 PCMQueueInAudioInputStream::~PCMQueueInAudioInputStream() { | 43 PCMQueueInAudioInputStream::~PCMQueueInAudioInputStream() { |
46 DCHECK(!callback_); | 44 DCHECK(!callback_); |
47 DCHECK(!audio_queue_); | 45 DCHECK(!audio_queue_); |
48 } | 46 } |
49 | 47 |
50 bool PCMQueueInAudioInputStream::Open() { | 48 bool PCMQueueInAudioInputStream::Open() { |
51 OSStatus err = AudioQueueNewInput(&format_, | 49 OSStatus err = AudioQueueNewInput(&format_, |
52 &HandleInputBufferStatic, | 50 &HandleInputBufferStatic, |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 // TODO(joth): PCMQueueOutAudioOutputStream uses callback_ to provide an | 169 // TODO(joth): PCMQueueOutAudioOutputStream uses callback_ to provide an |
172 // extra guard for this situation, but it seems to introduce more | 170 // extra guard for this situation, but it seems to introduce more |
173 // complications than it solves (memory barrier issues accessing it from | 171 // complications than it solves (memory barrier issues accessing it from |
174 // multiple threads, looses the means to indicate OnClosed to client). | 172 // multiple threads, looses the means to indicate OnClosed to client). |
175 // Should determine if we need to do something equivalent here. | 173 // Should determine if we need to do something equivalent here. |
176 return; | 174 return; |
177 } | 175 } |
178 HandleError(err); | 176 HandleError(err); |
179 } | 177 } |
180 } | 178 } |
OLD | NEW |