Commit 246fda09 authored by Mike Reed's avatar Mike Reed Committed by Chromium LUCI CQ

Pass sampling options to async readback

Bug: skia:7650
Change-Id: Iaf0c83d593ab6a11164373cc9a858d6795c6c093
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2613144
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: default avatarNico Weber <thakis@chromium.org>
Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842041}
parent 145bd277
...@@ -769,9 +769,10 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput( ...@@ -769,9 +769,10 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput(
bool is_downscale_or_identity_in_both_dimensions = bool is_downscale_or_identity_in_both_dimensions =
request->scale_to().x() <= request->scale_from().x() && request->scale_to().x() <= request->scale_from().x() &&
request->scale_to().y() <= request->scale_from().y(); request->scale_to().y() <= request->scale_from().y();
SkFilterQuality filter_quality = is_downscale_or_identity_in_both_dimensions SkSurface::RescaleMode rescale_mode =
? kMedium_SkFilterQuality is_downscale_or_identity_in_both_dimensions
: kHigh_SkFilterQuality; ? SkSurface::RescaleMode::kRepeatedLinear
: SkSurface::RescaleMode::kRepeatedCubic;
// Compute |source_selection| as a workaround to support |result_selection| // Compute |source_selection| as a workaround to support |result_selection|
// with Skia readback. |result_selection| is a clip rect specified in the // with Skia readback. |result_selection| is a clip rect specified in the
...@@ -808,7 +809,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput( ...@@ -808,7 +809,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput(
surface->asyncRescaleAndReadPixelsYUV420( surface->asyncRescaleAndReadPixelsYUV420(
kRec709_SkYUVColorSpace, SkColorSpace::MakeSRGB(), src_rect, kRec709_SkYUVColorSpace, SkColorSpace::MakeSRGB(), src_rect,
{geometry.result_selection.width(), geometry.result_selection.height()}, {geometry.result_selection.width(), geometry.result_selection.height()},
SkSurface::RescaleGamma::kSrc, filter_quality, &OnYUVReadbackDone, SkSurface::RescaleGamma::kSrc, rescale_mode, &OnYUVReadbackDone,
context.release()); context.release());
} else if (request->result_format() == } else if (request->result_format() ==
CopyOutputRequest::ResultFormat::RGBA_BITMAP) { CopyOutputRequest::ResultFormat::RGBA_BITMAP) {
...@@ -834,7 +835,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput( ...@@ -834,7 +835,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput(
// ReadbackCompleted is called immediately. // ReadbackCompleted is called immediately.
num_readbacks_pending_++; num_readbacks_pending_++;
surface->asyncRescaleAndReadPixels( surface->asyncRescaleAndReadPixels(
dst_info, src_rect, SkSurface::RescaleGamma::kSrc, filter_quality, dst_info, src_rect, SkSurface::RescaleGamma::kSrc, rescale_mode,
&OnRGBAReadbackDone, context.release()); &OnRGBAReadbackDone, context.release());
} else if (request->result_format() == } else if (request->result_format() ==
CopyOutputRequest::ResultFormat::RGBA_TEXTURE) { CopyOutputRequest::ResultFormat::RGBA_TEXTURE) {
...@@ -878,7 +879,9 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput( ...@@ -878,7 +879,9 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutput(
} }
SkPaint paint; SkPaint paint;
paint.setFilterQuality(filter_quality); paint.setFilterQuality(is_downscale_or_identity_in_both_dimensions
? kMedium_SkFilterQuality
: kHigh_SkFilterQuality);
dest_canvas->clipRect( dest_canvas->clipRect(
SkRect::MakeXYWH(0, 0, src_rect.width(), src_rect.height())); SkRect::MakeXYWH(0, 0, src_rect.width(), src_rect.height()));
surface->draw(dest_canvas, -src_rect.x(), -src_rect.y(), &paint); surface->draw(dest_canvas, -src_rect.x(), -src_rect.y(), &paint);
......
...@@ -233,10 +233,6 @@ SK_API void SkDebugf_FileLine(const char* file, ...@@ -233,10 +233,6 @@ SK_API void SkDebugf_FileLine(const char* file,
#define GR_OP_ALLOCATE_USE_NEW #define GR_OP_ALLOCATE_USE_NEW
#endif #endif
#ifndef SK_SUPPORT_LEGACY_ASYNCRESCALE_QUALITY
#define SK_SUPPORT_LEGACY_ASYNCRESCALE_QUALITY
#endif
#ifndef SK_SUPPORT_LEGACY_IMPLICIT_FILTERQUALITY #ifndef SK_SUPPORT_LEGACY_IMPLICIT_FILTERQUALITY
#define SK_SUPPORT_LEGACY_IMPLICIT_FILTERQUALITY #define SK_SUPPORT_LEGACY_IMPLICIT_FILTERQUALITY
#endif #endif
......
...@@ -169,7 +169,7 @@ VideoFrame* VideoFrame::Create(ScriptState* script_state, ...@@ -169,7 +169,7 @@ VideoFrame* VideoFrame::Create(ScriptState* script_state,
sk_image->asyncRescaleAndReadPixelsYUV420( sk_image->asyncRescaleAndReadPixelsYUV420(
kRec709_SkYUVColorSpace, sk_color_space, src_rect, kRec709_SkYUVColorSpace, sk_color_space, src_rect,
{source->width(), source->height()}, SkImage::RescaleGamma::kSrc, {source->width(), source->height()}, SkImage::RescaleGamma::kSrc,
kHigh_SkFilterQuality, &OnYUVReadbackDone, &result); SkImage::RescaleMode::kRepeatedCubic, &OnYUVReadbackDone, &result);
GrDirectContext* gr_context = GrDirectContext* gr_context =
source->BitmapImage()->ContextProvider()->GetGrContext(); source->BitmapImage()->ContextProvider()->GetGrContext();
DCHECK(gr_context); DCHECK(gr_context);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment