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

Side by Side Diff: content/renderer/media/webrtc_audio_capturer.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_AUDIO_CAPTURER_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_CAPTURER_H_
6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_CAPTURER_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_CAPTURER_H_
7 7
8 #include <list> 8 #include <list>
9 #include <string> 9 #include <string>
10 10
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/synchronization/lock.h" 13 #include "base/synchronization/lock.h"
14 #include "base/threading/thread_checker.h" 14 #include "base/threading/thread_checker.h"
15 #include "content/renderer/media/webrtc_audio_device_impl.h" 15 #include "content/renderer/media/webrtc_audio_device_impl.h"
16 #include "content/renderer/media/webrtc_local_audio_source_provider.h"
17 #include "media/audio/audio_input_device.h" 16 #include "media/audio/audio_input_device.h"
18 #include "media/base/audio_capturer_source.h" 17 #include "media/base/audio_capturer_source.h"
19 18
20 namespace media { 19 namespace media {
21 class AudioBus; 20 class AudioBus;
22 } 21 }
23 22
24 namespace content { 23 namespace content {
25 24
26 class WebRtcLocalAudioRenderer; 25 class WebRtcLocalAudioRenderer;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 // WebRtcAudioDeviceImpl calls this method on the main render thread but 60 // WebRtcAudioDeviceImpl calls this method on the main render thread but
62 // other clients may call it from other threads. The current implementation 61 // other clients may call it from other threads. The current implementation
63 // does not support multi-thread calling. 62 // does not support multi-thread calling.
64 // Called on the main render thread or libjingle working thread. 63 // Called on the main render thread or libjingle working thread.
65 void AddTrack(WebRtcLocalAudioTrack* track); 64 void AddTrack(WebRtcLocalAudioTrack* track);
66 65
67 // Remove a audio track from the sinks of the capturer. 66 // Remove a audio track from the sinks of the capturer.
68 // Called on the main render thread or libjingle working thread. 67 // Called on the main render thread or libjingle working thread.
69 void RemoveTrack(WebRtcLocalAudioTrack* track); 68 void RemoveTrack(WebRtcLocalAudioTrack* track);
70 69
71 // SetCapturerSource() is called if the client on the source side desires to 70 // InitializeCapturerSource() is called if the client on the source side
72 // provide their own captured audio data. Client is responsible for calling 71 // desires to provide their own captured audio data. Client is responsible
73 // Start() on its own source to have the ball rolling. 72 // for calling Start() on its own source to have the ball rolling.
74 // Called on the main render thread. 73 // Called on the main render thread.
75 void SetCapturerSource( 74 void InitializeCapturerSource(
76 const scoped_refptr<media::AudioCapturerSource>& source, 75 const scoped_refptr<media::AudioCapturerSource>& source,
77 media::ChannelLayout channel_layout, 76 media::ChannelLayout channel_layout,
78 float sample_rate); 77 float sample_rate);
79 78
80 // Called when a stream is connecting to a peer connection. This will set 79 // Called when a stream is connecting to a peer connection. This will set
81 // up the native buffer size for the stream in order to optimize the 80 // up the native buffer size for the stream in order to optimize the
82 // performance for peer connection. 81 // performance for peer connection.
83 void EnablePeerConnectionMode(); 82 void EnablePeerConnectionMode();
84 83
85 // Volume APIs used by WebRtcAudioDeviceImpl. 84 // Volume APIs used by WebRtcAudioDeviceImpl.
(...skipping 18 matching lines...) Expand all
104 103
105 // Gets information about the paired output device. Returns true if such a 104 // Gets information about the paired output device. Returns true if such a
106 // device exists. 105 // device exists.
107 bool GetPairedOutputParameters(int* session_id, 106 bool GetPairedOutputParameters(int* session_id,
108 int* output_sample_rate, 107 int* output_sample_rate,
109 int* output_frames_per_buffer) const; 108 int* output_frames_per_buffer) const;
110 109
111 const std::string& device_id() const { return device_id_; } 110 const std::string& device_id() const { return device_id_; }
112 int session_id() const { return session_id_; } 111 int session_id() const { return session_id_; }
113 112
114 WebKit::WebAudioSourceProvider* audio_source_provider() const {
115 return source_provider_.get();
116 }
117
118 // Stops recording audio. 113 // Stops recording audio.
119 void Stop(); 114 void Stop();
120 115
116 // Called by the WebAudioCapturerSource to get the audio processing params.
117 // This function is triggered by provideInput() on the WebAudio audio thread,
118 // so it has been under the protection of |lock_|.
119 // TODO(xians): Remove after moving APM from WebRtc to Chrome.
120 void GetAudioProcessingParams(int* delay_ms, int* volume, bool* key_pressed);
121
121 protected: 122 protected:
122 friend class base::RefCountedThreadSafe<WebRtcAudioCapturer>; 123 friend class base::RefCountedThreadSafe<WebRtcAudioCapturer>;
123 WebRtcAudioCapturer(); 124 WebRtcAudioCapturer();
124 virtual ~WebRtcAudioCapturer(); 125 virtual ~WebRtcAudioCapturer();
125 126
126 private: 127 private:
127 class TrackOwner; 128 class TrackOwner;
128 typedef std::list<scoped_refptr<TrackOwner> > TrackList; 129 typedef std::list<scoped_refptr<TrackOwner> > TrackList;
129 130
130 // AudioCapturerSource::CaptureCallback implementation. 131 // AudioCapturerSource::CaptureCallback implementation.
131 // Called on the AudioInputDevice audio thread. 132 // Called on the AudioInputDevice audio thread.
132 virtual void Capture(media::AudioBus* audio_source, 133 virtual void Capture(media::AudioBus* audio_source,
133 int audio_delay_milliseconds, 134 int audio_delay_milliseconds,
134 double volume, 135 double volume,
135 bool key_pressed) OVERRIDE; 136 bool key_pressed) OVERRIDE;
136 virtual void OnCaptureError() OVERRIDE; 137 virtual void OnCaptureError() OVERRIDE;
137 138
138 // Reconfigures the capturer with a new capture parameters. 139 // Reconfigures the capturer with a new capture parameters.
139 // Must be called without holding the lock. 140 // Must be called without holding the lock.
140 void Reconfigure(int sample_rate, media::ChannelLayout channel_layout); 141 void Reconfigure(int sample_rate, media::ChannelLayout channel_layout);
141 142
142 // Starts recording audio. 143 // Starts recording audio.
143 // Triggered by AddSink() on the main render thread or a Libjingle working 144 // Triggered by AddSink() on the main render thread or a Libjingle working
144 // thread. It should NOT be called under |lock_|. 145 // thread. It should NOT be called under |lock_|.
145 void Start(); 146 void Start();
146 147
147
148
149 // Helper function to get the buffer size based on |peer_connection_mode_| 148 // Helper function to get the buffer size based on |peer_connection_mode_|
150 // and sample rate; 149 // and sample rate;
151 int GetBufferSize(int sample_rate) const; 150 int GetBufferSize(int sample_rate) const;
152 151
153 // Used to DCHECK that we are called on the correct thread. 152 // Used to DCHECK that we are called on the correct thread.
154 base::ThreadChecker thread_checker_; 153 base::ThreadChecker thread_checker_;
155 154
156 // Protects |source_|, |audio_tracks_|, |running_|, |loopback_fifo_|, 155 // Protects |source_|, |audio_tracks_|, |running_|, |loopback_fifo_|,
157 // |params_|, |buffering_| and |agc_is_enabled_|. 156 // |source_params_|, |buffering_| and |agc_is_enabled_|.
158 mutable base::Lock lock_; 157 mutable base::Lock lock_;
159 158
160 // A list of audio tracks that the audio data is fed to. 159 // A list of audio tracks that the audio data is fed to.
161 TrackList tracks_; 160 TrackList tracks_;
162 161
163 // The audio data source from the browser process. 162 // The audio data source from the browser process.
164 scoped_refptr<media::AudioCapturerSource> source_; 163 scoped_refptr<media::AudioCapturerSource> source_;
165 164
166 // Cached audio parameters for output. 165 // Cached audio parameters for output.
167 media::AudioParameters params_; 166 media::AudioParameters params_;
(...skipping 13 matching lines...) Expand all
181 // the browser. 180 // the browser.
182 int session_id_; 181 int session_id_;
183 182
184 // The device this capturer is given permission to use. 183 // The device this capturer is given permission to use.
185 std::string device_id_; 184 std::string device_id_;
186 185
187 // Stores latest microphone volume received in a CaptureData() callback. 186 // Stores latest microphone volume received in a CaptureData() callback.
188 // Range is [0, 255]. 187 // Range is [0, 255].
189 int volume_; 188 int volume_;
190 189
191 // The source provider to feed the capture data to other clients like
192 // WebAudio.
193 // TODO(xians): Move the source provider to track once we don't need to feed
194 // delay, volume, key_pressed information to WebAudioCapturerSource.
195 const scoped_ptr<WebRtcLocalAudioSourceProvider> source_provider_;
196
197 // Flag which affects the buffer size used by the capturer. 190 // Flag which affects the buffer size used by the capturer.
198 bool peer_connection_mode_; 191 bool peer_connection_mode_;
199 192
200 int output_sample_rate_; 193 int output_sample_rate_;
201 int output_frames_per_buffer_; 194 int output_frames_per_buffer_;
202 195
196 // Cache value for the audio processing params.
197 int audio_delay_ms_;
198 bool key_pressed_;
199
203 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioCapturer); 200 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioCapturer);
204 }; 201 };
205 202
206 } // namespace content 203 } // namespace content
207 204
208 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_CAPTURER_H_ 205 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_CAPTURER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698