| Index: media/renderers/skcanvas_video_renderer.cc
 | 
| diff --git a/media/renderers/skcanvas_video_renderer.cc b/media/renderers/skcanvas_video_renderer.cc
 | 
| index c3387ae15db6db9f9918d5192865ca36e5827313..72788f4caf65da0c757860243cf2107bcbe94749 100644
 | 
| --- a/media/renderers/skcanvas_video_renderer.cc
 | 
| +++ b/media/renderers/skcanvas_video_renderer.cc
 | 
| @@ -225,8 +225,9 @@ class VideoImageGenerator : public SkImageGenerator {
 | 
|                     SkPMColor ctable[],
 | 
|                     int* ctable_count) override {
 | 
|      // If skia couldn't do the YUV conversion on GPU, we will on CPU.
 | 
| -    SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(frame_.get(), pixels,
 | 
| -                                                        row_bytes);
 | 
| +    SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
 | 
| +        frame_.get(), SkCanvasVideoRenderer::ConvertingSize::VISUAL, pixels,
 | 
| +        row_bytes);
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
| @@ -520,11 +521,22 @@ scoped_refptr<VideoFrame> DownShiftHighbitVideoFrame(
 | 
|    }
 | 
|    return ret;
 | 
|  }
 | 
| +
 | 
| +const uint8_t* FrameData(const VideoFrame* video_frame,
 | 
| +                         SkCanvasVideoRenderer::ConvertingSize size_type,
 | 
| +                         size_t plane) {
 | 
| +  if (size_type == SkCanvasVideoRenderer::ConvertingSize::VISUAL)
 | 
| +    return video_frame->visible_data(plane);
 | 
| +  DCHECK(size_type == SkCanvasVideoRenderer::ConvertingSize::CODED);
 | 
| +  return video_frame->data(plane);
 | 
|  }
 | 
|  
 | 
| +}  // namespace
 | 
| +
 | 
|  // static
 | 
|  void SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
 | 
|      const VideoFrame* video_frame,
 | 
| +    ConvertingSize size_type,
 | 
|      void* rgb_pixels,
 | 
|      size_t row_bytes) {
 | 
|    if (!video_frame->IsMappable()) {
 | 
| @@ -536,79 +548,82 @@ void SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| +  gfx::Size frame_size = video_frame->coded_size();
 | 
| +  if (size_type == SkCanvasVideoRenderer::ConvertingSize::VISUAL)
 | 
| +    frame_size = video_frame->visible_rect().size();
 | 
| +
 | 
|    switch (video_frame->format()) {
 | 
|      case PIXEL_FORMAT_YV12:
 | 
|      case PIXEL_FORMAT_I420:
 | 
|        if (CheckColorSpace(video_frame, COLOR_SPACE_JPEG)) {
 | 
| -        LIBYUV_J420_TO_ARGB(video_frame->visible_data(VideoFrame::kYPlane),
 | 
| -                            video_frame->stride(VideoFrame::kYPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kUPlane),
 | 
| -                            video_frame->stride(VideoFrame::kUPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kVPlane),
 | 
| -                            video_frame->stride(VideoFrame::kVPlane),
 | 
| -                            static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -                            video_frame->visible_rect().width(),
 | 
| -                            video_frame->visible_rect().height());
 | 
| +        LIBYUV_J420_TO_ARGB(
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
| +            video_frame->stride(VideoFrame::kYPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
| +            video_frame->stride(VideoFrame::kUPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
| +            video_frame->stride(VideoFrame::kVPlane),
 | 
| +            static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +            frame_size.height());
 | 
|        } else if (CheckColorSpace(video_frame, COLOR_SPACE_HD_REC709)) {
 | 
| -        LIBYUV_H420_TO_ARGB(video_frame->visible_data(VideoFrame::kYPlane),
 | 
| -                            video_frame->stride(VideoFrame::kYPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kUPlane),
 | 
| -                            video_frame->stride(VideoFrame::kUPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kVPlane),
 | 
| -                            video_frame->stride(VideoFrame::kVPlane),
 | 
| -                            static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -                            video_frame->visible_rect().width(),
 | 
| -                            video_frame->visible_rect().height());
 | 
| +        LIBYUV_H420_TO_ARGB(
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
| +            video_frame->stride(VideoFrame::kYPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
| +            video_frame->stride(VideoFrame::kUPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
| +            video_frame->stride(VideoFrame::kVPlane),
 | 
| +            static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +            frame_size.height());
 | 
|        } else {
 | 
| -        LIBYUV_I420_TO_ARGB(video_frame->visible_data(VideoFrame::kYPlane),
 | 
| -                            video_frame->stride(VideoFrame::kYPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kUPlane),
 | 
| -                            video_frame->stride(VideoFrame::kUPlane),
 | 
| -                            video_frame->visible_data(VideoFrame::kVPlane),
 | 
| -                            video_frame->stride(VideoFrame::kVPlane),
 | 
| -                            static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -                            video_frame->visible_rect().width(),
 | 
| -                            video_frame->visible_rect().height());
 | 
| +        LIBYUV_I420_TO_ARGB(
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
| +            video_frame->stride(VideoFrame::kYPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
| +            video_frame->stride(VideoFrame::kUPlane),
 | 
| +            FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
| +            video_frame->stride(VideoFrame::kVPlane),
 | 
| +            static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +            frame_size.height());
 | 
|        }
 | 
|        break;
 | 
|      case PIXEL_FORMAT_YV16:
 | 
| -      LIBYUV_I422_TO_ARGB(video_frame->visible_data(VideoFrame::kYPlane),
 | 
| -                          video_frame->stride(VideoFrame::kYPlane),
 | 
| -                          video_frame->visible_data(VideoFrame::kUPlane),
 | 
| -                          video_frame->stride(VideoFrame::kUPlane),
 | 
| -                          video_frame->visible_data(VideoFrame::kVPlane),
 | 
| -                          video_frame->stride(VideoFrame::kVPlane),
 | 
| -                          static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -                          video_frame->visible_rect().width(),
 | 
| -                          video_frame->visible_rect().height());
 | 
| +      LIBYUV_I422_TO_ARGB(
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
| +          video_frame->stride(VideoFrame::kYPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
| +          video_frame->stride(VideoFrame::kUPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
| +          video_frame->stride(VideoFrame::kVPlane),
 | 
| +          static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +          frame_size.height());
 | 
|        break;
 | 
|  
 | 
|      case PIXEL_FORMAT_YV12A:
 | 
|        LIBYUV_I420ALPHA_TO_ARGB(
 | 
| -          video_frame->visible_data(VideoFrame::kYPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
|            video_frame->stride(VideoFrame::kYPlane),
 | 
| -          video_frame->visible_data(VideoFrame::kUPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
|            video_frame->stride(VideoFrame::kUPlane),
 | 
| -          video_frame->visible_data(VideoFrame::kVPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
|            video_frame->stride(VideoFrame::kVPlane),
 | 
| -          video_frame->visible_data(VideoFrame::kAPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kAPlane),
 | 
|            video_frame->stride(VideoFrame::kAPlane),
 | 
| -          static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -          video_frame->visible_rect().width(),
 | 
| -          video_frame->visible_rect().height(),
 | 
| +          static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +          frame_size.height(),
 | 
|            1);  // 1 = enable RGB premultiplication by Alpha.
 | 
|        break;
 | 
|  
 | 
|      case PIXEL_FORMAT_YV24:
 | 
| -      LIBYUV_I444_TO_ARGB(video_frame->visible_data(VideoFrame::kYPlane),
 | 
| -                          video_frame->stride(VideoFrame::kYPlane),
 | 
| -                          video_frame->visible_data(VideoFrame::kUPlane),
 | 
| -                          video_frame->stride(VideoFrame::kUPlane),
 | 
| -                          video_frame->visible_data(VideoFrame::kVPlane),
 | 
| -                          video_frame->stride(VideoFrame::kVPlane),
 | 
| -                          static_cast<uint8_t*>(rgb_pixels), row_bytes,
 | 
| -                          video_frame->visible_rect().width(),
 | 
| -                          video_frame->visible_rect().height());
 | 
| +      LIBYUV_I444_TO_ARGB(
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kYPlane),
 | 
| +          video_frame->stride(VideoFrame::kYPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kUPlane),
 | 
| +          video_frame->stride(VideoFrame::kUPlane),
 | 
| +          FrameData(video_frame, size_type, VideoFrame::kVPlane),
 | 
| +          video_frame->stride(VideoFrame::kVPlane),
 | 
| +          static_cast<uint8_t*>(rgb_pixels), row_bytes, frame_size.width(),
 | 
| +          frame_size.height());
 | 
|        break;
 | 
|  
 | 
|      case PIXEL_FORMAT_YUV420P9:
 | 
| @@ -622,7 +637,7 @@ void SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels(
 | 
|      case PIXEL_FORMAT_YUV444P12: {
 | 
|        scoped_refptr<VideoFrame> temporary_frame =
 | 
|            DownShiftHighbitVideoFrame(video_frame);
 | 
| -      ConvertVideoFrameToRGBPixels(temporary_frame.get(), rgb_pixels,
 | 
| +      ConvertVideoFrameToRGBPixels(temporary_frame.get(), size_type, rgb_pixels,
 | 
|                                     row_bytes);
 | 
|        break;
 | 
|      }
 | 
| 
 |