Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1134)

Side by Side Diff: content/renderer/media/webrtc_local_audio_track.h

Issue 37793005: move the APM to chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added a switch, it uses the APM in WebRtc if the switch is off, otherwise use the APM in Chrome. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_
6 #define CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_
7 7
8 #include <list> 8 #include <list>
9 #include <string> 9 #include <string>
10 10
11 #include "base/synchronization/lock.h" 11 #include "base/synchronization/lock.h"
12 #include "base/threading/thread_checker.h" 12 #include "base/threading/thread_checker.h"
13 #include "content/renderer/media/webrtc_audio_device_impl.h" 13 #include "content/renderer/media/webrtc_audio_device_impl.h"
14 #include "content/renderer/media/webrtc_local_audio_source_provider.h"
14 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h" 15 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface .h"
15 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 16 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
16 #include "third_party/libjingle/source/talk/app/webrtc/mediastreamtrack.h" 17 #include "third_party/libjingle/source/talk/app/webrtc/mediastreamtrack.h"
17 #include "third_party/libjingle/source/talk/media/base/audiorenderer.h" 18 #include "third_party/libjingle/source/talk/media/base/audiorenderer.h"
18 19
19 namespace cricket { 20 namespace cricket {
20 class AudioRenderer; 21 class AudioRenderer;
21 } // namespace cricket 22 } // namespace cricket
22 23
23 namespace media { 24 namespace media {
24 class AudioBus; 25 class AudioBus;
25 } // namespace media 26 } // namespace media
26 27
27 namespace content { 28 namespace content {
28 29
29 class WebAudioCapturerSource; 30 class WebAudioCapturerSource;
30 class WebRtcAudioCapturer; 31 class WebRtcAudioCapturer;
31 class WebRtcAudioCapturerSinkOwner; 32 class WebRtcAudioCapturerSinkOwner;
33 class WebRtcAudioProcessor;
32 34
33 // A WebRtcLocalAudioTrack instance contains the implementations of 35 // A WebRtcLocalAudioTrack instance contains the implementations of
34 // MediaStreamTrack and WebRtcAudioCapturerSink. 36 // MediaStreamTrack and WebRtcAudioCapturerSink.
35 // When an instance is created, it will register itself as a track to the 37 // When an instance is created, it will register itself as a track to the
36 // WebRtcAudioCapturer to get the captured data, and forward the data to 38 // WebRtcAudioCapturer to get the captured data, and forward the data to
37 // its |sinks_|. The data flow can be stopped by disabling the audio track. 39 // its |sinks_|. The data flow can be stopped by disabling the audio track.
38 class CONTENT_EXPORT WebRtcLocalAudioTrack 40 class CONTENT_EXPORT WebRtcLocalAudioTrack
39 : NON_EXPORTED_BASE(public cricket::AudioRenderer), 41 : NON_EXPORTED_BASE(public cricket::AudioRenderer),
40 NON_EXPORTED_BASE( 42 NON_EXPORTED_BASE(
41 public webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>) { 43 public webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>),
44 NON_EXPORTED_BASE(public WebRtcAudioRenderDataObserver) {
42 public: 45 public:
43 static scoped_refptr<WebRtcLocalAudioTrack> Create( 46 static scoped_refptr<WebRtcLocalAudioTrack> Create(
44 const std::string& id, 47 const std::string& id,
45 const scoped_refptr<WebRtcAudioCapturer>& capturer, 48 const scoped_refptr<WebRtcAudioCapturer>& capturer,
46 WebAudioCapturerSource* webaudio_source, 49 WebAudioCapturerSource* webaudio_source,
47 webrtc::AudioSourceInterface* track_source, 50 webrtc::AudioSourceInterface* track_source,
48 const webrtc::MediaConstraintsInterface* constraints); 51 const webrtc::MediaConstraintsInterface* constraints,
52 WebRtcAudioDeviceImpl* audio_device);
49 53
50 // Add a sink to the track. This function will trigger a SetCaptureFormat() 54 // Add a sink to the track. This function will trigger a SetCaptureFormat()
51 // call on the |sink|. 55 // call on the |sink|.
52 // Called on the main render thread. 56 // Called on the main render thread.
53 void AddSink(WebRtcAudioCapturerSink* sink); 57 void AddSink(WebRtcAudioCapturerSink* sink);
54 58
55 // Remove a sink from the track. 59 // Remove a sink from the track.
56 // Called on the main render thread. 60 // Called on the main render thread.
57 void RemoveSink(WebRtcAudioCapturerSink* sink); 61 void RemoveSink(WebRtcAudioCapturerSink* sink);
58 62
59 // Starts the local audio track. Called on the main render thread and 63 // Starts the local audio track. Called on the main render thread and
60 // should be called only once when audio track is created. 64 // should be called only once when audio track is created.
61 void Start(); 65 void Start();
62 66
63 // Stops the local audio track. Called on the main render thread and 67 // Stops the local audio track. Called on the main render thread by the
64 // should be called only once when audio track going away. 68 // capturer and should be called only once when audio track going away.
65 void Stop(); 69 void Stop();
66 70
67 // Method called by the capturer to deliver the capture data. 71 // Method called by the capturer to deliver the capture data.
68 void Capture(media::AudioBus* audio_source, 72 void Capture(media::AudioBus* audio_source,
69 int audio_delay_milliseconds, 73 int audio_delay_milliseconds,
70 int volume, 74 int volume,
71 bool key_pressed); 75 bool key_pressed);
72 76
73 // Method called by the capturer to set the audio parameters used by source 77 // Method called by the capturer to set the audio parameters used by source
74 // of the capture data.. 78 // of the capture data..
75 // Can be called on different user threads. 79 // Can be called on different user threads.
76 void SetCaptureFormat(const media::AudioParameters& params); 80 void SetCaptureFormat(const media::AudioParameters& params);
77 81
82 WebKit::WebAudioSourceProvider* audio_source_provider() const {
83 return source_provider_.get();
84 }
85
78 protected: 86 protected:
79 WebRtcLocalAudioTrack( 87 WebRtcLocalAudioTrack(
80 const std::string& label, 88 const std::string& label,
81 const scoped_refptr<WebRtcAudioCapturer>& capturer, 89 const scoped_refptr<WebRtcAudioCapturer>& capturer,
82 WebAudioCapturerSource* webaudio_source, 90 WebAudioCapturerSource* webaudio_source,
83 webrtc::AudioSourceInterface* track_source, 91 webrtc::AudioSourceInterface* track_source,
84 const webrtc::MediaConstraintsInterface* constraints); 92 const webrtc::MediaConstraintsInterface* constraints,
93 WebRtcAudioDeviceImpl* audio_device);
85 94
86 virtual ~WebRtcLocalAudioTrack(); 95 virtual ~WebRtcLocalAudioTrack();
87 96
88 private: 97 private:
89 typedef std::list<scoped_refptr<WebRtcAudioCapturerSinkOwner> > SinkList; 98 typedef std::list<scoped_refptr<WebRtcAudioCapturerSinkOwner> > SinkList;
90 99
91 // cricket::AudioCapturer implementation. 100 // cricket::AudioCapturer implementation.
92 virtual void AddChannel(int channel_id) OVERRIDE; 101 virtual void AddChannel(int channel_id) OVERRIDE;
93 virtual void RemoveChannel(int channel_id) OVERRIDE; 102 virtual void RemoveChannel(int channel_id) OVERRIDE;
94 103
95 // webrtc::AudioTrackInterface implementation. 104 // webrtc::AudioTrackInterface implementation.
96 virtual webrtc::AudioSourceInterface* GetSource() const OVERRIDE; 105 virtual webrtc::AudioSourceInterface* GetSource() const OVERRIDE;
97 virtual cricket::AudioRenderer* GetRenderer() OVERRIDE; 106 virtual cricket::AudioRenderer* GetRenderer() OVERRIDE;
98 107
99 // webrtc::MediaStreamTrack implementation. 108 // webrtc::MediaStreamTrack implementation.
100 virtual std::string kind() const OVERRIDE; 109 virtual std::string kind() const OVERRIDE;
101 110
111 // WebRtcAudioRenderDataObserver implementation.
112 virtual void OnRenderData(const int16* render_audio,
113 int sample_rate,
114 int number_of_channels,
115 int number_of_frames,
116 int render_delay_ms) OVERRIDE;
117 virtual void OnRenderClosing() OVERRIDE;
118
102 // The provider of captured data to render. 119 // The provider of captured data to render.
103 // The WebRtcAudioCapturer is today created by WebRtcAudioDeviceImpl. 120 // The WebRtcAudioCapturer is today created by WebRtcAudioDeviceImpl.
104 scoped_refptr<WebRtcAudioCapturer> capturer_; 121 scoped_refptr<WebRtcAudioCapturer> capturer_;
105 122
106 // The source of the audio track which is used by WebAudio, which provides 123 // The source of the audio track which is used by WebAudio, which provides
107 // data to the audio track when hooking up with WebAudio. 124 // data to the audio track when hooking up with WebAudio.
108 scoped_refptr<WebAudioCapturerSource> webaudio_source_; 125 scoped_refptr<WebAudioCapturerSource> webaudio_source_;
109 126
110 // The source of the audio track which handles the audio constraints. 127 // The source of the audio track which handles the audio constraints.
111 // TODO(xians): merge |track_source_| to |capturer_|. 128 // TODO(xians): merge |track_source_| to |capturer_|.
112 talk_base::scoped_refptr<webrtc::AudioSourceInterface> track_source_; 129 talk_base::scoped_refptr<webrtc::AudioSourceInterface> track_source_;
113 130
114 // A list of sinks that the audio data is fed to. 131 // A list of sinks that the audio data is fed to.
115 SinkList sinks_; 132 SinkList sinks_;
116 133
117 // Used to DCHECK that we are called on the correct thread. 134 // Used to DCHECK that we are called on the correct thread.
118 base::ThreadChecker thread_checker_; 135 base::ThreadChecker thread_checker_;
119 136
120 // Protects |params_| and |sinks_|. 137 // Protects |params_| and |sinks_|.
121 mutable base::Lock lock_; 138 mutable base::Lock lock_;
122 139
123 // A vector of WebRtc VoE channels that the capturer sends datat to. 140 // A vector of WebRtc VoE channels that the capturer sends datat to.
124 std::vector<int> voe_channels_; 141 std::vector<int> voe_channels_;
125 142
126 bool need_audio_processing_; 143 bool need_audio_processing_;
127 144
128 // Buffers used for temporary storage during capture callbacks. 145 // Cached audio parameters for the source.
129 // Allocated during initialization. 146 media::AudioParameters source_params_;
130 class ConfiguredBuffer; 147
131 scoped_refptr<ConfiguredBuffer> buffer_; 148 // Cached audio parameters for the sinks.
149 media::AudioParameters sink_params_;
150
151 scoped_ptr<WebRtcAudioProcessor> audio_processor_;
152
153 // The source provider to feed the track data to other clients like
154 // WebAudio.
155 const scoped_ptr<WebRtcLocalAudioSourceProvider> source_provider_;
156
157 WebRtcAudioDeviceImpl* audio_device_;
132 158
133 DISALLOW_COPY_AND_ASSIGN(WebRtcLocalAudioTrack); 159 DISALLOW_COPY_AND_ASSIGN(WebRtcLocalAudioTrack);
134 }; 160 };
135 161
136 } // namespace content 162 } // namespace content
137 163
138 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_ 164 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_LOCAL_AUDIO_TRACK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698