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

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

Issue 671793004: Clean up the media stream audio track code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 int audio_delay_milliseconds, 192 int audio_delay_milliseconds,
193 base::TimeDelta* current_time) = 0; 193 base::TimeDelta* current_time) = 0;
194 194
195 // Callback to notify the client that the renderer is going away. 195 // Callback to notify the client that the renderer is going away.
196 virtual void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) = 0; 196 virtual void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) = 0;
197 197
198 protected: 198 protected:
199 virtual ~WebRtcAudioRendererSource() {} 199 virtual ~WebRtcAudioRendererSource() {}
200 }; 200 };
201 201
202 class PeerConnectionAudioSink {
203 public:
204 // Callback to deliver the captured interleaved data.
205 // |channels| contains a vector of WebRtc VoE channels.
206 // |audio_data| is the pointer to the audio data.
207 // |sample_rate| is the sample frequency of audio data.
208 // |number_of_channels| is the number of channels reflecting the order of
209 // surround sound channels.
210 // |audio_delay_milliseconds| is recording delay value.
211 // |current_volume| is current microphone volume, in range of |0, 255].
212 // |need_audio_processing| indicates if the audio needs WebRtc AEC/NS/AGC
213 // audio processing.
214 // The return value is the new microphone volume, in the range of |0, 255].
215 // When the volume does not need to be updated, it returns 0.
216 virtual int OnData(const int16* audio_data,
217 int sample_rate,
218 int number_of_channels,
219 int number_of_frames,
220 const std::vector<int>& channels,
221 int audio_delay_milliseconds,
222 int current_volume,
223 bool need_audio_processing,
224 bool key_pressed) = 0;
225
226 // Set the format for the capture audio parameters.
227 // This is called when the capture format has changed, and it must be called
228 // on the same thread as calling CaptureData().
229 virtual void OnSetFormat(const media::AudioParameters& params) = 0;
230
231 protected:
232 virtual ~PeerConnectionAudioSink() {}
233 };
234
235 // TODO(xians): Merge this interface with WebRtcAudioRendererSource. 202 // TODO(xians): Merge this interface with WebRtcAudioRendererSource.
236 // The reason why we could not do it today is that WebRtcAudioRendererSource 203 // The reason why we could not do it today is that WebRtcAudioRendererSource
237 // gets the data by pulling, while the data is pushed into 204 // gets the data by pulling, while the data is pushed into
238 // WebRtcPlayoutDataSource::Sink. 205 // WebRtcPlayoutDataSource::Sink.
239 class WebRtcPlayoutDataSource { 206 class WebRtcPlayoutDataSource {
240 public: 207 public:
241 class Sink { 208 class Sink {
242 public: 209 public:
243 // Callback to get the playout data. 210 // Callback to get the playout data.
244 // Called on the render audio thread. 211 // Called on the render audio thread.
(...skipping 16 matching lines...) Expand all
261 virtual void RemovePlayoutSink(Sink* sink) = 0; 228 virtual void RemovePlayoutSink(Sink* sink) = 0;
262 229
263 protected: 230 protected:
264 virtual ~WebRtcPlayoutDataSource() {} 231 virtual ~WebRtcPlayoutDataSource() {}
265 }; 232 };
266 233
267 // Note that this class inherits from webrtc::AudioDeviceModule but due to 234 // Note that this class inherits from webrtc::AudioDeviceModule but due to
268 // the high number of non-implemented methods, we move the cruft over to the 235 // the high number of non-implemented methods, we move the cruft over to the
269 // WebRtcAudioDeviceNotImpl. 236 // WebRtcAudioDeviceNotImpl.
270 class CONTENT_EXPORT WebRtcAudioDeviceImpl 237 class CONTENT_EXPORT WebRtcAudioDeviceImpl
271 : NON_EXPORTED_BASE(public PeerConnectionAudioSink), 238 : NON_EXPORTED_BASE(public WebRtcAudioDeviceNotImpl),
272 NON_EXPORTED_BASE(public WebRtcAudioDeviceNotImpl),
273 NON_EXPORTED_BASE(public WebRtcAudioRendererSource), 239 NON_EXPORTED_BASE(public WebRtcAudioRendererSource),
274 NON_EXPORTED_BASE(public WebRtcPlayoutDataSource) { 240 NON_EXPORTED_BASE(public WebRtcPlayoutDataSource) {
275 public: 241 public:
276 // The maximum volume value WebRtc uses. 242 // The maximum volume value WebRtc uses.
277 static const int kMaxVolumeLevel = 255; 243 static const int kMaxVolumeLevel = 255;
278 244
279 // Instances of this object are created on the main render thread. 245 // Instances of this object are created on the main render thread.
280 WebRtcAudioDeviceImpl(); 246 WebRtcAudioDeviceImpl();
281 247
282 // webrtc::RefCountedModule implementation. 248 // webrtc::RefCountedModule implementation.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 320 }
355 321
356 private: 322 private:
357 typedef std::list<scoped_refptr<WebRtcAudioCapturer> > CapturerList; 323 typedef std::list<scoped_refptr<WebRtcAudioCapturer> > CapturerList;
358 typedef std::list<WebRtcPlayoutDataSource::Sink*> PlayoutDataSinkList; 324 typedef std::list<WebRtcPlayoutDataSource::Sink*> PlayoutDataSinkList;
359 class RenderBuffer; 325 class RenderBuffer;
360 326
361 // Make destructor private to ensure that we can only be deleted by Release(). 327 // Make destructor private to ensure that we can only be deleted by Release().
362 ~WebRtcAudioDeviceImpl() override; 328 ~WebRtcAudioDeviceImpl() override;
363 329
364 // PeerConnectionAudioSink implementation.
365
366 // Called on the AudioInputDevice worker thread.
367 int OnData(const int16* audio_data,
368 int sample_rate,
369 int number_of_channels,
370 int number_of_frames,
371 const std::vector<int>& channels,
372 int audio_delay_milliseconds,
373 int current_volume,
374 bool need_audio_processing,
375 bool key_pressed) override;
376
377 // Called on the AudioInputDevice worker thread.
378 void OnSetFormat(const media::AudioParameters& params) override;
379
380 // WebRtcAudioRendererSource implementation. 330 // WebRtcAudioRendererSource implementation.
381 331
382 // Called on the AudioOutputDevice worker thread. 332 // Called on the AudioOutputDevice worker thread.
383 void RenderData(media::AudioBus* audio_bus, 333 void RenderData(media::AudioBus* audio_bus,
384 int sample_rate, 334 int sample_rate,
385 int audio_delay_milliseconds, 335 int audio_delay_milliseconds,
386 base::TimeDelta* current_time) override; 336 base::TimeDelta* current_time) override;
387 337
388 // Called on the main render thread. 338 // Called on the main render thread.
389 void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) override; 339 void RemoveAudioRenderer(WebRtcAudioRenderer* renderer) override;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 bool recording_; 383 bool recording_;
434 384
435 // Stores latest microphone volume received in a CaptureData() callback. 385 // Stores latest microphone volume received in a CaptureData() callback.
436 // Range is [0, 255]. 386 // Range is [0, 255].
437 uint32_t microphone_volume_; 387 uint32_t microphone_volume_;
438 388
439 // Buffer used for temporary storage during render callback. 389 // Buffer used for temporary storage during render callback.
440 // It is only accessed by the audio render thread. 390 // It is only accessed by the audio render thread.
441 std::vector<int16> render_buffer_; 391 std::vector<int16> render_buffer_;
442 392
443 // Flag to tell if audio processing is enabled in MediaStreamAudioProcessor.
444 const bool is_audio_track_processing_enabled_;
445
446 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); 393 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl);
447 }; 394 };
448 395
449 } // namespace content 396 } // namespace content
450 397
451 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ 398 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698