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_WEBRTC_WEBRTC_LOCAL_AUDIO_TRACK_ADAPTER_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_LOCAL_AUDIO_TRACK_ADAPTER_H_ 7 8 #include <vector> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/scoped_vector.h" 12 #include "base/synchronization/lock.h" 13 #include "content/common/content_export.h" 14 #include "third_party/libjingle/source/talk/app/webrtc/mediastreamtrack.h" 15 #include "third_party/libjingle/source/talk/media/base/audiorenderer.h" 16 17 namespace cricket { 18 class AudioRenderer; 19 } 20 21 namespace webrtc { 22 class AudioSourceInterface; 23 class AudioProcessorInterface; 24 } 25 26 namespace content { 27 28 class MediaStreamAudioProcessor; 29 class WebRtcAudioSinkAdapter; 30 class WebRtcLocalAudioTrack; 31 32 class CONTENT_EXPORT WebRtcLocalAudioTrackAdapter NON_EXPORTED_BASE(public cricket::AudioRenderer)33 : NON_EXPORTED_BASE(public cricket::AudioRenderer), 34 NON_EXPORTED_BASE( 35 public webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>) { 36 public: 37 static scoped_refptr<WebRtcLocalAudioTrackAdapter> Create( 38 const std::string& label, 39 webrtc::AudioSourceInterface* track_source); 40 41 WebRtcLocalAudioTrackAdapter( 42 const std::string& label, 43 webrtc::AudioSourceInterface* track_source); 44 45 virtual ~WebRtcLocalAudioTrackAdapter(); 46 47 void Initialize(WebRtcLocalAudioTrack* owner); 48 49 std::vector<int> VoeChannels() const; 50 51 // Called on the audio thread by the WebRtcLocalAudioTrack to set the signal 52 // level of the audio data. 53 void SetSignalLevel(int signal_level); 54 55 // Method called by the WebRtcLocalAudioTrack to set the processor that 56 // applies signal processing on the data of the track. 57 // This class will keep a reference of the |processor|. 58 // Called on the main render thread. 59 void SetAudioProcessor( 60 const scoped_refptr<MediaStreamAudioProcessor>& processor); 61 62 private: 63 // webrtc::MediaStreamTrack implementation. 64 virtual std::string kind() const OVERRIDE; 65 66 // webrtc::AudioTrackInterface implementation. 67 virtual void AddSink(webrtc::AudioTrackSinkInterface* sink) OVERRIDE; 68 virtual void RemoveSink(webrtc::AudioTrackSinkInterface* sink) OVERRIDE; 69 virtual bool GetSignalLevel(int* level) OVERRIDE; 70 virtual rtc::scoped_refptr<webrtc::AudioProcessorInterface> 71 GetAudioProcessor() OVERRIDE; 72 73 // cricket::AudioCapturer implementation. 74 virtual void AddChannel(int channel_id) OVERRIDE; 75 virtual void RemoveChannel(int channel_id) OVERRIDE; 76 77 // webrtc::AudioTrackInterface implementation. 78 virtual webrtc::AudioSourceInterface* GetSource() const OVERRIDE; 79 virtual cricket::AudioRenderer* GetRenderer() OVERRIDE; 80 81 // Weak reference. 82 WebRtcLocalAudioTrack* owner_; 83 84 // The source of the audio track which handles the audio constraints. 85 // TODO(xians): merge |track_source_| to |capturer_| in WebRtcLocalAudioTrack. 86 rtc::scoped_refptr<webrtc::AudioSourceInterface> track_source_; 87 88 // The audio processsor that applies audio processing on the data of audio 89 // track. 90 scoped_refptr<MediaStreamAudioProcessor> audio_processor_; 91 92 // A vector of WebRtc VoE channels that the capturer sends data to. 93 std::vector<int> voe_channels_; 94 95 // A vector of the peer connection sink adapters which receive the audio data 96 // from the audio track. 97 ScopedVector<WebRtcAudioSinkAdapter> sink_adapters_; 98 99 // The amplitude of the signal. 100 int signal_level_; 101 102 // Protects |voe_channels_|, |audio_processor_| and |signal_level_|. 103 mutable base::Lock lock_; 104 }; 105 106 } // namespace content 107 108 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_LOCAL_AUDIO_TRACK_ADAPTER_H_ 109