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

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

Issue 8941001: Enable the AudioInputTest tests + Fix PCMQueueInAudioInputStream. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: address review comments Created 9 years 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_input_mac.h ('k') | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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, const AudioParameters& params) 20 AudioManagerMac* manager, const AudioParameters& params)
21 : manager_(manager), 21 : manager_(manager),
22 callback_(NULL), 22 callback_(NULL),
23 audio_queue_(NULL), 23 audio_queue_(NULL),
24 buffer_size_bytes_(0) { 24 buffer_size_bytes_(0),
25 started_(false) {
25 // We must have a manager. 26 // We must have a manager.
26 DCHECK(manager_); 27 DCHECK(manager_);
27 // A frame is one sample across all channels. In interleaved audio the per 28 // A frame is one sample across all channels. In interleaved audio the per
28 // frame fields identify the set of n |channels|. In uncompressed audio, a 29 // frame fields identify the set of n |channels|. In uncompressed audio, a
29 // packet is always one frame. 30 // packet is always one frame.
30 format_.mSampleRate = params.sample_rate; 31 format_.mSampleRate = params.sample_rate;
31 format_.mFormatID = kAudioFormatLinearPCM; 32 format_.mFormatID = kAudioFormatLinearPCM;
32 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked | 33 format_.mFormatFlags = kLinearPCMFormatFlagIsPacked |
33 kLinearPCMFormatFlagIsSignedInteger; 34 kLinearPCMFormatFlagIsSignedInteger;
34 format_.mBitsPerChannel = params.bits_per_sample; 35 format_.mBitsPerChannel = params.bits_per_sample;
(...skipping 26 matching lines...) Expand all
61 return SetupBuffers(); 62 return SetupBuffers();
62 } 63 }
63 64
64 void PCMQueueInAudioInputStream::Start(AudioInputCallback* callback) { 65 void PCMQueueInAudioInputStream::Start(AudioInputCallback* callback) {
65 DCHECK(callback); 66 DCHECK(callback);
66 DLOG_IF(ERROR, !audio_queue_) << "Open() has not been called successfully"; 67 DLOG_IF(ERROR, !audio_queue_) << "Open() has not been called successfully";
67 if (callback_ || !audio_queue_) 68 if (callback_ || !audio_queue_)
68 return; 69 return;
69 callback_ = callback; 70 callback_ = callback;
70 OSStatus err = AudioQueueStart(audio_queue_, NULL); 71 OSStatus err = AudioQueueStart(audio_queue_, NULL);
71 if (err != noErr) 72 if (err != noErr) {
72 HandleError(err); 73 HandleError(err);
73 else 74 } else {
75 started_ = true;
74 manager_->IncreaseActiveInputStreamCount(); 76 manager_->IncreaseActiveInputStreamCount();
77 }
75 } 78 }
76 79
77 void PCMQueueInAudioInputStream::Stop() { 80 void PCMQueueInAudioInputStream::Stop() {
78 if (!audio_queue_) 81 if (!audio_queue_ || !started_)
79 return; 82 return;
83
80 // Stop is always called before Close. In case of error, this will be 84 // Stop is always called before Close. In case of error, this will be
81 // also called when closing the input controller. 85 // also called when closing the input controller.
82 manager_->DecreaseActiveInputStreamCount(); 86 manager_->DecreaseActiveInputStreamCount();
83 87
84 // We request a synchronous stop, so the next call can take some time. In 88 // We request a synchronous stop, so the next call can take some time. In
85 // the windows implementation we block here as well. 89 // the windows implementation we block here as well.
86 OSStatus err = AudioQueueStop(audio_queue_, true); 90 OSStatus err = AudioQueueStop(audio_queue_, true);
87 if (err != noErr) 91 if (err != noErr)
88 HandleError(err); 92 HandleError(err);
93
94 started_ = false;
89 } 95 }
90 96
91 void PCMQueueInAudioInputStream::Close() { 97 void PCMQueueInAudioInputStream::Close() {
92 // It is valid to call Close() before calling Open() or Start(), thus 98 // It is valid to call Close() before calling Open() or Start(), thus
93 // |audio_queue_| and |callback_| might be NULL. 99 // |audio_queue_| and |callback_| might be NULL.
94 if (audio_queue_) { 100 if (audio_queue_) {
95 OSStatus err = AudioQueueDispose(audio_queue_, true); 101 OSStatus err = AudioQueueDispose(audio_queue_, true);
96 audio_queue_ = NULL; 102 audio_queue_ = NULL;
97 if (err != noErr) 103 if (err != noErr)
98 HandleError(err); 104 HandleError(err);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 // TODO(joth): PCMQueueOutAudioOutputStream uses callback_ to provide an 183 // TODO(joth): PCMQueueOutAudioOutputStream uses callback_ to provide an
178 // extra guard for this situation, but it seems to introduce more 184 // extra guard for this situation, but it seems to introduce more
179 // complications than it solves (memory barrier issues accessing it from 185 // complications than it solves (memory barrier issues accessing it from
180 // multiple threads, looses the means to indicate OnClosed to client). 186 // multiple threads, looses the means to indicate OnClosed to client).
181 // Should determine if we need to do something equivalent here. 187 // Should determine if we need to do something equivalent here.
182 return; 188 return;
183 } 189 }
184 HandleError(err); 190 HandleError(err);
185 } 191 }
186 } 192 }
OLDNEW
« no previous file with comments | « media/audio/mac/audio_input_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698