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

Side by Side Diff: media/audio/audio_manager_base.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: Destructors hate ASSERT() in unit tests. 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
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_manager_base.h" 5 #include "media/audio/audio_manager_base.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
8 #include "base/command_line.h" 9 #include "base/command_line.h"
9 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
10 #include "base/threading/thread.h" 11 #include "base/threading/thread.h"
11 #include "media/audio/audio_output_dispatcher_impl.h" 12 #include "media/audio/audio_output_dispatcher_impl.h"
12 #include "media/audio/audio_output_proxy.h" 13 #include "media/audio/audio_output_proxy.h"
13 #include "media/audio/audio_output_resampler.h" 14 #include "media/audio/audio_output_resampler.h"
14 #include "media/audio/audio_util.h" 15 #include "media/audio/audio_util.h"
15 #include "media/audio/fake_audio_input_stream.h" 16 #include "media/audio/fake_audio_input_stream.h"
16 #include "media/audio/fake_audio_output_stream.h" 17 #include "media/audio/fake_audio_output_stream.h"
17 #include "media/audio/virtual_audio_input_stream.h" 18 #include "media/audio/virtual_audio_input_stream.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 params.format() == AudioParameters::AUDIO_FAKE || 109 params.format() == AudioParameters::AUDIO_FAKE ||
109 !HasAudioOutputDevices(); 110 !HasAudioOutputDevices();
110 111
111 AudioOutputStream* stream = NULL; 112 AudioOutputStream* stream = NULL;
112 if (virtual_audio_input_stream_) { 113 if (virtual_audio_input_stream_) {
113 #if defined(OS_IOS) 114 #if defined(OS_IOS)
114 // We do not currently support iOS. It does not link. 115 // We do not currently support iOS. It does not link.
115 NOTIMPLEMENTED(); 116 NOTIMPLEMENTED();
116 return NULL; 117 return NULL;
117 #else 118 #else
118 stream = VirtualAudioOutputStream::MakeStream(this, params, message_loop_, 119 VirtualAudioOutputStream* const vaos =
119 virtual_audio_input_stream_); 120 new VirtualAudioOutputStream(
121 params, message_loop_, virtual_audio_input_stream_);
122 vaos->RunOnceClosed(base::Bind(
DaleCurtis 2013/01/15 22:02:18 Why not make this callback required for constructi
miu 2013/01/16 03:22:18 Done.
123 &AudioManagerBase::ReleaseOutputStream, base::Unretained(this), vaos));
124 stream = vaos;
120 #endif 125 #endif
121 } else if (audio_output_disabled) { 126 } else if (audio_output_disabled) {
122 stream = FakeAudioOutputStream::MakeFakeStream(this, params); 127 stream = FakeAudioOutputStream::MakeFakeStream(this, params);
123 } else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) { 128 } else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) {
124 stream = MakeLinearOutputStream(params); 129 stream = MakeLinearOutputStream(params);
125 } else if (params.format() == AudioParameters::AUDIO_PCM_LOW_LATENCY) { 130 } else if (params.format() == AudioParameters::AUDIO_PCM_LOW_LATENCY) {
126 stream = MakeLowLatencyOutputStream(params); 131 stream = MakeLowLatencyOutputStream(params);
127 } 132 }
128 133
129 if (stream) 134 if (stream)
(...skipping 25 matching lines...) Expand all
155 if (params.format() == AudioParameters::AUDIO_VIRTUAL) { 160 if (params.format() == AudioParameters::AUDIO_VIRTUAL) {
156 #if defined(OS_IOS) 161 #if defined(OS_IOS)
157 // We do not currently support iOS. 162 // We do not currently support iOS.
158 NOTIMPLEMENTED(); 163 NOTIMPLEMENTED();
159 return NULL; 164 return NULL;
160 #else 165 #else
161 // TODO(justinlin): Currently, audio mirroring will only work for the first 166 // TODO(justinlin): Currently, audio mirroring will only work for the first
162 // request. Subsequent requests will not get audio. 167 // request. Subsequent requests will not get audio.
163 if (!virtual_audio_input_stream_) { 168 if (!virtual_audio_input_stream_) {
164 virtual_audio_input_stream_ = 169 virtual_audio_input_stream_ =
165 VirtualAudioInputStream::MakeStream(this, params, message_loop_); 170 new VirtualAudioInputStream(params, message_loop_);
171 virtual_audio_input_stream_->RunOnceClosed(base::Bind(
172 &AudioManagerBase::ReleaseInputStream, base::Unretained(this),
173 virtual_audio_input_stream_));
166 stream = virtual_audio_input_stream_; 174 stream = virtual_audio_input_stream_;
167 DVLOG(1) << "Virtual audio input stream created."; 175 DVLOG(1) << "Virtual audio input stream created.";
168 176
169 // Make all current output streams recreate themselves as 177 // Make all current output streams recreate themselves as
170 // VirtualAudioOutputStreams that will attach to the above 178 // VirtualAudioOutputStreams that will attach to the above
171 // VirtualAudioInputStream. 179 // VirtualAudioInputStream.
172 NotifyAllOutputDeviceChangeListeners(); 180 NotifyAllOutputDeviceChangeListeners();
173 } else { 181 } else {
174 stream = NULL; 182 stream = NULL;
175 } 183 }
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 output_listeners_.RemoveObserver(listener); 404 output_listeners_.RemoveObserver(listener);
397 } 405 }
398 406
399 void AudioManagerBase::NotifyAllOutputDeviceChangeListeners() { 407 void AudioManagerBase::NotifyAllOutputDeviceChangeListeners() {
400 DCHECK(message_loop_->BelongsToCurrentThread()); 408 DCHECK(message_loop_->BelongsToCurrentThread());
401 DVLOG(1) << "Firing OnDeviceChange() notifications."; 409 DVLOG(1) << "Firing OnDeviceChange() notifications.";
402 FOR_EACH_OBSERVER(AudioDeviceListener, output_listeners_, OnDeviceChange()); 410 FOR_EACH_OBSERVER(AudioDeviceListener, output_listeners_, OnDeviceChange());
403 } 411 }
404 412
405 } // namespace media 413 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698