From af83310226b7e792a2468985469194bd05b73b12 Mon Sep 17 00:00:00 2001 From: "ralphl@chromium.org" Date: Wed, 11 Mar 2009 04:56:12 +0000 Subject: The video renderer actually color converts. This is the last change that should be required to actually get the renderer to display frames. Review URL: http://codereview.chromium.org/43051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11428 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/renderer/media/video_renderer_impl.cc | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'chrome/renderer') diff --git a/chrome/renderer/media/video_renderer_impl.cc b/chrome/renderer/media/video_renderer_impl.cc index 2cdf9a9..05cbb44 100644 --- a/chrome/renderer/media/video_renderer_impl.cc +++ b/chrome/renderer/media/video_renderer_impl.cc @@ -3,6 +3,7 @@ // LICENSE file. #include "chrome/renderer/media/video_renderer_impl.h" +#include "media/base/yuv_convert.h" VideoRendererImpl::VideoRendererImpl(WebMediaPlayerDelegateImpl* delegate) : delegate_(delegate), @@ -53,10 +54,22 @@ void VideoRendererImpl::CopyToCurrentFrame(media::VideoFrame* video_frame) { last_converted_timestamp_ = timestamp; media::VideoSurface frame_in; if (video_frame->Lock(&frame_in)) { - // TODO(ralphl): Actually do the color space conversion here! - // This is temporary code to set the bits of the current_frame_ to - // blue. - bitmap_.eraseRGB(0x00, 0x00, 0xFF); + // TODO(hclam): Support more video formats than just YV12. + DCHECK(frame_in.format == media::VideoSurface::YV12); + DCHECK(frame_in.strides[media::VideoSurface::kUPlane] == + frame_in.strides[media::VideoSurface::kVPlane]); + DCHECK(frame_in.planes == media::VideoSurface::kNumYUVPlanes); + bitmap_.lockPixels(); + media::ConvertYV12ToRGB32(frame_in.data[media::VideoSurface::kYPlane], + frame_in.data[media::VideoSurface::kUPlane], + frame_in.data[media::VideoSurface::kVPlane], + static_cast(bitmap_.getPixels()), + frame_in.width, + frame_in.height, + frame_in.strides[media::VideoSurface::kYPlane], + frame_in.strides[media::VideoSurface::kUPlane], + bitmap_.rowBytes()); + bitmap_.unlockPixels(); video_frame->Unlock(); } else { NOTREACHED(); -- cgit v1.1