15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/common/content_export.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/media/media_stream_source.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/renderer/media/webrtc_audio_capturer.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CONTENT_EXPORT MediaStreamAudioSource
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : NON_EXPORTED_BASE(public MediaStreamSource) {
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MediaStreamAudioSource(int render_frame_id,
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         const StreamDeviceInfo& device_info,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         const SourceStoppedCallback& stop_callback,
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                         PeerConnectionDependencyFactory* factory);
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MediaStreamAudioSource();
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~MediaStreamAudioSource();
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void AddTrack(const blink::WebMediaStreamTrack& track,
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                const blink::WebMediaConstraints& constraints,
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                const ConstraintsCallback& callback);
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetLocalAudioSource(webrtc::AudioSourceInterface* source) {
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    local_audio_source_ = source;
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer) {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DCHECK(!audio_capturer_.get());
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    audio_capturer_ = capturer;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const scoped_refptr<WebRtcAudioCapturer>& GetAudioCapturer() {
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return audio_capturer_;
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  webrtc::AudioSourceInterface* local_audio_source() {
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return local_audio_source_.get();
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected:
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DoStopSource() OVERRIDE;
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const int render_view_id_;  // Render view ID that created this source.
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PeerConnectionDependencyFactory* const factory_;
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This member holds an instance of webrtc::LocalAudioSource. This is used
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // as a container for audio options.
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_;
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<WebRtcAudioCapturer> audio_capturer_;
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource);
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_
67