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

Side by Side Diff: media/audio/audio_input_controller.cc

Issue 4661001: Simplified AudioOutputStream interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 10 years, 1 month 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) 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/audio_input_controller.h" 5 #include "media/audio/audio_input_controller.h"
6 #include "media/base/limits.h" 6 #include "media/base/limits.h"
7 7
8 namespace { 8 namespace {
9 9
10 const int kMaxInputChannels = 2; 10 const int kMaxInputChannels = 2;
11 const int kMaxSamplesPerPacket = media::Limits::kMaxSampleRate;
12 11
13 } // namespace 12 } // namespace
14 13
15 namespace media { 14 namespace media {
16 15
17 // static 16 // static
18 AudioInputController::Factory* AudioInputController::factory_ = NULL; 17 AudioInputController::Factory* AudioInputController::factory_ = NULL;
19 18
20 AudioInputController::AudioInputController(EventHandler* handler) 19 AudioInputController::AudioInputController(EventHandler* handler)
21 : handler_(handler), 20 : handler_(handler),
22 stream_(NULL), 21 stream_(NULL),
23 state_(kEmpty), 22 state_(kEmpty),
24 thread_("AudioInputControllerThread") { 23 thread_("AudioInputControllerThread") {
25 } 24 }
26 25
27 AudioInputController::~AudioInputController() { 26 AudioInputController::~AudioInputController() {
28 DCHECK(kClosed == state_ || kCreated == state_ || kEmpty == state_); 27 DCHECK(kClosed == state_ || kCreated == state_ || kEmpty == state_);
29 } 28 }
30 29
31 // static 30 // static
32 scoped_refptr<AudioInputController> AudioInputController::Create( 31 scoped_refptr<AudioInputController> AudioInputController::Create(
33 EventHandler* event_handler, 32 EventHandler* event_handler,
34 AudioParameters params, 33 AudioParameters params) {
35 int samples_per_packet) {
36 if (!params.IsValid() || 34 if (!params.IsValid() ||
scherkus (not reviewing) 2010/11/09 02:28:31 single line
Sergey Ulanov 2010/11/09 22:29:58 Done.
37 (params.channels > kMaxInputChannels) || 35 (params.channels > kMaxInputChannels))
38 (samples_per_packet > kMaxSamplesPerPacket) || (samples_per_packet < 0))
39 return NULL; 36 return NULL;
40 37
41 if (factory_) { 38 if (factory_) {
42 return factory_->Create(event_handler, params, samples_per_packet); 39 return factory_->Create(event_handler, params);
43 } 40 }
44 41
45 scoped_refptr<AudioInputController> controller(new AudioInputController( 42 scoped_refptr<AudioInputController> controller(new AudioInputController(
46 event_handler)); 43 event_handler));
47 44
48 // Start the thread and post a task to create the audio input stream. 45 // Start the thread and post a task to create the audio input stream.
49 controller->thread_.Start(); 46 controller->thread_.Start();
50 controller->thread_.message_loop()->PostTask( 47 controller->thread_.message_loop()->PostTask(
51 FROM_HERE, 48 FROM_HERE,
52 NewRunnableMethod(controller.get(), &AudioInputController::DoCreate, 49 NewRunnableMethod(controller.get(), &AudioInputController::DoCreate,
53 params, samples_per_packet)); 50 params));
54 return controller; 51 return controller;
55 } 52 }
56 53
57 void AudioInputController::Record() { 54 void AudioInputController::Record() {
58 DCHECK(thread_.IsRunning()); 55 DCHECK(thread_.IsRunning());
59 thread_.message_loop()->PostTask( 56 thread_.message_loop()->PostTask(
60 FROM_HERE, 57 FROM_HERE,
61 NewRunnableMethod(this, &AudioInputController::DoRecord)); 58 NewRunnableMethod(this, &AudioInputController::DoRecord));
62 } 59 }
63 60
64 void AudioInputController::Close() { 61 void AudioInputController::Close() {
65 if (!thread_.IsRunning()) { 62 if (!thread_.IsRunning()) {
66 // If the thread is not running make sure we are stopped. 63 // If the thread is not running make sure we are stopped.
67 DCHECK_EQ(kClosed, state_); 64 DCHECK_EQ(kClosed, state_);
68 return; 65 return;
69 } 66 }
70 67
71 // Wait for all tasks to complete on the audio thread. 68 // Wait for all tasks to complete on the audio thread.
72 thread_.message_loop()->PostTask( 69 thread_.message_loop()->PostTask(
73 FROM_HERE, 70 FROM_HERE,
74 NewRunnableMethod(this, &AudioInputController::DoClose)); 71 NewRunnableMethod(this, &AudioInputController::DoClose));
75 thread_.Stop(); 72 thread_.Stop();
76 } 73 }
77 74
78 void AudioInputController::DoCreate(AudioParameters params, 75 void AudioInputController::DoCreate(AudioParameters params) {
79 uint32 samples_per_packet) { 76 stream_ = AudioManager::GetAudioManager()->MakeAudioInputStream(params);
80 stream_ = AudioManager::GetAudioManager()->MakeAudioInputStream(
81 params, samples_per_packet);
82 77
83 if (!stream_) { 78 if (!stream_) {
84 // TODO(satish): Define error types. 79 // TODO(satish): Define error types.
85 handler_->OnError(this, 0); 80 handler_->OnError(this, 0);
86 return; 81 return;
87 } 82 }
88 83
89 if (stream_ && !stream_->Open()) { 84 if (stream_ && !stream_->Open()) {
90 stream_->Close(); 85 stream_->Close();
91 stream_ = NULL; 86 stream_ = NULL;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 147 }
153 148
154 void AudioInputController::OnError(AudioInputStream* stream, int code) { 149 void AudioInputController::OnError(AudioInputStream* stream, int code) {
155 // Handle error on the audio controller thread. 150 // Handle error on the audio controller thread.
156 thread_.message_loop()->PostTask( 151 thread_.message_loop()->PostTask(
157 FROM_HERE, 152 FROM_HERE,
158 NewRunnableMethod(this, &AudioInputController::DoReportError, code)); 153 NewRunnableMethod(this, &AudioInputController::DoReportError, code));
159 } 154 }
160 155
161 } // namespace media 156 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698