diff options
author | grunell <grunell@chromium.org> | 2015-12-14 01:52:11 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-14 09:53:19 +0000 |
commit | db03a8d1128783ff4803364ba616ae5fac8822f7 (patch) | |
tree | fa0eec2acc5818b93c089bcc37d643e5c13deed1 /content/browser/renderer_host/media/audio_sync_reader.cc | |
parent | b4f1d4eb29f6580db9cba6af36f4fd7a0c96f861 (diff) | |
download | chromium_src-db03a8d1128783ff4803364ba616ae5fac8822f7.zip chromium_src-db03a8d1128783ff4803364ba616ae5fac8822f7.tar.gz chromium_src-db03a8d1128783ff4803364ba616ae5fac8822f7.tar.bz2 |
Forward the number of skipped frames by the OS in audio playout.
* Only for Mac.
Will be done in follow-up CLs:
* Windows.
* Hooking this up to the AEC.
BUG=560371
Review URL: https://codereview.chromium.org/1487983002
Cr-Commit-Position: refs/heads/master@{#364990}
Diffstat (limited to 'content/browser/renderer_host/media/audio_sync_reader.cc')
-rw-r--r-- | content/browser/renderer_host/media/audio_sync_reader.cc | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/content/browser/renderer_host/media/audio_sync_reader.cc b/content/browser/renderer_host/media/audio_sync_reader.cc index f6b3d6c..ea794a2 100644 --- a/content/browser/renderer_host/media/audio_sync_reader.cc +++ b/content/browser/renderer_host/media/audio_sync_reader.cc @@ -15,6 +15,7 @@ #include "media/audio/audio_parameters.h" using media::AudioBus; +using media::AudioOutputBuffer; namespace { @@ -51,8 +52,12 @@ AudioSyncReader::AudioSyncReader(base::SharedMemory* shared_memory, maximum_wait_time_(base::TimeDelta::FromMilliseconds(20)), #endif buffer_index_(0) { - DCHECK_EQ(packet_size_, AudioBus::CalculateMemorySize(params)); - output_bus_ = AudioBus::WrapMemory(params, shared_memory->memory()); + DCHECK_EQ(static_cast<size_t>(packet_size_), + sizeof(media::AudioOutputBufferParameters) + + AudioBus::CalculateMemorySize(params)); + AudioOutputBuffer* buffer = + reinterpret_cast<AudioOutputBuffer*>(shared_memory_->memory()); + output_bus_ = AudioBus::WrapMemory(params, buffer->audio); output_bus_->Zero(); } @@ -81,10 +86,19 @@ AudioSyncReader::~AudioSyncReader() { } // media::AudioOutputController::SyncReader implementations. -void AudioSyncReader::UpdatePendingBytes(uint32 bytes) { +void AudioSyncReader::UpdatePendingBytes(uint32_t bytes, + uint32_t frames_skipped) { + // Increase the number of skipped frames stored in shared memory. We don't + // send it over the socket since sending more than 4 bytes might lead to being + // descheduled. The reading side will zero it when consumed. + AudioOutputBuffer* buffer = + reinterpret_cast<AudioOutputBuffer*>(shared_memory_->memory()); + buffer->params.frames_skipped += frames_skipped; + // Zero out the entire output buffer to avoid stuttering/repeating-buffers // in the anomalous case if the renderer is unable to keep up with real-time. output_bus_->Zero(); + socket_->Send(&bytes, sizeof(bytes)); ++buffer_index_; } |