| Index: media/audio/fake_audio_consumer.h
|
| diff --git a/media/audio/fake_audio_consumer.h b/media/audio/fake_audio_consumer.h
|
| index 57da74fabfffaf0b090c1f8861052128b03116e4..36b4030b1903c00dd73e450cf410ec9932f37dbf 100644
|
| --- a/media/audio/fake_audio_consumer.h
|
| +++ b/media/audio/fake_audio_consumer.h
|
| @@ -5,10 +5,9 @@
|
| #ifndef MEDIA_AUDIO_FAKE_AUDIO_CONSUMER_H_
|
| #define MEDIA_AUDIO_FAKE_AUDIO_CONSUMER_H_
|
|
|
| -#include "base/cancelable_callback.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/time.h"
|
| -#include "media/audio/audio_parameters.h"
|
| +#include "base/callback_forward.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "media/base/media_export.h"
|
|
|
| namespace base {
|
| class MessageLoopProxy;
|
| @@ -16,42 +15,35 @@ class MessageLoopProxy;
|
|
|
| namespace media {
|
| class AudioBus;
|
| +class AudioParameters;
|
|
|
| // A fake audio consumer. Using a provided message loop, FakeAudioConsumer will
|
| // simulate a real time consumer of audio data.
|
| class MEDIA_EXPORT FakeAudioConsumer {
|
| public:
|
| - // |message_loop| is the loop on which the ReadCB provided to Start() will be
|
| - // executed on. |params| is used to determine the frequency of callbacks.
|
| - FakeAudioConsumer(const scoped_refptr<base::MessageLoopProxy>& message_loop,
|
| + // |worker_loop| is the loop on which the ReadCB 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.
|
| + FakeAudioConsumer(const scoped_refptr<base::MessageLoopProxy>& worker_loop,
|
| const AudioParameters& params);
|
| ~FakeAudioConsumer();
|
|
|
| - // Start executing |read_cb| at a regular interval. Must be called on the
|
| - // message loop provided during construction. Stop() must be called before
|
| - // destroying FakeAudioConsumer.
|
| + // Start executing |read_cb| at a regular intervals. Stop() must be called by
|
| + // the same thread before destroying FakeAudioConsumer.
|
| typedef base::Callback<void(AudioBus* audio_bus)> ReadCB;
|
| void Start(const ReadCB& read_cb);
|
|
|
| - // Stop executing the ReadCB provided to Start(). Cancels any outstanding
|
| - // callbacks. Safe to call multiple times. Must be called on the message
|
| - // loop provided during construction.
|
| + // Stop executing the ReadCB provided to Start(). Blocks until the worker
|
| + // loop is not inside a ReadCB invocation. Safe to call multiple times. Must
|
| + // be called on the same thread that called Start().
|
| void Stop();
|
|
|
| private:
|
| - // Task that regularly calls |read_cb_| according to the playback rate as
|
| - // determined by the audio parameters given during construction. Runs on
|
| - // |message_loop_|.
|
| - void DoRead();
|
| -
|
| - scoped_refptr<base::MessageLoopProxy> message_loop_;
|
| - ReadCB read_cb_;
|
| - scoped_ptr<AudioBus> audio_bus_;
|
| - base::TimeDelta buffer_duration_;
|
| - base::TimeTicks next_read_time_;
|
| -
|
| - // Used to post delayed tasks to the AudioThread that we can cancel.
|
| - base::CancelableClosure read_task_cb_;
|
| + // All state and implementation is kept within this class because it must hang
|
| + // around until tasks posted on |worker_loop| have all run (or been canceled).
|
| + class Worker;
|
| + Worker* const worker_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(FakeAudioConsumer);
|
| };
|
|
|