1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/renderer/media/media_stream_audio_source.h" 6 7 namespace content { 8 9 MediaStreamAudioSource::MediaStreamAudioSource( 10 int render_view_id, 11 const StreamDeviceInfo& device_info, 12 const SourceStoppedCallback& stop_callback, 13 PeerConnectionDependencyFactory* factory) 14 : render_view_id_(render_view_id), 15 factory_(factory) { 16 SetDeviceInfo(device_info); 17 SetStopCallback(stop_callback); 18 } 19 20 MediaStreamAudioSource::MediaStreamAudioSource() 21 : render_view_id_(-1), 22 factory_(NULL) { 23 } 24 25 MediaStreamAudioSource::~MediaStreamAudioSource() {} 26 27 void MediaStreamAudioSource::DoStopSource() { 28 if (audio_capturer_.get()) 29 audio_capturer_->Stop(); 30 } 31 32 void MediaStreamAudioSource::AddTrack( 33 const blink::WebMediaStreamTrack& track, 34 const blink::WebMediaConstraints& constraints, 35 const ConstraintsCallback& callback) { 36 // TODO(xians): Properly implement for audio sources. 37 if (!local_audio_source_) { 38 if (!factory_->InitializeMediaStreamAudioSource(render_view_id_, 39 constraints, 40 this)) { 41 // The source failed to start. 42 // MediaStreamImpl rely on the |stop_callback| to be triggered when the 43 // last track is removed from the source. But in this case, the source is 44 // is not even started. So we need to fail both adding the track and 45 // trigger |stop_callback|. 46 callback.Run(this, false); 47 StopSource(); 48 return; 49 } 50 } 51 52 factory_->CreateLocalAudioTrack(track); 53 callback.Run(this, true); 54 } 55 56 } // namespace content 57