Chromium Code Reviews| 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..af5ee8017878d936fc2e6dec6d04946adbe6f4f6 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,23 @@ 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) { |
|
DaleCurtis
2016/10/25 23:53:37
Drop {} from single life if.
dshwang
2016/10/26 15:26:28
Done.
|
| + return video_frame->visible_data(plane); |
| + } |
| + DCHECK(size_type == SkCanvasVideoRenderer::ConvertingSize::CODED); |
|
DaleCurtis
2016/10/25 23:53:37
DCHECK_EQ?
dshwang
2016/10/26 15:26:28
DCHECK_EQ doesn't support enum class, unfortunatel
|
| + 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 +549,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 +638,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; |
| } |