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

Unified Diff: ppapi/proxy/ppb_audio_input_proxy.cc

Issue 10828023: PPAPI/NaCl: Make NaClIPCAdapter transfer handles more generally (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-add gyp files Created 8 years, 4 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
« no previous file with comments | « ppapi/proxy/ppb_audio_input_proxy.h ('k') | ppapi/proxy/ppb_audio_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/ppb_audio_input_proxy.cc
diff --git a/ppapi/proxy/ppb_audio_input_proxy.cc b/ppapi/proxy/ppb_audio_input_proxy.cc
index 011e332afcdbbbee92907a4eebd770134f245806..dfc2d0c176529ceea60035ecd37712b71d519144 100644
--- a/ppapi/proxy/ppb_audio_input_proxy.cc
+++ b/ppapi/proxy/ppb_audio_input_proxy.cc
@@ -5,6 +5,7 @@
#include "ppapi/proxy/ppb_audio_input_proxy.h"
#include "base/compiler_specific.h"
+#include "media/audio/shared_memory_util.h"
#include "ppapi/c/dev/ppb_audio_input_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_audio_config.h"
@@ -286,21 +287,27 @@ void PPB_AudioInput_Proxy::OnMsgEnumerateDevicesACK(
void PPB_AudioInput_Proxy::OnMsgOpenACK(
const HostResource& audio_input,
int32_t result,
- IPC::PlatformFileForTransit socket_handle,
- base::SharedMemoryHandle handle,
- uint32_t length) {
+ const ppapi::proxy::SerializedHandle& socket_handle,
+ const ppapi::proxy::SerializedHandle& handle) {
+ CHECK(socket_handle.is_socket());
+ CHECK(handle.is_shmem());
EnterPluginFromHostResource<PPB_AudioInput_API> enter(audio_input);
if (enter.failed()) {
// The caller may still have given us these handles in the failure case.
// The easiest way to clean these up is to just put them in the objects
// and then close them. This failure case is not performance critical.
base::SyncSocket temp_socket(
- IPC::PlatformFileForTransitToPlatformFile(socket_handle));
- base::SharedMemory temp_mem(handle, false);
+ IPC::PlatformFileForTransitToPlatformFile(
+ socket_handle.descriptor()));
+ base::SharedMemory temp_mem(handle.shmem(), false);
} else {
+ // See the comment above about how we must call
+ // TotalSharedMemorySizeInBytes to get the actual size of the buffer. Here,
+ // we must call PacketSizeInBytes to get back the size of the audio buffer,
+ // excluding the bytes that audio uses for book-keeping.
static_cast<AudioInput*>(enter.object())->OnOpenComplete(
- result, handle, length,
- IPC::PlatformFileForTransitToPlatformFile(socket_handle));
+ result, handle.shmem(), media::PacketSizeInBytes(handle.size()),
+ IPC::PlatformFileForTransitToPlatformFile(socket_handle.descriptor()));
}
}
@@ -316,15 +323,28 @@ void PPB_AudioInput_Proxy::EnumerateDevicesACKInHost(
void PPB_AudioInput_Proxy::OpenACKInHost(int32_t result,
const HostResource& audio_input) {
- IPC::PlatformFileForTransit socket_handle =
- IPC::InvalidPlatformFileForTransit();
- base::SharedMemoryHandle shared_memory = IPC::InvalidPlatformFileForTransit();
- uint32_t shared_memory_length = 0;
+ ppapi::proxy::SerializedHandle socket_handle(
+ ppapi::proxy::SerializedHandle::SOCKET);
+ ppapi::proxy::SerializedHandle shared_memory(
+ ppapi::proxy::SerializedHandle::SHARED_MEMORY);
if (result == PP_OK) {
- result = GetAudioInputConnectedHandles(audio_input, &socket_handle,
- &shared_memory,
- &shared_memory_length);
+ IPC::PlatformFileForTransit temp_socket;
+ base::SharedMemoryHandle temp_shmem;
+ uint32_t audio_buffer_size;
+ result = GetAudioInputConnectedHandles(audio_input, &temp_socket,
+ &temp_shmem, &audio_buffer_size);
+ if (result == PP_OK) {
+ socket_handle.set_socket(temp_socket);
+ // Note that we must call TotalSharedMemorySizeInBytes because
+ // Audio allocates extra space in shared memory for book-keeping, so the
+ // actual size of the shared memory buffer is larger than
+ // audio_buffer_length. When sending to NaCl, NaClIPCAdapter expects this
+ // size to match the size of the full shared memory buffer.
+ shared_memory.set_shmem(
+ temp_shmem,
+ media::TotalSharedMemorySizeInBytes(audio_buffer_size));
+ }
}
// Send all the values, even on error. This simplifies some of our cleanup
@@ -334,7 +354,7 @@ void PPB_AudioInput_Proxy::OpenACKInHost(int32_t result,
// (in OnMsgOpenACK), even in the failure case.
dispatcher()->Send(new PpapiMsg_PPBAudioInput_OpenACK(
API_ID_PPB_AUDIO_INPUT_DEV, audio_input, result, socket_handle,
- shared_memory, shared_memory_length));
+ shared_memory));
}
int32_t PPB_AudioInput_Proxy::GetAudioInputConnectedHandles(
« no previous file with comments | « ppapi/proxy/ppb_audio_input_proxy.h ('k') | ppapi/proxy/ppb_audio_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698