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

Side by Side Diff: content/renderer/media/webrtc_audio_device_impl.cc

Issue 15979027: start/stop the source of the capturer when 1st audiotrack/last audiotrack is added/removed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/renderer/media/webrtc_audio_device_impl.h" 5 #include "content/renderer/media/webrtc_audio_device_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/win/windows_version.h" 10 #include "base/win/windows_version.h"
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 215
216 int32_t WebRtcAudioDeviceImpl::Init() { 216 int32_t WebRtcAudioDeviceImpl::Init() {
217 DVLOG(1) << "WebRtcAudioDeviceImpl::Init()"; 217 DVLOG(1) << "WebRtcAudioDeviceImpl::Init()";
218 DCHECK(thread_checker_.CalledOnValidThread()); 218 DCHECK(thread_checker_.CalledOnValidThread());
219 219
220 if (initialized_) 220 if (initialized_)
221 return 0; 221 return 0;
222 222
223 DCHECK(!capturer_.get()); 223 DCHECK(!capturer_.get());
224 capturer_ = WebRtcAudioCapturer::CreateCapturer(); 224 capturer_ = WebRtcAudioCapturer::CreateCapturer();
225
225 // Add itself as an audio track to the |capturer_|. This is because WebRTC 226 // Add itself as an audio track to the |capturer_|. This is because WebRTC
226 // supports only one ADM but multiple audio tracks, so the ADM can't be the 227 // supports only one ADM but multiple audio tracks, so the ADM can't be the
227 // sink of certain audio track now. 228 // sink of certain audio track now.
228 // TODO(xians): Register the ADM as the sink of the audio track if WebRTC 229 // TODO(xians): Register the ADM as the sink of the audio track if WebRTC
henrika (OOO until Aug 14) 2013/06/05 09:09:20 Any existing crbug that you could add this this TO
no longer working on chromium 2013/06/05 16:29:45 Done
229 // supports one ADM for each audio track. 230 // supports one ADM for each audio track.
230 if (capturer_.get()) 231 capturer_->SetDefaultSink(this);
henrika (OOO until Aug 14) 2013/06/05 09:09:20 What happens with the capturer if only non-default
no longer working on chromium 2013/06/05 16:29:45 I am open to another more meaningful name, any sug
231 capturer_->AddSink(this);
232 232
233 // We need to return a success to continue the initialization of WebRtc VoE 233 // We need to return a success to continue the initialization of WebRtc VoE
234 // because failure on the capturer_ initialization should not prevent WebRTC 234 // because failure on the capturer_ initialization should not prevent WebRTC
235 // from working. See issue http://crbug.com/144421 for details. 235 // from working. See issue http://crbug.com/144421 for details.
236 initialized_ = true; 236 initialized_ = true;
237 237
238 return 0; 238 return 0;
239 } 239 }
240 240
241 int32_t WebRtcAudioDeviceImpl::Terminate() { 241 int32_t WebRtcAudioDeviceImpl::Terminate() {
(...skipping 12 matching lines...) Expand all
254 // Grab a local reference while we call Stop(), which will trigger a call to 254 // Grab a local reference while we call Stop(), which will trigger a call to
255 // RemoveAudioRenderer that clears our reference to the audio renderer. 255 // RemoveAudioRenderer that clears our reference to the audio renderer.
256 scoped_refptr<WebRtcAudioRenderer> local_renderer(renderer_); 256 scoped_refptr<WebRtcAudioRenderer> local_renderer(renderer_);
257 local_renderer->Stop(); 257 local_renderer->Stop();
258 DCHECK(!renderer_.get()); 258 DCHECK(!renderer_.get());
259 } 259 }
260 260
261 if (capturer_.get()) { 261 if (capturer_.get()) {
262 // |capturer_| is stopped by the media stream, so do not need to 262 // |capturer_| is stopped by the media stream, so do not need to
263 // call Stop() here. 263 // call Stop() here.
264 capturer_->RemoveSink(this); 264 capturer_->SetDefaultSink(NULL);
265 capturer_ = NULL; 265 capturer_ = NULL;
266 } 266 }
267 267
268 initialized_ = false; 268 initialized_ = false;
269 return 0; 269 return 0;
270 } 270 }
271 271
272 bool WebRtcAudioDeviceImpl::Initialized() const { 272 bool WebRtcAudioDeviceImpl::Initialized() const {
273 return initialized_; 273 return initialized_;
274 } 274 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 } 336 }
337 337
338 int32_t WebRtcAudioDeviceImpl::StartRecording() { 338 int32_t WebRtcAudioDeviceImpl::StartRecording() {
339 DVLOG(1) << "WebRtcAudioDeviceImpl::StartRecording()"; 339 DVLOG(1) << "WebRtcAudioDeviceImpl::StartRecording()";
340 DCHECK(initialized_); 340 DCHECK(initialized_);
341 LOG_IF(ERROR, !audio_transport_callback_) << "Audio transport is missing"; 341 LOG_IF(ERROR, !audio_transport_callback_) << "Audio transport is missing";
342 if (!audio_transport_callback_) { 342 if (!audio_transport_callback_) {
343 return -1; 343 return -1;
344 } 344 }
345 345
346 {
347 base::AutoLock auto_lock(lock_);
348 if (recording_)
349 return 0;
350
351 recording_ = true;
352 }
353
346 start_capture_time_ = base::Time::Now(); 354 start_capture_time_ = base::Time::Now();
347 355
348 base::AutoLock auto_lock(lock_);
349 recording_ = true;
350
351 return 0; 356 return 0;
352 } 357 }
353 358
354 int32_t WebRtcAudioDeviceImpl::StopRecording() { 359 int32_t WebRtcAudioDeviceImpl::StopRecording() {
355 DVLOG(1) << "WebRtcAudioDeviceImpl::StopRecording()"; 360 DVLOG(1) << "WebRtcAudioDeviceImpl::StopRecording()";
356 if (!recording_) { 361 {
357 return 0; 362 base::AutoLock auto_lock(lock_);
363 if (!recording_)
364 return 0;
365
366 recording_ = false;
358 } 367 }
359 368
360 // Add histogram data to be uploaded as part of an UMA logging event. 369 // Add histogram data to be uploaded as part of an UMA logging event.
361 // This histogram keeps track of total recording times. 370 // This histogram keeps track of total recording times.
362 if (!start_capture_time_.is_null()) { 371 if (!start_capture_time_.is_null()) {
363 base::TimeDelta capture_time = base::Time::Now() - start_capture_time_; 372 base::TimeDelta capture_time = base::Time::Now() - start_capture_time_;
364 UMA_HISTOGRAM_LONG_TIMES("WebRTC.AudioCaptureTime", capture_time); 373 UMA_HISTOGRAM_LONG_TIMES("WebRTC.AudioCaptureTime", capture_time);
365 } 374 }
366 375
367 base::AutoLock auto_lock(lock_);
368 recording_ = false;
369
370 return 0; 376 return 0;
371 } 377 }
372 378
373 bool WebRtcAudioDeviceImpl::Recording() const { 379 bool WebRtcAudioDeviceImpl::Recording() const {
374 base::AutoLock auto_lock(lock_); 380 base::AutoLock auto_lock(lock_);
375 return recording_; 381 return recording_;
376 } 382 }
377 383
378 int32_t WebRtcAudioDeviceImpl::SetAGC(bool enable) { 384 int32_t WebRtcAudioDeviceImpl::SetAGC(bool enable) {
379 DVLOG(1) << "WebRtcAudioDeviceImpl::SetAGC(enable=" << enable << ")"; 385 DVLOG(1) << "WebRtcAudioDeviceImpl::SetAGC(enable=" << enable << ")";
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 return false; 497 return false;
492 498
493 if (!renderer->Initialize(this)) 499 if (!renderer->Initialize(this))
494 return false; 500 return false;
495 501
496 renderer_ = renderer; 502 renderer_ = renderer;
497 return true; 503 return true;
498 } 504 }
499 505
500 } // namespace content 506 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698