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 19namespace media { 20 21class AudioBus; 22class AudioManagerBase; 23 24class 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