From 6aa74f20b972e548a0d3df191e5f9fac0a1655b6 Mon Sep 17 00:00:00 2001 From: Ynse Hoornenborg Date: Sun, 21 Apr 2024 14:51:55 +0200 Subject: [PATCH] Rename to Av1Decoder --- .../Heif/Av1/{Av1DecoderHandle.cs => Av1Decoder.cs} | 10 ++++++++-- .../Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs | 6 +++--- .../Formats/Heif/Av1/ObuFrameHeaderTests.cs | 8 ++++---- 3 files changed, 15 insertions(+), 9 deletions(-) rename src/ImageSharp/Formats/Heif/Av1/{Av1DecoderHandle.cs => Av1Decoder.cs} (74%) diff --git a/src/ImageSharp/Formats/Heif/Av1/Av1DecoderHandle.cs b/src/ImageSharp/Formats/Heif/Av1/Av1Decoder.cs similarity index 74% rename from src/ImageSharp/Formats/Heif/Av1/Av1DecoderHandle.cs rename to src/ImageSharp/Formats/Heif/Av1/Av1Decoder.cs index cdad5a8905..7653fea9ce 100644 --- a/src/ImageSharp/Formats/Heif/Av1/Av1DecoderHandle.cs +++ b/src/ImageSharp/Formats/Heif/Av1/Av1Decoder.cs @@ -5,9 +5,9 @@ using SixLabors.ImageSharp.Formats.Heif.Av1.OpenBitstreamUnit; namespace SixLabors.ImageSharp.Formats.Heif.Av1; -internal class Av1DecoderHandle +internal class Av1Decoder { - public Av1DecoderHandle() + public Av1Decoder() { this.FrameInfo = new ObuFrameHeader(); this.SequenceHeader = new ObuSequenceHeader(); @@ -25,4 +25,10 @@ internal class Av1DecoderHandle public ObuSequenceHeader SequenceHeader { get; } public ObuTileInfo TileInfo { get; } + + public void Decode(Span buffer) + { + Av1BitStreamReader reader = new(buffer); + ObuReader.Read(ref reader, buffer.Length, this, false); + } } diff --git a/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs b/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs index 485fee58dc..656f3c57ea 100644 --- a/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs +++ b/src/ImageSharp/Formats/Heif/Av1/OpenBitstreamUnit/ObuReader.cs @@ -10,7 +10,7 @@ internal class ObuReader /// /// Decode all OBU's in a frame. /// - public static void Read(ref Av1BitStreamReader reader, int dataSize, Av1DecoderHandle decoderHandle, bool isAnnexB) + public static void Read(ref Av1BitStreamReader reader, int dataSize, Av1Decoder decoderHandle, bool isAnnexB) { bool frameDecodingFinished = false; while (!frameDecodingFinished) @@ -57,11 +57,11 @@ internal class ObuReader } else if (header.Type != ObuType.FrameHeader) { - Guard.IsFalse(decoderHandle.SeenFrameHeader, nameof(Av1DecoderHandle.SeenFrameHeader), "Frame header expected"); + Guard.IsFalse(decoderHandle.SeenFrameHeader, nameof(Av1Decoder.SeenFrameHeader), "Frame header expected"); } else { - Guard.IsTrue(decoderHandle.SeenFrameHeader, nameof(Av1DecoderHandle.SeenFrameHeader), "Already decoded a frame header"); + Guard.IsTrue(decoderHandle.SeenFrameHeader, nameof(Av1Decoder.SeenFrameHeader), "Already decoded a frame header"); } if (!decoderHandle.SeenFrameHeader) diff --git a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs index fc02e17c22..398f84b853 100644 --- a/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Heif/Av1/ObuFrameHeaderTests.cs @@ -12,17 +12,17 @@ public class ObuFrameHeaderTests [Theory] // [InlineData(TestImages.Heif.IrvineAvif, 0x0102, 0x000D, false)] // [InlineData(TestImages.Heif.IrvineAvif, 0x0198, 0x6BD1, false)] - [InlineData(TestImages.Heif.XnConvert, 0x010E, 0x0017, false)] + [InlineData(TestImages.Heif.XnConvert, 0x010E, 0x03CC, false)] public void ReadFrameHeader(string filename, int fileOffset, int blockSize, bool isAnnexB) { // Assign string filePath = Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, filename); byte[] content = File.ReadAllBytes(filePath); - Av1BitStreamReader reader = new(content.AsSpan(fileOffset)); - Av1DecoderHandle decoder = new(); + Span span = content.AsSpan(fileOffset, blockSize); + Av1Decoder decoder = new(); // Act - ObuReader.Read(ref reader, blockSize, decoder, isAnnexB); + decoder.Decode(span); // Assert Assert.True(decoder.SequenceHeaderDone);