Chromium Code Reviews| Index: content/renderer/media/audio_device.h |
| =================================================================== |
| --- content/renderer/media/audio_device.h (revision 107169) |
| +++ content/renderer/media/audio_device.h (working copy) |
| @@ -25,21 +25,23 @@ |
| // |
| // Start -> InitializeOnIOThread ------> AudioHostMsg_CreateStream --------> |
|
henrika (OOO until Aug 14)
2011/11/09 17:05:22
Care to add similar sequence for Play/Resume to cl
Chris Rogers
2011/11/15 22:48:29
Good idea - DONE
On 2011/11/09 17:05:22, henrika1
|
| // <- OnLowLatencyCreated <- AudioMsg_NotifyLowLatencyStreamCreated <- |
| -// ---> StartOnIOThread -----------> AudioHostMsg_PlayStream --------> |
| +// ---> PlayOnIOThread -----------> AudioHostMsg_PlayStream --------> |
| // |
| // AudioDevice::Render => audio transport on audio thread with low latency => |
| // | |
| // Stop --> ShutDownOnIOThread --------> AudioHostMsg_CloseStream -> Close |
| // |
| -// This class utilizes three threads during its lifetime, namely: |
| +// This class utilizes several threads during its lifetime, namely: |
| // 1. Creating thread. |
| -// Must be the main render thread. Start and Stop should be called on |
| -// this thread. |
| -// 2. IO thread. |
| +// Must be the main render thread. |
| +// 2. Control thread (may be the main render thread or another thread). |
| +// The methods: Start(), Stop(), Play(), Pause(), SetVolume() |
| +// Must be called on the same thread. |
| +// 2. IO thread (internal implementation detail - not exposed to public API) |
|
acolwell GONE FROM CHROMIUM
2011/11/08 21:44:20
Change the second 2. to a 3. and update the 3. bel
Chris Rogers
2011/11/15 22:48:29
Done.
|
| // The thread within which this class receives all the IPC messages and |
| // IPC communications can only happen in this thread. |
| // 3. Audio transport thread. |
| -// Responsible for calling the RenderCallback and feed audio samples to |
| +// Responsible for calling the RenderCallback and feeding audio samples to |
| // the audio layer in the browser process using sync sockets and shared |
| // memory. |
| // |
| @@ -60,9 +62,8 @@ |
| #include "base/shared_memory.h" |
| #include "base/threading/simple_thread.h" |
| #include "content/renderer/media/audio_message_filter.h" |
| +#include "media/audio/audio_parameters.h" |
| -struct AudioParameters; |
| - |
| class AudioDevice |
| : public AudioMessageFilter::Delegate, |
| public base::DelegateSimpleThread::Delegate, |
| @@ -78,18 +79,38 @@ |
| }; |
| // Methods called on main render thread ------------------------------------- |
| + |
| + // Minimal constructor where Initialize() must later be called. |
| + explicit AudioDevice(RenderCallback* callback); |
|
acolwell GONE FROM CHROMIUM
2011/11/08 21:44:20
Why not pass this callback in Initialize()? Is it
Chris Rogers
2011/11/15 22:48:29
Done.
|
| + |
| AudioDevice(size_t buffer_size, |
|
acolwell GONE FROM CHROMIUM
2011/11/08 21:44:20
How about we remove this constructor so all AudioD
Chris Rogers
2011/11/10 02:17:22
Henrik any thoughts here?
My feeling is that in t
acolwell GONE FROM CHROMIUM
2011/11/10 21:58:15
I guess I'm looking for consistency between use ca
Chris Rogers
2011/11/15 22:48:29
I definitely agree that it would be nice to defer
|
| int channels, |
| double sample_rate, |
| RenderCallback* callback); |
| virtual ~AudioDevice(); |
| + void Initialize(size_t buffer_size, |
|
acolwell GONE FROM CHROMIUM
2011/11/08 21:44:20
Any reason we can't just make this an int?
Chris Rogers
2011/11/10 02:17:22
I'm just following the type we are currently using
|
| + int channels, |
| + double sample_rate, |
| + AudioParameters::Format latency_format); |
| + bool IsInitialized(); |
| + |
| // Starts audio playback. |
| void Start(); |
| // Stops audio playback. Returns |true| on success. |
| bool Stop(); |
| + // Resumes playback if currently paused. |
| + void Play(); |
|
acolwell GONE FROM CHROMIUM
2011/11/08 21:44:20
Why do we need Start()/Stop() AND Play()/Pause()?
henrika (OOO until Aug 14)
2011/11/09 17:05:22
If it is intended to resume, then why not call it
Chris Rogers
2011/11/10 02:17:22
The intention is to closely follow the existing lo
henrika (OOO until Aug 14)
2011/11/10 11:45:07
I am fine with trying to mimic the existing AudioR
Chris Rogers
2011/11/15 22:48:29
I've added a TODO(crogers) for Play()/Pause() desc
|
| + |
| + // Pauses playback. |
| + // If |flush| is true then any pending audio which is in the pipeline |
| + // (has not yet reached the hardware) will be discarded. In this case, |
| + // When Play() is later called, no previous pending audio will be |
| + // rendered. |
| + void Pause(bool flush); |
| + |
| // Sets the playback volume, with range [0.0, 1.0] inclusive. |
| // Returns |true| on success. |
| bool SetVolume(double volume); |
| @@ -119,7 +140,8 @@ |
| // be executed on that thread. They interact with AudioMessageFilter and |
| // sends IPC messages on that thread. |
| void InitializeOnIOThread(const AudioParameters& params); |
| - void StartOnIOThread(); |
| + void PlayOnIOThread(); |
| + void PauseOnIOThread(bool flush); |
| void ShutDownOnIOThread(base::WaitableEvent* completion); |
| void SetVolumeOnIOThread(double volume); |
| @@ -138,6 +160,7 @@ |
| int channels_; |
| int bits_per_sample_; |
| double sample_rate_; |
| + AudioParameters::Format latency_format_; |
| RenderCallback* callback_; |