Home | History | Annotate | Download | only in media
      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