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

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

Issue 11416350: Tab Audio Mirroring: WebContentsAudioInputStream is a new implementation which represents the lifet… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 7 years, 11 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/audio_input_controller.h ('k') | media/audio/audio_manager_base.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/audio_input_controller.h" 5 #include "media/audio/audio_input_controller.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/threading/thread_restrictions.h" 8 #include "base/threading/thread_restrictions.h"
9 #include "media/base/limits.h" 9 #include "media/base/limits.h"
10 10
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 // audio-device thread. Use the provided audio-input device. 94 // audio-device thread. Use the provided audio-input device.
95 if (!controller->message_loop_->PostTask(FROM_HERE, 95 if (!controller->message_loop_->PostTask(FROM_HERE,
96 base::Bind(&AudioInputController::DoCreate, controller, 96 base::Bind(&AudioInputController::DoCreate, controller,
97 base::Unretained(audio_manager), params, device_id))) { 97 base::Unretained(audio_manager), params, device_id))) {
98 controller = NULL; 98 controller = NULL;
99 } 99 }
100 100
101 return controller; 101 return controller;
102 } 102 }
103 103
104 // static
105 scoped_refptr<AudioInputController> AudioInputController::CreateForStream(
106 AudioManager* audio_manager,
107 EventHandler* event_handler,
108 AudioInputStream* stream,
109 SyncWriter* sync_writer) {
110 DCHECK(audio_manager);
111 DCHECK(sync_writer);
112 DCHECK(stream);
113
114 // Create the AudioInputController object and ensure that it runs on
115 // the audio-manager thread.
116 scoped_refptr<AudioInputController> controller(new AudioInputController(
117 event_handler, sync_writer));
118 controller->message_loop_ = audio_manager->GetMessageLoop();
119
120 if (!controller->message_loop_->PostTask(
121 FROM_HERE,
122 base::Bind(&AudioInputController::DoCreateForStream, controller,
123 stream))) {
124 controller = NULL;
125 }
126
127 return controller;
128 }
129
104 void AudioInputController::Record() { 130 void AudioInputController::Record() {
105 message_loop_->PostTask(FROM_HERE, base::Bind( 131 message_loop_->PostTask(FROM_HERE, base::Bind(
106 &AudioInputController::DoRecord, this)); 132 &AudioInputController::DoRecord, this));
107 } 133 }
108 134
109 void AudioInputController::Close(const base::Closure& closed_task) { 135 void AudioInputController::Close(const base::Closure& closed_task) {
110 DCHECK(!closed_task.is_null()); 136 DCHECK(!closed_task.is_null());
111 DCHECK(creator_loop_->BelongsToCurrentThread()); 137 DCHECK(creator_loop_->BelongsToCurrentThread());
112 138
113 message_loop_->PostTaskAndReply( 139 message_loop_->PostTaskAndReply(
114 FROM_HERE, base::Bind(&AudioInputController::DoClose, this), closed_task); 140 FROM_HERE, base::Bind(&AudioInputController::DoClose, this), closed_task);
115 } 141 }
116 142
117 void AudioInputController::SetVolume(double volume) { 143 void AudioInputController::SetVolume(double volume) {
118 message_loop_->PostTask(FROM_HERE, base::Bind( 144 message_loop_->PostTask(FROM_HERE, base::Bind(
119 &AudioInputController::DoSetVolume, this, volume)); 145 &AudioInputController::DoSetVolume, this, volume));
120 } 146 }
121 147
122 void AudioInputController::SetAutomaticGainControl(bool enabled) { 148 void AudioInputController::SetAutomaticGainControl(bool enabled) {
123 message_loop_->PostTask(FROM_HERE, base::Bind( 149 message_loop_->PostTask(FROM_HERE, base::Bind(
124 &AudioInputController::DoSetAutomaticGainControl, this, enabled)); 150 &AudioInputController::DoSetAutomaticGainControl, this, enabled));
125 } 151 }
126 152
127 void AudioInputController::DoCreate(AudioManager* audio_manager, 153 void AudioInputController::DoCreate(AudioManager* audio_manager,
128 const AudioParameters& params, 154 const AudioParameters& params,
129 const std::string& device_id) { 155 const std::string& device_id) {
130 DCHECK(message_loop_->BelongsToCurrentThread()); 156 DCHECK(message_loop_->BelongsToCurrentThread());
157 DoCreateForStream(audio_manager->MakeAudioInputStream(params, device_id));
158 }
131 159
132 stream_ = audio_manager->MakeAudioInputStream(params, device_id); 160 void AudioInputController::DoCreateForStream(
161 AudioInputStream* stream_to_control) {
162 DCHECK(message_loop_->BelongsToCurrentThread());
163
164 DCHECK(!stream_);
165 stream_ = stream_to_control;
133 166
134 if (!stream_) { 167 if (!stream_) {
135 // TODO(satish): Define error types. 168 // TODO(satish): Define error types.
136 handler_->OnError(this, 0); 169 handler_->OnError(this, 0);
137 return; 170 return;
138 } 171 }
139 172
140 if (stream_ && !stream_->Open()) { 173 if (stream_ && !stream_->Open()) {
141 stream_->Close(); 174 stream_->Close();
142 stream_ = NULL; 175 stream_ = NULL;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 343
311 void AudioInputController::SetDataIsActive(bool enabled) { 344 void AudioInputController::SetDataIsActive(bool enabled) {
312 base::subtle::Release_Store(&data_is_active_, enabled); 345 base::subtle::Release_Store(&data_is_active_, enabled);
313 } 346 }
314 347
315 bool AudioInputController::GetDataIsActive() { 348 bool AudioInputController::GetDataIsActive() {
316 return (base::subtle::Acquire_Load(&data_is_active_) != false); 349 return (base::subtle::Acquire_Load(&data_is_active_) != false);
317 } 350 }
318 351
319 } // namespace media 352 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/audio_input_controller.h ('k') | media/audio/audio_manager_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698