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

Side by Side Diff: ppapi/proxy/video_decoder_resource.cc

Issue 1207043002: Introduce a client minimum picture pool size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved constant to shared header, validate min_picture_size now in resource proxy as well as host co… Created 5 years, 4 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/video_decoder_resource.h" 5 #include "ppapi/proxy/video_decoder_resource.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "gpu/command_buffer/client/gles2_cmd_helper.h" 8 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
9 #include "gpu/command_buffer/client/gles2_implementation.h" 9 #include "gpu/command_buffer/client/gles2_implementation.h"
10 #include "gpu/command_buffer/common/mailbox.h" 10 #include "gpu/command_buffer/common/mailbox.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 : decode_id(decode_id), texture_id(texture_id), visible_rect(visible_rect) { 55 : decode_id(decode_id), texture_id(texture_id), visible_rect(visible_rect) {
56 } 56 }
57 57
58 VideoDecoderResource::Picture::~Picture() { 58 VideoDecoderResource::Picture::~Picture() {
59 } 59 }
60 60
61 VideoDecoderResource::VideoDecoderResource(Connection connection, 61 VideoDecoderResource::VideoDecoderResource(Connection connection,
62 PP_Instance instance) 62 PP_Instance instance)
63 : PluginResource(connection, instance), 63 : PluginResource(connection, instance),
64 num_decodes_(0), 64 num_decodes_(0),
65 min_picture_count_(0),
65 get_picture_(NULL), 66 get_picture_(NULL),
66 get_picture_0_1_(NULL), 67 get_picture_0_1_(NULL),
67 gles2_impl_(NULL), 68 gles2_impl_(NULL),
68 initialized_(false), 69 initialized_(false),
69 testing_(false), 70 testing_(false),
70 // Set |decoder_last_error_| to PP_OK after successful initialization. 71 // Set |decoder_last_error_| to PP_OK after successful initialization.
71 // This makes error checking a little more concise, since we can check 72 // This makes error checking a little more concise, since we can check
72 // that the decoder has been initialized and hasn't returned an error by 73 // that the decoder has been initialized and hasn't returned an error by
73 // just testing |decoder_last_error_|. 74 // just testing |decoder_last_error_|.
74 decoder_last_error_(PP_ERROR_FAILED) { 75 decoder_last_error_(PP_ERROR_FAILED) {
(...skipping 16 matching lines...) Expand all
91 int32_t VideoDecoderResource::Initialize0_1( 92 int32_t VideoDecoderResource::Initialize0_1(
92 PP_Resource graphics_context, 93 PP_Resource graphics_context,
93 PP_VideoProfile profile, 94 PP_VideoProfile profile,
94 PP_Bool allow_software_fallback, 95 PP_Bool allow_software_fallback,
95 scoped_refptr<TrackedCallback> callback) { 96 scoped_refptr<TrackedCallback> callback) {
96 return Initialize(graphics_context, 97 return Initialize(graphics_context,
97 profile, 98 profile,
98 allow_software_fallback 99 allow_software_fallback
99 ? PP_HARDWAREACCELERATION_WITHFALLBACK 100 ? PP_HARDWAREACCELERATION_WITHFALLBACK
100 : PP_HARDWAREACCELERATION_ONLY, 101 : PP_HARDWAREACCELERATION_ONLY,
102 0,
101 callback); 103 callback);
102 } 104 }
103 105
106 int32_t VideoDecoderResource::Initialize0_2(
107 PP_Resource graphics_context,
108 PP_VideoProfile profile,
109 PP_HardwareAcceleration acceleration,
110 scoped_refptr<TrackedCallback> callback) {
111 return Initialize(graphics_context,
112 profile,
113 acceleration,
114 0,
115 callback);
116 }
117
104 int32_t VideoDecoderResource::Initialize( 118 int32_t VideoDecoderResource::Initialize(
105 PP_Resource graphics_context, 119 PP_Resource graphics_context,
106 PP_VideoProfile profile, 120 PP_VideoProfile profile,
107 PP_HardwareAcceleration acceleration, 121 PP_HardwareAcceleration acceleration,
122 uint32_t min_picture_count,
108 scoped_refptr<TrackedCallback> callback) { 123 scoped_refptr<TrackedCallback> callback) {
109 if (initialized_) 124 if (initialized_)
110 return PP_ERROR_FAILED; 125 return PP_ERROR_FAILED;
111 if (profile < 0 || profile > PP_VIDEOPROFILE_MAX) 126 if (profile < 0 || profile > PP_VIDEOPROFILE_MAX)
112 return PP_ERROR_BADARGUMENT; 127 return PP_ERROR_BADARGUMENT;
128 if (min_picture_count > kMaximumPictureCount)
129 return PP_ERROR_BADARGUMENT;
113 if (initialize_callback_.get()) 130 if (initialize_callback_.get())
114 return PP_ERROR_INPROGRESS; 131 return PP_ERROR_INPROGRESS;
115 if (!graphics_context) 132 if (!graphics_context)
116 return PP_ERROR_BADRESOURCE; 133 return PP_ERROR_BADRESOURCE;
117 134
135 min_picture_count_ = min_picture_count;
136
118 HostResource host_resource; 137 HostResource host_resource;
119 if (!testing_) { 138 if (!testing_) {
120 // Create a new Graphics3D resource that can create texture resources to 139 // Create a new Graphics3D resource that can create texture resources to
121 // share with the plugin. We can't use the plugin's Graphics3D, since we 140 // share with the plugin. We can't use the plugin's Graphics3D, since we
122 // create textures on a proxy thread, and would interfere with the plugin. 141 // create textures on a proxy thread, and would interfere with the plugin.
123 thunk::EnterResourceCreationNoLock enter_create(pp_instance()); 142 thunk::EnterResourceCreationNoLock enter_create(pp_instance());
124 if (enter_create.failed()) 143 if (enter_create.failed())
125 return PP_ERROR_FAILED; 144 return PP_ERROR_FAILED;
126 int32_t attrib_list[] = {PP_GRAPHICS3DATTRIB_NONE}; 145 int32_t attrib_list[] = {PP_GRAPHICS3DATTRIB_NONE};
127 graphics3d_ = 146 graphics3d_ =
128 ScopedPPResource(ScopedPPResource::PassRef(), 147 ScopedPPResource(ScopedPPResource::PassRef(),
129 enter_create.functions()->CreateGraphics3D( 148 enter_create.functions()->CreateGraphics3D(
130 pp_instance(), graphics_context, attrib_list)); 149 pp_instance(), graphics_context, attrib_list));
131 EnterResourceNoLock<PPB_Graphics3D_API> enter_graphics(graphics3d_.get(), 150 EnterResourceNoLock<PPB_Graphics3D_API> enter_graphics(graphics3d_.get(),
132 false); 151 false);
133 if (enter_graphics.failed()) 152 if (enter_graphics.failed())
134 return PP_ERROR_BADRESOURCE; 153 return PP_ERROR_BADRESOURCE;
135 154
136 PPB_Graphics3D_Shared* ppb_graphics3d_shared = 155 PPB_Graphics3D_Shared* ppb_graphics3d_shared =
137 static_cast<PPB_Graphics3D_Shared*>(enter_graphics.object()); 156 static_cast<PPB_Graphics3D_Shared*>(enter_graphics.object());
138 gles2_impl_ = ppb_graphics3d_shared->gles2_impl(); 157 gles2_impl_ = ppb_graphics3d_shared->gles2_impl();
139 host_resource = ppb_graphics3d_shared->host_resource(); 158 host_resource = ppb_graphics3d_shared->host_resource();
140 } 159 }
141 160
142 initialize_callback_ = callback; 161 initialize_callback_ = callback;
143 162
144 Call<PpapiPluginMsg_VideoDecoder_InitializeReply>( 163 Call<PpapiPluginMsg_VideoDecoder_InitializeReply>(
145 RENDERER, 164 RENDERER,
146 PpapiHostMsg_VideoDecoder_Initialize( 165 PpapiHostMsg_VideoDecoder_Initialize(
147 host_resource, profile, acceleration), 166 host_resource, profile, acceleration, min_picture_count),
148 base::Bind(&VideoDecoderResource::OnPluginMsgInitializeComplete, this)); 167 base::Bind(&VideoDecoderResource::OnPluginMsgInitializeComplete, this));
149 168
150 return PP_OK_COMPLETIONPENDING; 169 return PP_OK_COMPLETIONPENDING;
151 } 170 }
152 171
153 int32_t VideoDecoderResource::Decode(uint32_t decode_id, 172 int32_t VideoDecoderResource::Decode(uint32_t decode_id,
154 uint32_t size, 173 uint32_t size,
155 const void* buffer, 174 const void* buffer,
156 scoped_refptr<TrackedCallback> callback) { 175 scoped_refptr<TrackedCallback> callback) {
157 if (decoder_last_error_) 176 if (decoder_last_error_)
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 testing_ = true; 371 testing_ = true;
353 } 372 }
354 373
355 void VideoDecoderResource::OnPluginMsgRequestTextures( 374 void VideoDecoderResource::OnPluginMsgRequestTextures(
356 const ResourceMessageReplyParams& params, 375 const ResourceMessageReplyParams& params,
357 uint32_t num_textures, 376 uint32_t num_textures,
358 const PP_Size& size, 377 const PP_Size& size,
359 uint32_t texture_target, 378 uint32_t texture_target,
360 const std::vector<gpu::Mailbox>& mailboxes) { 379 const std::vector<gpu::Mailbox>& mailboxes) {
361 DCHECK(num_textures); 380 DCHECK(num_textures);
381 DCHECK(num_textures >= min_picture_count_);
362 DCHECK(mailboxes.empty() || mailboxes.size() == num_textures); 382 DCHECK(mailboxes.empty() || mailboxes.size() == num_textures);
363 std::vector<uint32_t> texture_ids(num_textures); 383 std::vector<uint32_t> texture_ids(num_textures);
364 if (gles2_impl_) { 384 if (gles2_impl_) {
365 gles2_impl_->GenTextures(num_textures, &texture_ids.front()); 385 gles2_impl_->GenTextures(num_textures, &texture_ids.front());
366 for (uint32_t i = 0; i < num_textures; ++i) { 386 for (uint32_t i = 0; i < num_textures; ++i) {
367 gles2_impl_->ActiveTexture(GL_TEXTURE0); 387 gles2_impl_->ActiveTexture(GL_TEXTURE0);
368 gles2_impl_->BindTexture(texture_target, texture_ids[i]); 388 gles2_impl_->BindTexture(texture_target, texture_ids[i]);
369 gles2_impl_->TexParameteri( 389 gles2_impl_->TexParameteri(
370 texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 390 texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
371 gles2_impl_->TexParameteri( 391 gles2_impl_->TexParameteri(
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 get_picture_0_1_->texture_target = texture_target; 574 get_picture_0_1_->texture_target = texture_target;
555 get_picture_0_1_->texture_size = texture_size; 575 get_picture_0_1_->texture_size = texture_size;
556 get_picture_0_1_ = NULL; 576 get_picture_0_1_ = NULL;
557 } 577 }
558 578
559 received_pictures_.pop(); 579 received_pictures_.pop();
560 } 580 }
561 581
562 } // namespace proxy 582 } // namespace proxy
563 } // namespace ppapi 583 } // namespace ppapi
OLDNEW
« 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