Chromium Code Reviews| Index: media/audio/audio_device_thread.cc |
| diff --git a/media/audio/audio_device_thread.cc b/media/audio/audio_device_thread.cc |
| index d5c1bbcebdc652b8d0cf1fd7ac222a1458af2ba7..edd7c9ffe69a8bb2a00e803b212be6cb9a94e757 100644 |
| --- a/media/audio/audio_device_thread.cc |
| +++ b/media/audio/audio_device_thread.cc |
| @@ -29,7 +29,8 @@ class AudioDeviceThread::Thread |
| public: |
| Thread(AudioDeviceThread::Callback* callback, |
| base::SyncSocket::Handle socket, |
| - const char* thread_name); |
| + const char* thread_name, |
| + bool synchronized_buffers); |
| void Start(); |
| @@ -55,6 +56,7 @@ class AudioDeviceThread::Thread |
| base::CancelableSyncSocket socket_; |
| base::Lock callback_lock_; |
| const char* thread_name_; |
| + const bool synchronized_buffers_; |
| DISALLOW_COPY_AND_ASSIGN(Thread); |
| }; |
| @@ -68,10 +70,12 @@ AudioDeviceThread::~AudioDeviceThread() { DCHECK(!thread_.get()); } |
| void AudioDeviceThread::Start(AudioDeviceThread::Callback* callback, |
| base::SyncSocket::Handle socket, |
| - const char* thread_name) { |
| + const char* thread_name, |
| + bool synchronized_buffers) { |
| base::AutoLock auto_lock(thread_lock_); |
| - CHECK(thread_.get() == NULL); |
| - thread_ = new AudioDeviceThread::Thread(callback, socket, thread_name); |
| + CHECK(!thread_); |
| + thread_ = new AudioDeviceThread::Thread( |
| + callback, socket, thread_name, synchronized_buffers); |
| thread_->Start(); |
| } |
| @@ -85,17 +89,19 @@ void AudioDeviceThread::Stop(base::MessageLoop* loop_for_join) { |
| bool AudioDeviceThread::IsStopped() { |
| base::AutoLock auto_lock(thread_lock_); |
| - return thread_.get() == NULL; |
| + return !thread_; |
| } |
| // AudioDeviceThread::Thread implementation |
| AudioDeviceThread::Thread::Thread(AudioDeviceThread::Callback* callback, |
| base::SyncSocket::Handle socket, |
| - const char* thread_name) |
| + const char* thread_name, |
| + bool synchronized_buffers) |
| : thread_(), |
| callback_(callback), |
| socket_(socket), |
| - thread_name_(thread_name) { |
| + thread_name_(thread_name), |
| + synchronized_buffers_(synchronized_buffers) { |
| } |
| AudioDeviceThread::Thread::~Thread() { |
| @@ -157,6 +163,7 @@ void AudioDeviceThread::Thread::ThreadMain() { |
| } |
| void AudioDeviceThread::Thread::Run() { |
| + uint32 buffer_index = 0; |
| while (true) { |
| int pending_data = 0; |
| size_t bytes_read = socket_.Receive(&pending_data, sizeof(pending_data)); |
| @@ -165,9 +172,19 @@ void AudioDeviceThread::Thread::Run() { |
| break; |
| } |
| - base::AutoLock auto_lock(callback_lock_); |
| - if (callback_) |
| - callback_->Process(pending_data); |
| + { |
| + base::AutoLock auto_lock(callback_lock_); |
| + if (callback_) |
| + callback_->Process(pending_data); |
| + } |
| + |
| + // Let the other end know which buffer we just filled. |
|
henrika (OOO until Aug 14)
2013/09/13 10:25:44
Can you add a line about how the renderer and brow
DaleCurtis
2013/10/22 23:13:49
Done.
|
| + if (synchronized_buffers_) { |
| + ++buffer_index; |
| + size_t bytes_sent = socket_.Send(&buffer_index, sizeof(buffer_index)); |
| + if (bytes_sent != sizeof(buffer_index)) |
| + break; |
| + } |
| } |
| } |