Index: ppapi/examples/video_decode/video_decode.cc |
diff --git a/ppapi/examples/video_decode/video_decode.cc b/ppapi/examples/video_decode/video_decode.cc |
index acd1869476447b982496c62b0b21f18ac77d367b..b68ca68dcdd0d0382ab26b28ef6c2bbf29923adb 100644 |
--- a/ppapi/examples/video_decode/video_decode.cc |
+++ b/ppapi/examples/video_decode/video_decode.cc |
@@ -54,12 +54,15 @@ class Decoder; |
class MyInstance; |
struct PendingPicture { |
- PendingPicture(Decoder* decoder, const PP_VideoPicture& picture) |
- : decoder(decoder), picture(picture) {} |
+ PendingPicture(Decoder* decoder, |
+ const PP_VideoPicture& picture, |
+ const PP_Rect& visible_rect) |
+ : decoder(decoder), picture(picture), visible_rect(visible_rect) {} |
~PendingPicture() {} |
Decoder* decoder; |
PP_VideoPicture picture; |
+ PP_Rect visible_rect; |
}; |
class MyInstance : public pp::Instance, public pp::Graphics3DClient { |
@@ -81,7 +84,9 @@ class MyInstance : public pp::Instance, public pp::Graphics3DClient { |
assert(false && "Unexpectedly lost graphics context"); |
} |
- void PaintPicture(Decoder* decoder, const PP_VideoPicture& picture); |
+ void PaintPicture(Decoder* decoder, |
+ const PP_VideoPicture& picture, |
+ const PP_Rect& visible_rect); |
private: |
// Log an error to the developer console and stderr by creating a temporary |
@@ -180,6 +185,7 @@ class Decoder { |
pp::VideoDecoder* decoder_; |
pp::CompletionCallbackFactory<Decoder> callback_factory_; |
+ PP_Rect picture_visible_rect_; |
size_t encoded_data_next_pos_to_decode_; |
int next_picture_id_; |
@@ -277,6 +283,7 @@ void Decoder::Start() { |
// Register callback to get the first picture. We call GetPicture again in |
// PictureReady to continuously receive pictures as they're decoded. |
decoder_->GetPicture( |
+ &picture_visible_rect_, |
callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady)); |
// Start the decode loop. |
@@ -343,9 +350,11 @@ void Decoder::PictureReady(int32_t result, PP_VideoPicture picture) { |
decode_time_[picture.decode_id % kMaxDecodeDelay]; |
total_latency_ += latency; |
+ PP_Rect visible_rect = picture_visible_rect_; |
decoder_->GetPicture( |
+ &picture_visible_rect_, |
callback_factory_.NewCallbackWithOutput(&Decoder::PictureReady)); |
- instance_->PaintPicture(this, picture); |
+ instance_->PaintPicture(this, picture, visible_rect); |
} |
void Decoder::FlushDone(int32_t result) { |
@@ -447,11 +456,12 @@ void MyInstance::InitializeDecoders() { |
} |
void MyInstance::PaintPicture(Decoder* decoder, |
- const PP_VideoPicture& picture) { |
+ const PP_VideoPicture& picture, |
+ const PP_Rect& visible_rect) { |
if (first_frame_delivered_ticks_ == -1) |
assert((first_frame_delivered_ticks_ = core_if_->GetTimeTicks()) != -1); |
- pending_pictures_.push(PendingPicture(decoder, picture)); |
+ pending_pictures_.push(PendingPicture(decoder, picture, visible_rect)); |
if (!is_painting_) |
PaintNextPicture(); |
} |