Browse Source

Round trip empty Coefficients buffer

pull/2633/head
Ynse Hoornenborg 2 years ago
parent
commit
c7c00391cf
  1. 4
      src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolEncoder.cs
  2. 2
      src/ImageSharp/Formats/Heif/Av1/Tiling/Av1LevelBuffer.cs
  3. 3
      tests/ImageSharp.Tests/Formats/Heif/Av1/Av1CoefficientsEntropyTests.cs

4
src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolEncoder.cs

@ -128,12 +128,12 @@ internal class Av1SymbolEncoder : IDisposable
if (eob_offset_bits > 0)
{
int eob_shift = eob_offset_bits - 1;
int bit = Math.Max(1, eob_extra & 1 << eob_shift);
int bit = (eob_extra & (1 << eob_shift)) != 0 ? 1 : 0;
w.WriteSymbol(bit, this.endOfBlockExtra[(int)transformSizeContext][(int)componentType][endOfBlockPosition]);
for (int i = 1; i < eob_offset_bits; i++)
{
eob_shift = eob_offset_bits - 1 - i;
bit = Math.Max(1, eob_extra & 1 << eob_shift);
bit = (eob_extra & (1 << eob_shift)) != 0 ? 1 : 0;
w.WriteLiteral((uint)bit, 1);
}
}

2
src/ImageSharp/Formats/Heif/Av1/Tiling/Av1LevelBuffer.cs

@ -50,7 +50,7 @@ internal sealed class Av1LevelBuffer : IDisposable
ObjectDisposedException.ThrowIf(this.memory == null, this);
ArgumentOutOfRangeException.ThrowIfLessThan(y, -Av1Constants.TransformPadTop);
int row = y + Av1Constants.TransformPadTop;
return this.memory.Memory.Span.Slice(row * this.Stride, this.Size.Width);
return this.memory.Memory.Span.Slice(row * this.Stride, this.Size.Width + Av1Constants.TransformPadHorizontal);
}
public void Dispose()

3
tests/ImageSharp.Tests/Formats/Heif/Av1/Av1CoefficientsEntropyTests.cs

@ -39,6 +39,7 @@ public class Av1CoefficientsEntropyTests
Configuration configuration = Configuration.Default;
Av1SymbolEncoder encoder = new(configuration, 100 / 8, BaseQIndex);
Span<int> coefficientsBuffer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
Span<int> expected = new int[16];
Span<int> actuals = new int[16];
// Act
@ -51,7 +52,7 @@ public class Av1CoefficientsEntropyTests
decoder.ReadCoefficients(modeInfo, new Point(0, 0), aboveContexts, leftContexts, 0, 0, 0, 1, 1, transformBlockContext, transformSize, false, true, transformInfo, 0, 0, actuals);
// Assert
Assert.Equal(coefficientsBuffer, actuals);
Assert.Equal(expected, actuals);
}
}

Loading…
Cancel
Save