| Index: media/audio/virtual_audio_input_stream.h
|
| diff --git a/media/audio/virtual_audio_input_stream.h b/media/audio/virtual_audio_input_stream.h
|
| index 72ca86c2c39613de7d0b1c9f35b5070c881ba047..53a10738732d8aee6d5a602afa96b0d527aa76c9 100644
|
| --- a/media/audio/virtual_audio_input_stream.h
|
| +++ b/media/audio/virtual_audio_input_stream.h
|
| @@ -10,6 +10,8 @@
|
|
|
| #include "base/gtest_prod_util.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/synchronization/lock.h"
|
| +#include "base/threading/thread_checker.h"
|
| #include "media/audio/audio_io.h"
|
| #include "media/audio/audio_parameters.h"
|
| #include "media/audio/fake_audio_consumer.h"
|
| @@ -34,10 +36,12 @@ class MEDIA_EXPORT VirtualAudioInputStream : public AudioInputStream {
|
| AfterCloseCallback;
|
|
|
| // Construct a target for audio loopback which mixes multiple data streams
|
| - // into a single stream having the given |params|.
|
| + // into a single stream having the given |params|. |worker_loop| is the loop
|
| + // on which AudioInputCallback methods are called and may or may not be the
|
| + // single thread that invokes the AudioInputStream methods.
|
| VirtualAudioInputStream(
|
| const AudioParameters& params,
|
| - const scoped_refptr<base::MessageLoopProxy>& message_loop,
|
| + const scoped_refptr<base::MessageLoopProxy>& worker_loop,
|
| const AfterCloseCallback& after_close_cb);
|
|
|
| virtual ~VirtualAudioInputStream();
|
| @@ -69,12 +73,12 @@ class MEDIA_EXPORT VirtualAudioInputStream : public AudioInputStream {
|
|
|
| typedef std::map<AudioParameters, LoopbackAudioConverter*> AudioConvertersMap;
|
|
|
| - // When Start() is called on this class, we continuously schedule this
|
| - // callback to render audio using any attached VirtualAudioOutputStreams until
|
| - // Stop() is called.
|
| - void ReadAudio(AudioBus* audio_bus);
|
| + // Pulls audio data from all attached VirtualAudioOutputStreams, mixes and
|
| + // converts the streams into one, and pushes the result to |callback_|.
|
| + // Invoked on the worker thread.
|
| + void PumpAudio(AudioBus* audio_bus);
|
|
|
| - const scoped_refptr<base::MessageLoopProxy> message_loop_;
|
| + const scoped_refptr<base::MessageLoopProxy> worker_loop_;
|
|
|
| AfterCloseCallback after_close_cb_;
|
|
|
| @@ -84,6 +88,10 @@ class MEDIA_EXPORT VirtualAudioInputStream : public AudioInputStream {
|
| scoped_ptr<uint8[]> buffer_;
|
| AudioParameters params_;
|
|
|
| + // Guards concurrent access to the converter network: converters_, mixer_, and
|
| + // num_attached_output_streams_.
|
| + base::Lock converter_network_lock_;
|
| +
|
| // AudioConverters associated with the attached VirtualAudioOutputStreams,
|
| // partitioned by common AudioParameters.
|
| AudioConvertersMap converters_;
|
| @@ -98,6 +106,8 @@ class MEDIA_EXPORT VirtualAudioInputStream : public AudioInputStream {
|
| // Handles callback timing for consumption of audio data.
|
| FakeAudioConsumer fake_consumer_;
|
|
|
| + base::ThreadChecker thread_checker_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(VirtualAudioInputStream);
|
| };
|
|
|
|
|