Index: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.h |
=================================================================== |
--- ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.h (revision 0) |
+++ ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_audio.h (revision 0) |
@@ -0,0 +1,65 @@ |
+// Copyright 2010 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. |
+ |
+#ifndef NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_AUDIO_H_ |
+#define NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_AUDIO_H_ |
+ |
+#include <nacl/nacl_srpc.h> |
+#include <pthread.h> |
+#include "native_client/src/include/nacl_base.h" |
+#include "native_client/src/include/nacl_macros.h" |
+#include "native_client/src/include/portability.h" |
+#include "native_client/src/include/ref_counted.h" |
+#include "native_client/src/shared/ppapi_proxy/plugin_resource.h" |
+#include "ppapi/c/pp_resource.h" |
+#include "ppapi/c/ppb_audio.h" |
+ |
+namespace ppapi_proxy { |
+ |
+enum PluginAudioState { |
+ AUDIO_INCOMPLETE = 0, // StreamCreated not yet invoked |
+ AUDIO_PENDING, // Incomplete and app requested StartPlayback |
+ AUDIO_READY, // StreamCreated invoked, ready for playback |
+ AUDIO_PLAYING // Audio in playback |
+}; |
+ |
+// Implements the untrusted side of the PPB_Audio interface. |
+// All methods in PluginAudio class will be invoked on the main thread. |
+// The only exception is AudioThread(), which will invoke the application |
+// supplied callback to periodically obtain more audio data. |
+class PluginAudio : public PluginResource { |
+ public: |
+ PluginAudio(); |
+ virtual ~PluginAudio(); |
+ void StreamCreated(NaClSrpcImcDescType socket, |
+ NaClSrpcImcDescType shm, size_t shm_size); |
+ void set_state(PluginAudioState state) { state_ = state; } |
+ void set_callback(PPB_Audio_Callback user_callback, void* user_data) { |
+ user_callback_ = user_callback; |
+ user_data_ = user_data; |
+ } |
+ PluginAudioState state() { return state_; } |
+ bool StartAudioThread(); |
+ bool StopAudioThread(); |
+ static void AudioThread(void* self); |
+ static const PPB_Audio* GetInterface(); |
+ virtual bool InitFromBrowserResource(PP_Resource resource); |
+ private: |
+ PP_Resource resource_; |
+ NaClSrpcImcDescType socket_; |
+ NaClSrpcImcDescType shm_; |
+ size_t shm_size_; |
+ void *shm_buffer_; |
+ PluginAudioState state_; |
+ uintptr_t thread_id_; |
+ bool thread_active_; |
+ PPB_Audio_Callback user_callback_; |
+ void* user_data_; |
+ IMPLEMENT_RESOURCE(PluginAudio); |
+ NACL_DISALLOW_COPY_AND_ASSIGN(PluginAudio); |
+}; |
+ |
+} // namespace ppapi_proxy |
+ |
+#endif // NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_AUDIO_H_ |