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

Unified Diff: ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_audio_rpc_server.cc

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 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
Index: ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_audio_rpc_server.cc
===================================================================
--- ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_audio_rpc_server.cc (revision 0)
+++ ppapi/native_client/src/shared/ppapi_proxy/browser_ppb_audio_rpc_server.cc (revision 0)
@@ -0,0 +1,216 @@
+// Copyright (c) 2011 The Native Client Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// SRPC-abstraction wrappers around PPB_Audio functions.
+
+#include "native_client/src/include/nacl_scoped_ptr.h"
+#include "native_client/src/include/portability.h"
+#include "native_client/src/shared/ppapi_proxy/browser_globals.h"
+#include "native_client/src/shared/ppapi_proxy/browser_ppp.h"
+#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
+#include "native_client/src/shared/ppapi_proxy/utility.h"
+#include "native_client/src/trusted/desc/nacl_desc_invalid.h"
+#include "native_client/src/trusted/desc/nacl_desc_wrapper.h"
+#include "ppapi/c/ppb_audio.h"
+#include "ppapi/c/ppb_audio_config.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/c/trusted/ppb_audio_trusted.h"
+#include "ppapi/cpp/completion_callback.h"
+#include "ppapi/cpp/core.h"
+#include "ppapi/cpp/module.h"
+#include "srpcgen/ppb_rpc.h"
+#include "srpcgen/ppp_rpc.h"
+
+using ppapi_proxy::DebugPrintf;
+
+namespace {
+
+const PPB_AudioTrusted* GetAudioTrustedInterface() {
+ DebugPrintf("GetAudioTrustedInterface\n");
+ static const PPB_AudioTrusted* audioTrusted =
+ static_cast<const PPB_AudioTrusted*>
+ (ppapi_proxy::GetBrowserInterface(PPB_AUDIO_TRUSTED_INTERFACE));
+ return audioTrusted;
+}
+
+const PPB_Audio* GetAudioInterface() {
+ DebugPrintf("GetAudioInterface\n");
+ static const PPB_Audio* audio =
+ static_cast<const PPB_Audio*>
+ (ppapi_proxy::GetBrowserInterface(PPB_AUDIO_INTERFACE));
+ return audio;
+}
+
+struct StreamCreatedCallbackData {
+ PP_Instance instance_id;
+ PP_Resource audio_id;
+ StreamCreatedCallbackData(PP_Instance i, PP_Resource a) :
+ instance_id(i),
+ audio_id(a) { }
+};
+
+// This completion callback will be invoked when the sync socket and shared
+// memory handles become available.
+void StreamCreatedCallback(void* user_data, int32_t result) {
+ DebugPrintf("StreamCreatedCallback: user_data=%p result=%"NACL_PRId32"\n",
+ user_data, result);
+ if (NULL == user_data) {
+ return;
+ }
+ nacl::scoped_ptr<StreamCreatedCallbackData> data(
+ static_cast<StreamCreatedCallbackData*>(user_data));
+ if (result < 0) {
+ return;
+ }
+ const PPB_AudioTrusted* audioTrusted = GetAudioTrustedInterface();
+ if (NULL == audioTrusted) {
+ return;
+ }
+ int sync_socket_handle;
+ int shared_memory_handle;
+ uint32_t shared_memory_size;
+ if (PP_OK != audioTrusted->GetSyncSocket(data->audio_id,
+ &sync_socket_handle)) {
+ return;
+ }
+ if (PP_OK != audioTrusted->GetSharedMemory(data->audio_id,
+ &shared_memory_handle,
+ &shared_memory_size)) {
+ return;
+ }
+ nacl::DescWrapperFactory factory;
+ NaClHandle nacl_shm_handle = (NaClHandle)shared_memory_handle;
+ NaClHandle nacl_sync_handle = (NaClHandle)sync_socket_handle;
+ nacl::scoped_ptr<nacl::DescWrapper> shm_wrapper(factory.ImportShmHandle(
+ nacl_shm_handle, shared_memory_size));
+ nacl::scoped_ptr<nacl::DescWrapper> socket_wrapper(
+ factory.ImportSyncSocketHandle(nacl_sync_handle));
+ NaClDesc *nacl_shm = NaClDescRef(shm_wrapper->desc());
+ NaClDesc *nacl_socket = NaClDescRef(socket_wrapper->desc());
+ int r;
+ r = PppAudioRpcClient::PPP_Audio_StreamCreated(
+ ppapi_proxy::GetMainSrpcChannel(data->instance_id),
+ data->audio_id,
+ nacl_shm,
+ shared_memory_size,
+ nacl_socket);
+}
+
+} // namespace
+
+void PpbAudioRpcServer::PPB_Audio_Create(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Instance instance,
+ PP_Resource config,
+ PP_Resource* resource) {
+ DebugPrintf("PPB_Audio::Create: instance=%"NACL_PRIu32" config=%"NACL_PRIu32
+ "\n", instance, config);
+ NaClSrpcClosureRunner runner(done);
+ const PPB_AudioTrusted* audio = GetAudioTrustedInterface();
+ PP_CompletionCallback callback;
+ StreamCreatedCallbackData* data;
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+ if (ppapi_proxy::kInvalidResourceId == config) {
+ return;
+ }
+ if (NULL == audio) {
+ return;
+ }
+ *resource = audio->CreateTrusted(instance);
+ DebugPrintf("PPB_Audio::Create: resource=%"NACL_PRIu32"\n", *resource);
+ PP_Resource audio_id = *resource;
+ if (ppapi_proxy::kInvalidResourceId == audio_id) {
+ return;
+ }
+ data = new StreamCreatedCallbackData(instance, audio_id);
+ callback = PP_MakeOptionalCompletionCallback(StreamCreatedCallback, data);
+ int32_t pp_error = audio->Open(audio_id, config, callback);
+ DebugPrintf("PPB_Audio::Create: pp_error=%"NACL_PRIu32"\n", pp_error);
+ // If the Open() call failed, pass failure code and explicitly
+ // invoke the completion callback, giving it a chance to release data.
+ if (pp_error != PP_OK_COMPLETIONPENDING) {
+ PP_RunCompletionCallback(&callback, pp_error);
+ return;
+ }
+ rpc->result = NACL_SRPC_RESULT_OK;
+}
+
+void PpbAudioRpcServer::PPB_Audio_StartPlayback(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Resource resource,
+ int32_t* success) {
+ DebugPrintf("PPB_Audio::StartPlayback: resource=%"NACL_PRIu32"\n", resource);
+ NaClSrpcClosureRunner runner(done);
+ const PPB_Audio* audio = GetAudioInterface();
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+ if (NULL == audio) {
+ *success = false;
+ return;
+ }
+ PP_Bool pp_success = audio->StartPlayback(resource);
+ DebugPrintf("PPB_Audio::StartPlayback: pp_success=%d\n", pp_success);
+ *success = (pp_success == PP_TRUE);
+ rpc->result = NACL_SRPC_RESULT_OK;
+}
+
+void PpbAudioRpcServer::PPB_Audio_StopPlayback(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Resource resource,
+ int32_t* success) {
+ DebugPrintf("PPB_Audio::StopPlayback: resource=%"NACL_PRIu32"\n", resource);
+ NaClSrpcClosureRunner runner(done);
+ const PPB_Audio* audio = GetAudioInterface();
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+ if (NULL == audio) {
+ *success = false;
+ return;
+ }
+ PP_Bool pp_success = audio->StopPlayback(resource);
+ DebugPrintf("PPB_Audio::StopPlayback: pp_success=%d\n", pp_success);
+ *success = (pp_success == PP_TRUE);
+ rpc->result = NACL_SRPC_RESULT_OK;
+}
+
+void PpbAudioRpcServer::PPB_Audio_IsAudio(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Resource resource,
+ int32_t* success) {
+ DebugPrintf("PPB_Audio::IsAudio: resource=%"NACL_PRIu32"\n", resource);
+ NaClSrpcClosureRunner runner(done);
+ const PPB_Audio* audio = GetAudioInterface();
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+ if (NULL == audio) {
+ *success = false;
+ return;
+ }
+ PP_Bool pp_success = audio->IsAudio(resource);
+ DebugPrintf("PPB_Audio::IsAudio: pp_success=%d\n", pp_success);
+ *success = (pp_success == PP_TRUE);
+ rpc->result = NACL_SRPC_RESULT_OK;
+}
+
+void PpbAudioRpcServer::PPB_Audio_GetCurrentConfig(
+ NaClSrpcRpc* rpc,
+ NaClSrpcClosure* done,
+ PP_Resource resource,
+ PP_Resource* config) {
+ DebugPrintf("PPB_Audio::GetCurrentConfig: resource=%"NACL_PRIu32"\n",
+ resource);
+ NaClSrpcClosureRunner runner(done);
+ const PPB_Audio* audio = GetAudioInterface();
+ rpc->result = NACL_SRPC_RESULT_APP_ERROR;
+ if (NULL == audio) {
+ return;
+ }
+ if (ppapi_proxy::kInvalidResourceId == resource) {
+ return;
+ }
+ *config = audio->GetCurrentConfig(resource);
+ DebugPrintf("PPB_Audio::GetCurrentConfig: config=%"NACL_PRIu32"\n", *config);
+ rpc->result = NACL_SRPC_RESULT_OK;
+}

Powered by Google App Engine
This is Rietveld 408576698