Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1714)

Unified Diff: content/browser/renderer_host/media/audio_input_renderer_host.cc

Issue 12379071: Use multiple shared memory buffers cyclically for audio capture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: rebase Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/audio_input_renderer_host.cc
===================================================================
--- content/browser/renderer_host/media/audio_input_renderer_host.cc (revision 186213)
+++ content/browser/renderer_host/media/audio_input_renderer_host.cc (working copy)
@@ -27,8 +27,8 @@
// The audio input stream ID in the render view.
int stream_id;
- // Shared memory for transmission of the audio data.
- base::SharedMemory shared_memory;
+ // Shared memory buffers for transmission of the audio data.
+ AudioInputSyncWriter::SharedMemoryVector shared_memory;
// The synchronous writer to be used by the controller. We have the
// ownership of the writer.
@@ -127,15 +127,6 @@
// Once the audio stream is created then complete the creation process by
// mapping shared memory and sharing with the renderer process.
- base::SharedMemoryHandle foreign_memory_handle;
- if (!entry->shared_memory.ShareToProcess(peer_handle(),
- &foreign_memory_handle)) {
- // If we failed to map and share the shared memory then close the audio
- // stream and send an error message.
- DeleteEntryOnError(entry);
- return;
- }
-
AudioInputSyncWriter* writer =
static_cast<AudioInputSyncWriter*>(entry->writer.get());
@@ -152,10 +143,23 @@
DeleteEntryOnError(entry);
return;
}
+ Send(new AudioInputMsg_NotifyStreamCreated(entry->stream_id,
+ foreign_socket_handle,
+ entry->shared_memory.size()));
- Send(new AudioInputMsg_NotifyStreamCreated(entry->stream_id,
- foreign_memory_handle, foreign_socket_handle,
- entry->shared_memory.created_size()));
+ for (size_t i = 0; i < entry->shared_memory.size(); ++i) {
+ base::SharedMemoryHandle foreign_memory_handle;
+ if (!entry->shared_memory[i]->ShareToProcess(peer_handle(),
+ &foreign_memory_handle)) {
+ // If we failed to map and share the shared memory then close the audio
+ // stream and send an error message.
+ DeleteEntryOnError(entry);
+ return;
+ }
+ Send(new AudioInputMsg_NotifySharedMemoryCreated(entry->stream_id,
+ foreign_memory_handle,
+ entry->shared_memory[i]->created_size(), i));
+ }
}
void AudioInputRendererHost::DoSendRecordingMessage(
@@ -209,8 +213,11 @@
}
void AudioInputRendererHost::OnCreateStream(
- int stream_id, const media::AudioParameters& params,
- const std::string& device_id, bool automatic_gain_control) {
+ int stream_id,
+ const media::AudioParameters& params,
+ const std::string& device_id,
+ bool automatic_gain_control,
+ int shared_memory_count) {
VLOG(1) << "AudioInputRendererHost::OnCreateStream(stream_id="
<< stream_id << ")";
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -238,10 +245,14 @@
// Create the shared memory and share it with the renderer process
// using a new SyncWriter object.
- if (!entry->shared_memory.CreateAndMapAnonymous(mem_size)) {
- // If creation of shared memory failed then send an error message.
- SendErrorMessage(stream_id);
- return;
+ entry->shared_memory.resize(shared_memory_count);
+ for (size_t i = 0; i < entry->shared_memory.size(); ++i) {
+ entry->shared_memory[i] = new base::SharedMemory();
+ if (!entry->shared_memory[i]->CreateAndMapAnonymous(mem_size)) {
+ // If creation of shared memory failed then send an error message.
+ SendErrorMessage(stream_id);
+ return;
+ }
}
scoped_ptr<AudioInputSyncWriter> writer(

Powered by Google App Engine
This is Rietveld 408576698