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_; |