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

Side by Side Diff: talk/app/webrtc/test/fakeaudiocapturemodule.h

Issue 1236023010: In PeerConnectionTestWrapper, put audio input on a separate thread. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: resolving patch conflicts due to splitting this CL Created 5 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 22 matching lines...) Expand all
33 33
34 // Note P postfix of a function indicates that it should only be called by the 34 // Note P postfix of a function indicates that it should only be called by the
35 // processing thread. 35 // processing thread.
36 36
37 #ifndef TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 37 #ifndef TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_
38 #define TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 38 #define TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_
39 39
40 #include "webrtc/base/basictypes.h" 40 #include "webrtc/base/basictypes.h"
41 #include "webrtc/base/criticalsection.h" 41 #include "webrtc/base/criticalsection.h"
42 #include "webrtc/base/messagehandler.h" 42 #include "webrtc/base/messagehandler.h"
43 #include "webrtc/base/scoped_ptr.h"
43 #include "webrtc/base/scoped_ref_ptr.h" 44 #include "webrtc/base/scoped_ref_ptr.h"
44 #include "webrtc/common_types.h" 45 #include "webrtc/common_types.h"
45 #include "webrtc/modules/audio_device/include/audio_device.h" 46 #include "webrtc/modules/audio_device/include/audio_device.h"
46 47
47 namespace rtc { 48 namespace rtc {
48
49 class Thread; 49 class Thread;
50
51 } // namespace rtc 50 } // namespace rtc
52 51
53 class FakeAudioCaptureModule 52 class FakeAudioCaptureModule
54 : public webrtc::AudioDeviceModule, 53 : public webrtc::AudioDeviceModule,
55 public rtc::MessageHandler { 54 public rtc::MessageHandler {
56 public: 55 public:
57 typedef uint16 Sample; 56 typedef uint16 Sample;
58 57
59 // The value for the following constants have been derived by running VoE 58 // The value for the following constants have been derived by running VoE
60 // using a real ADM. The constants correspond to 10ms of mono audio at 44kHz. 59 // using a real ADM. The constants correspond to 10ms of mono audio at 44kHz.
61 static const int kNumberSamples = 440; 60 static const int kNumberSamples = 440;
62 static const int kNumberBytesPerSample = sizeof(Sample); 61 static const int kNumberBytesPerSample = sizeof(Sample);
63 62
64 // Creates a FakeAudioCaptureModule or returns NULL on failure. 63 // Creates a FakeAudioCaptureModule or returns NULL on failure.
65 // |process_thread| is used to push and pull audio frames to and from the 64 static rtc::scoped_refptr<FakeAudioCaptureModule> Create();
66 // returned instance. Note: ownership of |process_thread| is not handed over.
67 static rtc::scoped_refptr<FakeAudioCaptureModule> Create(
68 rtc::Thread* process_thread);
69 65
70 // Returns the number of frames that have been successfully pulled by the 66 // Returns the number of frames that have been successfully pulled by the
71 // instance. Note that correctly detecting success can only be done if the 67 // instance. Note that correctly detecting success can only be done if the
72 // pulled frame was generated/pushed from a FakeAudioCaptureModule. 68 // pulled frame was generated/pushed from a FakeAudioCaptureModule.
73 int frames_received() const; 69 int frames_received() const;
74 70
75 // Following functions are inherited from webrtc::AudioDeviceModule. 71 // Following functions are inherited from webrtc::AudioDeviceModule.
76 // Only functions called by PeerConnection are implemented, the rest do 72 // Only functions called by PeerConnection are implemented, the rest do
77 // nothing and return success. If a function is not expected to be called by 73 // nothing and return success. If a function is not expected to be called by
78 // PeerConnection an assertion is triggered if it is in fact called. 74 // PeerConnection an assertion is triggered if it is in fact called.
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 195
200 // The following function is inherited from rtc::MessageHandler. 196 // The following function is inherited from rtc::MessageHandler.
201 void OnMessage(rtc::Message* msg) override; 197 void OnMessage(rtc::Message* msg) override;
202 198
203 protected: 199 protected:
204 // The constructor is protected because the class needs to be created as a 200 // The constructor is protected because the class needs to be created as a
205 // reference counted object (for memory managment reasons). It could be 201 // reference counted object (for memory managment reasons). It could be
206 // exposed in which case the burden of proper instantiation would be put on 202 // exposed in which case the burden of proper instantiation would be put on
207 // the creator of a FakeAudioCaptureModule instance. To create an instance of 203 // the creator of a FakeAudioCaptureModule instance. To create an instance of
208 // this class use the Create(..) API. 204 // this class use the Create(..) API.
209 explicit FakeAudioCaptureModule(rtc::Thread* process_thread); 205 explicit FakeAudioCaptureModule();
210 // The destructor is protected because it is reference counted and should not 206 // The destructor is protected because it is reference counted and should not
211 // be deleted directly. 207 // be deleted directly.
212 virtual ~FakeAudioCaptureModule(); 208 virtual ~FakeAudioCaptureModule();
213 209
214 private: 210 private:
215 // Initializes the state of the FakeAudioCaptureModule. This API is called on 211 // Initializes the state of the FakeAudioCaptureModule. This API is called on
216 // creation by the Create() API. 212 // creation by the Create() API.
217 bool Initialize(); 213 bool Initialize();
218 // SetBuffer() sets all samples in send_buffer_ to |value|. 214 // SetBuffer() sets all samples in send_buffer_ to |value|.
219 void SetSendBuffer(int value); 215 void SetSendBuffer(int value);
(...skipping 12 matching lines...) Expand all
232 228
233 // Starts the periodic calling of ProcessFrame() in a thread safe way. 229 // Starts the periodic calling of ProcessFrame() in a thread safe way.
234 void StartProcessP(); 230 void StartProcessP();
235 // Periodcally called function that ensures that frames are pulled and pushed 231 // Periodcally called function that ensures that frames are pulled and pushed
236 // periodically if enabled/started. 232 // periodically if enabled/started.
237 void ProcessFrameP(); 233 void ProcessFrameP();
238 // Pulls frames from the registered webrtc::AudioTransport. 234 // Pulls frames from the registered webrtc::AudioTransport.
239 void ReceiveFrameP(); 235 void ReceiveFrameP();
240 // Pushes frames to the registered webrtc::AudioTransport. 236 // Pushes frames to the registered webrtc::AudioTransport.
241 void SendFrameP(); 237 void SendFrameP();
242 // Stops the periodic calling of ProcessFrame() in a thread safe way.
243 void StopProcessP();
244 238
245 // The time in milliseconds when Process() was last called or 0 if no call 239 // The time in milliseconds when Process() was last called or 0 if no call
246 // has been made. 240 // has been made.
247 uint32 last_process_time_ms_; 241 uint32 last_process_time_ms_;
248 242
249 // Callback for playout and recording. 243 // Callback for playout and recording.
250 webrtc::AudioTransport* audio_callback_; 244 webrtc::AudioTransport* audio_callback_;
251 245
252 bool recording_; // True when audio is being pushed from the instance. 246 bool recording_; // True when audio is being pushed from the instance.
253 bool playing_; // True when audio is being pulled by the instance. 247 bool playing_; // True when audio is being pulled by the instance.
254 248
255 bool play_is_initialized_; // True when the instance is ready to pull audio. 249 bool play_is_initialized_; // True when the instance is ready to pull audio.
256 bool rec_is_initialized_; // True when the instance is ready to push audio. 250 bool rec_is_initialized_; // True when the instance is ready to push audio.
257 251
258 // Input to and output from RecordedDataIsAvailable(..) makes it possible to 252 // Input to and output from RecordedDataIsAvailable(..) makes it possible to
259 // modify the current mic level. The implementation does not care about the 253 // modify the current mic level. The implementation does not care about the
260 // mic level so it just feeds back what it receives. 254 // mic level so it just feeds back what it receives.
261 uint32_t current_mic_level_; 255 uint32_t current_mic_level_;
262 256
263 // next_frame_time_ is updated in a non-drifting manner to indicate the next 257 // next_frame_time_ is updated in a non-drifting manner to indicate the next
264 // wall clock time the next frame should be generated and received. started_ 258 // wall clock time the next frame should be generated and received. started_
265 // ensures that next_frame_time_ can be initialized properly on first call. 259 // ensures that next_frame_time_ can be initialized properly on first call.
266 bool started_; 260 bool started_;
267 uint32 next_frame_time_; 261 uint32 next_frame_time_;
268 262
269 // User provided thread context. 263 rtc::scoped_ptr<rtc::Thread> process_thread_;
270 rtc::Thread* process_thread_;
271 264
272 // Buffer for storing samples received from the webrtc::AudioTransport. 265 // Buffer for storing samples received from the webrtc::AudioTransport.
273 char rec_buffer_[kNumberSamples * kNumberBytesPerSample]; 266 char rec_buffer_[kNumberSamples * kNumberBytesPerSample];
274 // Buffer for samples to send to the webrtc::AudioTransport. 267 // Buffer for samples to send to the webrtc::AudioTransport.
275 char send_buffer_[kNumberSamples * kNumberBytesPerSample]; 268 char send_buffer_[kNumberSamples * kNumberBytesPerSample];
276 269
277 // Counter of frames received that have samples of high enough amplitude to 270 // Counter of frames received that have samples of high enough amplitude to
278 // indicate that the frames are not faked somewhere in the audio pipeline 271 // indicate that the frames are not faked somewhere in the audio pipeline
279 // (e.g. by a jitter buffer). 272 // (e.g. by a jitter buffer).
280 int frames_received_; 273 int frames_received_;
281 274
282 // Protects variables that are accessed from process_thread_ and 275 // Protects variables that are accessed from process_thread_ and
283 // the main thread. 276 // the main thread.
284 mutable rtc::CriticalSection crit_; 277 mutable rtc::CriticalSection crit_;
285 // Protects |audio_callback_| that is accessed from process_thread_ and 278 // Protects |audio_callback_| that is accessed from process_thread_ and
286 // the main thread. 279 // the main thread.
287 rtc::CriticalSection crit_callback_; 280 rtc::CriticalSection crit_callback_;
288 }; 281 };
289 282
290 #endif // TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 283 #endif // TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_
OLDNEW
« no previous file with comments | « talk/app/webrtc/peerconnectionendtoend_unittest.cc ('k') | talk/app/webrtc/test/fakeaudiocapturemodule.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698