diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs
index 3f490d2958..79ed59f6a0 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs
@@ -256,7 +256,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
int dc = (int)refTemp2[0];
// Emit the DC delta.
- this.EmitHuffRLE(this.huffmanTables[2 * (int)index].Values, 0, dc - prevDC);
+ this.EmitDirectCurrentTerm(this.huffmanTables[2 * (int)index].Values, dc - prevDC);
// Emit the AC components.
int[] huffmanTable = this.huffmanTables[(2 * (int)index) + 1].Values;
@@ -358,6 +358,26 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
this.Emit(x >> 8, x & 0xff);
}
+ [MethodImpl(InliningOptions.ShortMethod)]
+ private void EmitDirectCurrentTerm(int[] table, int value)
+ {
+ int a = value;
+ int b = value;
+ if (a < 0)
+ {
+ a = -value;
+ b = value - 1;
+ }
+
+ int bt = GetHuffmanEncodingLength((uint)a);
+
+ this.EmitHuff(table, bt);
+ if (bt > 0)
+ {
+ this.Emit(b & ((1 << bt) - 1), bt);
+ }
+ }
+
///
/// Emits a run of runLength copies of value encoded with the given Huffman encoder.
///
@@ -378,10 +398,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
int bt = GetHuffmanEncodingLength((uint)a);
this.EmitHuff(table, (runLength << 4) | bt);
- if (bt > 0)
- {
- this.Emit(b & ((1 << bt) - 1), bt);
- }
+ this.Emit(b & ((1 << bt) - 1), bt);
}
///