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

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

Issue 7065010: Add initialization callback support for Video Decoder PPAPI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix CR comments Created 9 years, 7 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
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 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 37 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
38 new PPB_VideoDecoder_Impl(instance)); 38 new PPB_VideoDecoder_Impl(instance));
39 39
40 return BoolToPPBool(decoder->GetConfigs(proto_config, 40 return BoolToPPBool(decoder->GetConfigs(proto_config,
41 matching_configs, 41 matching_configs,
42 matching_configs_size, 42 matching_configs_size,
43 num_of_matching_configs)); 43 num_of_matching_configs));
44 } 44 }
45 45
46 PP_Resource Create(PP_Instance instance_id, 46 PP_Resource Create(PP_Instance instance_id,
47 PP_VideoConfigElement* decoder_config) { 47 PP_VideoConfigElement* decoder_config,
48 PP_CompletionCallback callback) {
48 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); 49 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
49 if (!instance) 50 if (!instance)
50 return 0; 51 return 0;
51 52
52 scoped_refptr<PPB_VideoDecoder_Impl> decoder( 53 scoped_refptr<PPB_VideoDecoder_Impl> decoder(
53 new PPB_VideoDecoder_Impl(instance)); 54 new PPB_VideoDecoder_Impl(instance));
54 55
55 if (!decoder->Init(const_cast<PP_VideoConfigElement*>(decoder_config))) 56 if (!decoder->Init(
57 const_cast<PP_VideoConfigElement*>(decoder_config), callback)) {
56 return 0; 58 return 0;
59 }
57 60
58 return decoder->GetReference(); 61 return decoder->GetReference();
59 } 62 }
60 63
61 PP_Bool IsVideoDecoder(PP_Resource resource) { 64 PP_Bool IsVideoDecoder(PP_Resource resource) {
62 return BoolToPPBool(!!Resource::GetAs<PPB_VideoDecoder_Impl>(resource)); 65 return BoolToPPBool(!!Resource::GetAs<PPB_VideoDecoder_Impl>(resource));
63 } 66 }
64 67
65 PP_Bool Decode(PP_Resource decoder_id, 68 PP_Bool Decode(PP_Resource decoder_id,
66 PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 69 PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 platform_video_decoder_->GetConfigs(requested, &matched); 208 platform_video_decoder_->GetConfigs(requested, &matched);
206 209
207 uint32 i; 210 uint32 i;
208 for (i = 0; i < matched.size() && i < matching_configs_size; i++) 211 for (i = 0; i < matched.size() && i < matching_configs_size; i++)
209 matching_configs[i] = matched[i]; 212 matching_configs[i] = matched[i];
210 *num_of_matching_configs = i; 213 *num_of_matching_configs = i;
211 214
212 return true; 215 return true;
213 } 216 }
214 217
215 bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config) { 218 bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config,
219 PP_CompletionCallback callback) {
216 if (!instance()) 220 if (!instance())
217 return false; 221 return false;
218 222
219 platform_video_decoder_.reset( 223 platform_video_decoder_.reset(
220 instance()->delegate()->CreateVideoDecoder(this)); 224 instance()->delegate()->CreateVideoDecoder(this));
221 225
222 std::vector<uint32> copied; 226 std::vector<uint32> copied;
223 // TODO(vrk): Validate configs before copy. 227 // TODO(vrk): Validate configs before copy.
224 CopyToConfigList(decoder_config, &copied); 228 CopyToConfigList(decoder_config, &copied);
225 platform_video_decoder_->Initialize(copied); 229 platform_video_decoder_->Initialize(copied);
226 230
231 initialization_callback_ = callback;
232
227 return platform_video_decoder_.get()? true : false; 233 return platform_video_decoder_.get()? true : false;
228 } 234 }
229 235
230 bool PPB_VideoDecoder_Impl::Decode( 236 bool PPB_VideoDecoder_Impl::Decode(
231 PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 237 PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
232 PP_CompletionCallback callback) { 238 PP_CompletionCallback callback) {
233 if (!platform_video_decoder_.get()) 239 if (!platform_video_decoder_.get())
234 return false; 240 return false;
235 241
236 media::BitstreamBuffer decode_buffer( 242 media::BitstreamBuffer decode_buffer(
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 void PPB_VideoDecoder_Impl::NotifyFlushDone() { 391 void PPB_VideoDecoder_Impl::NotifyFlushDone() {
386 if (flush_callback_.func == NULL) 392 if (flush_callback_.func == NULL)
387 return; 393 return;
388 394
389 // Call the callback that was stored to be called when Flush is done. 395 // Call the callback that was stored to be called when Flush is done.
390 PP_CompletionCallback callback = PP_BlockUntilComplete(); 396 PP_CompletionCallback callback = PP_BlockUntilComplete();
391 std::swap(callback, flush_callback_); 397 std::swap(callback, flush_callback_);
392 PP_RunCompletionCallback(&callback, PP_OK); 398 PP_RunCompletionCallback(&callback, PP_OK);
393 } 399 }
394 400
401 void PPB_VideoDecoder_Impl::NotifyInitializeDone() {
402 if (initialization_callback_.func == NULL)
403 return;
404
405 PP_CompletionCallback callback = PP_BlockUntilComplete();
406 std::swap(callback, initialization_callback_);
407 PP_RunCompletionCallback(&callback, PP_OK);
408 }
409
395 } // namespace ppapi 410 } // namespace ppapi
396 } // namespace webkit 411 } // namespace webkit
397 412
398 // These functions are declared in picture.h but are defined here because of 413 // These functions are declared in picture.h but are defined here because of
399 // dependencies (we can't depend on ppapi types from media). 414 // dependencies (we can't depend on ppapi types from media).
400 namespace media { 415 namespace media {
401 BufferInfo::BufferInfo(const PP_BufferInfo_Dev& info) 416 BufferInfo::BufferInfo(const PP_BufferInfo_Dev& info)
402 : id_(info.id), 417 : id_(info.id),
403 size_(info.size.width, info.size.height) { 418 size_(info.size.width, info.size.height) {
404 } 419 }
(...skipping 16 matching lines...) Expand all
421 } 436 }
422 437
423 Picture::Picture(const PP_Picture_Dev& picture) 438 Picture::Picture(const PP_Picture_Dev& picture)
424 : picture_buffer_id_(picture.picture_buffer_id), 439 : picture_buffer_id_(picture.picture_buffer_id),
425 bitstream_buffer_id_(picture.bitstream_buffer_id), 440 bitstream_buffer_id_(picture.bitstream_buffer_id),
426 visible_size_(picture.visible_size.width, picture.visible_size.height), 441 visible_size_(picture.visible_size.width, picture.visible_size.height),
427 decoded_size_(picture.decoded_size.width, picture.decoded_size.height) { 442 decoded_size_(picture.decoded_size.width, picture.decoded_size.height) {
428 } 443 }
429 444
430 } // namespace media 445 } // namespace media
OLDNEW
« ppapi/c/dev/ppb_video_decoder_dev.h ('K') | « 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