Chromium Code Reviews| Index: content/browser/renderer_host/media/audio_sync_reader.cc |
| diff --git a/content/browser/renderer_host/media/audio_sync_reader.cc b/content/browser/renderer_host/media/audio_sync_reader.cc |
| index 51914e1a6f245886e07f312995a09cc36bd8e9a1..984e252075bdd592cd09a12a9a8cd9467bdbb438 100644 |
| --- a/content/browser/renderer_host/media/audio_sync_reader.cc |
| +++ b/content/browser/renderer_host/media/audio_sync_reader.cc |
| @@ -5,9 +5,12 @@ |
| #include "content/browser/renderer_host/media/audio_sync_reader.h" |
| #include <algorithm> |
| +#include <string> |
| +#include <utility> |
| #include "base/command_line.h" |
| #include "base/format_macros.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/memory/shared_memory.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/strings/stringprintf.h" |
| @@ -40,11 +43,16 @@ void LogAudioGlitchResult(AudioGlitchResult result) { |
| namespace content { |
| -AudioSyncReader::AudioSyncReader(base::SharedMemory* shared_memory, |
| - const media::AudioParameters& params) |
| - : shared_memory_(shared_memory), |
| +AudioSyncReader::AudioSyncReader( |
| + const media::AudioParameters& params, |
| + std::unique_ptr<base::SharedMemory> shared_memory, |
| + std::unique_ptr<base::CancelableSyncSocket> socket, |
| + std::unique_ptr<base::CancelableSyncSocket> foreign_socket) |
| + : shared_memory_(std::move(shared_memory)), |
| mute_audio_(base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kMuteAudio)), |
| + socket_(std::move(socket)), |
| + foreign_socket_(std::move(foreign_socket)), |
| packet_size_(shared_memory_->requested_size()), |
| renderer_callback_count_(0), |
| renderer_missed_callback_count_(0), |
| @@ -107,6 +115,30 @@ AudioSyncReader::~AudioSyncReader() { |
| DVLOG(1) << log_string; |
| } |
| +// static |
| +std::unique_ptr<AudioSyncReader> AudioSyncReader::Create( |
| + const media::AudioParameters& params) { |
| + std::unique_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
| + std::unique_ptr<base::CancelableSyncSocket> socket( |
| + new base::CancelableSyncSocket()); |
| + std::unique_ptr<base::CancelableSyncSocket> foreign_socket( |
| + new base::CancelableSyncSocket()); |
| + |
| + base::CheckedNumeric<size_t> memory_size = |
|
DaleCurtis
2016/09/16 23:29:12
Move above the unique_ptr allocations.
Max Morin
2016/09/19 10:13:01
Done.
|
| + sizeof(media::AudioOutputBufferParameters); |
| + memory_size += AudioBus::CalculateMemorySize(params); |
| + |
| + if (!memory_size.IsValid() || |
| + !shared_memory->CreateAndMapAnonymous(memory_size.ValueOrDie()) || |
| + !base::CancelableSyncSocket::CreatePair(socket.get(), |
| + foreign_socket.get())) { |
| + return {}; |
|
DaleCurtis
2016/09/16 23:29:12
Ditto return nullptr.
Max Morin
2016/09/19 10:13:01
Done.
|
| + } |
| + return base::WrapUnique(new AudioSyncReader(params, std::move(shared_memory), |
| + std::move(socket), |
| + std::move(foreign_socket))); |
| +} |
| + |
| // media::AudioOutputController::SyncReader implementations. |
| void AudioSyncReader::UpdatePendingBytes(uint32_t bytes, |
| uint32_t frames_skipped) { |
| @@ -152,19 +184,6 @@ void AudioSyncReader::Close() { |
| socket_->Close(); |
| } |
| -bool AudioSyncReader::Init() { |
| - socket_.reset(new base::CancelableSyncSocket()); |
| - foreign_socket_.reset(new base::CancelableSyncSocket()); |
| - return base::CancelableSyncSocket::CreatePair(socket_.get(), |
| - foreign_socket_.get()); |
| -} |
| - |
| -bool AudioSyncReader::PrepareForeignSocket( |
| - base::ProcessHandle process_handle, |
| - base::SyncSocket::TransitDescriptor* descriptor) { |
| - return foreign_socket_->PrepareTransitDescriptor(process_handle, descriptor); |
| -} |
| - |
| bool AudioSyncReader::WaitUntilDataIsReady() { |
| TRACE_EVENT0("audio", "AudioSyncReader::WaitUntilDataIsReady"); |
| base::TimeDelta timeout = maximum_wait_time_; |