|
|
|
@ -66,7 +66,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
rdCur.Nz = (uint)ReconstructIntra16(it, dqm, rdCur, tmpDst, mode); |
|
|
|
|
|
|
|
// Measure RD-score.
|
|
|
|
rdCur.D = LossyUtils.Vp8Sse16X16(src, tmpDst); |
|
|
|
rdCur.D = LossyUtils.Vp8_Sse16X16(src, tmpDst); |
|
|
|
rdCur.SD = tlambda != 0 ? Mult8B(tlambda, LossyUtils.Vp8Disto16X16(src, tmpDst, WeightY, scratch)) : 0; |
|
|
|
rdCur.H = WebpConstants.Vp8FixedCostsI16[mode]; |
|
|
|
rdCur.R = it.GetCostLuma16(rdCur, proba, res); |
|
|
|
@ -160,7 +160,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
rdTmp.Nz = (uint)ReconstructIntra4(it, dqm, tmpLevels, src, tmpDst, mode); |
|
|
|
|
|
|
|
// Compute RD-score.
|
|
|
|
rdTmp.D = LossyUtils.Vp8Sse4X4(src, tmpDst); |
|
|
|
rdTmp.D = LossyUtils.Vp8_Sse4X4(src, tmpDst); |
|
|
|
rdTmp.SD = tlambda != 0 ? Mult8B(tlambda, LossyUtils.Vp8Disto4X4(src, tmpDst, WeightY, scratch)) : 0; |
|
|
|
rdTmp.H = modeCosts[mode]; |
|
|
|
|
|
|
|
@ -251,7 +251,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
rdUv.Nz = (uint)ReconstructUv(it, dqm, rdUv, tmpDst, mode); |
|
|
|
|
|
|
|
// Compute RD-score
|
|
|
|
rdUv.D = LossyUtils.Vp8Sse16X8(src, tmpDst); |
|
|
|
rdUv.D = LossyUtils.Vp8_Sse16X8(src, tmpDst); |
|
|
|
rdUv.SD = 0; // not calling TDisto here: it tends to flatten areas.
|
|
|
|
rdUv.H = WebpConstants.Vp8FixedCostsUv[mode]; |
|
|
|
rdUv.R = it.GetCostUv(rdUv, proba, res); |
|
|
|
@ -407,7 +407,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
for (mode = 0; mode < WebpConstants.NumPredModes; ++mode) |
|
|
|
{ |
|
|
|
Span<byte> reference = it.YuvP.AsSpan(Vp8Encoding.Vp8I16ModeOffsets[mode]); |
|
|
|
long score = (LossyUtils.Vp8Sse16X16(src, reference) * WebpConstants.RdDistoMult) + (WebpConstants.Vp8FixedCostsI16[mode] * lambdaDi16); |
|
|
|
long score = (LossyUtils.Vp8_Sse16X16(src, reference) * WebpConstants.RdDistoMult) + (WebpConstants.Vp8FixedCostsI16[mode] * lambdaDi16); |
|
|
|
|
|
|
|
if (mode > 0 && WebpConstants.Vp8FixedCostsI16[mode] > bitLimit) |
|
|
|
{ |
|
|
|
@ -454,7 +454,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
for (mode = 0; mode < WebpConstants.NumBModes; ++mode) |
|
|
|
{ |
|
|
|
Span<byte> reference = it.YuvP.AsSpan(Vp8Encoding.Vp8I4ModeOffsets[mode]); |
|
|
|
long score = (LossyUtils.Vp8Sse4X4(src, reference) * WebpConstants.RdDistoMult) + (modeCosts[mode] * lambdaDi4); |
|
|
|
long score = (LossyUtils.Vp8_Sse4X4(src, reference) * WebpConstants.RdDistoMult) + (modeCosts[mode] * lambdaDi4); |
|
|
|
if (score < bestI4Score) |
|
|
|
{ |
|
|
|
bestI4Mode = mode; |
|
|
|
@ -503,7 +503,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy |
|
|
|
for (mode = 0; mode < WebpConstants.NumPredModes; ++mode) |
|
|
|
{ |
|
|
|
Span<byte> reference = it.YuvP.AsSpan(Vp8Encoding.Vp8UvModeOffsets[mode]); |
|
|
|
long score = (LossyUtils.Vp8Sse16X8(src, reference) * WebpConstants.RdDistoMult) + (WebpConstants.Vp8FixedCostsUv[mode] * lambdaDuv); |
|
|
|
long score = (LossyUtils.Vp8_Sse16X8(src, reference) * WebpConstants.RdDistoMult) + (WebpConstants.Vp8FixedCostsUv[mode] * lambdaDuv); |
|
|
|
if (score < bestUvScore) |
|
|
|
{ |
|
|
|
bestMode = mode; |
|
|
|
|