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

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

Issue 2941563002: Enable new getUserMedia audio constraints algorithm behind a flag. (Closed)
Patch Set: remove vertical space from DEPS Created 3 years, 6 months 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_MEDIA_STREAM_AUDIO_PROCESSOR_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_
6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_ 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_
7 7
8 #include <memory>
9
8 #include "base/atomicops.h" 10 #include "base/atomicops.h"
9 #include "base/files/file.h" 11 #include "base/files/file.h"
10 #include "base/gtest_prod_util.h" 12 #include "base/gtest_prod_util.h"
11 #include "base/macros.h" 13 #include "base/macros.h"
12 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
13 #include "base/optional.h" 15 #include "base/optional.h"
14 #include "base/single_thread_task_runner.h" 16 #include "base/single_thread_task_runner.h"
15 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
16 #include "base/threading/thread_checker.h" 18 #include "base/threading/thread_checker.h"
17 #include "base/time/time.h" 19 #include "base/time/time.h"
18 #include "content/common/content_export.h" 20 #include "content/common/content_export.h"
19 #include "content/public/common/media_stream_request.h" 21 #include "content/public/common/media_stream_request.h"
20 #include "content/renderer/media/aec_dump_message_filter.h" 22 #include "content/renderer/media/aec_dump_message_filter.h"
21 #include "content/renderer/media/audio_repetition_detector.h" 23 #include "content/renderer/media/audio_repetition_detector.h"
24 #include "content/renderer/media/media_stream_audio_processor_options.h"
22 #include "content/renderer/media/webrtc_audio_device_impl.h" 25 #include "content/renderer/media/webrtc_audio_device_impl.h"
23 #include "media/base/audio_converter.h" 26 #include "media/base/audio_converter.h"
24 #include "third_party/webrtc/api/mediastreaminterface.h" 27 #include "third_party/webrtc/api/mediastreaminterface.h"
25 #include "third_party/webrtc/modules/audio_processing/include/audio_processing.h " 28 #include "third_party/webrtc/modules/audio_processing/include/audio_processing.h "
26 29
27 // The audio repetition detector is by default only used on non-official 30 // The audio repetition detector is by default only used on non-official
28 // ChromeOS builds for debugging purposes. http://crbug.com/658719. 31 // ChromeOS builds for debugging purposes. http://crbug.com/658719.
29 #if !defined(ENABLE_AUDIO_REPETITION_DETECTOR) 32 #if !defined(ENABLE_AUDIO_REPETITION_DETECTOR)
30 #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD) 33 #if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD)
31 #define ENABLE_AUDIO_REPETITION_DETECTOR 1 34 #define ENABLE_AUDIO_REPETITION_DETECTOR 1
32 #else 35 #else
33 #define ENABLE_AUDIO_REPETITION_DETECTOR 0 36 #define ENABLE_AUDIO_REPETITION_DETECTOR 0
34 #endif 37 #endif
35 #endif 38 #endif
36 39
37 namespace blink {
38 class WebMediaConstraints;
39 }
40
41 namespace media { 40 namespace media {
42 class AudioBus; 41 class AudioBus;
43 class AudioParameters; 42 class AudioParameters;
44 } // namespace media 43 } // namespace media
45 44
46 namespace webrtc { 45 namespace webrtc {
47 class TypingDetection; 46 class TypingDetection;
48 } 47 }
49 48
50 namespace content { 49 namespace content {
(...skipping 12 matching lines...) Expand all
63 NON_EXPORTED_BASE(public WebRtcPlayoutDataSource::Sink), 62 NON_EXPORTED_BASE(public WebRtcPlayoutDataSource::Sink),
64 NON_EXPORTED_BASE(public AudioProcessorInterface), 63 NON_EXPORTED_BASE(public AudioProcessorInterface),
65 NON_EXPORTED_BASE(public AecDumpMessageFilter::AecDumpDelegate) { 64 NON_EXPORTED_BASE(public AecDumpMessageFilter::AecDumpDelegate) {
66 public: 65 public:
67 // |playout_data_source| is used to register this class as a sink to the 66 // |playout_data_source| is used to register this class as a sink to the
68 // WebRtc playout data for processing AEC. If clients do not enable AEC, 67 // WebRtc playout data for processing AEC. If clients do not enable AEC,
69 // |playout_data_source| won't be used. 68 // |playout_data_source| won't be used.
70 // 69 //
71 // Threading note: The constructor assumes it is being run on the main render 70 // Threading note: The constructor assumes it is being run on the main render
72 // thread. 71 // thread.
73 MediaStreamAudioProcessor( 72 MediaStreamAudioProcessor(const AudioProcessingProperties& properties,
74 const blink::WebMediaConstraints& constraints, 73 WebRtcPlayoutDataSource* playout_data_source);
75 const MediaStreamDevice::AudioDeviceParameters& input_params,
76 WebRtcPlayoutDataSource* playout_data_source);
77 74
78 // Called when the format of the capture data has changed. 75 // Called when the format of the capture data has changed.
79 // Called on the main render thread. The caller is responsible for stopping 76 // Called on the main render thread. The caller is responsible for stopping
80 // the capture thread before calling this method. 77 // the capture thread before calling this method.
81 // After this method, the capture thread will be changed to a new capture 78 // After this method, the capture thread will be changed to a new capture
82 // thread. 79 // thread.
83 void OnCaptureFormatChanged(const media::AudioParameters& source_params); 80 void OnCaptureFormatChanged(const media::AudioParameters& source_params);
84 81
85 // Pushes capture data in |audio_source| to the internal FIFO. Each call to 82 // Pushes capture data in |audio_source| to the internal FIFO. Each call to
86 // this method should be followed by calls to ProcessAndConsumeData() while 83 // this method should be followed by calls to ProcessAndConsumeData() while
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 bool has_audio_processing() const { return audio_processing_ != NULL; } 116 bool has_audio_processing() const { return audio_processing_ != NULL; }
120 117
121 // AecDumpMessageFilter::AecDumpDelegate implementation. 118 // AecDumpMessageFilter::AecDumpDelegate implementation.
122 // Called on the main render thread. 119 // Called on the main render thread.
123 void OnAecDumpFile(const IPC::PlatformFileForTransit& file_handle) override; 120 void OnAecDumpFile(const IPC::PlatformFileForTransit& file_handle) override;
124 void OnDisableAecDump() override; 121 void OnDisableAecDump() override;
125 void OnAec3Enable(bool enable) override; 122 void OnAec3Enable(bool enable) override;
126 void OnIpcClosing() override; 123 void OnIpcClosing() override;
127 124
128 // Returns true if MediaStreamAudioProcessor would modify the audio signal, 125 // Returns true if MediaStreamAudioProcessor would modify the audio signal,
129 // based on the |constraints| and |effects_flags| parsed from a user media 126 // based on |properties|. If the audio signal would not be modified, there is
130 // request. If the audio signal would not be modified, there is no need to 127 // no need to instantiate a MediaStreamAudioProcessor and feed audio through
131 // instantiate a MediaStreamAudioProcessor and feed audio through it. Doing so 128 // it. Doing so would waste a non-trivial amount of memory and CPU resources.
132 // would waste a non-trivial amount of memory and CPU resources. 129 static bool WouldModifyAudio(const AudioProcessingProperties& properties);
133 //
134 // See media::AudioParameters::PlatformEffectsMask for interpretation of
135 // |effects_flags|.
136 static bool WouldModifyAudio(const blink::WebMediaConstraints& constraints,
137 int effects_flags);
138 130
139 protected: 131 protected:
140 ~MediaStreamAudioProcessor() override; 132 ~MediaStreamAudioProcessor() override;
141 133
142 private: 134 private:
143 friend class MediaStreamAudioProcessorTest; 135 friend class MediaStreamAudioProcessorTest;
144 136
145 FRIEND_TEST_ALL_PREFIXES(MediaStreamAudioProcessorTest, 137 FRIEND_TEST_ALL_PREFIXES(MediaStreamAudioProcessorTest,
146 GetAecDumpMessageFilter); 138 GetAecDumpMessageFilter);
147 139
148 // WebRtcPlayoutDataSource::Sink implementation. 140 // WebRtcPlayoutDataSource::Sink implementation.
149 void OnPlayoutData(media::AudioBus* audio_bus, 141 void OnPlayoutData(media::AudioBus* audio_bus,
150 int sample_rate, 142 int sample_rate,
151 int audio_delay_milliseconds) override; 143 int audio_delay_milliseconds) override;
152 void OnPlayoutDataSourceChanged() override; 144 void OnPlayoutDataSourceChanged() override;
153 void OnRenderThreadChanged() override; 145 void OnRenderThreadChanged() override;
154 146
155 // webrtc::AudioProcessorInterface implementation. 147 // webrtc::AudioProcessorInterface implementation.
156 // This method is called on the libjingle thread. 148 // This method is called on the libjingle thread.
157 void GetStats(AudioProcessorStats* stats) override; 149 void GetStats(AudioProcessorStats* stats) override;
158 150
159 // Helper to initialize the WebRtc AudioProcessing. 151 // Helper to initialize the WebRtc AudioProcessing.
160 void InitializeAudioProcessingModule( 152 void InitializeAudioProcessingModule(
161 const blink::WebMediaConstraints& constraints, 153 const AudioProcessingProperties& properties);
162 const MediaStreamDevice::AudioDeviceParameters& input_params);
163 154
164 // Helper to initialize the capture converter. 155 // Helper to initialize the capture converter.
165 void InitializeCaptureFifo(const media::AudioParameters& input_format); 156 void InitializeCaptureFifo(const media::AudioParameters& input_format);
166 157
167 // Helper to initialize the render converter. 158 // Helper to initialize the render converter.
168 void InitializeRenderFifoIfNeeded(int sample_rate, 159 void InitializeRenderFifoIfNeeded(int sample_rate,
169 int number_of_channels, 160 int number_of_channels,
170 int frames_per_buffer); 161 int frames_per_buffer);
171 162
172 // Called by ProcessAndConsumeData(). 163 // Called by ProcessAndConsumeData().
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 // Object for logging UMA stats for echo information when the AEC is enabled. 237 // Object for logging UMA stats for echo information when the AEC is enabled.
247 // Accessed on the main render thread. 238 // Accessed on the main render thread.
248 std::unique_ptr<EchoInformation> echo_information_; 239 std::unique_ptr<EchoInformation> echo_information_;
249 240
250 DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioProcessor); 241 DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioProcessor);
251 }; 242 };
252 243
253 } // namespace content 244 } // namespace content
254 245
255 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_ 246 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_
OLDNEW
« no previous file with comments | « content/public/common/content_features.cc ('k') | content/renderer/media/media_stream_audio_processor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698