diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsHuffmanTable.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsHuffmanTable.cs
index 62ae34335e..875a862638 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsHuffmanTable.cs
+++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsHuffmanTable.cs
@@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
/// The to use for buffer allocations.
/// The code lengths
/// The huffman values
- public PdfJsHuffmanTable(MemoryManager memoryManager, byte[] lengths, byte[] values)
+ public PdfJsHuffmanTable(MemoryManager memoryManager, ReadOnlySpan lengths, ReadOnlySpan values)
{
const int length = 257;
using (IBuffer huffsize = memoryManager.Allocate(length))
@@ -57,10 +57,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
fixed (byte* huffValRef = this.HuffVal.Data)
{
- for (int i = 0; i < values.Length; i++)
- {
- huffValRef[i] = values[i];
- }
+ var huffValSpan = new Span(huffValRef, 256);
+
+ values.CopyTo(huffValSpan);
}
}
@@ -69,7 +68,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
///
/// The code lengths
/// The huffman size span ref
- private static void GenerateSizeTable(byte[] lengths, ref short huffsizeRef)
+ private static void GenerateSizeTable(ReadOnlySpan lengths, ref short huffsizeRef)
{
short index = 0;
for (short l = 1; l <= 16; l++)
@@ -115,7 +114,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
///
/// The code lengths
/// The huffman code span ref
- private void GenerateDecoderTables(byte[] lengths, ref short huffcodeRef)
+ private void GenerateDecoderTables(ReadOnlySpan lengths, ref short huffcodeRef)
{
fixed (short* valOffsetRef = this.ValOffset.Data)
fixed (long* maxcodeRef = this.MaxCode.Data)
@@ -147,7 +146,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
/// The code lengths
/// The huffman value array
/// The huffman code span ref
- private void GenerateLookaheadTables(byte[] lengths, byte[] huffval, ref short huffcodeRef)
+ private void GenerateLookaheadTables(ReadOnlySpan lengths, ReadOnlySpan huffval, ref short huffcodeRef)
{
// TODO: This generation code matches the libJpeg code but the lookahead table is not actually used yet.
// To use it we need to implement fast lookup path in PdfJsScanDecoder.DecodeHuffman
@@ -155,10 +154,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
// will be 8 or fewer bits long and can be handled without looping.
fixed (short* lookaheadRef = this.Lookahead.Data)
{
- for (int i = 0; i < 256; i++)
- {
- lookaheadRef[i] = 2034; // 9 << 8;
- }
+ var lookaheadSpan = new Span(lookaheadRef, 256);
+
+ lookaheadSpan.Fill(2034); // 9 << 8;
int p = 0;
for (int l = 1; l <= 8; l++)
diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
index 336c61699d..ae780ce626 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
+++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
@@ -700,8 +700,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
this.BuildHuffmanTable(
huffmanTableSpec >> 4 == 0 ? this.dcHuffmanTables : this.acHuffmanTables,
huffmanTableSpec & 15,
- codeLengths.Array,
- huffmanValues.Array);
+ codeLengths.Span,
+ huffmanValues.Span);
}
}
}
@@ -785,7 +785,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
/// The codelengths
/// The values
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private void BuildHuffmanTable(PdfJsHuffmanTables tables, int index, byte[] codeLengths, byte[] values)
+ private void BuildHuffmanTable(PdfJsHuffmanTables tables, int index, ReadOnlySpan codeLengths, ReadOnlySpan values)
{
tables[index] = new PdfJsHuffmanTable(this.configuration.MemoryManager, codeLengths, values);
}