Chromium Code Reviews| Index: media/filters/gpu_video_decoder.cc |
| diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc |
| index 260bfaabb3e6777e42f6d3a823589101190ae587..7993b3651ecd3a94191fb2fb03fec95e3ce0bdda 100644 |
| --- a/media/filters/gpu_video_decoder.cc |
| +++ b/media/filters/gpu_video_decoder.cc |
| @@ -476,13 +476,24 @@ void GpuVideoDecoder::PictureReady(const media::Picture& picture) { |
| NotifyError(VideoDecodeAccelerator::PLATFORM_FAILURE); |
| return; |
| } |
| - const PictureBuffer& pb = it->second; |
| + PictureBuffer& pb = it->second; |
| + if (picture.size_changed()) { |
| + // Update the PictureBuffer size to match that of the Picture. Some VDA's |
| + // (e.g. Android) will handle resolution changes internally without |
| + // requesting new PictureBuffers. Sending a Picture of unmatched size is |
| + // the signal that we should update the size of our PictureBuffer. |
| + DCHECK(pb.size() != picture.visible_rect().size()); |
|
DaleCurtis
2016/03/08 18:29:03
DCHECK_NE ?
chcunningham
2016/03/08 22:19:13
Doesn't work for gfx::Size because they haven't de
|
| + DVLOG(3) << __FUNCTION__ << " Updating size of PictureBuffer[" << pb.id() |
| + << "] from:" << pb.size().ToString() |
| + << " to:" << picture.visible_rect().size().ToString(); |
| + pb.set_size(picture.visible_rect().size()); |
| + } |
| // Update frame's timestamp. |
| base::TimeDelta timestamp; |
| - // Some of the VDAs like DXVA, AVDA, and VTVDA don't support and thus don't |
| - // provide us with visible size in picture.size, passing (0, 0) instead, so |
| - // for those cases drop it and use config information instead. |
| + // Some of the VDAs like DXVA, and VTVDA don't support and thus don't provide |
| + // us with visible size in picture.size, passing (0, 0) instead, so for those |
| + // cases drop it and use config information instead. |
| gfx::Rect visible_rect; |
| gfx::Size natural_size; |
| GetBufferData(picture.bitstream_buffer_id(), ×tamp, &visible_rect, |