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

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: Delete TODO and bump up the ppb version 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 platform_video_decoder_->GetConfigs(requested, &matched); 204 platform_video_decoder_->GetConfigs(requested, &matched);
202 205
203 uint32 i; 206 uint32 i;
204 for (i = 0; i < matched.size() && i < matching_configs_size; i++) 207 for (i = 0; i < matched.size() && i < matching_configs_size; i++)
205 matching_configs[i] = matched[i]; 208 matching_configs[i] = matched[i];
206 *num_of_matching_configs = i; 209 *num_of_matching_configs = i;
207 210
208 return true; 211 return true;
209 } 212 }
210 213
211 bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config) { 214 bool PPB_VideoDecoder_Impl::Init(PP_VideoConfigElement* decoder_config,
215 PP_CompletionCallback callback) {
212 if (!instance()) 216 if (!instance())
213 return false; 217 return false;
214 218
215 platform_video_decoder_.reset( 219 platform_video_decoder_.reset(
216 instance()->delegate()->CreateVideoDecoder(this)); 220 instance()->delegate()->CreateVideoDecoder(this));
217 221
218 std::vector<uint32> copied; 222 std::vector<uint32> copied;
219 // TODO(vrk): Validate configs before copy. 223 // TODO(vrk): Validate configs before copy.
220 CopyToConfigList(decoder_config, &copied); 224 CopyToConfigList(decoder_config, &copied);
221 platform_video_decoder_->Initialize(copied); 225 platform_video_decoder_->Initialize(copied);
222 226
227 initialization_callback_ = callback;
228
223 return platform_video_decoder_.get()? true : false; 229 return platform_video_decoder_.get()? true : false;
224 } 230 }
225 231
226 bool PPB_VideoDecoder_Impl::Decode( 232 bool PPB_VideoDecoder_Impl::Decode(
227 PP_VideoBitstreamBuffer_Dev* bitstream_buffer, 233 PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
228 PP_CompletionCallback callback) { 234 PP_CompletionCallback callback) {
229 if (!platform_video_decoder_.get()) 235 if (!platform_video_decoder_.get())
230 return false; 236 return false;
231 237
232 media::BitstreamBuffer decode_buffer( 238 media::BitstreamBuffer decode_buffer(
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 void PPB_VideoDecoder_Impl::NotifyFlushDone() { 381 void PPB_VideoDecoder_Impl::NotifyFlushDone() {
376 if (flush_callback_.func == NULL) 382 if (flush_callback_.func == NULL)
377 return; 383 return;
378 384
379 // Call the callback that was stored to be called when Flush is done. 385 // Call the callback that was stored to be called when Flush is done.
380 PP_CompletionCallback callback = PP_BlockUntilComplete(); 386 PP_CompletionCallback callback = PP_BlockUntilComplete();
381 std::swap(callback, flush_callback_); 387 std::swap(callback, flush_callback_);
382 PP_RunCompletionCallback(&callback, PP_OK); 388 PP_RunCompletionCallback(&callback, PP_OK);
383 } 389 }
384 390
391 void PPB_VideoDecoder_Impl::NotifyInitializeDone() {
392 if (initialization_callback_.func == NULL)
393 return;
394
395 PP_CompletionCallback callback = PP_BlockUntilComplete();
396 std::swap(callback, initialization_callback_);
397 PP_RunCompletionCallback(&callback, PP_OK);
398 }
399
385 } // namespace ppapi 400 } // namespace ppapi
386 } // namespace webkit 401 } // namespace webkit
387 402
388 // These functions are declared in picture.h but are defined here because of 403 // These functions are declared in picture.h but are defined here because of
389 // dependencies (we can't depend on ppapi types from media). 404 // dependencies (we can't depend on ppapi types from media).
390 namespace media { 405 namespace media {
391 BufferInfo::BufferInfo(const PP_BufferInfo_Dev& info) 406 BufferInfo::BufferInfo(const PP_BufferInfo_Dev& info)
392 : id_(info.id), 407 : id_(info.id),
393 size_(info.size.width, info.size.height) { 408 size_(info.size.width, info.size.height) {
394 } 409 }
(...skipping 14 matching lines...) Expand all
409 assert(pepper_buffer->is_mapped()); 424 assert(pepper_buffer->is_mapped());
410 data_ = pepper_buffer->mapped_buffer(); 425 data_ = pepper_buffer->mapped_buffer();
411 } 426 }
412 427
413 Picture::Picture(const PP_Picture_Dev& picture) 428 Picture::Picture(const PP_Picture_Dev& picture)
414 : picture_buffer_id_(picture.picture_buffer_id), 429 : picture_buffer_id_(picture.picture_buffer_id),
415 bitstream_buffer_id_(picture.bitstream_buffer_id) { 430 bitstream_buffer_id_(picture.bitstream_buffer_id) {
416 } 431 }
417 432
418 } // namespace media 433 } // 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