Browse Source

Restart interval is now handled by scan decoder

pull/1702/head
Dmitry Pentin 5 years ago
parent
commit
d9745e4d3b
  1. 8
      src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs
  2. 10
      src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs

8
src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs

@ -22,7 +22,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
private JpegFrame frame; private JpegFrame frame;
private JpegComponent[] components; private JpegComponent[] components;
// The restart interval. /// <summary>
/// The reset interval determined by RST markers.
/// </summary>
private int restartInterval; private int restartInterval;
// How many mcu's are left to do. // How many mcu's are left to do.
@ -72,7 +74,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
this.acHuffmanTables = new HuffmanTable[maxTables]; this.acHuffmanTables = new HuffmanTable[maxTables];
} }
// Reset interval /// <summary>
/// Sets reset interval determined by RST markers.
/// </summary>
public int ResetInterval public int ResetInterval
{ {
set set

10
src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs

@ -42,11 +42,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// </summary> /// </summary>
private readonly byte[] markerBuffer = new byte[2]; private readonly byte[] markerBuffer = new byte[2];
/// <summary>
/// The reset interval determined by RST markers.
/// </summary>
private ushort resetInterval;
/// <summary> /// <summary>
/// Whether the image has an EXIF marker. /// Whether the image has an EXIF marker.
/// </summary> /// </summary>
@ -1001,7 +996,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
JpegThrowHelper.ThrowBadMarker(nameof(JpegConstants.Markers.DRI), remaining); JpegThrowHelper.ThrowBadMarker(nameof(JpegConstants.Markers.DRI), remaining);
} }
this.resetInterval = this.ReadUint16(stream); this.scanDecoder.ResetInterval = this.ReadUint16(stream);
} }
/// <summary> /// <summary>
@ -1052,9 +1047,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
// All the comments below are for separate refactoring PR // All the comments below are for separate refactoring PR
// Main reason it's not fixed here is to make this commit less intrusive // Main reason it's not fixed here is to make this commit less intrusive
// This can be injectd in DRI marker callback
this.scanDecoder.ResetInterval = this.resetInterval;
// This can be passed as ParseEntropyCodedData() parameter as it is used only there // This can be passed as ParseEntropyCodedData() parameter as it is used only there
this.scanDecoder.ComponentsLength = selectorsCount; this.scanDecoder.ComponentsLength = selectorsCount;

Loading…
Cancel
Save