Home | History | Annotate | Download | only in test
      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