• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 #ifndef WEBRTC_TEST_FAKE_AUDIO_DEVICE_H_
11 #define WEBRTC_TEST_FAKE_AUDIO_DEVICE_H_
12 
13 #include <string>
14 
15 #include "webrtc/base/criticalsection.h"
16 #include "webrtc/base/platform_thread.h"
17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/modules/audio_device/include/fake_audio_device.h"
19 #include "webrtc/typedefs.h"
20 
21 namespace webrtc {
22 
23 class Clock;
24 class EventTimerWrapper;
25 class FileWrapper;
26 class ModuleFileUtility;
27 
28 namespace test {
29 
30 class FakeAudioDevice : public FakeAudioDeviceModule {
31  public:
32   FakeAudioDevice(Clock* clock, const std::string& filename);
33 
34   virtual ~FakeAudioDevice();
35 
36   int32_t Init() override;
37   int32_t RegisterAudioCallback(AudioTransport* callback) override;
38 
39   bool Playing() const override;
40   int32_t PlayoutDelay(uint16_t* delay_ms) const override;
41   bool Recording() const override;
42 
43   void Start();
44   void Stop();
45 
46  private:
47   static bool Run(void* obj);
48   void CaptureAudio();
49 
50   static const uint32_t kFrequencyHz = 16000;
51   static const size_t kBufferSizeBytes = 2 * kFrequencyHz;
52 
53   AudioTransport* audio_callback_;
54   bool capturing_;
55   int8_t captured_audio_[kBufferSizeBytes];
56   int8_t playout_buffer_[kBufferSizeBytes];
57   int64_t last_playout_ms_;
58 
59   Clock* clock_;
60   rtc::scoped_ptr<EventTimerWrapper> tick_;
61   mutable rtc::CriticalSection lock_;
62   rtc::PlatformThread thread_;
63   rtc::scoped_ptr<ModuleFileUtility> file_utility_;
64   rtc::scoped_ptr<FileWrapper> input_stream_;
65 };
66 }  // namespace test
67 }  // namespace webrtc
68 
69 #endif  // WEBRTC_TEST_FAKE_AUDIO_DEVICE_H_
70