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 |