Chromium Code Reviews| Index: media/filters/skcanvas_video_renderer.cc |
| diff --git a/media/filters/skcanvas_video_renderer.cc b/media/filters/skcanvas_video_renderer.cc |
| index da1c4de8febda03b7da00ae98eaa845a2b8edede..465d1f0a628cc7b11490b71be7dfabf2cea56863 100644 |
| --- a/media/filters/skcanvas_video_renderer.cc |
| +++ b/media/filters/skcanvas_video_renderer.cc |
| @@ -429,10 +429,14 @@ void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame, |
| if (accelerated_last_frame_.isNull() || |
| video_frame->timestamp() != accelerated_last_frame_timestamp_) { |
| if (video_frame->format() == VideoFrame::NATIVE_TEXTURE) { |
| + // Draw HW Video on HW Canvas. |
| DCHECK(context_3d.gl); |
| DCHECK(context_3d.gr_context); |
| - // Draw HW Video on HW Canvas. |
| - DCHECK(!accelerated_generator_); |
| + if (accelerated_generator_) { |
| + // Reset SkBitmap used in SWVideo-to-HWCanvas path. |
| + accelerated_last_frame_.reset(); |
| + accelerated_generator_ = nullptr; |
| + } |
| if (!CopyVideoFrameTextureToSkBitmapTexture( |
| video_frame.get(), &accelerated_last_frame_, context_3d)) { |
| NOTREACHED(); |
| @@ -440,6 +444,10 @@ void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame, |
| } |
| } else { |
| // Draw SW Video on HW Canvas. |
| + if (!accelerated_generator_ && !accelerated_last_frame_.isNull()) { |
| + // Reset SkBitmap used in HWVideo-to-HWCanvas path. |
| + accelerated_last_frame_.reset(); |
|
DaleCurtis
2015/01/12 20:47:01
Can you explain why you need these conditionals? I
dshwang
2015/01/13 08:38:22
That's good question. It's because allocating acce
|
| + } |
| accelerated_generator_ = new VideoImageGenerator(video_frame); |
| // Note: This takes ownership of |accelerated_generator_|. |