OLD | NEW |
1 // Copyright (c) 2010 The Native Client Authors. All rights reserved. | 1 // Copyright (c) 2010 The Native Client Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "native_client/src/shared/ppapi_proxy/plugin_audio.h" | 5 #include "native_client/src/shared/ppapi_proxy/plugin_audio.h" |
6 | 6 |
7 #include <pthread.h> | 7 #include <pthread.h> |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <string.h> | 9 #include <string.h> |
10 #include <sys/errno.h> | 10 #include <sys/errno.h> |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 // Start of untrusted PPB_Audio functions | 215 // Start of untrusted PPB_Audio functions |
216 | 216 |
217 PP_Resource Create(PP_Instance instance, | 217 PP_Resource Create(PP_Instance instance, |
218 PP_Resource config, | 218 PP_Resource config, |
219 PPB_Audio_Callback user_callback, | 219 PPB_Audio_Callback user_callback, |
220 void* user_data) { | 220 void* user_data) { |
221 PP_Resource audioResource; | 221 PP_Resource audioResource; |
222 NaClSrpcError retval = NACL_SRPC_RESULT_OK; | 222 NaClSrpcError retval = NACL_SRPC_RESULT_OK; |
223 NaClSrpcChannel* channel = NULL; | 223 NaClSrpcChannel* channel = NULL; |
224 AudioProxy* audio = NULL; | 224 AudioProxy* audio = NULL; |
225 int64_t audioResource64 = 0; | |
226 int64_t instance64 = static_cast<int64_t>(instance); | |
227 int64_t config64 = static_cast<int64_t>(config); | |
228 // TODO(audio): remove check below when & if we support | 225 // TODO(audio): remove check below when & if we support |
229 // multiple simultanious audio devices from same untrusted instance | 226 // multiple simultanious audio devices from same untrusted instance |
230 if (NULL != GetCurrentAudio()) { | 227 if (NULL != GetCurrentAudio()) { |
231 return kInvalidResourceId; | 228 return kInvalidResourceId; |
232 } | 229 } |
233 // Proxy to browser Create, get audio PP_Resource | 230 // Proxy to browser Create, get audio PP_Resource |
234 channel = ppapi_proxy::GetMainSrpcChannel(); | 231 channel = ppapi_proxy::GetMainSrpcChannel(); |
235 retval = PpbAudioDevRpcClient::PPB_Audio_Dev_Create( | 232 retval = PpbAudioDevRpcClient::PPB_Audio_Dev_Create( |
236 channel, | 233 channel, |
237 instance64, | 234 instance, |
238 config64, | 235 config, |
239 &audioResource64); | 236 &audioResource); |
240 audioResource = static_cast<PP_Resource>(audioResource64); | |
241 if (NACL_SRPC_RESULT_OK != retval) { | 237 if (NACL_SRPC_RESULT_OK != retval) { |
242 return kInvalidResourceId; | 238 return kInvalidResourceId; |
243 } | 239 } |
244 if (kInvalidResourceId == audioResource) { | 240 if (kInvalidResourceId == audioResource) { |
245 return kInvalidResourceId; | 241 return kInvalidResourceId; |
246 } | 242 } |
247 // Create an AudioProxy | 243 // Create an AudioProxy |
248 audio = new AudioProxy(audioResource, user_callback, user_data); | 244 audio = new AudioProxy(audioResource, user_callback, user_data); |
249 if (NULL == audio) { | 245 if (NULL == audio) { |
250 return kInvalidResourceId; | 246 return kInvalidResourceId; |
(...skipping 16 matching lines...) Expand all Loading... |
267 resource, | 263 resource, |
268 &out_bool); | 264 &out_bool); |
269 if (NACL_SRPC_RESULT_OK != retval) { | 265 if (NACL_SRPC_RESULT_OK != retval) { |
270 return PP_FALSE; | 266 return PP_FALSE; |
271 } | 267 } |
272 return pp::BoolToPPBool(out_bool); | 268 return pp::BoolToPPBool(out_bool); |
273 } | 269 } |
274 | 270 |
275 PP_Resource GetCurrentConfig(PP_Resource audio) { | 271 PP_Resource GetCurrentConfig(PP_Resource audio) { |
276 NaClSrpcChannel* channel = ppapi_proxy::GetMainSrpcChannel(); | 272 NaClSrpcChannel* channel = ppapi_proxy::GetMainSrpcChannel(); |
277 int64_t out_resource; | 273 PP_Resource out_resource; |
278 NaClSrpcError retval = | 274 NaClSrpcError retval = |
279 PpbAudioDevRpcClient::PPB_Audio_Dev_GetCurrentConfig( | 275 PpbAudioDevRpcClient::PPB_Audio_Dev_GetCurrentConfig( |
280 channel, | 276 channel, |
281 audio, | 277 audio, |
282 &out_resource); | 278 &out_resource); |
283 if (NACL_SRPC_RESULT_OK != retval) { | 279 if (NACL_SRPC_RESULT_OK != retval) { |
284 return kInvalidResourceId; | 280 return kInvalidResourceId; |
285 } | 281 } |
286 return static_cast<PP_Resource>(out_resource); | 282 return out_resource; |
287 } | 283 } |
288 | 284 |
289 PP_Bool StartPlayback(PP_Resource audioResource) { | 285 PP_Bool StartPlayback(PP_Resource audioResource) { |
290 NaClSrpcChannel* channel = ppapi_proxy::GetMainSrpcChannel(); | 286 NaClSrpcChannel* channel = ppapi_proxy::GetMainSrpcChannel(); |
291 int32_t out_bool; | 287 int32_t out_bool; |
292 AudioProxy* audio = GetBoundAudio(audioResource); | 288 AudioProxy* audio = GetBoundAudio(audioResource); |
293 if (NULL == audio) { | 289 if (NULL == audio) { |
294 return PP_FALSE; | 290 return PP_FALSE; |
295 } | 291 } |
296 if (audio->state() == AUDIO_INCOMPLETE) { | 292 if (audio->state() == AUDIO_INCOMPLETE) { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 } | 352 } |
357 | 353 |
358 } // namespace ppapi_proxy | 354 } // namespace ppapi_proxy |
359 | 355 |
360 // PppAudioDevRpcServer::PPP_Audio_Dev_StreamCreated() must be in global | 356 // PppAudioDevRpcServer::PPP_Audio_Dev_StreamCreated() must be in global |
361 // namespace. This function receives handles for the socket and shared | 357 // namespace. This function receives handles for the socket and shared |
362 // memory, provided by the trusted audio implementation. | 358 // memory, provided by the trusted audio implementation. |
363 void PppAudioDevRpcServer::PPP_Audio_Dev_StreamCreated( | 359 void PppAudioDevRpcServer::PPP_Audio_Dev_StreamCreated( |
364 NaClSrpcRpc* rpc, | 360 NaClSrpcRpc* rpc, |
365 NaClSrpcClosure* done, | 361 NaClSrpcClosure* done, |
366 int64_t audioResource64, | 362 PP_Resource audioResource, |
367 NaClSrpcImcDescType shm, | 363 NaClSrpcImcDescType shm, |
368 int32_t shm_size, | 364 int32_t shm_size, |
369 NaClSrpcImcDescType sync_socket) { | 365 NaClSrpcImcDescType sync_socket) { |
370 NaClSrpcClosureRunner runner(done); | 366 NaClSrpcClosureRunner runner(done); |
371 PP_Resource audioResource = static_cast<PP_Resource>(audioResource64); | |
372 rpc->result = NACL_SRPC_RESULT_APP_ERROR; | 367 rpc->result = NACL_SRPC_RESULT_APP_ERROR; |
373 ppapi_proxy::AudioProxy* audio = ppapi_proxy::GetBoundAudio(audioResource); | 368 ppapi_proxy::AudioProxy* audio = ppapi_proxy::GetBoundAudio(audioResource); |
374 if (NULL == audio) { | 369 if (NULL == audio) { |
375 // Ignore if no audioResource -> audioInstance mapping exists, | 370 // Ignore if no audioResource -> audioInstance mapping exists, |
376 // the app may have shutdown audio before StreamCreated() invoked. | 371 // the app may have shutdown audio before StreamCreated() invoked. |
377 rpc->result = NACL_SRPC_RESULT_OK; | 372 rpc->result = NACL_SRPC_RESULT_OK; |
378 return; | 373 return; |
379 } | 374 } |
380 audio->StreamCreated(sync_socket, shm, shm_size); | 375 audio->StreamCreated(sync_socket, shm, shm_size); |
381 rpc->result = NACL_SRPC_RESULT_OK; | 376 rpc->result = NACL_SRPC_RESULT_OK; |
382 } | 377 } |
OLD | NEW |