Browse Source

Use memset equivalent in LossyUtils

pull/1552/head
Brian Popow 6 years ago
parent
commit
73611ea1f2
  1. 45
      src/ImageSharp/Formats/WebP/LossyUtils.cs
  2. 4
      src/ImageSharp/Formats/WebP/WebPLossyDecoder.cs

45
src/ImageSharp/Formats/WebP/LossyUtils.cs

@ -11,11 +11,7 @@ namespace SixLabors.ImageSharp.Formats.WebP
{
for (int j = 0; j < 16; ++j)
{
Span<byte> tmp = dst.Slice(j * WebPConstants.Bps);
for (int i = 0; i < 16; i++)
{
tmp[i] = (byte)v;
}
Memset(dst.Slice(j * WebPConstants.Bps), (byte)v, 0, 16);
}
}
@ -54,14 +50,10 @@ namespace SixLabors.ImageSharp.Formats.WebP
for (int j = 16; j > 0; --j)
{
// memset(dst, dst[-1], 16);
dst = dst.Slice(WebPConstants.Bps);
byte v = yuv[offset - 1];
for (int i = 0; i < 16; i++)
{
dst[i] = v;
}
Memset(dst, v, 0, 16);
offset += WebPConstants.Bps;
dst = dst.Slice(WebPConstants.Bps);
}
}
@ -131,10 +123,8 @@ namespace SixLabors.ImageSharp.Formats.WebP
{
// memset(dst, dst[-1], 8);
byte v = yuv[offset - 1];
for (int i = 0; i < 8; i++)
{
yuv[offset + i] = v;
}
Memset(dst, v, 0, 8);
dst = dst.Slice(WebPConstants.Bps);
}
}
@ -164,17 +154,10 @@ namespace SixLabors.ImageSharp.Formats.WebP
Put8x8uv((byte)(dc0 >> 3), dst);
}
public static void DC8uvNoTopLeft_C(Span<byte> dst, byte[] yuv, int offset)
public static void DC8uvNoTopLeft_C(Span<byte> dst)
{
// DC with no top samples.
int dc0 = 4;
for (int i = 0; i < 8; ++i)
{
// dc0 += dst[-1 + i * BPS];
dc0 += yuv[offset - 1 + (i * WebPConstants.Bps)];
}
Put8x8uv((byte)(dc0 >> 3), dst);
// DC with nothing.
Put8x8uv(0x80, dst);
}
public static void DC4_C(Span<byte> dst)
@ -366,10 +349,18 @@ namespace SixLabors.ImageSharp.Formats.WebP
private static void Put8x8uv(byte value, Span<byte> dst)
{
// memset(dst + j * BPS, value, 8);
for (int j = 0; j < 8; ++j)
{
dst[j * WebPConstants.Bps] = value;
// memset(dst + j * BPS, value, 8);
Memset(dst, value, j * WebPConstants.Bps, 8);
}
}
private static void Memset(Span<byte> dst, byte value, int startIdx, int count)
{
for (int i = 0; i < count; i++)
{
dst[startIdx + i] = value;
}
}

4
src/ImageSharp/Formats/WebP/WebPLossyDecoder.cs

@ -414,8 +414,8 @@ namespace SixLabors.ImageSharp.Formats.WebP
LossyUtils.DC8uvNoLeft_C(vDst, yuv, vOff);
break;
case 6:
LossyUtils.DC8uvNoTopLeft_C(uDst, yuv, uOff);
LossyUtils.DC8uvNoTopLeft_C(vDst, yuv, vOff);
LossyUtils.DC8uvNoTopLeft_C(uDst);
LossyUtils.DC8uvNoTopLeft_C(vDst);
break;
}

Loading…
Cancel
Save