| Index: media/audio/audio_output_device.cc
|
| diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc
|
| index 9924f76b83e5e4e435a6f0a5598a22a68acad809..cc0804b7079b00cf1ac97f653739dc94efd252d4 100644
|
| --- a/media/audio/audio_output_device.cc
|
| +++ b/media/audio/audio_output_device.cc
|
| @@ -28,12 +28,13 @@ class AudioOutputDevice::AudioThreadCallback
|
| void MapSharedMemory() override;
|
|
|
| // Called whenever we receive notifications about pending data.
|
| - void Process(uint32 pending_data) override;
|
| + void Process(uint32_t pending_data) override;
|
|
|
| private:
|
| AudioRendererSink::RenderCallback* render_callback_;
|
| scoped_ptr<AudioBus> output_bus_;
|
| uint64 callback_num_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback);
|
| };
|
|
|
| @@ -395,16 +396,19 @@ AudioOutputDevice::AudioThreadCallback::~AudioThreadCallback() {
|
| void AudioOutputDevice::AudioThreadCallback::MapSharedMemory() {
|
| CHECK_EQ(total_segments_, 1);
|
| CHECK(shared_memory_.Map(memory_length_));
|
| - DCHECK_EQ(memory_length_, AudioBus::CalculateMemorySize(audio_parameters_));
|
| + DCHECK_EQ(static_cast<size_t>(memory_length_),
|
| + sizeof(AudioOutputBufferParameters) +
|
| + AudioBus::CalculateMemorySize(audio_parameters_));
|
|
|
| - output_bus_ =
|
| - AudioBus::WrapMemory(audio_parameters_, shared_memory_.memory());
|
| + AudioOutputBuffer* buffer =
|
| + reinterpret_cast<AudioOutputBuffer*>(shared_memory_.memory());
|
| + output_bus_ = AudioBus::WrapMemory(audio_parameters_, buffer->audio);
|
| }
|
|
|
| // Called whenever we receive notifications about pending data.
|
| -void AudioOutputDevice::AudioThreadCallback::Process(uint32 pending_data) {
|
| +void AudioOutputDevice::AudioThreadCallback::Process(uint32_t pending_data) {
|
| // Convert the number of pending bytes in the render buffer into milliseconds.
|
| - int audio_delay_milliseconds = pending_data / bytes_per_ms_;
|
| + uint32_t audio_delay_milliseconds = pending_data / bytes_per_ms_;
|
|
|
| callback_num_++;
|
| TRACE_EVENT1("audio", "AudioOutputDevice::FireRenderCallback",
|
| @@ -417,10 +421,18 @@ void AudioOutputDevice::AudioThreadCallback::Process(uint32 pending_data) {
|
| TRACE_EVENT_ASYNC_END0("audio", "StartingPlayback", this);
|
| }
|
|
|
| - // Update the audio-delay measurement then ask client to render audio. Since
|
| - // |output_bus_| is wrapping the shared memory the Render() call is writing
|
| - // directly into the shared memory.
|
| - render_callback_->Render(output_bus_.get(), audio_delay_milliseconds);
|
| + // Read and reset the number of frames skipped.
|
| + AudioOutputBuffer* buffer =
|
| + reinterpret_cast<AudioOutputBuffer*>(shared_memory_.memory());
|
| + uint32_t frames_skipped = buffer->params.frames_skipped;
|
| + buffer->params.frames_skipped = 0;
|
| +
|
| + // Update the audio-delay measurement, inform about the number of skipped
|
| + // frames, and ask client to render audio. Since |output_bus_| is wrapping
|
| + // the shared memory the Render() call is writing directly into the shared
|
| + // memory.
|
| + render_callback_->Render(output_bus_.get(), audio_delay_milliseconds,
|
| + frames_skipped);
|
| }
|
|
|
| -} // namespace media.
|
| +} // namespace media
|
|
|