Revert "Fix webp bug compositing alpha frames on opaque"
This reverts commit 42bae8faa4b9b6a3341b15c6ac7c6b466e95625c.
Reason for revert: Breaking GMs. A more extensive fix is needed.
Original change's description:
> Fix webp bug compositing alpha frames on opaque
>
> select_xform_alpha is used to determine how the color transform should
> handle alpha values. In a similar way, we're using it here to determine
> whether to premultiply pixels before blending them. In this case, the
> source is unpremul, so we should be premultiplying them, but since we
> are compositing on an opaque frame, the dst must be opaque and
> select_xform_alpha returns kOpaque. As a result, we do not premultiply
> (and even hint to the transform that the pixels are opaque). Since this
> all applies to the pre-blended pixels, we should not care that the dst
> is opaque. So drop the call to select_xform_alpha and just use the alpha
> type of the source. This matches the comment on the lines above.
>
> Add the test image that failed (https://mathiasbynens.be/demo/animated-webp)
>
> Change-Id: Ibd13c1f067bdf369ce1c882d4f6057aadccfa313
> Reviewed-on: https://skia-review.googlesource.com/71560
> Commit-Queue: Leon Scroggins <scroggo@google.com>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
TBR=mtklein@chromium.org,scroggo@google.com
Change-Id: I6f535ff9b773a93e02a0358b830291594a6e738c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/71720
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp
index 9cb44d2..6287617 100644
--- a/src/codec/SkWebpCodec.cpp
+++ b/src/codec/SkWebpCodec.cpp
@@ -571,6 +571,7 @@
// We're only transforming the new part of the frame, so no need to worry about the
// final composited alpha.
const auto srcAlpha = 0 == index ? srcInfo.alphaType() : alpha_type(frame.has_alpha);
+ const auto xformAlphaType = select_xform_alpha(dstInfo.alphaType(), srcAlpha);
const bool needsSrgbToLinear = dstInfo.gammaCloseToSRGB() &&
options.fPremulBehavior == SkTransferFunctionBehavior::kRespect;
@@ -592,9 +593,9 @@
xformDst = dst;
}
for (int y = 0; y < rowsDecoded; y++) {
- this->applyColorXform(xformDst, xformSrc, scaledWidth, srcAlpha);
+ this->applyColorXform(xformDst, xformSrc, scaledWidth, xformAlphaType);
if (blendWithPrevFrame) {
- blend_line(dstCT, dst, dstCT, xformDst, needsSrgbToLinear, srcAlpha,
+ blend_line(dstCT, dst, dstCT, xformDst, needsSrgbToLinear, xformAlphaType,
scaledWidth);
dst = SkTAddOffset<void>(dst, rowBytes);
} else {
@@ -607,7 +608,7 @@
for (int y = 0; y < rowsDecoded; y++) {
blend_line(dstCT, dst, webpDst.colorType(), src, needsSrgbToLinear,
- srcAlpha, scaledWidth);
+ xformAlphaType, scaledWidth);
src = SkTAddOffset<const uint8_t>(src, srcRowBytes);
dst = SkTAddOffset<void>(dst, rowBytes);
}