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

Unified Diff: ppapi/proxy/video_decoder_resource.cc

Issue 703753002: Pepper: Expose visible_rect to PPB_VideoDecoder.GetPicture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
« no previous file with comments | « ppapi/proxy/video_decoder_resource.h ('k') | ppapi/proxy/video_decoder_resource_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/proxy/video_decoder_resource.cc
diff --git a/ppapi/proxy/video_decoder_resource.cc b/ppapi/proxy/video_decoder_resource.cc
index 733e6f86f53e22f4935c3e2ae98baab32ba6609f..2dbe60e891965d81ad4bcca2cb4ef137c8d54c66 100644
--- a/ppapi/proxy/video_decoder_resource.cc
+++ b/ppapi/proxy/video_decoder_resource.cc
@@ -49,8 +49,10 @@ VideoDecoderResource::Texture::Texture(uint32_t texture_target,
VideoDecoderResource::Texture::~Texture() {
}
-VideoDecoderResource::Picture::Picture(int32_t decode_id, uint32_t texture_id)
- : decode_id(decode_id), texture_id(texture_id) {
+VideoDecoderResource::Picture::Picture(int32_t decode_id,
+ uint32_t texture_id,
+ const PP_Rect& visible_rect)
+ : decode_id(decode_id), texture_id(texture_id), visible_rect(visible_rect) {
}
VideoDecoderResource::Picture::~Picture() {
@@ -61,6 +63,7 @@ VideoDecoderResource::VideoDecoderResource(Connection connection,
: PluginResource(connection, instance),
num_decodes_(0),
get_picture_(NULL),
+ get_picture_0_1_(NULL),
gles2_impl_(NULL),
initialized_(false),
testing_(false),
@@ -249,6 +252,13 @@ int32_t VideoDecoderResource::Decode(uint32_t decode_id,
return PP_OK_COMPLETIONPENDING;
}
+int32_t VideoDecoderResource::GetPicture0_1(
+ PP_VideoPicture_0_1* picture,
+ scoped_refptr<TrackedCallback> callback) {
+ get_picture_0_1_ = picture;
+ return GetPicture(NULL, callback);
+}
+
int32_t VideoDecoderResource::GetPicture(
PP_VideoPicture* picture,
scoped_refptr<TrackedCallback> callback) {
@@ -259,14 +269,16 @@ int32_t VideoDecoderResource::GetPicture(
if (get_picture_callback_.get())
return PP_ERROR_INPROGRESS;
+ get_picture_ = picture;
+
// If the next picture is ready, return it synchronously.
if (!received_pictures_.empty()) {
- WriteNextPicture(picture);
+ WriteNextPicture();
return PP_OK;
}
get_picture_callback_ = callback;
- get_picture_ = picture;
+
return PP_OK_COMPLETIONPENDING;
}
@@ -399,16 +411,15 @@ void VideoDecoderResource::OnPluginMsgRequestTextures(
void VideoDecoderResource::OnPluginMsgPictureReady(
const ResourceMessageReplyParams& params,
int32_t decode_id,
- uint32_t texture_id) {
- received_pictures_.push(Picture(decode_id, texture_id));
+ uint32_t texture_id,
+ const PP_Rect& visible_rect) {
+ received_pictures_.push(Picture(decode_id, texture_id, visible_rect));
if (TrackedCallback::IsPending(get_picture_callback_)) {
// The plugin may call GetPicture in its callback.
scoped_refptr<TrackedCallback> callback;
callback.swap(get_picture_callback_);
- PP_VideoPicture* picture = get_picture_;
- get_picture_ = NULL;
- WriteNextPicture(picture);
+ WriteNextPicture();
callback->Run(PP_OK);
}
}
@@ -510,20 +521,41 @@ void VideoDecoderResource::DeleteGLTexture(uint32_t id) {
}
}
-void VideoDecoderResource::WriteNextPicture(PP_VideoPicture* pp_picture) {
+void VideoDecoderResource::WriteNextPicture() {
DCHECK(!received_pictures_.empty());
Picture& picture = received_pictures_.front();
+
// Internally, we identify decodes by a unique id, which the host returns
// to us in the picture. Use this to get the plugin's decode_id.
- pp_picture->decode_id = decode_ids_[picture.decode_id % kMaximumPictureDelay];
- pp_picture->texture_id = picture.texture_id;
+ uint32_t decode_id = decode_ids_[picture.decode_id % kMaximumPictureDelay];
+ uint32_t texture_id = picture.texture_id;
+ uint32_t texture_target = 0;
+ PP_Size texture_size = PP_MakeSize(0, 0);
TextureMap::iterator it = textures_.find(picture.texture_id);
if (it != textures_.end()) {
- pp_picture->texture_target = it->second.texture_target;
- pp_picture->texture_size = it->second.size;
+ texture_target = it->second.texture_target;
+ texture_size = it->second.size;
} else {
NOTREACHED();
}
+
+ if (get_picture_) {
+ DCHECK(!get_picture_0_1_);
+ get_picture_->decode_id = decode_id;
+ get_picture_->texture_id = texture_id;
+ get_picture_->texture_target = texture_target;
+ get_picture_->texture_size = texture_size;
+ get_picture_->visible_rect = picture.visible_rect;
+ get_picture_ = NULL;
+ } else {
+ DCHECK(get_picture_0_1_);
+ get_picture_0_1_->decode_id = decode_id;
+ get_picture_0_1_->texture_id = texture_id;
+ get_picture_0_1_->texture_target = texture_target;
+ get_picture_0_1_->texture_size = texture_size;
+ get_picture_0_1_ = NULL;
+ }
+
received_pictures_.pop();
}
« no previous file with comments | « ppapi/proxy/video_decoder_resource.h ('k') | ppapi/proxy/video_decoder_resource_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698