diff --git a/src/ImageSharp/Formats/WebP/Lossy/Vp8EncIterator.cs b/src/ImageSharp/Formats/WebP/Lossy/Vp8EncIterator.cs index f1fb6c13a..4bdae0265 100644 --- a/src/ImageSharp/Formats/WebP/Lossy/Vp8EncIterator.cs +++ b/src/ImageSharp/Formats/WebP/Lossy/Vp8EncIterator.cs @@ -768,10 +768,12 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy int srcIdx = 0; for (int i = 0; i < h; ++i) { + // memcpy(dst, src, w); src.Slice(srcIdx, w).CopyTo(dst.Slice(dstIdx)); if (w < size) { - dst.Slice(dstIdx, size - w).Fill(dst[dstIdx + w - 1]); + // memset(dst + w, dst[w - 1], size - w); + dst.Slice(dstIdx + w, size - w).Fill(dst[dstIdx + w - 1]); } dstIdx += WebpConstants.Bps; @@ -780,7 +782,8 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy for (int i = h; i < size; ++i) { - dst.Slice(dstIdx - WebpConstants.Bps, size).CopyTo(dst); + // memcpy(dst, dst - BPS, size); + dst.Slice(dstIdx - WebpConstants.Bps, size).CopyTo(dst.Slice(dstIdx)); dstIdx += WebpConstants.Bps; } } diff --git a/src/ImageSharp/Formats/WebP/Lossy/Vp8Encoder.cs b/src/ImageSharp/Formats/WebP/Lossy/Vp8Encoder.cs index 86f014424..4544292f6 100644 --- a/src/ImageSharp/Formats/WebP/Lossy/Vp8Encoder.cs +++ b/src/ImageSharp/Formats/WebP/Lossy/Vp8Encoder.cs @@ -609,7 +609,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy Vp8MacroBlockInfo mb = this.MbInfo[n]; int alpha = mb.Alpha; mb.Segment = map[alpha]; - mb.Alpha = centers[map[alpha]]; // for the record. + mb.Alpha = centers[map[alpha]]; } // TODO: add possibility for SmoothSegmentMap @@ -790,11 +790,11 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy m.Y2 = new Vp8Matrix(); m.Uv = new Vp8Matrix(); - m.Y1.Q[0] = WebpLookupTables.DcTable[Numerics.Clamp(q, 0, 127)]; + m.Y1.Q[0] = WebpLookupTables.DcTable[Numerics.Clamp(q + this.DqY1Dc, 0, 127)]; m.Y1.Q[1] = WebpLookupTables.AcTable[Numerics.Clamp(q, 0, 127)]; - m.Y2.Q[0] = (ushort)(WebpLookupTables.DcTable[Numerics.Clamp(q, 0, 127)] * 2); - m.Y2.Q[1] = WebpLookupTables.AcTable2[Numerics.Clamp(q, 0, 127)]; + m.Y2.Q[0] = (ushort)(WebpLookupTables.DcTable[Numerics.Clamp(q + this.DqY2Dc, 0, 127)] * 2); + m.Y2.Q[1] = WebpLookupTables.AcTable2[Numerics.Clamp(q + this.DqY2Ac, 0, 127)]; m.Uv.Q[0] = WebpLookupTables.DcTable[Numerics.Clamp(q + this.DqUvDc, 0, 117)]; m.Uv.Q[1] = WebpLookupTables.AcTable[Numerics.Clamp(q + this.DqUvAc, 0, 127)]; @@ -803,8 +803,6 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy int qi16 = m.Y2.Expand(1); int quv = m.Uv.Expand(2); - m.I4Penalty = 1000 * qi4 * qi4; - m.LambdaI16 = 3 * qi16 * qi16; m.LambdaI4 = (3 * qi4 * qi4) >> 7; m.LambdaUv = (3 * quv * quv) >> 6; diff --git a/src/ImageSharp/Formats/WebP/Lossy/Vp8Matrix.cs b/src/ImageSharp/Formats/WebP/Lossy/Vp8Matrix.cs index 7b001b72a..f9fd6602a 100644 --- a/src/ImageSharp/Formats/WebP/Lossy/Vp8Matrix.cs +++ b/src/ImageSharp/Formats/WebP/Lossy/Vp8Matrix.cs @@ -106,9 +106,6 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy return (sum + 8) >> 4; } - private int BIAS(int b) - { - return b << (WebpConstants.QFix - 8); - } + private int BIAS(int b) => b << (WebpConstants.QFix - 8); } }