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

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

Issue 7497025: refactor AudioInputDevice to remove race condition. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: code review Created 9 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #pragma once 7 #pragma once
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/threading/thread.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "content/renderer/media/audio_device.h" 15 #include "content/renderer/media/audio_device.h"
16 #include "content/renderer/media/audio_input_device.h" 16 #include "content/renderer/media/audio_input_device.h"
17 #include "content/renderer/media/audio_input_device_event_handler.h"
17 #include "third_party/webrtc/modules/audio_device/main/interface/audio_device.h" 18 #include "third_party/webrtc/modules/audio_device/main/interface/audio_device.h"
18 19
19 // A WebRtcAudioDeviceImpl instance implements the abstract interface 20 // A WebRtcAudioDeviceImpl instance implements the abstract interface
20 // webrtc::AudioDeviceModule which makes it possible for a user (e.g. webrtc:: 21 // webrtc::AudioDeviceModule which makes it possible for a user (e.g. webrtc::
21 // VoiceEngine) to register this class as an external AudioDeviceModule. 22 // VoiceEngine) to register this class as an external AudioDeviceModule.
22 // The user can then call WebRtcAudioDeviceImpl::StartPlayout() and 23 // The user can then call WebRtcAudioDeviceImpl::StartPlayout() and
23 // WebRtcAudioDeviceImpl::StartRecording() from the render process 24 // WebRtcAudioDeviceImpl::StartRecording() from the render process
24 // to initiate and start audio rendering and capturing in the browser process. 25 // to initiate and start audio rendering and capturing in the browser process.
25 // IPC is utilized to set up the media streams. 26 // IPC is utilized to set up the media streams.
26 // 27 //
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 // .-> RecordedDataIsAvailable ->| webrtc::VoiceEngine | => (encode+transmit) 75 // .-> RecordedDataIsAvailable ->| webrtc::VoiceEngine | => (encode+transmit)
75 // .---------------------. 76 // .---------------------.
76 // 77 //
77 // (*) Using SyncSocket for inter-process synchronization with low latency. 78 // (*) Using SyncSocket for inter-process synchronization with low latency.
78 // The actual data is transferred via SharedMemory. IPC is not involved 79 // The actual data is transferred via SharedMemory. IPC is not involved
79 // in the actual media transfer. 80 // in the actual media transfer.
80 // 81 //
81 // This class must be created on the main render thread since it creates 82 // This class must be created on the main render thread since it creates
82 // AudioDevice and AudioInputDevice objects and they both require a valid 83 // AudioDevice and AudioInputDevice objects and they both require a valid
83 // RenderThread::current() pointer. 84 // RenderThread::current() pointer.
84 // 85 // |adm_thread_| is the working thread for input portion of this class.
85 class WebRtcAudioDeviceImpl 86 class WebRtcAudioDeviceImpl
86 : public webrtc::AudioDeviceModule, 87 : public webrtc::AudioDeviceModule,
87 public AudioDevice::RenderCallback, 88 public AudioDevice::RenderCallback,
88 public AudioInputDevice::CaptureCallback { 89 public AudioInputDevice::CaptureCallback,
90 public AudioInputDeviceEventHandler {
89 public: 91 public:
90 WebRtcAudioDeviceImpl(size_t input_buffer_size, 92 WebRtcAudioDeviceImpl(size_t input_buffer_size,
91 size_t output_buffer_size, 93 size_t output_buffer_size,
92 int input_channels, 94 int input_channels,
93 int output_channels, 95 int output_channels,
94 double input_sample_rate, 96 double input_sample_rate,
95 double output_sample_rate); 97 double output_sample_rate);
96 virtual ~WebRtcAudioDeviceImpl(); 98 virtual ~WebRtcAudioDeviceImpl();
97 99
98 // AudioDevice::RenderCallback implementation. 100 // AudioDevice::RenderCallback implementation.
99 virtual void Render(const std::vector<float*>& audio_data, 101 virtual void Render(const std::vector<float*>& audio_data,
100 size_t number_of_frames, 102 size_t number_of_frames,
101 size_t audio_delay_milliseconds); 103 size_t audio_delay_milliseconds) OVERRIDE;
102 104
103 // AudioInputDevice::CaptureCallback implementation. 105 // AudioInputDevice::CaptureCallback implementation.
104 virtual void Capture(const std::vector<float*>& audio_data, 106 virtual void Capture(const std::vector<float*>& audio_data,
105 size_t number_of_frames, 107 size_t number_of_frames,
106 size_t audio_delay_milliseconds); 108 size_t audio_delay_milliseconds) OVERRIDE;
109
110 // AudioInputDeviceEventHandler implementation.
111 virtual void OnRecordingStarted() OVERRIDE;
112 virtual void OnRecordingStopped() OVERRIDE;
107 113
108 // webrtc::Module implementation. 114 // webrtc::Module implementation.
109 virtual int32_t Version(char* version, 115 virtual int32_t Version(char* version,
110 uint32_t& remaining_buffer_in_bytes, 116 uint32_t& remaining_buffer_in_bytes,
111 uint32_t& position) const; 117 uint32_t& position) const OVERRIDE;
112 virtual int32_t ChangeUniqueId(const int32_t id); 118 virtual int32_t ChangeUniqueId(const int32_t id) OVERRIDE;
113 virtual int32_t TimeUntilNextProcess(); 119 virtual int32_t TimeUntilNextProcess() OVERRIDE;
114 virtual int32_t Process(); 120 virtual int32_t Process() OVERRIDE;
115 121
116 // webrtc::AudioDeviceModule implementation. 122 // webrtc::AudioDeviceModule implementation.
117 virtual int32_t ActiveAudioLayer(AudioLayer* audio_layer) const; 123 virtual int32_t ActiveAudioLayer(AudioLayer* audio_layer) const OVERRIDE;
118 virtual ErrorCode LastError() const; 124 virtual ErrorCode LastError() const OVERRIDE;
119 125
120 virtual int32_t RegisterEventObserver( 126 virtual int32_t RegisterEventObserver(
121 webrtc::AudioDeviceObserver* event_callback); 127 webrtc::AudioDeviceObserver* event_callback) OVERRIDE;
122 virtual int32_t RegisterAudioCallback(webrtc::AudioTransport* audio_callback); 128 virtual int32_t RegisterAudioCallback(
129 webrtc::AudioTransport* audio_callback) OVERRIDE;
123 130
124 virtual int32_t Init(); 131 virtual int32_t Init() OVERRIDE;
125 virtual int32_t Terminate(); 132 virtual int32_t Terminate() OVERRIDE;
126 virtual bool Initialized() const; 133 virtual bool Initialized() const OVERRIDE;
127 134
128 virtual int16_t PlayoutDevices(); 135 virtual int16_t PlayoutDevices() OVERRIDE;
129 virtual int16_t RecordingDevices(); 136 virtual int16_t RecordingDevices() OVERRIDE;
130 virtual int32_t PlayoutDeviceName(uint16_t index, 137 virtual int32_t PlayoutDeviceName(
131 char name[webrtc::kAdmMaxDeviceNameSize], 138 uint16_t index,
132 char guid[webrtc::kAdmMaxGuidSize]); 139 char name[webrtc::kAdmMaxDeviceNameSize],
133 virtual int32_t RecordingDeviceName(uint16_t index, 140 char guid[webrtc::kAdmMaxGuidSize]) OVERRIDE;
134 char name[webrtc::kAdmMaxDeviceNameSize], 141 virtual int32_t RecordingDeviceName(
135 char guid[webrtc::kAdmMaxGuidSize]); 142 uint16_t index,
143 char name[webrtc::kAdmMaxDeviceNameSize],
144 char guid[webrtc::kAdmMaxGuidSize]) OVERRIDE;
136 145
137 virtual int32_t SetPlayoutDevice(uint16_t index); 146 virtual int32_t SetPlayoutDevice(uint16_t index) OVERRIDE;
138 virtual int32_t SetPlayoutDevice(WindowsDeviceType device); 147 virtual int32_t SetPlayoutDevice(WindowsDeviceType device) OVERRIDE;
139 virtual int32_t SetRecordingDevice(uint16_t index); 148 virtual int32_t SetRecordingDevice(uint16_t index) OVERRIDE;
140 virtual int32_t SetRecordingDevice(WindowsDeviceType device); 149 virtual int32_t SetRecordingDevice(WindowsDeviceType device) OVERRIDE;
141 150
142 virtual int32_t PlayoutIsAvailable(bool* available); 151 virtual int32_t PlayoutIsAvailable(bool* available) OVERRIDE;
143 virtual int32_t InitPlayout(); 152 virtual int32_t InitPlayout() OVERRIDE;
144 virtual bool PlayoutIsInitialized() const; 153 virtual bool PlayoutIsInitialized() const OVERRIDE;
145 virtual int32_t RecordingIsAvailable(bool* available); 154 virtual int32_t RecordingIsAvailable(bool* available) OVERRIDE;
146 virtual int32_t InitRecording(); 155 virtual int32_t InitRecording() OVERRIDE;
147 virtual bool RecordingIsInitialized() const; 156 virtual bool RecordingIsInitialized() const OVERRIDE;
148 157
149 virtual int32_t StartPlayout(); 158 virtual int32_t StartPlayout() OVERRIDE;
150 virtual int32_t StopPlayout(); 159 virtual int32_t StopPlayout() OVERRIDE;
151 virtual bool Playing() const; 160 virtual bool Playing() const OVERRIDE;
152 virtual int32_t StartRecording(); 161 virtual int32_t StartRecording() OVERRIDE;
153 virtual int32_t StopRecording(); 162 virtual int32_t StopRecording() OVERRIDE;
154 virtual bool Recording() const; 163 virtual bool Recording() const OVERRIDE;
155 164
156 virtual int32_t SetAGC(bool enable); 165 virtual int32_t SetAGC(bool enable) OVERRIDE;
157 virtual bool AGC() const; 166 virtual bool AGC() const OVERRIDE;
158 167
159 virtual int32_t SetWaveOutVolume(uint16_t volume_left, 168 virtual int32_t SetWaveOutVolume(uint16_t volume_left,
160 uint16_t volume_right); 169 uint16_t volume_right) OVERRIDE;
161 virtual int32_t WaveOutVolume(uint16_t* volume_left, 170 virtual int32_t WaveOutVolume(uint16_t* volume_left,
162 uint16_t* volume_right) const; 171 uint16_t* volume_right) const OVERRIDE;
163 172
164 virtual int32_t SpeakerIsAvailable(bool* available); 173 virtual int32_t SpeakerIsAvailable(bool* available) OVERRIDE;
165 virtual int32_t InitSpeaker(); 174 virtual int32_t InitSpeaker() OVERRIDE;
166 virtual bool SpeakerIsInitialized() const; 175 virtual bool SpeakerIsInitialized() const OVERRIDE;
167 virtual int32_t MicrophoneIsAvailable(bool* available); 176 virtual int32_t MicrophoneIsAvailable(bool* available) OVERRIDE;
168 virtual int32_t InitMicrophone(); 177 virtual int32_t InitMicrophone() OVERRIDE;
169 virtual bool MicrophoneIsInitialized() const; 178 virtual bool MicrophoneIsInitialized() const OVERRIDE;
170 179
171 virtual int32_t SpeakerVolumeIsAvailable(bool* available); 180 virtual int32_t SpeakerVolumeIsAvailable(bool* available) OVERRIDE;
172 virtual int32_t SetSpeakerVolume(uint32_t volume); 181 virtual int32_t SetSpeakerVolume(uint32_t volume) OVERRIDE;
173 virtual int32_t SpeakerVolume(uint32_t* volume) const; 182 virtual int32_t SpeakerVolume(uint32_t* volume) const OVERRIDE;
174 virtual int32_t MaxSpeakerVolume(uint32_t* max_volume) const; 183 virtual int32_t MaxSpeakerVolume(uint32_t* max_volume) const OVERRIDE;
175 virtual int32_t MinSpeakerVolume(uint32_t* min_volume) const; 184 virtual int32_t MinSpeakerVolume(uint32_t* min_volume) const OVERRIDE;
176 virtual int32_t SpeakerVolumeStepSize(uint16_t* step_size) const; 185 virtual int32_t SpeakerVolumeStepSize(uint16_t* step_size) const OVERRIDE;
177 186
178 virtual int32_t MicrophoneVolumeIsAvailable(bool* available); 187 virtual int32_t MicrophoneVolumeIsAvailable(bool* available) OVERRIDE;
179 virtual int32_t SetMicrophoneVolume(uint32_t volume); 188 virtual int32_t SetMicrophoneVolume(uint32_t volume) OVERRIDE;
180 virtual int32_t MicrophoneVolume(uint32_t* volume) const; 189 virtual int32_t MicrophoneVolume(uint32_t* volume) const OVERRIDE;
181 virtual int32_t MaxMicrophoneVolume(uint32_t* max_volume) const; 190 virtual int32_t MaxMicrophoneVolume(uint32_t* max_volume) const OVERRIDE;
182 virtual int32_t MinMicrophoneVolume(uint32_t* min_volume) const; 191 virtual int32_t MinMicrophoneVolume(uint32_t* min_volume) const OVERRIDE;
183 virtual int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const; 192 virtual int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const OVERRIDE;
184 193
185 virtual int32_t SpeakerMuteIsAvailable(bool* available); 194 virtual int32_t SpeakerMuteIsAvailable(bool* available) OVERRIDE;
186 virtual int32_t SetSpeakerMute(bool enable); 195 virtual int32_t SetSpeakerMute(bool enable) OVERRIDE;
187 virtual int32_t SpeakerMute(bool* enabled) const; 196 virtual int32_t SpeakerMute(bool* enabled) const OVERRIDE;
188 197
189 virtual int32_t MicrophoneMuteIsAvailable(bool* available); 198 virtual int32_t MicrophoneMuteIsAvailable(bool* available) OVERRIDE;
190 virtual int32_t SetMicrophoneMute(bool enable); 199 virtual int32_t SetMicrophoneMute(bool enable) OVERRIDE;
191 virtual int32_t MicrophoneMute(bool* enabled) const; 200 virtual int32_t MicrophoneMute(bool* enabled) const OVERRIDE;
192 201
193 virtual int32_t MicrophoneBoostIsAvailable(bool* available); 202 virtual int32_t MicrophoneBoostIsAvailable(bool* available) OVERRIDE;
194 virtual int32_t SetMicrophoneBoost(bool enable); 203 virtual int32_t SetMicrophoneBoost(bool enable) OVERRIDE;
195 virtual int32_t MicrophoneBoost(bool* enabled) const; 204 virtual int32_t MicrophoneBoost(bool* enabled) const OVERRIDE;
196 205
197 virtual int32_t StereoPlayoutIsAvailable(bool* available) const; 206 virtual int32_t StereoPlayoutIsAvailable(bool* available) const OVERRIDE;
198 virtual int32_t SetStereoPlayout(bool enable); 207 virtual int32_t SetStereoPlayout(bool enable) OVERRIDE;
199 virtual int32_t StereoPlayout(bool* enabled) const; 208 virtual int32_t StereoPlayout(bool* enabled) const OVERRIDE;
200 virtual int32_t StereoRecordingIsAvailable(bool* available) const; 209 virtual int32_t StereoRecordingIsAvailable(bool* available) const OVERRIDE;
201 virtual int32_t SetStereoRecording(bool enable); 210 virtual int32_t SetStereoRecording(bool enable) OVERRIDE;
202 virtual int32_t StereoRecording(bool* enabled) const; 211 virtual int32_t StereoRecording(bool* enabled) const OVERRIDE;
203 virtual int32_t SetRecordingChannel(const ChannelType channel); 212 virtual int32_t SetRecordingChannel(const ChannelType channel) OVERRIDE;
204 virtual int32_t RecordingChannel(ChannelType* channel) const; 213 virtual int32_t RecordingChannel(ChannelType* channel) const OVERRIDE;
205 214
206 virtual int32_t SetPlayoutBuffer(const BufferType type, uint16_t size_ms); 215 virtual int32_t SetPlayoutBuffer(const BufferType type,
207 virtual int32_t PlayoutBuffer(BufferType* type, uint16_t* size_ms) const; 216 uint16_t size_ms) OVERRIDE;
208 virtual int32_t PlayoutDelay(uint16_t* delay_ms) const; 217 virtual int32_t PlayoutBuffer(BufferType* type,
209 virtual int32_t RecordingDelay(uint16_t* delay_ms) const; 218 uint16_t* size_ms) const OVERRIDE;
219 virtual int32_t PlayoutDelay(uint16_t* delay_ms) const OVERRIDE;
220 virtual int32_t RecordingDelay(uint16_t* delay_ms) const OVERRIDE;
210 221
211 virtual int32_t CPULoad(uint16_t* load) const; 222 virtual int32_t CPULoad(uint16_t* load) const OVERRIDE;
212 223
213 virtual int32_t StartRawOutputFileRecording( 224 virtual int32_t StartRawOutputFileRecording(
214 const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]); 225 const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) OVERRIDE;
215 virtual int32_t StopRawOutputFileRecording(); 226 virtual int32_t StopRawOutputFileRecording() OVERRIDE;
216 virtual int32_t StartRawInputFileRecording( 227 virtual int32_t StartRawInputFileRecording(
217 const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]); 228 const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) OVERRIDE;
218 virtual int32_t StopRawInputFileRecording(); 229 virtual int32_t StopRawInputFileRecording() OVERRIDE;
219 230
220 virtual int32_t SetRecordingSampleRate(const uint32_t samples_per_sec); 231 virtual int32_t SetRecordingSampleRate(
221 virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const; 232 const uint32_t samples_per_sec) OVERRIDE;
222 virtual int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec); 233 virtual int32_t RecordingSampleRate(uint32_t* samples_per_sec) const OVERRIDE;
223 virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const; 234 virtual int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec) OVERRIDE;
235 virtual int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const OVERRIDE;
224 236
225 virtual int32_t ResetAudioDevice(); 237 virtual int32_t ResetAudioDevice() OVERRIDE;
226 virtual int32_t SetLoudspeakerStatus(bool enable); 238 virtual int32_t SetLoudspeakerStatus(bool enable) OVERRIDE;
227 virtual int32_t GetLoudspeakerStatus(bool* enabled) const; 239 virtual int32_t GetLoudspeakerStatus(bool* enabled) const OVERRIDE;
228
229 // Helpers.
230 bool BufferSizeIsValid(size_t buffer_size, float sample_rate) const;
231 240
232 // Accessors. 241 // Accessors.
233 size_t input_buffer_size() const { return input_buffer_size_; } 242 size_t input_buffer_size() const { return input_buffer_size_; }
234 size_t output_buffer_size() const { return output_buffer_size_; } 243 size_t output_buffer_size() const { return output_buffer_size_; }
235 int input_channels() const { return input_channels_; } 244 int input_channels() const { return input_channels_; }
236 int output_channels() const { return output_channels_; } 245 int output_channels() const { return output_channels_; }
237 246
238 private: 247 private:
248 enum State {
249 kStarting,
250 kStarted,
251 kPaused,
252 kStopped,
253 kStopping,
254 kError,
255 };
256
257 // Helpers.
258 bool BufferSizeIsValid(size_t buffer_size, float sample_rate) const;
259
260 // Helpers running on ADM thread, corresponding to API functions.
261 void StartRecordingOnAdmThread();
262 void StopRecordingOnAdmThread();
263 void OnRecordingStartedOnAdmThread();
264 void OnRecordingStoppedOnAdmThread();
265 void RegisterAudioCallbackOnAdmThread(webrtc::AudioTransport* audio_callback,
266 int32_t* error,
267 base::WaitableEvent* event);
268 void GetRecordingOnAdmThread(bool* recording,
269 base::WaitableEvent* event) const;
270 void GetRecordingDelayOnAdmThread(uint16_t* delay_ms,
271 base::WaitableEvent* event) const;
272
239 // Provides access to the native audio input layer in the browser process. 273 // Provides access to the native audio input layer in the browser process.
240 scoped_refptr<AudioInputDevice> audio_input_device_; 274 scoped_refptr<AudioInputDevice> audio_input_device_;
241 275
242 // Provides access to the native audio output layer in the browser process. 276 // Provides access to the native audio output layer in the browser process.
243 scoped_refptr<AudioDevice> audio_output_device_; 277 scoped_refptr<AudioDevice> audio_output_device_;
244 278
245 // Weak reference to the audio callback. 279 // Weak reference to the audio callback.
246 // The webrtc client defines |audio_transport_callback_| by calling 280 // The webrtc client defines |audio_transport_callback_| by calling
247 // RegisterAudioCallback(). 281 // RegisterAudioCallback().
248 webrtc::AudioTransport* audio_transport_callback_; 282 webrtc::AudioTransport* audio_transport_callback_;
249 283
250 webrtc::AudioDeviceModule::ErrorCode last_error_; 284 webrtc::AudioDeviceModule::ErrorCode last_error_;
251 285
252 size_t input_buffer_size_; 286 size_t input_buffer_size_;
253 size_t output_buffer_size_; 287 size_t output_buffer_size_;
254 int input_channels_; 288 int input_channels_;
255 int output_channels_; 289 int output_channels_;
256 double input_sample_rate_; 290 double input_sample_rate_;
257 double output_sample_rate_; 291 double output_sample_rate_;
258 292
259 int bytes_per_sample_; 293 int bytes_per_sample_;
260 294
295 base::Thread adm_thread_;
296 scoped_refptr<base::MessageLoopProxy> adm_message_loop_;
297 // Used for input sync writer to access variables modified by output sync
298 // writer.
299 base::Lock lock_;
300 base::WaitableEvent recording_stop_event_;
301
261 bool initialized_; 302 bool initialized_;
262 bool playing_; 303 bool playing_;
263 bool recording_; 304 State recording_state_;
264 305
265 // Cached value of the current audio delay on the input/capture side. 306 // Cached value of the current audio delay on the input/capture side.
266 int input_delay_ms_; 307 int input_delay_ms_;
267 308
268 // Cached value of the current audio delay on the output/renderer side. 309 // Cached value of the current audio delay on the output/renderer side.
269 int output_delay_ms_; 310 int output_delay_ms_;
270 311
271 base::TimeTicks last_process_time_; 312 base::TimeTicks last_process_time_;
272 313
273 // Buffers used for temporary storage during capture/render callbacks. 314 // Buffers used for temporary storage during capture/render callbacks.
274 // Allocated during construction to save stack. 315 // Allocated during construction to save stack.
275 scoped_array<int16> input_buffer_; 316 scoped_array<int16> input_buffer_;
276 scoped_array<int16> output_buffer_; 317 scoped_array<int16> output_buffer_;
277 318
278 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl); 319 DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl);
279 }; 320 };
280 321
322 DISABLE_RUNNABLE_METHOD_REFCOUNT(WebRtcAudioDeviceImpl);
323 DISABLE_RUNNABLE_METHOD_REFCOUNT(const WebRtcAudioDeviceImpl);
324
281 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_ 325 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_IMPL_H_
OLDNEW
« no previous file with comments | « content/renderer/media/audio_input_message_filter.cc ('k') | content/renderer/media/webrtc_audio_device_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698