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

Side by Side Diff: media/filters/skcanvas_video_renderer.cc

Issue 441303002: 2D Canvas doesn't blend video with the destination buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove redundant SkCanvas::clear on compositor Created 6 years, 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/filters/skcanvas_video_renderer.h" 5 #include "media/filters/skcanvas_video_renderer.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "media/base/video_frame.h" 8 #include "media/base/video_frame.h"
9 #include "media/base/yuv_convert.h" 9 #include "media/base/yuv_convert.h"
10 #include "third_party/libyuv/include/libyuv.h" 10 #include "third_party/libyuv/include/libyuv.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 181
182 SkCanvasVideoRenderer::SkCanvasVideoRenderer() 182 SkCanvasVideoRenderer::SkCanvasVideoRenderer()
183 : last_frame_timestamp_(media::kNoTimestamp()) { 183 : last_frame_timestamp_(media::kNoTimestamp()) {
184 } 184 }
185 185
186 SkCanvasVideoRenderer::~SkCanvasVideoRenderer() {} 186 SkCanvasVideoRenderer::~SkCanvasVideoRenderer() {}
187 187
188 void SkCanvasVideoRenderer::Paint(media::VideoFrame* video_frame, 188 void SkCanvasVideoRenderer::Paint(media::VideoFrame* video_frame,
189 SkCanvas* canvas, 189 SkCanvas* canvas,
190 const gfx::RectF& dest_rect, 190 const gfx::RectF& dest_rect,
191 uint8 alpha) { 191 uint8 alpha,
192 SkXfermode::Mode mode) {
192 if (alpha == 0) { 193 if (alpha == 0) {
193 return; 194 return;
194 } 195 }
195 196
196 SkRect dest; 197 SkRect dest;
197 dest.set(dest_rect.x(), dest_rect.y(), dest_rect.right(), dest_rect.bottom()); 198 dest.set(dest_rect.x(), dest_rect.y(), dest_rect.right(), dest_rect.bottom());
198 199
199 SkPaint paint; 200 SkPaint paint;
200 paint.setAlpha(alpha); 201 paint.setAlpha(alpha);
201 202
202 // Paint black rectangle if there isn't a frame available or the 203 // Paint black rectangle if there isn't a frame available or the
203 // frame has an unexpected format. 204 // frame has an unexpected format.
204 if (!video_frame || !IsYUVOrNative(video_frame->format())) { 205 if (!video_frame || !IsYUVOrNative(video_frame->format())) {
205 canvas->drawRect(dest, paint); 206 canvas->drawRect(dest, paint);
206 return; 207 return;
207 } 208 }
208 209
209 // Check if we should convert and update |last_frame_|. 210 // Check if we should convert and update |last_frame_|.
210 if (last_frame_.isNull() || 211 if (last_frame_.isNull() ||
211 video_frame->timestamp() != last_frame_timestamp_) { 212 video_frame->timestamp() != last_frame_timestamp_) {
212 ConvertVideoFrameToBitmap(video_frame, &last_frame_); 213 ConvertVideoFrameToBitmap(video_frame, &last_frame_);
213 last_frame_timestamp_ = video_frame->timestamp(); 214 last_frame_timestamp_ = video_frame->timestamp();
214 } 215 }
215 216
216 // Use SRC mode so we completely overwrite the buffer (in case we have alpha) 217 paint.setXfermodeMode(mode);
217 // this means we don't need the extra cost of clearing the buffer first.
218 paint.setXfermode(SkXfermode::Create(SkXfermode::kSrc_Mode));
219 218
220 // Paint using |last_frame_|. 219 // Paint using |last_frame_|.
221 paint.setFilterLevel(SkPaint::kLow_FilterLevel); 220 paint.setFilterLevel(SkPaint::kLow_FilterLevel);
222 canvas->drawBitmapRect(last_frame_, NULL, dest, &paint); 221 canvas->drawBitmapRect(last_frame_, NULL, dest, &paint);
223 } 222 }
224 223
225 } // namespace media 224 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698