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

Side by Side Diff: ppapi/examples/gles2/gles2.cc

Issue 7545014: Implement PPAPI VideoDecode out-of-process support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: responding to brettw Created 9 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 | Annotate | Revision Log
« no previous file with comments | « ppapi/c/dev/ppb_video_decoder_dev.h ('k') | ppapi/ppapi_proxy.gypi » ('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) 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 <string.h> 5 #include <string.h>
6 6
7 #include <iostream> 7 #include <iostream>
8 #include <sstream> 8 #include <sstream>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 291
292 pp::CompletionCallback cb = 292 pp::CompletionCallback cb =
293 callback_factory_.NewCallback( 293 callback_factory_.NewCallback(
294 &GLES2DemoInstance::DecoderBitstreamDone, id); 294 &GLES2DemoInstance::DecoderBitstreamDone, id);
295 assert(bitstream_ids_at_decoder_.insert(id).second); 295 assert(bitstream_ids_at_decoder_.insert(id).second);
296 video_decoder_->Decode(bitstream_buffer, cb); 296 video_decoder_->Decode(bitstream_buffer, cb);
297 encoded_data_next_pos_to_decode_ = end_pos; 297 encoded_data_next_pos_to_decode_ = end_pos;
298 } 298 }
299 299
300 void GLES2DemoInstance::ProvidePictureBuffers( 300 void GLES2DemoInstance::ProvidePictureBuffers(
301 PP_Resource /* decoder */, uint32_t req_num_of_bufs, PP_Size dimensions) { 301 PP_Resource decoder, uint32_t req_num_of_bufs, PP_Size dimensions) {
302 assert(decoder == video_decoder_->pp_resource());
302 std::vector<PP_PictureBuffer_Dev> buffers; 303 std::vector<PP_PictureBuffer_Dev> buffers;
303 for (uint32_t i = 0; i < req_num_of_bufs; i++) { 304 for (uint32_t i = 0; i < req_num_of_bufs; i++) {
304 PP_PictureBuffer_Dev buffer; 305 PP_PictureBuffer_Dev buffer;
305 buffer.texture_id = CreateTexture(dimensions.width, dimensions.height); 306 buffer.texture_id = CreateTexture(dimensions.width, dimensions.height);
306 int id = ++next_picture_buffer_id_; 307 int id = ++next_picture_buffer_id_;
307 buffer.id = id; 308 buffer.id = id;
308 buffers.push_back(buffer); 309 buffers.push_back(buffer);
309 assert(buffers_by_id_.insert(std::make_pair(id, buffer)).second); 310 assert(buffers_by_id_.insert(std::make_pair(id, buffer)).second);
310 } 311 }
311 video_decoder_->AssignPictureBuffers(buffers); 312 video_decoder_->AssignPictureBuffers(buffers);
312 } 313 }
313 314
314 void GLES2DemoInstance::DismissPictureBuffer(PP_Resource /* decoder */, 315 void GLES2DemoInstance::DismissPictureBuffer(PP_Resource decoder,
315 int32_t picture_buffer_id) { 316 int32_t picture_buffer_id) {
317 assert(decoder == video_decoder_->pp_resource());
316 PictureBufferMap::iterator it = buffers_by_id_.find(picture_buffer_id); 318 PictureBufferMap::iterator it = buffers_by_id_.find(picture_buffer_id);
317 assert(it != buffers_by_id_.end()); 319 assert(it != buffers_by_id_.end());
318 DeleteTexture(it->second.texture_id); 320 DeleteTexture(it->second.texture_id);
319 buffers_by_id_.erase(it); 321 buffers_by_id_.erase(it);
320 } 322 }
321 323
322 void GLES2DemoInstance::PictureReady(PP_Resource /* decoder */, 324 void GLES2DemoInstance::PictureReady(PP_Resource decoder,
323 const PP_Picture_Dev& picture) { 325 const PP_Picture_Dev& picture) {
326 assert(decoder == video_decoder_->pp_resource());
324 if (first_frame_delivered_ticks_ == -1) 327 if (first_frame_delivered_ticks_ == -1)
325 assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1); 328 assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1);
326 if (is_painting_) { 329 if (is_painting_) {
327 pictures_pending_paint_.push_back(picture); 330 pictures_pending_paint_.push_back(picture);
328 return; 331 return;
329 } 332 }
330 PictureBufferMap::iterator it = 333 PictureBufferMap::iterator it =
331 buffers_by_id_.find(picture.picture_buffer_id); 334 buffers_by_id_.find(picture.picture_buffer_id);
332 assert(it != buffers_by_id_.end()); 335 assert(it != buffers_by_id_.end());
333 Render(it->second); 336 Render(it->second);
334 } 337 }
335 338
336 void GLES2DemoInstance::EndOfStream(PP_Resource /* decoder */) { 339 void GLES2DemoInstance::EndOfStream(PP_Resource decoder) {
340 assert(decoder == video_decoder_->pp_resource());
337 } 341 }
338 342
339 void GLES2DemoInstance::NotifyError(PP_Resource /* decoder */, 343 void GLES2DemoInstance::NotifyError(PP_Resource decoder,
340 PP_VideoDecodeError_Dev error) { 344 PP_VideoDecodeError_Dev error) {
345 assert(decoder == video_decoder_->pp_resource());
341 LogError(this).s() << "Received error: " << error; 346 LogError(this).s() << "Received error: " << error;
342 assert(!"Unexpected error; see stderr for details"); 347 assert(!"Unexpected error; see stderr for details");
343 } 348 }
344 349
345 // This object is the global object representing this plugin library as long 350 // This object is the global object representing this plugin library as long
346 // as it is loaded. 351 // as it is loaded.
347 class GLES2DemoModule : public pp::Module { 352 class GLES2DemoModule : public pp::Module {
348 public: 353 public:
349 GLES2DemoModule() : pp::Module() {} 354 GLES2DemoModule() : pp::Module() {}
350 virtual ~GLES2DemoModule() {} 355 virtual ~GLES2DemoModule() {}
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 double ms_per_swap = (swap_ticks_ * 1e3) / num_frames_rendered_; 412 double ms_per_swap = (swap_ticks_ * 1e3) / num_frames_rendered_;
408 LogError(this).s() << "Rendered frames: " << num_frames_rendered_ 413 LogError(this).s() << "Rendered frames: " << num_frames_rendered_
409 << ", fps: " << fps << ", with average ms/swap of: " 414 << ", fps: " << fps << ", with average ms/swap of: "
410 << ms_per_swap; 415 << ms_per_swap;
411 } 416 }
412 if (video_decoder_) 417 if (video_decoder_)
413 video_decoder_->ReusePictureBuffer(picture_buffer_id); 418 video_decoder_->ReusePictureBuffer(picture_buffer_id);
414 while (!pictures_pending_paint_.empty() && !is_painting_) { 419 while (!pictures_pending_paint_.empty() && !is_painting_) {
415 PP_Picture_Dev picture = pictures_pending_paint_.front(); 420 PP_Picture_Dev picture = pictures_pending_paint_.front();
416 pictures_pending_paint_.pop_front(); 421 pictures_pending_paint_.pop_front();
417 PictureReady(0 /* ignored */, picture); 422 PictureReady(video_decoder_->pp_resource(), picture);
418 } 423 }
419 } 424 }
420 425
421 GLuint GLES2DemoInstance::CreateTexture(int32_t width, int32_t height) { 426 GLuint GLES2DemoInstance::CreateTexture(int32_t width, int32_t height) {
422 GLuint texture_id; 427 GLuint texture_id;
423 gles2_if_->GenTextures(context_->pp_resource(), 1, &texture_id); 428 gles2_if_->GenTextures(context_->pp_resource(), 1, &texture_id);
424 assertNoGLError(); 429 assertNoGLError();
425 // Assign parameters. 430 // Assign parameters.
426 gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0); 431 gles2_if_->ActiveTexture(context_->pp_resource(), GL_TEXTURE0);
427 gles2_if_->BindTexture( 432 gles2_if_->BindTexture(
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 gles2_if_->DeleteShader(context_->pp_resource(), shader); 528 gles2_if_->DeleteShader(context_->pp_resource(), shader);
524 } 529 }
525 } // anonymous namespace 530 } // anonymous namespace
526 531
527 namespace pp { 532 namespace pp {
528 // Factory function for your specialization of the Module object. 533 // Factory function for your specialization of the Module object.
529 Module* CreateModule() { 534 Module* CreateModule() {
530 return new GLES2DemoModule(); 535 return new GLES2DemoModule();
531 } 536 }
532 } // namespace pp 537 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/c/dev/ppb_video_decoder_dev.h ('k') | ppapi/ppapi_proxy.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698