Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: webkit/glue/media/video_renderer_impl.cc

Issue 126093: Fixing a bug that <video> is not rendered if clipped/mirrored... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include "media/base/buffers.h" 5 #include "media/base/buffers.h"
6 #include "media/base/yuv_convert.h" 6 #include "media/base/yuv_convert.h"
7 #include "webkit/glue/media/video_renderer_impl.h" 7 #include "webkit/glue/media/video_renderer_impl.h"
8 #include "webkit/glue/webmediaplayer_impl.h" 8 #include "webkit/glue/webmediaplayer_impl.h"
9 9
10 namespace webkit_glue { 10 namespace webkit_glue {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 FastPaint(video_frame, canvas, dest_rect); 64 FastPaint(video_frame, canvas, dest_rect);
65 } else { 65 } else {
66 SlowPaint(video_frame, canvas, dest_rect); 66 SlowPaint(video_frame, canvas, dest_rect);
67 } 67 }
68 video_frame = NULL; 68 video_frame = NULL;
69 } 69 }
70 } 70 }
71 71
72 // CanFastPaint is a helper method to determine the conditions for fast 72 // CanFastPaint is a helper method to determine the conditions for fast
73 // painting. The conditions are: 73 // painting. The conditions are:
74 // 1. No skew in canvas matrix. 74 // 1. No skew in canvas matrix.
75 // 2. Canvas has pixel format ARGB8888. 75 // 2. No flipping nor mirroring.
76 // 3. Canvas is opaque. 76 // 3. Canvas has pixel format ARGB8888.
77 // 4. Canvas is opaque.
78 // TODO(hclam): The fast paint method should support flipping and mirroring.
79 // Disable the flipping and mirroring checks once we have it.
77 bool VideoRendererImpl::CanFastPaint(skia::PlatformCanvas* canvas, 80 bool VideoRendererImpl::CanFastPaint(skia::PlatformCanvas* canvas,
78 const gfx::Rect& dest_rect) { 81 const gfx::Rect& dest_rect) {
79 const SkMatrix& total_matrix = canvas->getTotalMatrix(); 82 const SkMatrix& total_matrix = canvas->getTotalMatrix();
83 // Perform the following checks here:
84 // 1. Check for skewing factors of the transformation matrix. They should be
85 // zero.
86 // 2. Check for mirroring and flipping. Make sure they are greater than zero.
80 if (SkScalarNearlyZero(total_matrix.getSkewX()) && 87 if (SkScalarNearlyZero(total_matrix.getSkewX()) &&
81 SkScalarNearlyZero(total_matrix.getSkewY())) { 88 SkScalarNearlyZero(total_matrix.getSkewY()) &&
89 total_matrix.getScaleX() > 0 &&
90 total_matrix.getScaleY() > 0) {
82 // Get the properties of the SkDevice and the clip rect. 91 // Get the properties of the SkDevice and the clip rect.
83 SkDevice* device = canvas->getDevice(); 92 SkDevice* device = canvas->getDevice();
84 93
85 // Get the boundary of the device. 94 // Get the boundary of the device.
86 SkIRect device_rect; 95 SkIRect device_rect;
87 device->getBounds(&device_rect); 96 device->getBounds(&device_rect);
88 97
89 // Get the pixel config of the device. 98 // Get the pixel config of the device.
90 const SkBitmap::Config config = device->config(); 99 const SkBitmap::Config config = device->config();
91 // Get the total clip rect associated with the canvas. 100 // Get the total clip rect associated with the canvas.
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 // Transform destination rect to local coordinates. 279 // Transform destination rect to local coordinates.
271 SkRect transformed_rect; 280 SkRect transformed_rect;
272 SkRect skia_dest_rect; 281 SkRect skia_dest_rect;
273 skia_dest_rect.iset(src_rect.x(), src_rect.y(), 282 skia_dest_rect.iset(src_rect.x(), src_rect.y(),
274 src_rect.right(), src_rect.bottom()); 283 src_rect.right(), src_rect.bottom());
275 matrix.mapRect(&transformed_rect, skia_dest_rect); 284 matrix.mapRect(&transformed_rect, skia_dest_rect);
276 transformed_rect.round(dest_rect); 285 transformed_rect.round(dest_rect);
277 } 286 }
278 287
279 } // namespace webkit_glue 288 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698