Chromium Code Reviews| Index: media/audio/fake_audio_provider.h |
| diff --git a/media/audio/fake_audio_provider.h b/media/audio/fake_audio_provider.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..96dc879cac6428bca0770b7be2814d1fc819a373 |
| --- /dev/null |
| +++ b/media/audio/fake_audio_provider.h |
| @@ -0,0 +1,63 @@ |
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef MEDIA_AUDIO_FAKE_AUDIO_PROVIDER_H_ |
| +#define MEDIA_AUDIO_FAKE_AUDIO_PROVIDER_H_ |
| + |
| +#include "base/callback_forward.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "media/base/media_export.h" |
| + |
| +namespace base { |
| +class SingleThreadTaskRunner; |
| +class FilePath; |
| +} |
| + |
| +namespace media { |
| +class AudioBus; |
| +class AudioParameters; |
| + |
| +// A fake audio provider. Using a provided message loop, the FakeAudioProvider |
| +// will generate real-time audio data. |
| +class MEDIA_EXPORT FakeAudioProvider { |
| + public: |
| + // |worker_task_runner| is the task runner on which the InputCB provided to |
| + // Start() will be executed on. This may or may not be the be for the same |
| + // thread that invokes the Start/Stop methods. |
| + // |params| is used to determine the frequency of callbacks. |
| + FakeAudioProvider( |
| + const scoped_refptr<base::SingleThreadTaskRunner>& worker_task_runner, |
| + const AudioParameters& params); |
| + ~FakeAudioProvider(); |
| + |
| + void OpenInBeepMode(); |
| + void OpenInFileMode(const base::FilePath& path_to_wav_file); |
| + |
| + // Start executing |input_cb| at a regular intervals. Stop() must be called |
| + // by the same thread before destroying FakeAudioProvider. The callback will |
| + // be called with an audio bus filled with input data. |
| + typedef base::Callback<void(AudioBus* audio_bus, int buffer_size)> InputCB; |
| + void Start(const InputCB& input_cb); |
| + |
| + // Stop executing the InputCB provided to Start(). Blocks until the worker |
| + // loop is not inside a InputCB invocation. Safe to call multiple times. |
| + // Must be called on the same thread that called Start(). |
| + void Stop(); |
| + |
| + // TODO(phoglund): See TODO on FakeAudioInputStream::BeepOnce. |
| + static void BeepOnce(); |
|
DaleCurtis
2015/02/17 23:27:49
Why static?
phoglund_chromium
2015/02/18 10:22:05
It's static because BeepOnce is called from the fa
|
| + |
| + private: |
| + // All state and implementation is kept within this ref-counted class because |
| + // cancellation of posted tasks must happen on the worker thread some time |
| + // after the call to Stop() (on the main thread) returns. |
| + class Worker; |
| + const scoped_refptr<Worker> worker_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(FakeAudioProvider); |
| +}; |
| + |
| +} // namespace media |
| + |
| +#endif // MEDIA_AUDIO_FAKE_AUDIO_PROVIDER_H_ |