| Index: media/audio/audio_device_thread.h
|
| diff --git a/media/audio/audio_device_thread.h b/media/audio/audio_device_thread.h
|
| index 61e5e8724ddc24b289c01c364e3491b137779462..185a60d239036a6dada4d5a9d2809f93696fef43 100644
|
| --- a/media/audio/audio_device_thread.h
|
| +++ b/media/audio/audio_device_thread.h
|
| @@ -8,30 +8,20 @@
|
| #include <stdint.h>
|
|
|
| #include "base/macros.h"
|
| -#include "base/memory/ref_counted.h"
|
| #include "base/memory/shared_memory.h"
|
| #include "base/sync_socket.h"
|
| -#include "base/synchronization/lock.h"
|
| +#include "base/threading/platform_thread.h"
|
| #include "media/base/audio_parameters.h"
|
| #include "media/base/media_export.h"
|
|
|
| -namespace base {
|
| -class MessageLoop;
|
| -}
|
| -
|
| namespace media {
|
| -class AudioBus;
|
|
|
| // Data transfer between browser and render process uses a combination
|
| // of sync sockets and shared memory. To read from the socket and render
|
| // data, we use a worker thread, a.k.a. the AudioDeviceThread, which reads
|
| // data from the browser via the socket and fills the shared memory from the
|
| // audio thread via the AudioDeviceThread::Callback interface/class.
|
| -// For more details see the documentation in audio_device.h.
|
| -//
|
| -// TODO(tommi): Multiple audio input/output device instances should be able to
|
| -// share the same thread instead of spinning one per instance.
|
| -class MEDIA_EXPORT AudioDeviceThread {
|
| +class MEDIA_EXPORT AudioDeviceThread : public base::PlatformThread::Delegate {
|
| public:
|
| // This is the callback interface/base class that Audio[Output|Input]Device
|
| // implements to render input/output data. The callbacks run on the
|
| @@ -42,7 +32,6 @@ class MEDIA_EXPORT AudioDeviceThread {
|
| base::SharedMemoryHandle memory,
|
| int memory_length,
|
| int total_segments);
|
| - virtual ~Callback();
|
|
|
| // One time initialization for the callback object on the audio thread.
|
| void InitializeOnAudioThread();
|
| @@ -55,6 +44,8 @@ class MEDIA_EXPORT AudioDeviceThread {
|
| virtual void Process(uint32_t pending_data) = 0;
|
|
|
| protected:
|
| + virtual ~Callback();
|
| +
|
| // Protected so that derived classes can access directly.
|
| // The variables are 'const' since values are calculated/set in the
|
| // constructor and must never change.
|
| @@ -72,43 +63,22 @@ class MEDIA_EXPORT AudioDeviceThread {
|
| DISALLOW_COPY_AND_ASSIGN(Callback);
|
| };
|
|
|
| - AudioDeviceThread();
|
| - ~AudioDeviceThread();
|
| -
|
| - // Starts the audio thread. The thread must not already be running. If
|
| - // |sychronized_buffers| is set, the browser expects to be notified via the
|
| - // |socket| every time AudioDeviceThread::Process() completes.
|
| - void Start(AudioDeviceThread::Callback* callback,
|
| - base::SyncSocket::Handle socket,
|
| - const char* thread_name,
|
| - bool synchronized_buffers);
|
| -
|
| - // This tells the audio thread to stop and clean up the data.
|
| - // The method can stop the thread synchronously or asynchronously.
|
| - // In the latter case, the thread will still be running after Stop()
|
| - // returns, but the callback pointer is cleared so no further callbacks will
|
| - // be made (IOW after Stop() returns, it is safe to delete the callback).
|
| - // The |loop_for_join| parameter is required for asynchronous operation
|
| - // in order to join the worker thread and close the thread handle later via a
|
| - // posted task.
|
| - // If set to NULL, function will wait for the thread to exit before returning.
|
| - void Stop(base::MessageLoop* loop_for_join);
|
| -
|
| - // Returns true if the thread is stopped or stopping.
|
| - bool IsStopped();
|
| + // Creates and automatically starts the audio thread.
|
| + AudioDeviceThread(Callback* callback,
|
| + base::SyncSocket::Handle socket,
|
| + const char* thread_name);
|
| +
|
| + // This tells the audio thread to stop and clean up the data; this is a
|
| + // synchronous process and the thread will stop before the method returns.
|
| + ~AudioDeviceThread() override;
|
|
|
| private:
|
| - // Our own private SimpleThread override. We implement this in a
|
| - // private class so that we get the following benefits:
|
| - // 1) AudioDeviceThread doesn't expose SimpleThread methods.
|
| - // I.e. the caller can't call Start()/Stop() - which would be bad.
|
| - // 2) We override ThreadMain to add additional on-thread initialization
|
| - // while still synchronized with SimpleThread::Start() to provide
|
| - // reliable initialization.
|
| - class Thread;
|
| -
|
| - base::Lock thread_lock_;
|
| - scoped_refptr<AudioDeviceThread::Thread> thread_;
|
| + void ThreadMain() final;
|
| +
|
| + Callback* const callback_;
|
| + const char* thread_name_;
|
| + base::CancelableSyncSocket socket_;
|
| + base::PlatformThreadHandle thread_handle_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AudioDeviceThread);
|
| };
|
|
|