| Index: media/audio/audio_output_device.cc
|
| ===================================================================
|
| --- media/audio/audio_output_device.cc (revision 185810)
|
| +++ media/audio/audio_output_device.cc (working copy)
|
| @@ -22,7 +22,7 @@
|
| : public AudioDeviceThread::Callback {
|
| public:
|
| AudioThreadCallback(const AudioParameters& audio_parameters,
|
| - base::SharedMemoryHandle memory,
|
| + SharedMemoryHandleVector memory,
|
| int memory_length,
|
| AudioRendererSink::RenderCallback* render_callback);
|
| virtual ~AudioThreadCallback();
|
| @@ -30,7 +30,7 @@
|
| virtual void MapSharedMemory() OVERRIDE;
|
|
|
| // Called whenever we receive notifications about pending data.
|
| - virtual void Process(int pending_data) OVERRIDE;
|
| + virtual void Process(int pending_data, int index) OVERRIDE;
|
|
|
| private:
|
| AudioRendererSink::RenderCallback* render_callback_;
|
| @@ -48,6 +48,7 @@
|
| stream_id_(0),
|
| state_(IDLE),
|
| play_on_start_(true),
|
| + audio_thread_(false),
|
| stopping_hack_(false) {
|
| CHECK(ipc_);
|
| }
|
| @@ -226,7 +227,9 @@
|
|
|
| DCHECK(audio_thread_.IsStopped());
|
| audio_callback_.reset(new AudioOutputDevice::AudioThreadCallback(
|
| - audio_parameters_, handle, length, callback_));
|
| + audio_parameters_,
|
| + AudioDeviceThread::Callback::SharedMemoryHandleVector(1, handle),
|
| + length, callback_));
|
| audio_thread_.Start(audio_callback_.get(), socket_handle,
|
| "AudioOutputDevice");
|
| state_ = PAUSED;
|
| @@ -252,7 +255,7 @@
|
|
|
| AudioOutputDevice::AudioThreadCallback::AudioThreadCallback(
|
| const AudioParameters& audio_parameters,
|
| - base::SharedMemoryHandle memory,
|
| + SharedMemoryHandleVector memory,
|
| int memory_length,
|
| AudioRendererSink::RenderCallback* render_callback)
|
| : AudioDeviceThread::Callback(audio_parameters,
|
| @@ -265,7 +268,9 @@
|
| }
|
|
|
| void AudioOutputDevice::AudioThreadCallback::MapSharedMemory() {
|
| - shared_memory_.Map(TotalSharedMemorySizeInBytes(memory_length_));
|
| + DCHECK_EQ(shared_memory_.size(), 1u);
|
| + base::SharedMemory* shared_buffer = shared_memory_[0];
|
| + shared_buffer->Map(TotalSharedMemorySizeInBytes(memory_length_));
|
|
|
| // Calculate output and input memory size.
|
| int output_memory_size = AudioBus::CalculateMemorySize(audio_parameters_);
|
| @@ -279,22 +284,24 @@
|
| DCHECK_EQ(memory_length_, io_size);
|
|
|
| output_bus_ =
|
| - AudioBus::WrapMemory(audio_parameters_, shared_memory_.memory());
|
| + AudioBus::WrapMemory(audio_parameters_, shared_buffer->memory());
|
|
|
| if (input_channels > 0) {
|
| // The input data is after the output data.
|
| char* input_data =
|
| - static_cast<char*>(shared_memory_.memory()) + output_memory_size;
|
| + static_cast<char*>(shared_buffer->memory()) + output_memory_size;
|
| input_bus_ =
|
| AudioBus::WrapMemory(input_channels, frames, input_data);
|
| }
|
| }
|
|
|
| // Called whenever we receive notifications about pending data.
|
| -void AudioOutputDevice::AudioThreadCallback::Process(int pending_data) {
|
| +void AudioOutputDevice::AudioThreadCallback::Process(
|
| + int pending_data, int index) {
|
| + base::SharedMemory* shared_buffer = shared_memory_[0];
|
| if (pending_data == kPauseMark) {
|
| - memset(shared_memory_.memory(), 0, memory_length_);
|
| - SetActualDataSizeInBytes(&shared_memory_, memory_length_, 0);
|
| + memset(shared_buffer->memory(), 0, memory_length_);
|
| + SetActualDataSizeInBytes(shared_buffer, memory_length_, 0);
|
| return;
|
| }
|
|
|
| @@ -325,7 +332,7 @@
|
| // relying on AudioSyncReader::Read() to parse this with that in mind. Rename
|
| // these methods to Set/GetActualFrameCount().
|
| SetActualDataSizeInBytes(
|
| - &shared_memory_, memory_length_,
|
| + shared_buffer, memory_length_,
|
| num_frames * sizeof(*output_bus_->channel(0)) * output_bus_->channels());
|
| }
|
|
|
|
|