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

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

Issue 703753002: Pepper: Expose visible_rect to PPB_VideoDecoder.GetPicture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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
OLDNEW
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 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 <stdio.h> 5 #include <stdio.h>
6 #include <string.h> 6 #include <string.h>
7 7
8 #include <iostream> 8 #include <iostream>
9 #include <queue> 9 #include <queue>
10 #include <sstream> 10 #include <sstream>
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 ~Shader() {} 47 ~Shader() {}
48 48
49 GLuint program; 49 GLuint program;
50 GLint texcoord_scale_location; 50 GLint texcoord_scale_location;
51 }; 51 };
52 52
53 class Decoder; 53 class Decoder;
54 class MyInstance; 54 class MyInstance;
55 55
56 struct PendingPicture { 56 struct PendingPicture {
57 PendingPicture(Decoder* decoder, const PP_VideoPicture& picture) 57 PendingPicture(Decoder* decoder,
58 : decoder(decoder), picture(picture) {} 58 const PP_VideoPicture& picture,
59 const PP_Rect& visible_rect)
60 : decoder(decoder), picture(picture), visible_rect(visible_rect) {}
59 ~PendingPicture() {} 61 ~PendingPicture() {}
60 62
61 Decoder* decoder; 63 Decoder* decoder;
62 PP_VideoPicture picture; 64 PP_VideoPicture picture;
65 PP_Rect visible_rect;
63 }; 66 };
64 67
65 class MyInstance : public pp::Instance, public pp::Graphics3DClient { 68 class MyInstance : public pp::Instance, public pp::Graphics3DClient {
66 public: 69 public:
67 MyInstance(PP_Instance instance, pp::Module* module); 70 MyInstance(PP_Instance instance, pp::Module* module);
68 virtual ~MyInstance(); 71 virtual ~MyInstance();
69 72
70 // pp::Instance implementation. 73 // pp::Instance implementation.
71 virtual void DidChangeView(const pp::Rect& position, 74 virtual void DidChangeView(const pp::Rect& position,
72 const pp::Rect& clip_ignored); 75 const pp::Rect& clip_ignored);
73 virtual bool HandleInputEvent(const pp::InputEvent& event); 76 virtual bool HandleInputEvent(const pp::InputEvent& event);
74 77
75 // pp::Graphics3DClient implementation. 78 // pp::Graphics3DClient implementation.
76 virtual void Graphics3DContextLost() { 79 virtual void Graphics3DContextLost() {
77 // TODO(vrk/fischman): Properly reset after a lost graphics context. In 80 // TODO(vrk/fischman): Properly reset after a lost graphics context. In
78 // particular need to delete context_ and re-create textures. 81 // particular need to delete context_ and re-create textures.
79 // Probably have to recreate the decoder from scratch, because old textures 82 // Probably have to recreate the decoder from scratch, because old textures
80 // can still be outstanding in the decoder! 83 // can still be outstanding in the decoder!
81 assert(false && "Unexpectedly lost graphics context"); 84 assert(false && "Unexpectedly lost graphics context");
82 } 85 }
83 86
84 void PaintPicture(Decoder* decoder, const PP_VideoPicture& picture); 87 void PaintPicture(Decoder* decoder,
88 const PP_VideoPicture& picture,
89 const PP_Rect& visible_rect);
85 90
86 private: 91 private:
87 // Log an error to the developer console and stderr by creating a temporary 92 // Log an error to the developer console and stderr by creating a temporary
88 // object of this type and streaming to it. Example usage: 93 // object of this type and streaming to it. Example usage:
89 // LogError(this).s() << "Hello world: " << 42; 94 // LogError(this).s() << "Hello world: " << 42;
90 class LogError { 95 class LogError {
91 public: 96 public:
92 LogError(MyInstance* instance) : instance_(instance) {} 97 LogError(MyInstance* instance) : instance_(instance) {}
93 ~LogError() { 98 ~LogError() {
94 const std::string& msg = stream_.str(); 99 const std::string& msg = stream_.str();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 void DecodeDone(int32_t result); 178 void DecodeDone(int32_t result);
174 void PictureReady(int32_t result, PP_VideoPicture picture); 179 void PictureReady(int32_t result, PP_VideoPicture picture);
175 void FlushDone(int32_t result); 180 void FlushDone(int32_t result);
176 void ResetDone(int32_t result); 181 void ResetDone(int32_t result);
177 182
178 MyInstance* instance_; 183 MyInstance* instance_;
179 int id_; 184 int id_;
180 185
181 pp::VideoDecoder* decoder_; 186 pp::VideoDecoder* decoder_;
182 pp::CompletionCallbackFactory<Decoder> callback_factory_; 187 pp::CompletionCallbackFactory<Decoder> callback_factory_;
188 PP_Rect picture_visible_rect_;
183 189
184 size_t encoded_data_next_pos_to_decode_; 190 size_t encoded_data_next_pos_to_decode_;
185 int next_picture_id_; 191 int next_picture_id_;
186 bool flushing_; 192 bool flushing_;
187 bool resetting_; 193 bool resetting_;
188 194
189 const PPB_Core* core_if_; 195 const PPB_Core* core_if_;
190 static const int kMaxDecodeDelay = 128; 196 static const int kMaxDecodeDelay = 128;
191 PP_TimeTicks decode_time_[kMaxDecodeDelay]; 197 PP_TimeTicks decode_time_[kMaxDecodeDelay];
192 PP_TimeTicks total_latency_; 198 PP_TimeTicks total_latency_;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 } 276 }
271 277
272 void Decoder::Start() { 278 void Decoder::Start() {
273 assert(decoder_); 279 assert(decoder_);
274 280
275 encoded_data_next_pos_to_decode_ = 0; 281 encoded_data_next_pos_to_decode_ = 0;
276 282
277 // Register callback to get the first picture. We call GetPicture again in 283 // Register callback to get the first picture. We call GetPicture again in
278 // PictureReady to continuously receive pictures as they're decoded. 284 // PictureReady to continuously receive pictures as they're decoded.
279 decoder_->GetPicture( 285 decoder_->GetPicture(
286 &picture_visible_rect_,
280 callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady)); 287 callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady));
281 288
282 // Start the decode loop. 289 // Start the decode loop.
283 DecodeNextFrame(); 290 DecodeNextFrame();
284 } 291 }
285 292
286 void Decoder::Reset() { 293 void Decoder::Reset() {
287 assert(decoder_); 294 assert(decoder_);
288 assert(!resetting_); 295 assert(!resetting_);
289 resetting_ = true; 296 resetting_ = true;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 // Break out of the get picture loop on abort. 343 // Break out of the get picture loop on abort.
337 if (result == PP_ERROR_ABORTED) 344 if (result == PP_ERROR_ABORTED)
338 return; 345 return;
339 assert(result == PP_OK); 346 assert(result == PP_OK);
340 347
341 num_pictures_++; 348 num_pictures_++;
342 PP_TimeTicks latency = core_if_->GetTimeTicks() - 349 PP_TimeTicks latency = core_if_->GetTimeTicks() -
343 decode_time_[picture.decode_id % kMaxDecodeDelay]; 350 decode_time_[picture.decode_id % kMaxDecodeDelay];
344 total_latency_ += latency; 351 total_latency_ += latency;
345 352
353 PP_Rect visible_rect = picture_visible_rect_;
346 decoder_->GetPicture( 354 decoder_->GetPicture(
355 &picture_visible_rect_,
347 callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady)); 356 callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady));
348 instance_->PaintPicture(this, picture); 357 instance_->PaintPicture(this, picture, visible_rect);
349 } 358 }
350 359
351 void Decoder::FlushDone(int32_t result) { 360 void Decoder::FlushDone(int32_t result) {
352 assert(decoder_); 361 assert(decoder_);
353 assert(result == PP_OK || result == PP_ERROR_ABORTED); 362 assert(result == PP_OK || result == PP_ERROR_ABORTED);
354 assert(flushing_); 363 assert(flushing_);
355 flushing_ = false; 364 flushing_ = false;
356 } 365 }
357 366
358 void Decoder::ResetDone(int32_t result) { 367 void Decoder::ResetDone(int32_t result) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 } 449 }
441 450
442 void MyInstance::InitializeDecoders() { 451 void MyInstance::InitializeDecoders() {
443 assert(video_decoders_.empty()); 452 assert(video_decoders_.empty());
444 // Create two decoders with ids 0 and 1. 453 // Create two decoders with ids 0 and 1.
445 video_decoders_.push_back(new Decoder(this, 0, *context_)); 454 video_decoders_.push_back(new Decoder(this, 0, *context_));
446 video_decoders_.push_back(new Decoder(this, 1, *context_)); 455 video_decoders_.push_back(new Decoder(this, 1, *context_));
447 } 456 }
448 457
449 void MyInstance::PaintPicture(Decoder* decoder, 458 void MyInstance::PaintPicture(Decoder* decoder,
450 const PP_VideoPicture& picture) { 459 const PP_VideoPicture& picture,
460 const PP_Rect& visible_rect) {
451 if (first_frame_delivered_ticks_ == -1) 461 if (first_frame_delivered_ticks_ == -1)
452 assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1); 462 assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1);
453 463
454 pending_pictures_.push(PendingPicture(decoder, picture)); 464 pending_pictures_.push(PendingPicture(decoder, picture, visible_rect));
455 if (!is_painting_) 465 if (!is_painting_)
456 PaintNextPicture(); 466 PaintNextPicture();
457 } 467 }
458 468
459 void MyInstance::PaintNextPicture() { 469 void MyInstance::PaintNextPicture() {
460 assert(!is_painting_); 470 assert(!is_painting_);
461 is_painting_ = true; 471 is_painting_ = true;
462 472
463 const PendingPicture& next = pending_pictures_.front(); 473 const PendingPicture& next = pending_pictures_.front();
464 Decoder* decoder = next.decoder; 474 Decoder* decoder = next.decoder;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 }; 737 };
728 738
729 } // anonymous namespace 739 } // anonymous namespace
730 740
731 namespace pp { 741 namespace pp {
732 // Factory function for your specialization of the Module object. 742 // Factory function for your specialization of the Module object.
733 Module* CreateModule() { 743 Module* CreateModule() {
734 return new MyModule(); 744 return new MyModule();
735 } 745 }
736 } // namespace pp 746 } // namespace pp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698