Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / media_stream_audio_source.cc
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     MediaStreamDependencyFactory* 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