fake_audio_input_stream.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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_INOUT_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.h"
16#include "media/audio/audio_io.h"
17#include "media/audio/audio_parameters.h"
18
19namespace media {
20
21class AudioManagerBase;
22
23class MEDIA_EXPORT FakeAudioInputStream
24    : public AudioInputStream {
25 public:
26  static AudioInputStream* MakeFakeStream(AudioManagerBase* manager,
27                                          const AudioParameters& params);
28
29  virtual bool Open() OVERRIDE;
30  virtual void Start(AudioInputCallback* callback) OVERRIDE;
31  virtual void Stop() OVERRIDE;
32  virtual void Close() OVERRIDE;
33  virtual double GetMaxVolume() OVERRIDE;
34  virtual void SetVolume(double volume) OVERRIDE;
35  virtual double GetVolume() OVERRIDE;
36  virtual void SetAutomaticGainControl(bool enabled) OVERRIDE;
37  virtual bool GetAutomaticGainControl() OVERRIDE;
38
39  // Generate one beep sound. This method is called by
40  // FakeVideoCaptureDevice to test audio/video synchronization.
41  // This is a static method because FakeVideoCaptureDevice is
42  // disconnected from an audio device. This means only one instance of
43  // this class gets to respond, which is okay because we assume there's
44  // only one stream for this testing purpose.
45  // TODO(hclam): Make this non-static. To do this we'll need to fix
46  // crbug.com/159053 such that video capture device is aware of audio
47  // input stream.
48  static void BeepOnce();
49
50 private:
51  FakeAudioInputStream(AudioManagerBase* manager,
52                       const AudioParameters& params);
53
54  virtual ~FakeAudioInputStream();
55
56  void DoCallback();
57
58  AudioManagerBase* audio_manager_;
59  AudioInputCallback* callback_;
60  scoped_array<uint8> buffer_;
61  int buffer_size_;
62  AudioParameters params_;
63  base::Thread thread_;
64  base::Time last_callback_time_;
65  base::TimeDelta callback_interval_;
66  int beep_duration_in_buffers_;
67  int beep_generated_in_buffers_;
68  int beep_period_in_frames_;
69  int frames_elapsed_;
70
71  DISALLOW_COPY_AND_ASSIGN(FakeAudioInputStream);
72};
73
74}  // namespace media
75
76#endif  // MEDIA_AUDIO_FAKE_AUDIO_INPUT_STREAM_H_
77