From 7bb1a507c20074f9777c30a682a817240925ef11 Mon Sep 17 00:00:00 2001 From: Dmitry Pentin Date: Sun, 9 Jan 2022 05:39:00 +0300 Subject: [PATCH] Docs, faster span slice method --- .../Formats/Jpeg/Components/Decoder/HuffmanTable.cs | 5 +++++ src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 9 ++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs index 90a966d53f..bee5e0229b 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs @@ -13,6 +13,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder [StructLayout(LayoutKind.Sequential)] internal unsafe struct HuffmanTable { + /// + /// Memory workspace buffer size used in ctor. + /// + public const int WorkspaceByteSize = 256 * sizeof(uint); + /// /// Derived from the DHT marker. Contains the symbols, in order of incremental code length. /// diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index a2cccc37f5..a21f1a71d7 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -1097,16 +1097,15 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { const int codeLengthsByteSize = 17; const int codeValuesMaxByteSize = 256; - const int tableWorkspaceByteSize = 256 * sizeof(uint); - const int totalBufferSize = codeLengthsByteSize + codeValuesMaxByteSize + tableWorkspaceByteSize; + const int totalBufferSize = codeLengthsByteSize + codeValuesMaxByteSize + HuffmanTable.WorkspaceByteSize; int length = remaining; using (IMemoryOwner buffer = this.Configuration.MemoryAllocator.Allocate(totalBufferSize)) { Span bufferSpan = buffer.GetSpan(); - Span huffmanLegthsSpan = buffer.Slice(0, codeLengthsByteSize); - Span huffmanValuesSpan = buffer.Slice(codeLengthsByteSize, codeValuesMaxByteSize); - Span tableWorkspace = MemoryMarshal.Cast(buffer.Slice(codeLengthsByteSize + codeValuesMaxByteSize)); + Span huffmanLegthsSpan = bufferSpan.Slice(0, codeLengthsByteSize); + Span huffmanValuesSpan = bufferSpan.Slice(codeLengthsByteSize, codeValuesMaxByteSize); + Span tableWorkspace = MemoryMarshal.Cast(bufferSpan.Slice(codeLengthsByteSize + codeValuesMaxByteSize)); for (int i = 2; i < remaining;) {