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#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
6#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
7
8#include "base/compiler_specific.h"
9#include "content/common/content_export.h"
10#include "content/renderer/media/media_stream_source.h"
11#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
12#include "content/renderer/media/webrtc_audio_capturer.h"
13#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
14
15namespace content {
16
17class CONTENT_EXPORT MediaStreamAudioSource
18    : NON_EXPORTED_BASE(public MediaStreamSource) {
19 public:
20  MediaStreamAudioSource(int render_frame_id,
21                         const StreamDeviceInfo& device_info,
22                         const SourceStoppedCallback& stop_callback,
23                         PeerConnectionDependencyFactory* factory);
24  MediaStreamAudioSource();
25  virtual ~MediaStreamAudioSource();
26
27  void AddTrack(const blink::WebMediaStreamTrack& track,
28                const blink::WebMediaConstraints& constraints,
29                const ConstraintsCallback& callback);
30
31  void SetLocalAudioSource(webrtc::AudioSourceInterface* source) {
32    local_audio_source_ = source;
33  }
34
35  void SetAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer) {
36    DCHECK(!audio_capturer_.get());
37    audio_capturer_ = capturer;
38  }
39
40  const scoped_refptr<WebRtcAudioCapturer>& GetAudioCapturer() {
41    return audio_capturer_;
42  }
43
44  webrtc::AudioSourceInterface* local_audio_source() {
45    return local_audio_source_.get();
46  }
47
48 protected:
49  virtual void DoStopSource() OVERRIDE;
50
51 private:
52  const int render_view_id_;  // Render view ID that created this source.
53  PeerConnectionDependencyFactory* const factory_;
54
55  // This member holds an instance of webrtc::LocalAudioSource. This is used
56  // as a container for audio options.
57  scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_;
58
59  scoped_refptr<WebRtcAudioCapturer> audio_capturer_;
60
61  DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource);
62};
63
64}  // namespace content
65
66#endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
67