diff options
author | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 20:54:02 +0000 |
---|---|---|
committer | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 20:54:02 +0000 |
commit | 4c2109d8bbb2fd92dc9d3be1cfc93c0877f41bad (patch) | |
tree | 99531b431061af2ae3585374c0b34ee94612aa68 /webkit | |
parent | 6e001bbb455a9555b95df2f8098ef105d022978b (diff) | |
download | chromium_src-4c2109d8bbb2fd92dc9d3be1cfc93c0877f41bad.zip chromium_src-4c2109d8bbb2fd92dc9d3be1cfc93c0877f41bad.tar.gz chromium_src-4c2109d8bbb2fd92dc9d3be1cfc93c0877f41bad.tar.bz2 |
Add initialization callback support for Video Decoder PPAPI.
Initializing a decoder is asynchronous, so add a callback to tell client
when the decoder is ready to use.
I confirmed that this works locally using a C plugin that I wrote on my machine.
BUG=NONE
TEST=NONE
Review URL: http://codereview.chromium.org/7065010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86699 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/plugins/ppapi/ppb_video_decoder_impl.cc | 21 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_video_decoder_impl.h | 4 |
2 files changed, 21 insertions, 4 deletions
diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc index 76edf08..7cc37ba 100644 --- a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc +++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc @@ -44,7 +44,8 @@ PP_Bool GetConfigs(PP_Instance instance_id, } PP_Resource Create(PP_Instance instance_id, - PP_VideoConfigElement* decoder_config) { + PP_VideoConfigElement* decoder_config, + PP_CompletionCallback callback) { PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); if (!instance) return 0; @@ -52,8 +53,10 @@ PP_Resource Create(PP_Instance instance_id, scoped_refptr<PPB_VideoDecoder_Impl> decoder( new PPB_VideoDecoder_Impl(instance)); - if (!decoder->Init(const_cast<PP_VideoConfigElement*>(decoder_config))) + if (!decoder->Init( + const_cast<PP_VideoConfigElement*>(decoder_config), callback)) { return 0; + } return decoder->GetReference(); } @@ -212,7 +215,8 @@ bool PPB_VideoDecoder_Impl::GetConfigs( return true; } -bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config) { +bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config, + PP_CompletionCallback callback) { if (!instance()) return false; @@ -224,6 +228,8 @@ bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config) { CopyToConfigList(decoder_config, &copied); platform_video_decoder_->Initialize(copied); + initialization_callback_ = callback; + return platform_video_decoder_.get()? true : false; } @@ -392,6 +398,15 @@ void PPB_VideoDecoder_Impl::NotifyFlushDone() { PP_RunCompletionCallback(&callback, PP_OK); } +void PPB_VideoDecoder_Impl::NotifyInitializeDone() { + if (initialization_callback_.func == NULL) + return; + + PP_CompletionCallback callback = PP_BlockUntilComplete(); + std::swap(callback, initialization_callback_); + PP_RunCompletionCallback(&callback, PP_OK); +} + } // namespace ppapi } // namespace webkit diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.h b/webkit/plugins/ppapi/ppb_video_decoder_impl.h index 85ae9bb..3bc2690 100644 --- a/webkit/plugins/ppapi/ppb_video_decoder_impl.h +++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.h @@ -46,7 +46,7 @@ class PPB_VideoDecoder_Impl : public Resource, PP_VideoConfigElement* matching_configs, uint32_t matching_configs_size, uint32_t* num_of_matching_configs); - bool Init(PP_VideoConfigElement* dec_config); + bool Init(PP_VideoConfigElement* dec_config, PP_CompletionCallback callback); bool Decode(PP_VideoBitstreamBuffer_Dev* bitstream_buffer, PP_CompletionCallback callback); void AssignGLESBuffers(uint32_t no_of_buffers, @@ -64,6 +64,7 @@ class PPB_VideoDecoder_Impl : public Resource, media::VideoDecodeAccelerator::MemoryType type) OVERRIDE; virtual void DismissPictureBuffer(int32 picture_buffer_id) OVERRIDE; virtual void PictureReady(const media::Picture& picture) OVERRIDE; + virtual void NotifyInitializeDone() OVERRIDE; virtual void NotifyEndOfStream() OVERRIDE; virtual void NotifyError( media::VideoDecodeAccelerator::Error error) OVERRIDE; @@ -79,6 +80,7 @@ class PPB_VideoDecoder_Impl : public Resource, // Factory to produce our callbacks. base::ScopedCallbackFactory<PPB_VideoDecoder_Impl> callback_factory_; + PP_CompletionCallback initialization_callback_; PP_CompletionCallback abort_callback_; PP_CompletionCallback flush_callback_; PP_CompletionCallback bitstream_buffer_callback_; |