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

Side by Side Diff: webkit/plugins/ppapi/ppb_video_decoder_impl.cc

Issue 6975053: PPAPI: Fix interface functions that take PP_CompletionCallbacks, but don't (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/plugins/ppapi/ppb_video_decoder_impl.h ('k') | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppb_video_decoder_impl.h" 5 #include "webkit/plugins/ppapi/ppb_video_decoder_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/video/picture.h" 10 #include "media/video/picture.h"
(...skipping 26 matching lines...) Expand all
37 37
38 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 38 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
39 new PPB_VideoDecoder_Impl(instance)); 39 new PPB_VideoDecoder_Impl(instance));
40 40
41 return BoolToPPBool(decoder->GetConfigs(proto_config, 41 return BoolToPPBool(decoder->GetConfigs(proto_config,
42 matching_configs, 42 matching_configs,
43 matching_configs_size, 43 matching_configs_size,
44 num_of_matching_configs)); 44 num_of_matching_configs));
45 } 45 }
46 46
47 PP_Resource Create(PP_Instance instance_id, 47 PP_Resource Create(PP_Instance instance_id) {
48 const PP_VideoConfigElement* decoder_config,
49 PP_CompletionCallback callback) {
50 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); 48 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
51 if (!instance) 49 if (!instance)
52 return 0; 50 return 0;
53 51
52 PPB_VideoDecoder_Impl* decoder = new PPB_VideoDecoder_Impl(instance);
53 return decoder->GetReference();
54 }
55
56 int32_t Initialize(PP_Resource video_decoder,
57 const PP_VideoConfigElement* decoder_config,
58 struct PP_CompletionCallback callback) {
54 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 59 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
55 new PPB_VideoDecoder_Impl(instance)); 60 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder));
61 if (!decoder)
62 return PP_ERROR_BADRESOURCE;
56 63
57 if (!decoder->Init( 64 return decoder->Initialize(decoder_config, callback);
58 const_cast<PP_VideoConfigElement*>(decoder_config), callback)) {
59 return 0;
60 }
61
62 return decoder->GetReference();
63 } 65 }
64 66
65 PP_Bool IsVideoDecoder(PP_Resource resource) { 67 PP_Bool IsVideoDecoder(PP_Resource resource) {
66 return BoolToPPBool(!!Resource::GetAs<PPB_VideoDecoder_Impl>(resource)); 68 return BoolToPPBool(!!Resource::GetAs<PPB_VideoDecoder_Impl>(resource));
67 } 69 }
68 70
69 PP_Bool Decode(PP_Resource decoder_id, 71 int32_t Decode(PP_Resource decoder_id,
70 const PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 72 const PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
71 PP_CompletionCallback callback) { 73 PP_CompletionCallback callback) {
72 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 74 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
73 Resource::GetAs<PPB_VideoDecoder_Impl>(decoder_id)); 75 Resource::GetAs<PPB_VideoDecoder_Impl>(decoder_id));
74 if (!decoder) 76 if (!decoder)
75 return PP_FALSE; 77 return PP_ERROR_BADRESOURCE;
76 78
77 return BoolToPPBool(decoder->Decode(bitstream_buffer, callback)); 79 return decoder->Decode(bitstream_buffer, callback);
78 } 80 }
79 81
80 void AssignGLESBuffers(PP_Resource video_decoder, 82 void AssignGLESBuffers(PP_Resource video_decoder,
81 uint32_t no_of_buffers, 83 uint32_t no_of_buffers,
82 const PP_GLESBuffer_Dev* buffers) { 84 const PP_GLESBuffer_Dev* buffers) {
83 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 85 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
84 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder)); 86 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder));
85 if (!decoder) 87 if (!decoder)
86 return; 88 return;
87 89
(...skipping 13 matching lines...) Expand all
101 103
102 void ReusePictureBuffer(PP_Resource video_decoder, int32_t picture_buffer_id) { 104 void ReusePictureBuffer(PP_Resource video_decoder, int32_t picture_buffer_id) {
103 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 105 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
104 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder)); 106 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder));
105 if (!decoder) 107 if (!decoder)
106 return; 108 return;
107 109
108 decoder->ReusePictureBuffer(picture_buffer_id); 110 decoder->ReusePictureBuffer(picture_buffer_id);
109 } 111 }
110 112
111 PP_Bool Flush(PP_Resource video_decoder, PP_CompletionCallback callback) { 113 int32_t Flush(PP_Resource video_decoder, PP_CompletionCallback callback) {
112 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 114 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
113 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder)); 115 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder));
114 if (!decoder) 116 if (!decoder)
115 return PP_FALSE; 117 return PP_ERROR_BADRESOURCE;
116 118
117 return BoolToPPBool(decoder->Flush(callback)); 119 return decoder->Flush(callback);
118 } 120 }
119 121
120 PP_Bool Abort(PP_Resource video_decoder, 122 int32_t Abort(PP_Resource video_decoder,
121 PP_CompletionCallback callback) { 123 PP_CompletionCallback callback) {
122 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 124 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
123 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder)); 125 Resource::GetAs<PPB_VideoDecoder_Impl>(video_decoder));
124 if (!decoder) 126 if (!decoder)
125 return PP_FALSE; 127 return PP_ERROR_BADRESOURCE;
126 128
127 return BoolToPPBool(decoder->Abort(callback)); 129 return decoder->Abort(callback);
128 } 130 }
129 131
130 const PPB_VideoDecoder_Dev ppb_videodecoder = { 132 const PPB_VideoDecoder_Dev ppb_videodecoder = {
131 &GetConfigs, 133 &GetConfigs,
132 &Create, 134 &Create,
135 &Initialize,
133 &IsVideoDecoder, 136 &IsVideoDecoder,
134 &Decode, 137 &Decode,
135 &AssignGLESBuffers, 138 &AssignGLESBuffers,
136 &AssignSysmemBuffers, 139 &AssignSysmemBuffers,
137 &ReusePictureBuffer, 140 &ReusePictureBuffer,
138 &Flush, 141 &Flush,
139 &Abort, 142 &Abort,
140 }; 143 };
141 144
142 // Utility methods to convert data to and from the ppapi C-types and their 145 // Utility methods to convert data to and from the ppapi C-types and their
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 platform_video_decoder_->GetConfigs(requested, &matched); 212 platform_video_decoder_->GetConfigs(requested, &matched);
210 213
211 uint32 i; 214 uint32 i;
212 for (i = 0; i < matched.size() && i < matching_configs_size; i++) 215 for (i = 0; i < matched.size() && i < matching_configs_size; i++)
213 matching_configs[i] = matched[i]; 216 matching_configs[i] = matched[i];
214 *num_of_matching_configs = i; 217 *num_of_matching_configs = i;
215 218
216 return true; 219 return true;
217 } 220 }
218 221
219 bool PPB_VideoDecoder_Impl::Init(const PP_VideoConfigElement* decoder_config, 222 int32_t PPB_VideoDecoder_Impl::Initialize(
220 PP_CompletionCallback callback) { 223 const PP_VideoConfigElement* decoder_config,
224 PP_CompletionCallback callback) {
225 if (!callback.func)
226 return PP_ERROR_BADARGUMENT;
221 if (!instance()) 227 if (!instance())
222 return false; 228 return PP_ERROR_FAILED;
223 229
224 platform_video_decoder_.reset( 230 platform_video_decoder_.reset(
225 instance()->delegate()->CreateVideoDecoder(this)); 231 instance()->delegate()->CreateVideoDecoder(this));
226 232
233 if (!platform_video_decoder_.get())
234 return PP_ERROR_FAILED;
235
227 std::vector<uint32> copied; 236 std::vector<uint32> copied;
228 // TODO(vrk): Validate configs before copy. 237 // TODO(vrk): Validate configs before copy.
229 CopyToConfigList(decoder_config, &copied); 238 CopyToConfigList(decoder_config, &copied);
230 platform_video_decoder_->Initialize(copied); 239 if (platform_video_decoder_->Initialize(copied)) {
231 240 initialization_callback_ = callback;
232 initialization_callback_ = callback; 241 return PP_OK_COMPLETIONPENDING;
233 242 } else {
234 return platform_video_decoder_.get()? true : false; 243 return PP_ERROR_FAILED;
244 }
235 } 245 }
236 246
237 bool PPB_VideoDecoder_Impl::Decode( 247 int32_t PPB_VideoDecoder_Impl::Decode(
238 const PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 248 const PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
239 PP_CompletionCallback callback) { 249 PP_CompletionCallback callback) {
240 if (!platform_video_decoder_.get()) 250 if (!platform_video_decoder_.get())
241 return false; 251 return PP_ERROR_BADRESOURCE;
242 252
243 ::ppapi::thunk::EnterResourceNoLock< ::ppapi::thunk::PPB_Buffer_API> 253 ::ppapi::thunk::EnterResourceNoLock< ::ppapi::thunk::PPB_Buffer_API>
244 enter(bitstream_buffer->data, true); 254 enter(bitstream_buffer->data, true);
245 if (enter.failed()) 255 if (enter.failed())
246 return false; 256 return PP_ERROR_FAILED;
247 257
248 PPB_Buffer_Impl* buffer = static_cast<PPB_Buffer_Impl*>(enter.object()); 258 PPB_Buffer_Impl* buffer = static_cast<PPB_Buffer_Impl*>(enter.object());
249 media::BitstreamBuffer decode_buffer(bitstream_buffer->id, 259 media::BitstreamBuffer decode_buffer(bitstream_buffer->id,
250 buffer->shared_memory()->handle(), 260 buffer->shared_memory()->handle(),
251 static_cast<size_t>(buffer->size())); 261 static_cast<size_t>(buffer->size()));
252 262
253 // Store the callback to inform when bitstream buffer has been processed. 263 // Store the callback to inform when bitstream buffer has been processed.
254 // TODO(vmr): handle simultaneous decodes + callbacks. 264 // TODO(vmr): handle simultaneous decodes + callbacks.
255 bitstream_buffer_callback_ = callback; 265 bitstream_buffer_callback_ = callback;
256 266
257 return platform_video_decoder_->Decode(decode_buffer); 267 if (platform_video_decoder_->Decode(decode_buffer))
268 return PP_OK_COMPLETIONPENDING;
269 else
270 return PP_ERROR_FAILED;
258 } 271 }
259 272
260 void PPB_VideoDecoder_Impl::AssignGLESBuffers( 273 void PPB_VideoDecoder_Impl::AssignGLESBuffers(
261 uint32_t no_of_buffers, 274 uint32_t no_of_buffers,
262 const PP_GLESBuffer_Dev* buffers) { 275 const PP_GLESBuffer_Dev* buffers) {
263 if (!platform_video_decoder_.get()) 276 if (!platform_video_decoder_.get())
264 return; 277 return;
265 278
266 std::vector<media::GLESBuffer> wrapped_buffers; 279 std::vector<media::GLESBuffer> wrapped_buffers;
267 for (uint32 i = 0; i < no_of_buffers; i++) { 280 for (uint32 i = 0; i < no_of_buffers; i++) {
(...skipping 18 matching lines...) Expand all
286 } 299 }
287 platform_video_decoder_->AssignSysmemBuffers(wrapped_buffers); 300 platform_video_decoder_->AssignSysmemBuffers(wrapped_buffers);
288 } 301 }
289 302
290 void PPB_VideoDecoder_Impl::ReusePictureBuffer(int32_t picture_buffer_id) { 303 void PPB_VideoDecoder_Impl::ReusePictureBuffer(int32_t picture_buffer_id) {
291 if (!platform_video_decoder_.get()) 304 if (!platform_video_decoder_.get())
292 return; 305 return;
293 platform_video_decoder_->ReusePictureBuffer(picture_buffer_id); 306 platform_video_decoder_->ReusePictureBuffer(picture_buffer_id);
294 } 307 }
295 308
296 bool PPB_VideoDecoder_Impl::Flush(PP_CompletionCallback callback) { 309 int32_t PPB_VideoDecoder_Impl::Flush(PP_CompletionCallback callback) {
297 if (!platform_video_decoder_.get()) 310 if (!platform_video_decoder_.get())
298 return false; 311 return PP_ERROR_BADRESOURCE;
299 312
300 // Store the callback to be called when Flush() is done. 313 // Store the callback to be called when Flush() is done.
301 // TODO(vmr): Check for current flush/abort operations. 314 // TODO(vmr): Check for current flush/abort operations.
302 flush_callback_ = callback; 315 flush_callback_ = callback;
303 316
304 return platform_video_decoder_->Flush(); 317 if (platform_video_decoder_->Flush())
318 return PP_OK_COMPLETIONPENDING;
319 else
320 return PP_ERROR_FAILED;
305 } 321 }
306 322
307 bool PPB_VideoDecoder_Impl::Abort(PP_CompletionCallback callback) { 323 int32_t PPB_VideoDecoder_Impl::Abort(PP_CompletionCallback callback) {
308 if (!platform_video_decoder_.get()) 324 if (!platform_video_decoder_.get())
309 return false; 325 return PP_ERROR_BADRESOURCE;
310 326
311 // Store the callback to be called when Abort() is done. 327 // Store the callback to be called when Abort() is done.
312 // TODO(vmr): Check for current flush/abort operations. 328 // TODO(vmr): Check for current flush/abort operations.
313 abort_callback_ = callback; 329 abort_callback_ = callback;
314 330
315 return platform_video_decoder_->Abort(); 331 if (platform_video_decoder_->Abort())
332 return PP_OK_COMPLETIONPENDING;
333 else
334 return PP_ERROR_FAILED;
316 } 335 }
317 336
318 void PPB_VideoDecoder_Impl::ProvidePictureBuffers( 337 void PPB_VideoDecoder_Impl::ProvidePictureBuffers(
319 uint32 requested_num_of_buffers, 338 uint32 requested_num_of_buffers,
320 const gfx::Size& dimensions, 339 const gfx::Size& dimensions,
321 media::VideoDecodeAccelerator::MemoryType type) { 340 media::VideoDecodeAccelerator::MemoryType type) {
322 if (!ppp_videodecoder_) 341 if (!ppp_videodecoder_)
323 return; 342 return;
324 343
325 // TODO(vrk): Compiler assert or use switch statement instead of making 344 // TODO(vrk): Compiler assert or use switch statement instead of making
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 } 453 }
435 454
436 Picture::Picture(const PP_Picture_Dev& picture) 455 Picture::Picture(const PP_Picture_Dev& picture)
437 : picture_buffer_id_(picture.picture_buffer_id), 456 : picture_buffer_id_(picture.picture_buffer_id),
438 bitstream_buffer_id_(picture.bitstream_buffer_id), 457 bitstream_buffer_id_(picture.bitstream_buffer_id),
439 visible_size_(picture.visible_size.width, picture.visible_size.height), 458 visible_size_(picture.visible_size.width, picture.visible_size.height),
440 decoded_size_(picture.decoded_size.width, picture.decoded_size.height) { 459 decoded_size_(picture.decoded_size.width, picture.decoded_size.height) {
441 } 460 }
442 461
443 } // namespace media 462 } // namespace media
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_video_decoder_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698