Chromium Code Reviews| Index: webkit/glue/plugins/pepper_audio.cc |
| =================================================================== |
| --- webkit/glue/plugins/pepper_audio.cc (revision 66651) |
| +++ webkit/glue/plugins/pepper_audio.cc (working copy) |
| @@ -5,8 +5,8 @@ |
| #include "webkit/glue/plugins/pepper_audio.h" |
| #include "base/logging.h" |
| -#include "ppapi/c/dev/ppb_audio_dev.h" |
| -#include "ppapi/c/dev/ppb_audio_trusted_dev.h" |
| +#include "third_party/ppapi/c/dev/ppb_audio_dev.h" |
| +#include "third_party/ppapi/c/dev/ppb_audio_trusted_dev.h" |
| #include "webkit/glue/plugins/pepper_common.h" |
| namespace pepper { |
| @@ -77,13 +77,14 @@ |
| // PPB_Audio ------------------------------------------------------------------- |
| PP_Resource Create(PP_Instance instance_id, PP_Resource config_id, |
| - PPB_Audio_Callback callback, void* user_data) { |
| + PPB_Audio_Callback user_callback, void* user_data) { |
| PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
| if (!instance) |
| return 0; |
| // TODO(neb): Require callback to be present for untrusted plugins. |
| scoped_refptr<Audio> audio(new Audio(instance->module())); |
| - if (!audio->Init(instance->delegate(), config_id, callback, user_data)) |
| + if (!audio->Init(instance->delegate(), instance_id, config_id, |
| + user_callback, user_data, NULL)) |
| return 0; |
| return audio->GetReference(); |
| } |
| @@ -118,19 +119,20 @@ |
| // PPB_AudioTrusted ------------------------------------------------------------ |
| -PP_Resource GetBuffer(PP_Resource audio_id) { |
| - // TODO(neb): Implement me! |
| - return 0; |
| +PP_Resource CreateTrusted(PP_Instance instance_id, PP_Resource config_id, |
| + PPB_AudioTrusted_Callback created) { |
| + PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
| + if (!instance) |
| + return 0; |
| + scoped_refptr<Audio> audio(new Audio(instance->module())); |
| + if (!audio->Init(instance->delegate(), instance_id, config_id, |
| + NULL, NULL, created)) |
|
darin (slow to review)
2010/11/19 17:45:39
nit: please indent so the start of the arguments a
|
| + return 0; |
| + return audio->GetReference(); |
| } |
| -int GetOSDescriptor(PP_Resource audio_id) { |
| - // TODO(neb): Implement me! |
| - return -1; |
| -} |
| - |
| const PPB_AudioTrusted_Dev ppb_audiotrusted = { |
| - &GetBuffer, |
| - &GetOSDescriptor |
| + &CreateTrusted |
| }; |
| } // namespace |
| @@ -168,16 +170,20 @@ |
| Audio::Audio(PluginModule* module) |
| : Resource(module), |
| playing_(false), |
| + pp_instance_(0), |
| + audio_(NULL), |
| socket_(NULL), |
| shared_memory_(NULL), |
| shared_memory_size_(0), |
| callback_(NULL), |
| - user_data_(NULL) { |
| + user_data_(NULL), |
| + create_callback_(NULL) { |
| } |
| Audio::~Audio() { |
| // Calling ShutDown() makes sure StreamCreated cannot be called anymore. |
| audio_->ShutDown(); |
| + audio_ = NULL; |
| // Closing the socket causes the thread to exit - wait for it. |
| socket_->Close(); |
| if (audio_thread_.get()) { |
| @@ -199,19 +205,24 @@ |
| return this; |
| } |
| -bool Audio::Init(PluginDelegate* plugin_delegate, PP_Resource config_id, |
| - PPB_Audio_Callback callback, void* user_data) { |
| - CHECK(!audio_.get()); |
| +bool Audio::Init(PluginDelegate* plugin_delegate, |
| + PP_Instance instance_id, |
| + PP_Resource config_id, |
| + PPB_Audio_Callback callback, void* user_data, |
| + PPB_AudioTrusted_Callback create_callback) { |
| + CHECK(!audio_); |
| config_ = Resource::GetAs<AudioConfig>(config_id); |
| if (!config_) |
| return false; |
| + pp_instance_ = instance_id; |
| callback_ = callback; |
| user_data_ = user_data; |
| - // When the stream is created, we'll get called back in StreamCreated(). |
| - audio_.reset(plugin_delegate->CreateAudio(config_->sample_rate(), |
| - config_->sample_frame_count(), |
| - this)); |
| - return audio_.get() != NULL; |
| + create_callback_ = create_callback; |
| + // When the stream is created, we'll get called back on StreamCreated(). |
| + audio_ = plugin_delegate->CreateAudio(config_->sample_rate(), |
| + config_->sample_frame_count(), |
| + this); |
| + return audio_ != NULL; |
| } |
| bool Audio::StartPlayback() { |
| @@ -249,7 +260,19 @@ |
| socket_.reset(new base::SyncSocket(socket_handle)); |
| shared_memory_.reset(new base::SharedMemory(shared_memory_handle, false)); |
| shared_memory_size_ = shared_memory_size; |
| - |
| + // Trusted side of proxy can specify a callback to recieve handles on. |
| + if (create_callback_) { |
| +#if OS_LINUX || OS_MAC |
| + int64_t shm_handle = static_cast<int64_t>(shared_memory_handle.fd); |
| +#elif OS_WIN |
| + int64_T shm_handle = static_cast<int64_t>(shared_memory_handle); |
| +#else |
| + #error "Unknown OS" |
|
darin (slow to review)
2010/11/19 17:45:39
nit: indent by 4 spaces like the other branches?
|
| +#endif |
| + create_callback_(pp_instance_, GetReference(), shm_handle, |
| + shared_memory_size, static_cast<int64_t>(socket_handle)); |
|
darin (slow to review)
2010/11/19 17:45:39
nit: align the arguments so they all start at the
|
| + } |
| + // Recurring callback to fill audio buffers. |
| if (callback_) { |
| shared_memory_->Map(shared_memory_size_); |
| // In common case StartPlayback() was called before StreamCreated(). |