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

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

Issue 7260008: Implement proper synchronization between HW video decode IPC and CommandBuffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing compilation errors from bots. Created 9 years, 6 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 12d6ee18a404a73481147700fccf983ca249f4e9..6198bf3bac65c3791a65e37ec9cf91c9c6ecad29 100644
--- a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
+++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "base/message_loop.h"
+#include "gpu/command_buffer/client/gles2_implementation.h"
#include "media/video/picture.h"
#include "ppapi/c/dev/pp_video_dev.h"
#include "ppapi/c/dev/ppb_video_decoder_dev.h"
@@ -127,7 +128,7 @@ int32_t PPB_VideoDecoder_Impl::Initialize(
platform_video_decoder_.reset(
instance()->delegate()->CreateVideoDecoder(
- this, command_buffer_route_id));
+ this, command_buffer_route_id, context3d->gles2_impl()->helper()));
if (!platform_video_decoder_.get())
return PP_ERROR_FAILED;
@@ -160,10 +161,8 @@ int32_t PPB_VideoDecoder_Impl::Decode(
CHECK(bitstream_buffer_callbacks_.insert(std::make_pair(
bitstream_buffer->id, callback)).second);
- if (platform_video_decoder_->Decode(decode_buffer))
- return PP_OK_COMPLETIONPENDING;
- else
- return PP_ERROR_FAILED;
+ platform_video_decoder_->Decode(decode_buffer);
+ return PP_OK_COMPLETIONPENDING;
}
void PPB_VideoDecoder_Impl::AssignGLESBuffers(
@@ -175,7 +174,10 @@ void PPB_VideoDecoder_Impl::AssignGLESBuffers(
std::vector<media::GLESBuffer> wrapped_buffers;
for (uint32 i = 0; i < no_of_buffers; i++) {
PP_GLESBuffer_Dev in_buf = buffers[i];
- media::GLESBuffer buffer(in_buf);
+ media::GLESBuffer buffer(
+ in_buf.info.id,
+ gfx::Size(in_buf.info.size.width, in_buf.info.size.height),
+ in_buf.texture_id);
wrapped_buffers.push_back(buffer);
}
platform_video_decoder_->AssignGLESBuffers(wrapped_buffers);
@@ -190,7 +192,17 @@ void PPB_VideoDecoder_Impl::AssignSysmemBuffers(
std::vector<media::SysmemBuffer> wrapped_buffers;
for (uint32 i = 0; i < no_of_buffers; i++) {
PP_SysmemBuffer_Dev in_buf = buffers[i];
- media::SysmemBuffer buffer(in_buf);
+ // TODO(brettw) we should properly handle the errors here if the buffer
+ // isn't a valid image rather than CHECKing.
+ EnterResourceNoLock<PPB_Buffer_API> enter(in_buf.data, true);
+ CHECK(enter.succeeded());
+ webkit::ppapi::PPB_Buffer_Impl* pepper_buffer =
+ static_cast<webkit::ppapi::PPB_Buffer_Impl*>(enter.object());
+ CHECK(pepper_buffer->IsMapped());
+ media::SysmemBuffer buffer(
+ in_buf.info.id,
+ gfx::Size(in_buf.info.size.width, in_buf.info.size.height),
+ pepper_buffer->Map());
wrapped_buffers.push_back(buffer);
}
platform_video_decoder_->AssignSysmemBuffers(wrapped_buffers);
@@ -210,10 +222,8 @@ int32_t PPB_VideoDecoder_Impl::Flush(PP_CompletionCallback callback) {
// TODO(vmr): Check for current flush/abort operations.
flush_callback_ = callback;
- if (platform_video_decoder_->Flush())
- return PP_OK_COMPLETIONPENDING;
- else
- return PP_ERROR_FAILED;
+ platform_video_decoder_->Flush();
+ return PP_OK_COMPLETIONPENDING;
}
int32_t PPB_VideoDecoder_Impl::Abort(PP_CompletionCallback callback) {
@@ -224,10 +234,8 @@ int32_t PPB_VideoDecoder_Impl::Abort(PP_CompletionCallback callback) {
// TODO(vmr): Check for current flush/abort operations.
abort_callback_ = callback;
- if (platform_video_decoder_->Abort())
- return PP_OK_COMPLETIONPENDING;
- else
- return PP_ERROR_FAILED;
+ platform_video_decoder_->Abort();
+ return PP_OK_COMPLETIONPENDING;
}
void PPB_VideoDecoder_Impl::ProvidePictureBuffers(
@@ -325,39 +333,3 @@ void PPB_VideoDecoder_Impl::NotifyInitializeDone() {
} // namespace ppapi
} // namespace webkit
-
-// These functions are declared in picture.h but are defined here because of
-// dependencies (we can't depend on ppapi types from media).
-// TODO(fischman/vrk): Find a way to clean this up as it violates the spirit of
-// checkdeps.
-namespace media {
-BaseBuffer::BaseBuffer(const PP_BufferInfo_Dev& info)
- : id_(info.id),
- size_(info.size.width, info.size.height) {
-}
-
-GLESBuffer::GLESBuffer(const PP_GLESBuffer_Dev& buffer)
- : BaseBuffer(buffer.info),
- texture_id_(buffer.texture_id) {
-}
-
-SysmemBuffer::SysmemBuffer(const PP_SysmemBuffer_Dev& buffer)
- : BaseBuffer(buffer.info) {
- // TODO(brettw) we should properly handle the errors here if the buffer
- // isn't a valid image rather than CHECKing.
- EnterResourceNoLock<PPB_Buffer_API> enter(buffer.data, true);
- CHECK(enter.succeeded());
- webkit::ppapi::PPB_Buffer_Impl* pepper_buffer =
- static_cast<webkit::ppapi::PPB_Buffer_Impl*>(enter.object());
- CHECK(pepper_buffer->IsMapped());
- data_ = pepper_buffer->Map();
-}
-
-Picture::Picture(const PP_Picture_Dev& picture)
- : picture_buffer_id_(picture.picture_buffer_id),
- bitstream_buffer_id_(picture.bitstream_buffer_id),
- visible_size_(picture.visible_size.width, picture.visible_size.height),
- decoded_size_(picture.decoded_size.width, picture.decoded_size.height) {
-}
-
-} // namespace media
« media/video/video_decode_accelerator.h ('K') | « webkit/plugins/ppapi/plugin_delegate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698