| Index: media/renderers/skcanvas_video_renderer.cc
|
| diff --git a/media/renderers/skcanvas_video_renderer.cc b/media/renderers/skcanvas_video_renderer.cc
|
| index 8c71b3edfbdd00fd7da334e1bfbe1f838f8edcc1..3ff3510a992dd99c35f35aec43f1c262dbc8aa34 100644
|
| --- a/media/renderers/skcanvas_video_renderer.cc
|
| +++ b/media/renderers/skcanvas_video_renderer.cc
|
| @@ -332,27 +332,25 @@ SkCanvasVideoRenderer::~SkCanvasVideoRenderer() {
|
| void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame,
|
| SkCanvas* canvas,
|
| const gfx::RectF& dest_rect,
|
| - uint8_t alpha,
|
| - SkXfermode::Mode mode,
|
| + SkPaint& paint,
|
| VideoRotation video_rotation,
|
| const Context3D& context_3d) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - if (alpha == 0) {
|
| + if (paint.getAlpha() == 0) {
|
| return;
|
| }
|
|
|
| SkRect dest;
|
| dest.set(dest_rect.x(), dest_rect.y(), dest_rect.right(), dest_rect.bottom());
|
|
|
| - SkPaint paint;
|
| - paint.setAlpha(alpha);
|
| -
|
| // Paint black rectangle if there isn't a frame available or the
|
| // frame has an unexpected format.
|
| if (!video_frame.get() || video_frame->natural_size().IsEmpty() ||
|
| !(media::IsYuvPlanar(video_frame->format()) ||
|
| video_frame->HasTextures())) {
|
| - canvas->drawRect(dest, paint);
|
| + SkPaint blackWithAlphaPaint;
|
| + blackWithAlphaPaint.setAlpha(paint.getAlpha());
|
| + canvas->drawRect(dest, blackWithAlphaPaint);
|
| canvas->flush();
|
| return;
|
| }
|
| @@ -361,8 +359,13 @@ void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame,
|
| if (!UpdateLastImage(video_frame, context_3d))
|
| return;
|
|
|
| - paint.setXfermodeMode(mode);
|
| - paint.setFilterQuality(kLow_SkFilterQuality);
|
| + SkPaint videoPaint;
|
| + videoPaint.setAlpha(paint.getAlpha());
|
| + SkXfermode::Mode mode;
|
| + if (!SkXfermode::AsMode(paint.getXfermode(), &mode))
|
| + mode = SkXfermode::kSrcOver_Mode;
|
| + videoPaint.setXfermodeMode(mode);
|
| + videoPaint.setFilterQuality(paint.getFilterQuality());
|
|
|
| const bool need_rotation = video_rotation != VIDEO_ROTATION_0;
|
| const bool need_scaling =
|
| @@ -412,9 +415,9 @@ void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame,
|
| // threads. (skbug.com/4321).
|
| if (canvas->imageInfo().colorType() == kUnknown_SkColorType) {
|
| sk_sp<SkImage> swImage = last_image_->makeNonTextureImage();
|
| - canvas->drawImage(swImage, 0, 0, &paint);
|
| + canvas->drawImage(swImage, 0, 0, &videoPaint);
|
| } else {
|
| - canvas->drawImage(last_image_.get(), 0, 0, &paint);
|
| + canvas->drawImage(last_image_.get(), 0, 0, &videoPaint);
|
| }
|
|
|
| if (need_transform)
|
| @@ -432,8 +435,11 @@ void SkCanvasVideoRenderer::Paint(const scoped_refptr<VideoFrame>& video_frame,
|
| void SkCanvasVideoRenderer::Copy(const scoped_refptr<VideoFrame>& video_frame,
|
| SkCanvas* canvas,
|
| const Context3D& context_3d) {
|
| - Paint(video_frame, canvas, gfx::RectF(video_frame->visible_rect()), 0xff,
|
| - SkXfermode::kSrc_Mode, media::VIDEO_ROTATION_0, context_3d);
|
| + SkPaint paint;
|
| + paint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
| + paint.setFilterQuality(kLow_SkFilterQuality);
|
| + Paint(video_frame, canvas, gfx::RectF(video_frame->visible_rect()), paint,
|
| + media::VIDEO_ROTATION_0, context_3d);
|
| }
|
|
|
| namespace {
|
|
|