| Index: media/audio/audio_device_thread.cc
|
| ===================================================================
|
| --- media/audio/audio_device_thread.cc (revision 185810)
|
| +++ media/audio/audio_device_thread.cc (working copy)
|
| @@ -28,6 +28,7 @@
|
| public base::RefCountedThreadSafe<AudioDeviceThread::Thread> {
|
| public:
|
| Thread(AudioDeviceThread::Callback* callback,
|
| + bool read_index,
|
| base::SyncSocket::Handle socket,
|
| const char* thread_name);
|
|
|
| @@ -52,6 +53,7 @@
|
| private:
|
| base::PlatformThreadHandle thread_;
|
| AudioDeviceThread::Callback* callback_;
|
| + bool read_index_;
|
| base::CancelableSyncSocket socket_;
|
| base::Lock callback_lock_;
|
| const char* thread_name_;
|
| @@ -61,7 +63,8 @@
|
|
|
| // AudioDeviceThread implementation
|
|
|
| -AudioDeviceThread::AudioDeviceThread() {
|
| +AudioDeviceThread::AudioDeviceThread(bool read_index)
|
| + : read_index_(read_index) {
|
| }
|
|
|
| AudioDeviceThread::~AudioDeviceThread() {
|
| @@ -73,7 +76,8 @@
|
| const char* thread_name) {
|
| base::AutoLock auto_lock(thread_lock_);
|
| CHECK(thread_ == NULL);
|
| - thread_ = new AudioDeviceThread::Thread(callback, socket, thread_name);
|
| + thread_ = new AudioDeviceThread::Thread(
|
| + callback, read_index_, socket, thread_name);
|
| thread_->Start();
|
| }
|
|
|
| @@ -92,10 +96,12 @@
|
|
|
| // AudioDeviceThread::Thread implementation
|
| AudioDeviceThread::Thread::Thread(AudioDeviceThread::Callback* callback,
|
| + bool read_index,
|
| base::SyncSocket::Handle socket,
|
| const char* thread_name)
|
| : thread_(base::kNullThreadHandle),
|
| callback_(callback),
|
| + read_index_(read_index),
|
| socket_(socket),
|
| thread_name_(thread_name) {
|
| }
|
| @@ -161,15 +167,24 @@
|
| void AudioDeviceThread::Thread::Run() {
|
| while (true) {
|
| int pending_data = 0;
|
| + int pending_id = 0;
|
| size_t bytes_read = socket_.Receive(&pending_data, sizeof(pending_data));
|
| if (bytes_read != sizeof(pending_data)) {
|
| DCHECK_EQ(bytes_read, 0U);
|
| break;
|
| }
|
|
|
| + if (read_index_) {
|
| + size_t bytes_read = socket_.Receive(&pending_id, sizeof(pending_id));
|
| + if (bytes_read != sizeof(pending_id)) {
|
| + DCHECK_EQ(bytes_read, 0U);
|
| + break;
|
| + }
|
| + }
|
| +
|
| base::AutoLock auto_lock(callback_lock_);
|
| if (callback_)
|
| - callback_->Process(pending_data);
|
| + callback_->Process(pending_data, pending_id);
|
| }
|
| }
|
|
|
| @@ -177,23 +192,27 @@
|
|
|
| AudioDeviceThread::Callback::Callback(
|
| const AudioParameters& audio_parameters,
|
| - base::SharedMemoryHandle memory, int memory_length)
|
| + SharedMemoryHandleVector& memory,
|
| + int memory_length)
|
| : audio_parameters_(audio_parameters),
|
| samples_per_ms_(audio_parameters.sample_rate() / 1000),
|
| bytes_per_ms_(audio_parameters.channels() *
|
| (audio_parameters_.bits_per_sample() / 8) *
|
| samples_per_ms_),
|
| - shared_memory_(memory, false),
|
| memory_length_(memory_length) {
|
| CHECK_NE(bytes_per_ms_, 0); // Catch division by zero early.
|
| CHECK_NE(samples_per_ms_, 0);
|
| + shared_memory_.resize(memory.size());
|
| + for (size_t id = 0; id < shared_memory_.size(); ++id)
|
| + shared_memory_[id] = new base::SharedMemory(memory[id], false);
|
| }
|
|
|
| AudioDeviceThread::Callback::~Callback() {}
|
|
|
| void AudioDeviceThread::Callback::InitializeOnAudioThread() {
|
| MapSharedMemory();
|
| - DCHECK(shared_memory_.memory() != NULL);
|
| + for (size_t id = 0; id < shared_memory_.size(); ++id)
|
| + DCHECK(shared_memory_[id]->memory() != NULL);
|
| }
|
|
|
| } // namespace media.
|
|
|