1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 // 5 // A fake implementation of AudioInputStream, useful for testing purpose. 6 7 #ifndef MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_ 8 #define MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_ 9 10 #include <vector> 11 12 #include "base/memory/scoped_ptr.h" 13 #include "base/synchronization/lock.h" 14 #include "base/threading/thread.h" 15 #include "base/time/time.h" 16 #include "media/audio/audio_io.h" 17 #include "media/audio/audio_parameters.h" 18 19 namespace media { 20 21 class AudioBus; 22 class AudioManagerBase; 23 24 class MEDIA_EXPORT FakeAudioInputStream 25 : public AudioInputStream { 26 public: 27 static AudioInputStream* MakeFakeStream(AudioManagerBase* manager, 28 const AudioParameters& params); 29 30 virtual bool Open() OVERRIDE; 31 virtual void Start(AudioInputCallback* callback) OVERRIDE; 32 virtual void Stop() OVERRIDE; 33 virtual void Close() OVERRIDE; 34 virtual double GetMaxVolume() OVERRIDE; 35 virtual void SetVolume(double volume) OVERRIDE; 36 virtual double GetVolume() OVERRIDE; 37 virtual void SetAutomaticGainControl(bool enabled) OVERRIDE; 38 virtual bool GetAutomaticGainControl() OVERRIDE; 39 40 // Generate one beep sound. This method is called by 41 // FakeVideoCaptureDevice to test audio/video synchronization. 42 // This is a static method because FakeVideoCaptureDevice is 43 // disconnected from an audio device. This means only one instance of 44 // this class gets to respond, which is okay because we assume there's 45 // only one stream for this testing purpose. 46 // TODO(hclam): Make this non-static. To do this we'll need to fix 47 // crbug.com/159053 such that video capture device is aware of audio 48 // input stream. 49 static void BeepOnce(); 50 51 private: 52 FakeAudioInputStream(AudioManagerBase* manager, 53 const AudioParameters& params); 54 55 virtual ~FakeAudioInputStream(); 56 57 void DoCallback(); 58 59 AudioManagerBase* audio_manager_; 60 AudioInputCallback* callback_; 61 scoped_ptr<uint8[]> buffer_; 62 int buffer_size_; 63 AudioParameters params_; 64 base::Thread thread_; 65 base::TimeTicks last_callback_time_; 66 base::TimeDelta callback_interval_; 67 base::TimeDelta interval_from_last_beep_; 68 int beep_duration_in_buffers_; 69 int beep_generated_in_buffers_; 70 int beep_period_in_frames_; 71 int frames_elapsed_; 72 scoped_ptr<media::AudioBus> audio_bus_; 73 74 DISALLOW_COPY_AND_ASSIGN(FakeAudioInputStream); 75 }; 76 77 } // namespace media 78 79 #endif // MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_ 80