summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorvrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-25 20:54:02 +0000
committervrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-25 20:54:02 +0000
commit4c2109d8bbb2fd92dc9d3be1cfc93c0877f41bad (patch)
tree99531b431061af2ae3585374c0b34ee94612aa68 /webkit
parent6e001bbb455a9555b95df2f8098ef105d022978b (diff)
downloadchromium_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.cc21
-rw-r--r--webkit/plugins/ppapi/ppb_video_decoder_impl.h4
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_;