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

Side by Side Diff: content/renderer/media/webrtc_audio_device_impl.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_AUDIO_DEVICE_IMPL_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_
6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ 6 #define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 }; 203 };
204 204
205 class WebRtcAudioCapturerSink { 205 class WebRtcAudioCapturerSink {
206 public: 206 public:
207 // Callback to deliver the captured interleaved data. 207 // Callback to deliver the captured interleaved data.
208 // |channels| contains a vector of WebRtc VoE channels. 208 // |channels| contains a vector of WebRtc VoE channels.
209 // |audio_data| is the pointer to the audio data. 209 // |audio_data| is the pointer to the audio data.
210 // |sample_rate| is the sample frequency of audio data. 210 // |sample_rate| is the sample frequency of audio data.
211 // |number_of_channels| is the number of channels reflecting the order of 211 // |number_of_channels| is the number of channels reflecting the order of
212 // surround sound channels. 212 // surround sound channels.
213 // |audio_delay_milliseconds| is recording delay value.
214 // |current_volume| is current microphone volume, in range of |0, 255].
215 // |need_audio_processing| indicates if the audio needs WebRtc AEC/NS/AGC
216 // audio processing.
217 // The return value is the new microphone volume, in the range of |0, 255].
218 // When the volume does not need to be updated, it returns 0.
219 virtual int CaptureData(const std::vector<int>& channels, 213 virtual int CaptureData(const std::vector<int>& channels,
Henrik Grunell 2013/10/31 11:56:12 Why remove the description of some input parameter
220 const int16* audio_data, 214 const int16* audio_data,
221 int sample_rate, 215 int sample_rate,
222 int number_of_channels, 216 int number_of_channels,
223 int number_of_frames, 217 int number_of_frames,
224 int audio_delay_milliseconds, 218 int audio_delay_milliseconds,
225 int current_volume, 219 int current_volume,
226 bool need_audio_processing, 220 bool need_audio_processing,
227 bool key_pressed) = 0; 221 bool key_pressed) = 0;
228 222
229 // Set the format for the capture audio parameters. 223 // Set the format for the capture audio parameters.
230 virtual void SetCaptureFormat(const media::AudioParameters& params) = 0; 224 virtual void SetCaptureFormat(const media::AudioParameters& params) = 0;
231 225
232 protected: 226 protected:
233 virtual ~WebRtcAudioCapturerSink() {} 227 virtual ~WebRtcAudioCapturerSink() {}
234 }; 228 };
235 229
230 class WebRtcAudioRenderDataObserver {
Henrik Grunell 2013/10/31 11:56:12 Add comment. See also next comment.
231 public:
232 // Callback to get the mixed rendered data.
233 virtual void OnRenderData(const int16* render_audio,
234 int sample_rate,
235 int number_of_channels,
236 int number_of_frames,
237 int render_delay_ms) = 0;
238
239 // Callback to notify the observer the webrtc render object is closing.
240 virtual void OnRenderClosing() = 0;
241
242 protected:
243 virtual ~WebRtcAudioRenderDataObserver() {}
244 };
245
236 // Note that this class inherits from webrtc::AudioDeviceModule but due to 246 // Note that this class inherits from webrtc::AudioDeviceModule but due to
237 // the high number of non-implemented methods, we move the cruft over to the 247 // the high number of non-implemented methods, we move the cruft over to the
238 // WebRtcAudioDeviceNotImpl. 248 // WebRtcAudioDeviceNotImpl.
239 class CONTENT_EXPORT WebRtcAudioDeviceImpl 249 class CONTENT_EXPORT WebRtcAudioDeviceImpl
240 : NON_EXPORTED_BASE(public WebRtcAudioDeviceNotImpl), 250 : NON_EXPORTED_BASE(public WebRtcAudioDeviceNotImpl),
241 NON_EXPORTED_BASE(public WebRtcAudioCapturerSink), 251 NON_EXPORTED_BASE(public WebRtcAudioCapturerSink),
242 NON_EXPORTED_BASE(public WebRtcAudioRendererSource) { 252 NON_EXPORTED_BASE(public WebRtcAudioRendererSource) {
243 public: 253 public:
244 // The maximum volume value WebRtc uses. 254 // The maximum volume value WebRtc uses.
245 static const int kMaxVolumeLevel = 255; 255 static const int kMaxVolumeLevel = 255;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const OVERRIDE; 308 virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const OVERRIDE;
299 virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const OVERRIDE; 309 virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const OVERRIDE;
300 310
301 // Sets the |renderer_|, returns false if |renderer_| already exists. 311 // Sets the |renderer_|, returns false if |renderer_| already exists.
302 // Called on the main renderer thread. 312 // Called on the main renderer thread.
303 bool SetAudioRenderer(WebRtcAudioRenderer* renderer); 313 bool SetAudioRenderer(WebRtcAudioRenderer* renderer);
304 314
305 // Adds the capturer to the ADM. 315 // Adds the capturer to the ADM.
306 void AddAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer); 316 void AddAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer);
307 317
318 // Add/Remove the observer to get the mixed render data for AEC.
Henrik Grunell 2013/10/31 11:56:12 I think the description "to get the mixed render d
319 void AddRenderDataObserver(WebRtcAudioRenderDataObserver* observer);
320 void RemoveRenderDataObserver(WebRtcAudioRenderDataObserver* observer);
321
308 // Gets the default capturer, which is the capturer in the list with 322 // Gets the default capturer, which is the capturer in the list with
309 // a valid |device_id|. Microphones are represented by capturers with a valid 323 // a valid |device_id|. Microphones are represented by capturers with a valid
310 // |device_id|, since only one microphone is supported today, only one 324 // |device_id|, since only one microphone is supported today, only one
311 // capturer in the |capturers_| can have a valid |device_id|. 325 // capturer in the |capturers_| can have a valid |device_id|.
312 scoped_refptr<WebRtcAudioCapturer> GetDefaultCapturer() const; 326 scoped_refptr<WebRtcAudioCapturer> GetDefaultCapturer() const;
313 327
314 const scoped_refptr<WebRtcAudioRenderer>& renderer() const { 328 const scoped_refptr<WebRtcAudioRenderer>& renderer() const {
315 return renderer_; 329 return renderer_;
316 } 330 }
317 int output_buffer_size() const { 331 int output_buffer_size() const {
318 return output_audio_parameters_.frames_per_buffer(); 332 return output_audio_parameters_.frames_per_buffer();
319 } 333 }
320 int output_channels() const { 334 int output_channels() const {
321 return output_audio_parameters_.channels(); 335 return output_audio_parameters_.channels();
322 } 336 }
323 int output_sample_rate() const { 337 int output_sample_rate() const {
324 return output_audio_parameters_.sample_rate(); 338 return output_audio_parameters_.sample_rate();
325 } 339 }
326 340
327 private: 341 private:
328 typedef std::list<scoped_refptr<WebRtcAudioCapturer> > CapturerList; 342 typedef std::list<scoped_refptr<WebRtcAudioCapturer> > CapturerList;
343 typedef std::list<WebRtcAudioRenderDataObserver* > RenderDataObservers;
329 344
330 // Make destructor private to ensure that we can only be deleted by Release(). 345 // Make destructor private to ensure that we can only be deleted by Release().
331 virtual ~WebRtcAudioDeviceImpl(); 346 virtual ~WebRtcAudioDeviceImpl();
332 347
333 // WebRtcAudioCapturerSink implementation. 348 // WebRtcAudioCapturerSink implementation.
334 349
335 // Called on the AudioInputDevice worker thread. 350 // Called on the AudioInputDevice worker thread.
336 virtual int CaptureData(const std::vector<int>& channels, 351 virtual int CaptureData(const std::vector<int>& channels,
337 const int16* audio_data, 352 const int16* audio_data,
338 int sample_rate, 353 int sample_rate,
(...skipping 24 matching lines...) Expand all
363 378
364 int ref_count_; 379 int ref_count_;
365 380
366 // List of captures which provides access to the native audio input layer 381 // List of captures which provides access to the native audio input layer
367 // in the browser process. 382 // in the browser process.
368 CapturerList capturers_; 383 CapturerList capturers_;
369 384
370 // Provides access to the audio renderer in the browser process. 385 // Provides access to the audio renderer in the browser process.
371 scoped_refptr<WebRtcAudioRenderer> renderer_; 386 scoped_refptr<WebRtcAudioRenderer> renderer_;
372 387
388 RenderDataObservers render_data_observers_;
389
373 // Weak reference to the audio callback. 390 // Weak reference to the audio callback.
374 // The webrtc client defines |audio_transport_callback_| by calling 391 // The webrtc client defines |audio_transport_callback_| by calling
375 // RegisterAudioCallback(). 392 // RegisterAudioCallback().
376 webrtc::AudioTransport* audio_transport_callback_; 393 webrtc::AudioTransport* audio_transport_callback_;
377 394
378 // Cached values of used output audio parameters. Platform dependent. 395 // Cached values of used output audio parameters. Platform dependent.
379 media::AudioParameters output_audio_parameters_; 396 media::AudioParameters output_audio_parameters_;
380 397
381 // Cached value of the current audio delay on the input/capture side. 398 // Cached value of the current audio delay on the input/capture side.
382 int input_delay_ms_; 399 int input_delay_ms_;
(...skipping 19 matching lines...) Expand all
402 // Stores latest microphone volume received in a CaptureData() callback. 419 // Stores latest microphone volume received in a CaptureData() callback.
403 // Range is [0, 255]. 420 // Range is [0, 255].
404 uint32_t microphone_volume_; 421 uint32_t microphone_volume_;
405 422
406 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); 423 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl);
407 }; 424 };
408 425
409 } // namespace content 426 } // namespace content
410 427
411 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ 428 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698