summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-11 04:56:12 +0000
committerralphl@chromium.org <ralphl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-11 04:56:12 +0000
commitaf83310226b7e792a2468985469194bd05b73b12 (patch)
tree1095ba440fc9c413e38fd94a71cff2a07f9efb15 /chrome/renderer
parent92c5c10224b7195f7a84cefe5a2d4ab52b6c9179 (diff)
downloadchromium_src-af83310226b7e792a2468985469194bd05b73b12.zip
chromium_src-af83310226b7e792a2468985469194bd05b73b12.tar.gz
chromium_src-af83310226b7e792a2468985469194bd05b73b12.tar.bz2
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
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/media/video_renderer_impl.cc21
1 files changed, 17 insertions, 4 deletions
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<uint8*>(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();