| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/media/capture/web_contents_audio_input_stream.h" | 5 #include "content/browser/media/capture/web_contents_audio_input_stream.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 virtual ~Impl(); | 67 virtual ~Impl(); |
| 68 | 68 |
| 69 // Notifies the consumer callback that the stream is now dead. | 69 // Notifies the consumer callback that the stream is now dead. |
| 70 void ReportError(); | 70 void ReportError(); |
| 71 | 71 |
| 72 // (Re-)Start/Stop mirroring by posting a call to AudioMirroringManager on the | 72 // (Re-)Start/Stop mirroring by posting a call to AudioMirroringManager on the |
| 73 // IO BrowserThread. | 73 // IO BrowserThread. |
| 74 void StartMirroring(); | 74 void StartMirroring(); |
| 75 void StopMirroring(); | 75 void StopMirroring(); |
| 76 | 76 |
| 77 // Invoked on the UI thread to make sure WebContents muting is turned off for |
| 78 // successful audio capture. |
| 79 void UnmuteWebContentsAudio(); |
| 80 |
| 77 // AudioMirroringManager::MirroringDestination implementation | 81 // AudioMirroringManager::MirroringDestination implementation |
| 78 virtual void QueryForMatches( | 82 virtual void QueryForMatches( |
| 79 const std::set<SourceFrameRef>& candidates, | 83 const std::set<SourceFrameRef>& candidates, |
| 80 const MatchesCallback& results_callback) OVERRIDE; | 84 const MatchesCallback& results_callback) OVERRIDE; |
| 81 void QueryForMatchesOnUIThread(const std::set<SourceFrameRef>& candidates, | 85 void QueryForMatchesOnUIThread(const std::set<SourceFrameRef>& candidates, |
| 82 const MatchesCallback& results_callback); | 86 const MatchesCallback& results_callback); |
| 83 virtual media::AudioOutputStream* AddInput( | 87 virtual media::AudioOutputStream* AddInput( |
| 84 const media::AudioParameters& params) OVERRIDE; | 88 const media::AudioParameters& params) OVERRIDE; |
| 85 | 89 |
| 86 // Callback which is run when |stream| is closed. Deletes |stream|. | 90 // Callback which is run when |stream| is closed. Deletes |stream|. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 if (is_target_lost_) { | 171 if (is_target_lost_) { |
| 168 ReportError(); | 172 ReportError(); |
| 169 callback_ = NULL; | 173 callback_ = NULL; |
| 170 return; | 174 return; |
| 171 } | 175 } |
| 172 | 176 |
| 173 state_ = MIRRORING; | 177 state_ = MIRRORING; |
| 174 mixer_stream_->Start(callback); | 178 mixer_stream_->Start(callback); |
| 175 | 179 |
| 176 StartMirroring(); | 180 StartMirroring(); |
| 181 |
| 182 // WebContents audio muting is implemented as audio capture to nowhere. |
| 183 // Unmuting will stop that audio capture, allowing AudioMirroringManager to |
| 184 // divert audio capture to here. |
| 185 BrowserThread::PostTask( |
| 186 BrowserThread::UI, |
| 187 FROM_HERE, |
| 188 base::Bind(&Impl::UnmuteWebContentsAudio, this)); |
| 177 } | 189 } |
| 178 | 190 |
| 179 void WebContentsAudioInputStream::Impl::Stop() { | 191 void WebContentsAudioInputStream::Impl::Stop() { |
| 180 DCHECK(thread_checker_.CalledOnValidThread()); | 192 DCHECK(thread_checker_.CalledOnValidThread()); |
| 181 | 193 |
| 182 if (state_ != MIRRORING) | 194 if (state_ != MIRRORING) |
| 183 return; | 195 return; |
| 184 | 196 |
| 185 state_ = OPENED; | 197 state_ = OPENED; |
| 186 | 198 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 DCHECK(thread_checker_.CalledOnValidThread()); | 240 DCHECK(thread_checker_.CalledOnValidThread()); |
| 229 | 241 |
| 230 BrowserThread::PostTask( | 242 BrowserThread::PostTask( |
| 231 BrowserThread::IO, | 243 BrowserThread::IO, |
| 232 FROM_HERE, | 244 FROM_HERE, |
| 233 base::Bind(&AudioMirroringManager::StopMirroring, | 245 base::Bind(&AudioMirroringManager::StopMirroring, |
| 234 base::Unretained(mirroring_manager_), | 246 base::Unretained(mirroring_manager_), |
| 235 make_scoped_refptr(this))); | 247 make_scoped_refptr(this))); |
| 236 } | 248 } |
| 237 | 249 |
| 250 void WebContentsAudioInputStream::Impl::UnmuteWebContentsAudio() { |
| 251 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 252 |
| 253 WebContents* const contents = tracker_->web_contents(); |
| 254 if (contents) |
| 255 contents->SetAudioMuted(false); |
| 256 } |
| 257 |
| 238 void WebContentsAudioInputStream::Impl::QueryForMatches( | 258 void WebContentsAudioInputStream::Impl::QueryForMatches( |
| 239 const std::set<SourceFrameRef>& candidates, | 259 const std::set<SourceFrameRef>& candidates, |
| 240 const MatchesCallback& results_callback) { | 260 const MatchesCallback& results_callback) { |
| 241 BrowserThread::PostTask( | 261 BrowserThread::PostTask( |
| 242 BrowserThread::UI, | 262 BrowserThread::UI, |
| 243 FROM_HERE, | 263 FROM_HERE, |
| 244 base::Bind(&Impl::QueryForMatchesOnUIThread, | 264 base::Bind(&Impl::QueryForMatchesOnUIThread, |
| 245 this, | 265 this, |
| 246 candidates, | 266 candidates, |
| 247 media::BindToCurrentLoop(results_callback))); | 267 media::BindToCurrentLoop(results_callback))); |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 385 |
| 366 void WebContentsAudioInputStream::SetAutomaticGainControl(bool enabled) { | 386 void WebContentsAudioInputStream::SetAutomaticGainControl(bool enabled) { |
| 367 impl_->mixer_stream()->SetAutomaticGainControl(enabled); | 387 impl_->mixer_stream()->SetAutomaticGainControl(enabled); |
| 368 } | 388 } |
| 369 | 389 |
| 370 bool WebContentsAudioInputStream::GetAutomaticGainControl() { | 390 bool WebContentsAudioInputStream::GetAutomaticGainControl() { |
| 371 return impl_->mixer_stream()->GetAutomaticGainControl(); | 391 return impl_->mixer_stream()->GetAutomaticGainControl(); |
| 372 } | 392 } |
| 373 | 393 |
| 374 } // namespace content | 394 } // namespace content |
| OLD | NEW |