| Index: media/audio/audio_output_controller.h
|
| diff --git a/media/audio/audio_output_controller.h b/media/audio/audio_output_controller.h
|
| index f6e5722cd4d1a91b7e1f9e50736aa34b652baf24..4105e15c253be42d9ba39342b2392c3b073308fd 100644
|
| --- a/media/audio/audio_output_controller.h
|
| +++ b/media/audio/audio_output_controller.h
|
| @@ -25,14 +25,12 @@ class MessageLoop;
|
| // An AudioOutputController controls an AudioOutputStream and provides data
|
| // to this output stream. It has an important function that it executes
|
| // audio operations like play, pause, stop, etc. on a separate thread,
|
| -// namely the audio controller thread.
|
| +// namely the audio manager thread.
|
| //
|
| // All the public methods of AudioOutputController are non-blocking.
|
| -// The actual operations are performed on the audio thread.
|
| +// The actual operations are performed on the audio manager thread.
|
| //
|
| -// Here is a state diagram for the AudioOutputController for default low
|
| -// latency mode; in normal latency mode there is no "starting" or "paused when
|
| -// starting" states, "created" immediately switches to "playing":
|
| +// Here is a state diagram for the AudioOutputController:
|
| //
|
| // .-----------------------> [ Closed / Error ] <------.
|
| // | ^ |
|
| @@ -48,25 +46,20 @@ class MessageLoop;
|
| //
|
| // * Initial state
|
| //
|
| -// There are two modes of buffering operations supported by this class.
|
| +// The AudioOutputStream can request data from the AudioOutputController via the
|
| +// AudioSourceCallback interface. AudioOutputController uses the SyncReader
|
| +// passed to it via construction to synchronously fulfill this read request.
|
| //
|
| -// Regular latency mode:
|
| -// In this mode we receive signals from AudioOutputController and then we
|
| -// enqueue data into it.
|
| -//
|
| -// Low latency mode:
|
| -// In this mode a DataSource object is given to the AudioOutputController
|
| -// and AudioOutputController reads from it synchronously.
|
| -//
|
| -// The audio thread itself is owned by the AudioManager that the
|
| -// AudioOutputController holds a reference to. When performing tasks on the
|
| -// audio thread, the controller must not add or release references to the
|
| +// The audio manager thread is owned by the AudioManager that the
|
| +// AudioOutputController holds a reference to. When performing tasks on this
|
| +// thread, the controller must not add or release references to the
|
| // AudioManager or itself (since it in turn holds a reference to the manager),
|
| // for delayed tasks as it can slow down or even prevent normal shut down.
|
| // So, for tasks on the audio thread, the controller uses WeakPtr which enables
|
| // us to safely cancel pending polling tasks.
|
| -// The owner of the audio thread, AudioManager, will take care of properly
|
| -// shutting it down.
|
| +//
|
| +// AudioManager will take care of properly shutting down the audio manager
|
| +// thread.
|
| //
|
| #include "media/base/media_export.h"
|
|
|
| @@ -81,7 +74,7 @@ class MEDIA_EXPORT AudioOutputController
|
| static const int kPauseMark;
|
|
|
| // An event handler that receives events from the AudioOutputController. The
|
| - // following methods are called on the audio controller thread.
|
| + // following methods are called on the audio manager thread.
|
| class MEDIA_EXPORT EventHandler {
|
| public:
|
| virtual ~EventHandler() {}
|
| @@ -89,12 +82,6 @@ class MEDIA_EXPORT AudioOutputController
|
| virtual void OnPlaying(AudioOutputController* controller) = 0;
|
| virtual void OnPaused(AudioOutputController* controller) = 0;
|
| virtual void OnError(AudioOutputController* controller, int error_code) = 0;
|
| -
|
| - // Audio controller asks for more data.
|
| - // |pending_bytes| is the number of bytes still on the controller.
|
| - // |timestamp| is then time when |pending_bytes| is recorded.
|
| - virtual void OnMoreData(AudioOutputController* controller,
|
| - AudioBuffersState buffers_state) = 0;
|
| };
|
|
|
| // A synchronous reader interface used by AudioOutputController for
|
| @@ -124,22 +111,13 @@ class MEDIA_EXPORT AudioOutputController
|
| };
|
|
|
| // Factory method for creating an AudioOutputController.
|
| - // If successful, an audio controller thread is created. The audio device
|
| - // will be created on the audio controller thread and when that is done
|
| - // event handler will receive a OnCreated() call.
|
| + // This also creates and opens an AudioOutputStream on the audio manager
|
| + // thread, and if this is successful, the |event_handler| will receive an
|
| + // OnCreated() call from the same audio manager thread.
|
| static scoped_refptr<AudioOutputController> Create(
|
| AudioManager* audio_manager,
|
| EventHandler* event_handler,
|
| const AudioParameters& params,
|
| - // Soft limit for buffer capacity in this controller. This parameter
|
| - // is used only in regular latency mode.
|
| - uint32 buffer_capacity);
|
| -
|
| - // Factory method for creating a low latency audio stream.
|
| - static scoped_refptr<AudioOutputController> CreateLowLatency(
|
| - AudioManager* audio_manager,
|
| - EventHandler* event_handler,
|
| - const AudioParameters& params,
|
| // External synchronous reader for audio controller.
|
| SyncReader* sync_reader);
|
|
|
| @@ -156,7 +134,7 @@ class MEDIA_EXPORT AudioOutputController
|
| void Flush();
|
|
|
| // Closes the audio output stream. The state is changed and the resources
|
| - // are freed on the audio thread. closed_task is executed after that.
|
| + // are freed on the audio manager thread. closed_task is executed after that.
|
| // Callbacks (EventHandler and SyncReader) must exist until closed_task is
|
| // called.
|
| //
|
| @@ -167,13 +145,6 @@ class MEDIA_EXPORT AudioOutputController
|
| // Sets the volume of the audio output stream.
|
| void SetVolume(double volume);
|
|
|
| - // Enqueue audio |data| into the controller. This method is used only in
|
| - // the regular latency mode and it is illegal to call this method when
|
| - // SyncReader is present.
|
| - void EnqueueData(const uint8* data, uint32 size);
|
| -
|
| - bool LowLatencyMode() const { return sync_reader_ != NULL; }
|
| -
|
| ///////////////////////////////////////////////////////////////////////////
|
| // AudioSourceCallback methods.
|
| virtual uint32 OnMoreData(AudioOutputStream* stream,
|
| @@ -206,9 +177,9 @@ class MEDIA_EXPORT AudioOutputController
|
|
|
| AudioOutputController(AudioManager* audio_manager,
|
| EventHandler* handler,
|
| - uint32 capacity, SyncReader* sync_reader);
|
| + SyncReader* sync_reader);
|
|
|
| - // The following methods are executed on the audio controller thread.
|
| + // The following methods are executed on the audio manager thread.
|
| void DoCreate(const AudioParameters& params);
|
| void DoPlay();
|
| void PollAndStartIfDataReady();
|
| @@ -218,9 +189,6 @@ class MEDIA_EXPORT AudioOutputController
|
| void DoSetVolume(double volume);
|
| void DoReportError(int code);
|
|
|
| - // Helper method to submit a OnMoreData() call to the event handler.
|
| - void SubmitOnMoreData_Locked();
|
| -
|
| // Helper method that starts physical stream.
|
| void StartStream();
|
|
|
| @@ -236,24 +204,19 @@ class MEDIA_EXPORT AudioOutputController
|
| // The current volume of the audio stream.
|
| double volume_;
|
|
|
| - // |state_| is written on the audio controller thread and is read on the
|
| + // |state_| is written on the audio manager thread and is read on the
|
| // hardware audio thread. These operations need to be locked. But lock
|
| - // is not required for reading on the audio controller thread.
|
| + // is not required for reading on the audio manager thread.
|
| State state_;
|
|
|
| - AudioBuffersState buffers_state_;
|
| -
|
| - // The |lock_| must be acquired whenever we access |buffer_|.
|
| + // The |lock_| must be acquired whenever we access |state_| from a thread
|
| + // other than the audio manager thread.
|
| base::Lock lock_;
|
|
|
| - media::SeekableBuffer buffer_;
|
| -
|
| - bool pending_request_;
|
| -
|
| // SyncReader is used only in low latency mode for synchronous reading.
|
| SyncReader* sync_reader_;
|
|
|
| - // The message loop of audio thread that this object runs on.
|
| + // The message loop of audio manager thread that this object runs on.
|
| scoped_refptr<base::MessageLoopProxy> message_loop_;
|
|
|
| // When starting stream we wait for data to become available.
|
|
|