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..e1b4f4d033787c415fbeef5d113659dbdc804d60 100644 |
| --- a/content/browser/renderer_host/media/audio_sync_reader.cc |
| +++ b/content/browser/renderer_host/media/audio_sync_reader.cc |
| @@ -5,6 +5,8 @@ |
| #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" |
| @@ -40,11 +42,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 +114,28 @@ 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()); |
| + |
| + size_t memory_size = sizeof(media::AudioOutputBufferParameters) + |
|
o1ka
2016/09/16 10:51:59
const
Max Morin
2016/09/16 12:46:15
Done.
|
| + AudioBus::CalculateMemorySize(params); |
|
o1ka
2016/09/16 10:51:59
Since this is the value to be sent over IPC in the
Max Morin
2016/09/16 12:46:15
Yes. Thinking about it, I'm not sure there's anyth
|
| + |
| + if (!shared_memory->CreateAndMapAnonymous(memory_size) || |
| + !base::CancelableSyncSocket::CreatePair(socket.get(), |
| + foreign_socket.get())) { |
| + return {}; |
| + } |
| + return std::unique_ptr<AudioSyncReader>( |
| + 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 +181,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_; |