Browse Source

Fix end of block decoding

pull/2633/head
Ynse Hoornenborg 2 years ago
parent
commit
6188aacec0
  1. 9
      src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolDecoder.cs
  2. 24
      tests/ImageSharp.Tests/Formats/Heif/Av1/Av1CoefficientsEntropyTests.cs

9
src/ImageSharp/Formats/Heif/Av1/Entropy/Av1SymbolDecoder.cs

@ -355,14 +355,11 @@ internal ref struct Av1SymbolDecoder
{
Av1Math.SetBit(ref endOfBlockExtra, endOfBlockShift - 1);
}
else
for (int j = 1; j < endOfBlockShift; j++)
{
for (int j = 1; j < endOfBlockShift; j++)
if (this.ReadLiteral(1) != 0)
{
if (this.ReadLiteral(1) != 0)
{
Av1Math.SetBit(ref endOfBlockExtra, endOfBlockShift - 1 - j);
}
Av1Math.SetBit(ref endOfBlockExtra, endOfBlockShift - 1 - j);
}
}
}

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

@ -52,8 +52,24 @@ public class Av1CoefficientsEntropyTests
Assert.Equal(expected, actuals);
}
[Fact]
public void RoundTripFullBlock()
[Theory]
[InlineData(1)]
[InlineData(2)]
[InlineData(3)]
[InlineData(4)]
[InlineData(5)]
[InlineData(6)]
[InlineData(7)]
[InlineData(8)]
[InlineData(9)]
[InlineData(10)]
[InlineData(11)]
[InlineData(12)]
[InlineData(13)]
[InlineData(14)]
[InlineData(15)]
[InlineData(16)]
public void RoundTripFullBlock(ushort endOfBlock)
{
// Assign
const Av1BlockSize blockSize = Av1BlockSize.Block4x4;
@ -62,7 +78,6 @@ public class Av1CoefficientsEntropyTests
const Av1PredictionMode intraDirection = Av1PredictionMode.DC;
const Av1ComponentType componentType = Av1ComponentType.Luminance;
const Av1FilterIntraMode filterIntraMode = Av1FilterIntraMode.DC;
const ushort endOfBlock = 16;
Av1BlockModeInfo modeInfo = new(Av1Constants.MaxPlanes, blockSize, new Point(0, 0));
Av1TransformInfo transformInfo = new(transformSize, 0, 0);
int[] aboveContexts = new int[1];
@ -85,6 +100,7 @@ public class Av1CoefficientsEntropyTests
// Assert
Assert.Equal(endOfBlock, actuals[0]);
Assert.Equal(coefficientsBuffer, actuals[1..]);
// Assert.Equal(coefficientsBuffer[..endOfBlock], actuals[1..(endOfBlock + 1)]);
}
}

Loading…
Cancel
Save