Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2041)

Unified Diff: webkit/plugins/ppapi/ppb_video_decoder_impl.cc

Issue 7545014: Implement PPAPI VideoDecode out-of-process support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: responses to ddorwin and piman Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/plugins/ppapi/ppb_video_decoder_impl.cc
diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
index 562fe3e6510ea8164e284734385c74f8e094a6dc..610169c986ae54262c7d356b51f05cdcab9c11d7 100644
--- a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
+++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
@@ -34,11 +34,7 @@ namespace ppapi {
PPB_VideoDecoder_Impl::PPB_VideoDecoder_Impl(PluginInstance* instance)
: Resource(instance),
- callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
- context3d_id_(0),
- flush_callback_(PP_BlockUntilComplete()),
- reset_callback_(PP_BlockUntilComplete()),
- gles2_impl_(NULL) {
+ VideoDecoderImpl(true) {
ppp_videodecoder_ =
static_cast<const PPP_VideoDecoder_Dev*>(instance->module()->
GetPluginInterface(PPP_VIDEODECODER_DEV_INTERFACE));
@@ -64,17 +60,18 @@ PP_Resource PPB_VideoDecoder_Impl::Create(PluginInstance* instance,
bool PPB_VideoDecoder_Impl::Init(PP_Resource context3d_id,
const PP_VideoConfigElement* config) {
- if (!instance() || !context3d_id || !config)
+ if(!instance() || !::ppapi::VideoDecoderImpl::Init(context3d_id, config))
Ami GONE FROM CHROMIUM 2011/08/02 00:49:08 How can instance() be NULL, do you know?
vrk (LEFT CHROMIUM) 2011/08/03 22:05:22 It appears it can't be -- when ResourceCreationImp
return false;
- EnterResourceNoLock<PPB_Context3D_API> enter(context3d_id, true);
- if (enter.failed())
+ EnterResourceNoLock<PPB_Context3D_API> enter_context(context3d_id, true);
+ DCHECK(enter_context.succeeded());
Ami GONE FROM CHROMIUM 2011/08/02 00:49:08 I'm not entirely sure about this; it's only correc
vrk (LEFT CHROMIUM) 2011/08/03 19:04:30 Agreed. To also address piman's concern w/ the dou
+
+ std::vector<int32> copied;
+ if (!CopyConfigsToVector(config, &copied))
return false;
- PPB_Context3D_Impl* context3d =
- static_cast<PPB_Context3D_Impl*>(enter.object());
- context3d_id_ = context3d_id;
- ResourceTracker::Get()->AddRefResource(context3d_id_);
+ PPB_Context3D_Impl* context3d =
+ static_cast<PPB_Context3D_Impl*>(enter_context.object());
int command_buffer_route_id =
context3d->platform_context()->GetCommandBufferRouteId();
@@ -82,26 +79,9 @@ bool PPB_VideoDecoder_Impl::Init(PP_Resource context3d_id,
return false;
platform_video_decoder_ = instance()->delegate()->CreateVideoDecoder(
this, command_buffer_route_id);
-
- gles2_impl_ = context3d->gles2_impl();
-
if (!platform_video_decoder_)
return false;
- std::vector<uint32> copied;
- // TODO(fischman,vrk): this is completely broken in that it fails to account
- // for the semantic distinction between keys and values; it is certainly
- // possible for a value to show up as 0, and that shouldn't terminate the
- // config vector. Only a *key* of 0 should do so.
- // TODO(vrk): This is assuming PP_VideoAttributeDictionary and
- // VideoAttributeKey have identical enum values. There is no compiler
- // assert to guarantee this. We either need to add such asserts or
- // merge PP_VideoAttributeDictionary and VideoAttributeKey.
- for (const PP_VideoConfigElement* current = config;
- *current != PP_VIDEOATTR_DICTIONARY_TERMINATOR; ++current) {
- copied.push_back(static_cast<uint32>(*current));
- }
-
FlushCommandBuffer();
return platform_video_decoder_->Initialize(copied);
}
@@ -120,8 +100,7 @@ int32_t PPB_VideoDecoder_Impl::Decode(
media::BitstreamBuffer decode_buffer(bitstream_buffer->id,
buffer->shared_memory()->handle(),
static_cast<size_t>(buffer->size()));
- CHECK(bitstream_buffer_callbacks_.insert(std::make_pair(
- bitstream_buffer->id, callback)).second);
+ AddBitstreamBufferCallback(bitstream_buffer->id, callback);
FlushCommandBuffer();
platform_video_decoder_->Decode(decode_buffer);
@@ -162,7 +141,7 @@ int32_t PPB_VideoDecoder_Impl::Flush(PP_CompletionCallback callback) {
// Store the callback to be called when Flush() is done.
// TODO(fischman,vrk): consider implications of already-outstanding callback.
Ami GONE FROM CHROMIUM 2011/08/02 00:49:08 This TODO (and its sibling below) don't belong her
vrk (LEFT CHROMIUM) 2011/08/03 19:04:30 Done.
- flush_callback_ = callback;
+ SetFlushCallback(callback);
FlushCommandBuffer();
platform_video_decoder_->Flush();
@@ -175,7 +154,7 @@ int32_t PPB_VideoDecoder_Impl::Reset(PP_CompletionCallback callback) {
// Store the callback to be called when Reset() is done.
// TODO(fischman,vrk): consider implications of already-outstanding callback.
- reset_callback_ = callback;
+ SetResetCallback(callback);
FlushCommandBuffer();
platform_video_decoder_->Reset();
@@ -188,11 +167,10 @@ void PPB_VideoDecoder_Impl::Destroy() {
FlushCommandBuffer();
platform_video_decoder_->Destroy();
- gles2_impl_ = NULL;
- if (context3d_id_)
- ResourceTracker::Get()->UnrefResource(context3d_id_);
platform_video_decoder_ = NULL;
ppp_videodecoder_ = NULL;
+
+ ::ppapi::VideoDecoderImpl::Destroy();
Ami GONE FROM CHROMIUM 2011/08/02 00:49:08 Is it obvious why this belongs after the 2 =NULL's
vrk (LEFT CHROMIUM) 2011/08/03 19:04:30 Talked in person, done.
}
void PPB_VideoDecoder_Impl::ProvidePictureBuffers(
@@ -251,42 +229,21 @@ void PPB_VideoDecoder_Impl::NotifyError(
}
void PPB_VideoDecoder_Impl::NotifyResetDone() {
- if (reset_callback_.func == NULL)
- return;
-
- // Call the callback that was stored to be called when Reset is done.
- PP_RunAndClearCompletionCallback(&reset_callback_, PP_OK);
+ RunResetCallback();
}
void PPB_VideoDecoder_Impl::NotifyEndOfBitstreamBuffer(
int32 bitstream_buffer_id) {
- CallbackById::iterator it =
- bitstream_buffer_callbacks_.find(bitstream_buffer_id);
- DCHECK(it != bitstream_buffer_callbacks_.end());
- PP_CompletionCallback cc = it->second;
- bitstream_buffer_callbacks_.erase(it);
- PP_RunCompletionCallback(&cc, PP_OK);
+ RunBitstreamBufferCallback(bitstream_buffer_id);
}
void PPB_VideoDecoder_Impl::NotifyFlushDone() {
- if (flush_callback_.func == NULL)
- return;
-
- // Call the callback that was stored to be called when Flush is done.
- PP_RunAndClearCompletionCallback(&flush_callback_, PP_OK);
+ RunFlushCallback();
}
void PPB_VideoDecoder_Impl::NotifyInitializeDone() {
NOTREACHED() << "PlatformVideoDecoder::Initialize() is synchronous!";
}
-void PPB_VideoDecoder_Impl::FlushCommandBuffer() {
- // For the out-of-process case, |gles2_impl_| will be NULL in the renderer
- // process. The VideoDecoder_Proxy is charged with the responsibility of
- // doing this Flush() in the analogous places in the plugin process.
- if (gles2_impl_)
- gles2_impl_->Flush();
-}
-
} // namespace ppapi
} // namespace webkit

Powered by Google App Engine
This is Rietveld 408576698