Browse Source

Reimplemented Emit methods in HuffmanScanEncoder to get rid of unreadable amount of int/uint casts

pull/1632/head
Dmitry Pentin 5 years ago
parent
commit
52e6036268
  1. 16
      src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs

16
src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs

@ -35,12 +35,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
/// <summary> /// <summary>
/// Emmited bits 'micro buffer' before being transfered to the <see cref="emitBuffer"/>. /// Emmited bits 'micro buffer' before being transfered to the <see cref="emitBuffer"/>.
/// </summary> /// </summary>
private uint accumulatedBits; private int accumulatedBits;
/// <summary> /// <summary>
/// Number of jagged bits stored in <see cref="accumulatedBits"/> /// Number of jagged bits stored in <see cref="accumulatedBits"/>
/// </summary> /// </summary>
private uint bitCount; private int bitCount;
private Block8x8F temporalBlock1; private Block8x8F temporalBlock1;
private Block8x8F temporalBlock2; private Block8x8F temporalBlock2;
@ -303,10 +303,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
/// <param name="bits">The packed bits.</param> /// <param name="bits">The packed bits.</param>
/// <param name="count">The number of bits</param> /// <param name="count">The number of bits</param>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
private void Emit(uint bits, uint count) private void Emit(int bits, int count)
{ {
count += this.bitCount; count += this.bitCount;
bits <<= (int)(32 - count); bits <<= 32 - count;
bits |= this.accumulatedBits; bits |= this.accumulatedBits;
// Only write if more than 8 bits. // Only write if more than 8 bits.
@ -350,7 +350,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
private void EmitHuff(int index, int value) private void EmitHuff(int index, int value)
{ {
uint x = HuffmanLut.TheHuffmanLut[index].Values[value]; int x = (int)HuffmanLut.TheHuffmanLut[index].Values[value];
this.Emit(x & ((1 << 24) - 1), x >> 24); this.Emit(x & ((1 << 24) - 1), x >> 24);
} }
@ -371,12 +371,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder
b = value - 1; b = value - 1;
} }
uint bt = (uint)Numerics.MinimumBitsToStore16((uint)a); int bt = Numerics.MinimumBitsToStore16((uint)a);
this.EmitHuff(index, (int)((uint)(runLength << 4) | bt)); this.EmitHuff(index, (runLength << 4) | bt);
if (bt > 0) if (bt > 0)
{ {
this.Emit((uint)b & (uint)((1 << ((int)bt)) - 1), bt); this.Emit(b & ((1 << bt) - 1), bt);
} }
} }
} }

Loading…
Cancel
Save