| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/renderer/media/media_stream_audio_source.h" |
| |
| #include "content/renderer/render_frame_impl.h" |
| |
| namespace content { |
| |
| MediaStreamAudioSource::MediaStreamAudioSource( |
| int render_frame_id, |
| const StreamDeviceInfo& device_info, |
| const SourceStoppedCallback& stop_callback, |
| PeerConnectionDependencyFactory* factory) |
| : render_frame_id_(render_frame_id), factory_(factory) { |
| SetDeviceInfo(device_info); |
| SetStopCallback(stop_callback); |
| } |
| |
| MediaStreamAudioSource::MediaStreamAudioSource() |
| : render_frame_id_(-1), factory_(NULL) { |
| } |
| |
| MediaStreamAudioSource::~MediaStreamAudioSource() {} |
| |
| void MediaStreamAudioSource::DoStopSource() { |
| if (audio_capturer_.get()) |
| audio_capturer_->Stop(); |
| } |
| |
| void MediaStreamAudioSource::AddTrack( |
| const blink::WebMediaStreamTrack& track, |
| const blink::WebMediaConstraints& constraints, |
| const ConstraintsCallback& callback) { |
| // TODO(xians): Properly implement for audio sources. |
| if (!local_audio_source_.get()) { |
| if (!factory_->InitializeMediaStreamAudioSource(render_frame_id_, |
| constraints, this)) { |
| // The source failed to start. |
| // UserMediaClientImpl rely on the |stop_callback| to be triggered when |
| // the last track is removed from the source. But in this case, the |
| // source is is not even started. So we need to fail both adding the |
| // track and trigger |stop_callback|. |
| callback.Run(this, MEDIA_DEVICE_TRACK_START_FAILURE, ""); |
| StopSource(); |
| return; |
| } |
| } |
| |
| factory_->CreateLocalAudioTrack(track); |
| callback.Run(this, MEDIA_DEVICE_OK, ""); |
| } |
| |
| } // namespace content |