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 virtual bool IsMuted() OVERRIDE; 40 41 // Generate one beep sound. This method is called by 42 // FakeVideoCaptureDevice to test audio/video synchronization. 43 // This is a static method because FakeVideoCaptureDevice is 44 // disconnected from an audio device. This means only one instance of 45 // this class gets to respond, which is okay because we assume there's 46 // only one stream for this testing purpose. 47 // TODO(hclam): Make this non-static. To do this we'll need to fix 48 // crbug.com/159053 such that video capture device is aware of audio 49 // input stream. 50 static void BeepOnce(); 51 52 private: 53 FakeAudioInputStream(AudioManagerBase* manager, 54 const AudioParameters& params); 55 56 virtual ~FakeAudioInputStream(); 57 58 void DoCallback(); 59 60 AudioManagerBase* audio_manager_; 61 AudioInputCallback* callback_; 62 scoped_ptr<uint8[]> buffer_; 63 int buffer_size_; 64 AudioParameters params_; 65 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 66 base::TimeTicks last_callback_time_; 67 base::TimeDelta callback_interval_; 68 base::TimeDelta interval_from_last_beep_; 69 int beep_duration_in_buffers_; 70 int beep_generated_in_buffers_; 71 int beep_period_in_frames_; 72 int frames_elapsed_; 73 scoped_ptr<media::AudioBus> audio_bus_; 74 75 // Allows us to run tasks on the FakeAudioInputStream instance which are 76 // bound by its lifetime. 77 base::WeakPtrFactory<FakeAudioInputStream> weak_factory_; 78 79 DISALLOW_COPY_AND_ASSIGN(FakeAudioInputStream); 80 }; 81 82 } // namespace media 83 84 #endif // MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_ 85