Chromium Code Reviews| Index: media/gpu/vp9_decoder.cc |
| diff --git a/media/gpu/vp9_decoder.cc b/media/gpu/vp9_decoder.cc |
| index b24f2466846e28485dd17b23372c2a57e0deb302..e7ad28c81c2a79050e87e249fb5d2c74aa22a0c2 100644 |
| --- a/media/gpu/vp9_decoder.cc |
| +++ b/media/gpu/vp9_decoder.cc |
| @@ -99,7 +99,8 @@ VP9Decoder::DecodeResult VP9Decoder::Decode() { |
| return kDecodeError; |
| } |
| - if (!accelerator_->OutputPicture(ref_frames_[frame_to_show])) { |
| + if (!accelerator_->OutputPicture(ref_frames_[frame_to_show], |
| + render_rect_)) { |
| SetError(); |
| return kDecodeError; |
| } |
| @@ -112,6 +113,22 @@ VP9Decoder::DecodeResult VP9Decoder::Decode() { |
| curr_frame_hdr_->frame_height); |
| DCHECK(!new_pic_size.IsEmpty()); |
| + gfx::Rect new_render_rect; |
| + // Due to specification render size should be set as not larger than frame |
| + // size, or set as frame size if render_and_frame_size_different == 0. For |
| + // safety we check the validity of render size or leave it as (0, 0). |
| + if (curr_frame_hdr_->render_width > 0 && |
|
Pawel Osciak
2017/06/08 04:58:25
Perhaps:
gfx::Rect new_render_rect(curr_frame_hdr
johnylin1
2017/06/12 13:41:53
Done.
|
| + curr_frame_hdr_->render_width <= curr_frame_hdr_->frame_width && |
| + curr_frame_hdr_->render_height > 0 && |
| + curr_frame_hdr_->render_height <= curr_frame_hdr_->frame_height) { |
| + new_render_rect.SetRect(0, 0, curr_frame_hdr_->render_width, |
| + curr_frame_hdr_->render_height); |
| + } |
| + if (new_render_rect != render_rect_) { |
| + DVLOG(1) << "New render resolution: " << new_render_rect.ToString(); |
| + render_rect_ = new_render_rect; |
| + } |
| + |
| if (new_pic_size != pic_size_) { |
| DVLOG(1) << "New resolution: " << new_pic_size.ToString(); |
| @@ -187,7 +204,7 @@ bool VP9Decoder::DecodeAndOutputPicture(scoped_refptr<VP9Picture> pic) { |
| return false; |
| if (pic->frame_hdr->show_frame) { |
| - if (!accelerator_->OutputPicture(pic)) |
| + if (!accelerator_->OutputPicture(pic, render_rect_)) |
| return false; |
| } |