From 6aa609fa3453735834b5abc0ee9955c5ff509869 Mon Sep 17 00:00:00 2001 From: Ynse Hoornenborg Date: Thu, 27 Jun 2024 00:55:41 +0200 Subject: [PATCH] Strength test criteria --- .../Formats/Heif/Av1/Av1BitStreamReader.cs | 4 +- .../Heif/Av1/Av1BlockSizeExtensions.cs | 4 +- .../Formats/Heif/Av1/ObuFrameHeaderTests.cs | 51 ++++++++++--------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/ImageSharp/Formats/Heif/Av1/Av1BitStreamReader.cs b/src/ImageSharp/Formats/Heif/Av1/Av1BitStreamReader.cs index 99ba383ce..c5bd837fd 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Av1BitStreamReader.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Av1BitStreamReader.cs @@ -7,7 +7,7 @@ namespace SixLabors.ImageSharp.Formats.Heif.Av1; internal ref struct Av1BitStreamReader { - private const int WordSize = 1 << WordSizeLog2; + public const int WordSize = 1 << WordSizeLog2; private const int WordSizeLog2 = 5; private const int WordSizeInBytesLog2 = WordSizeLog2 - Log2Of8; private const int Log2Of8 = 3; @@ -182,7 +182,7 @@ internal ref struct Av1BitStreamReader // TODO: Pass exact byte iso Word start. int spanLength = tileDataSize >> WordSizeInBytesLog2; Span span = this.data.Slice(this.bitOffset >> WordSizeLog2, spanLength); - this.bitOffset += tileDataSize << Log2Of8; + this.Skip(tileDataSize << Log2Of8); return MemoryMarshal.Cast(span); } } diff --git a/src/ImageSharp/Formats/Heif/Av1/Av1BlockSizeExtensions.cs b/src/ImageSharp/Formats/Heif/Av1/Av1BlockSizeExtensions.cs index 9c16b63de..a269c0107 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Av1BlockSizeExtensions.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Av1BlockSizeExtensions.cs @@ -68,13 +68,13 @@ internal static class Av1BlockSizeExtensions /// Returns base 2 logarithm of the width of the block in units of 4 samples. /// public static int Get4x4WidthLog2(this Av1BlockSize blockSize) - => Get4x4WideCount(blockSize) << 2; + => Av1Math.Log2(Get4x4WideCount(blockSize)); /// /// Returns base 2 logarithm of the height of the block in units of 4 samples. /// public static int Get4x4HeightLog2(this Av1BlockSize blockSize) - => Get4x4HighCount(blockSize) << 2; + => Av1Math.Log2(Get4x4HighCount(blockSize)); /// /// Returns the block size of a sub sampled block. diff --git a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs index 2340fe427..a56daacc6 100644 --- a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs @@ -32,31 +32,36 @@ public class ObuFrameHeaderTests Assert.NotNull(obuReader.SequenceHeader); Assert.NotNull(obuReader.FrameHeader); Assert.NotNull(obuReader.FrameHeader.TilesInfo); + Assert.Equal(reader.Length * Av1BitStreamReader.WordSize, reader.BitPosition); + Assert.Equal(reader.Length * 4, blockSize); } - /* [Theory] - // [InlineData(TestImages.Heif.XnConvert, 0x010E, 0x03CC)] - // public void BinaryIdenticalRoundTripFrameHeader(string filename, int fileOffset, int blockSize) - // { - // // Assign - // string filePath = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, filename); - // byte[] content = File.ReadAllBytes(filePath); - // Span span = content.AsSpan(fileOffset, blockSize); - // IAv1TileDecoder tileDecoder = new Av1TileDecoderStub(); - // Av1BitStreamReader reader = new(span); - - // // Act 1 - // ObuReader.Read(ref reader, blockSize, tileDecoder); - - // // Assign 2 - // MemoryStream encoded = new(); - - // // Act 2 - // ObuWriter.Write(encoded, tileDecoder); - - // // Assert - // Assert.Equal(span, encoded.ToArray()); - //} + /* + [Theory] + [InlineData(TestImages.Heif.XnConvert, 0x010E, 0x03CC)] + public void BinaryIdenticalRoundTripFrameHeader(string filename, int fileOffset, int blockSize) + { + // Assign + string filePath = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, filename); + byte[] content = File.ReadAllBytes(filePath); + Span span = content.AsSpan(fileOffset, blockSize); + Av1TileDecoderStub tileDecoder = new(); + Av1BitStreamReader reader = new(span); + ObuReader obuReader = new(); + + // Act 1 + obuReader.Read(ref reader, blockSize, tileDecoder); + + // Assign 2 + MemoryStream encoded = new(); + + // Act 2 + ObuWriter obuWriter = new(); + ObuWriter.Write(encoded, obuReader.SequenceHeader, obuReader.FrameHeader); + + // Assert + Assert.Equal(span, encoded.ToArray()); + } */ [Theory]