Index: native_client_sdk/src/examples/api/video_decode/video_decode.cc |
diff --git a/native_client_sdk/src/examples/api/video_decode/video_decode.cc b/native_client_sdk/src/examples/api/video_decode/video_decode.cc |
index 9664c9b6407ddb85969923a90fe9c5d87d6440e1..607f30a0edeb1f8164a3ae7c4059a2665ecfe3de 100644 |
--- a/native_client_sdk/src/examples/api/video_decode/video_decode.cc |
+++ b/native_client_sdk/src/examples/api/video_decode/video_decode.cc |
@@ -53,12 +53,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 { |
@@ -80,7 +83,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 |
@@ -179,6 +184,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_; |
@@ -276,6 +282,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. |
@@ -342,9 +349,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) { |
@@ -446,11 +455,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(); |
} |