Browse Source

Set stream position to strip offset + stripOffsetBytes after decompressing jpeg data

pull/2266/head
Brian Popow 4 years ago
parent
commit
d1bdedd365
  1. 5
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs
  2. 2
      tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs
  3. 2
      tests/ImageSharp.Tests/TestImages.cs
  4. 3
      tests/Images/Input/Tiff/OldJpegCompression2.tiff
  5. 3
      tests/Images/Input/Tiff/OldJpegCompression3.tiff

5
src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs

@ -34,9 +34,14 @@ internal sealed class OldJpegTiffCompression : TiffBaseDecompressor
protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span<byte> buffer, CancellationToken cancellationToken)
{
long stripOffset = stream.Position;
stream.Position = this.startOfImageMarker;
this.DecodeJpegData(stream, buffer, cancellationToken);
// Setting the stream position to the expected position.
// This is a workaround for some images having set the stripBytesCount not equal to the compressed jpeg data.
stream.Position = stripOffset + byteCount;
}
private void DecodeJpegData(BufferedReadStream stream, Span<byte> buffer, CancellationToken cancellationToken)

2
tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs

@ -666,6 +666,8 @@ public class TiffDecoderTests : TiffDecoderBaseTester
[Theory]
[WithFile(RgbOldJpegCompressed, PixelTypes.Rgba32)]
[WithFile(RgbOldJpegCompressed2, PixelTypes.Rgba32)]
[WithFile(RgbOldJpegCompressed3, PixelTypes.Rgba32)]
[WithFile(YCbCrOldJpegCompressed, PixelTypes.Rgba32)]
public void TiffDecoder_CanDecode_OldJpegCompressed<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel>

2
tests/ImageSharp.Tests/TestImages.cs

@ -796,6 +796,8 @@ public static class TestImages
public const string RgbJpegCompressed = "Tiff/rgb_jpegcompression.tiff";
public const string RgbJpegCompressed2 = "Tiff/twain-rgb-jpeg-with-bogus-ycbcr-subsampling.tiff";
public const string RgbOldJpegCompressed = "Tiff/OldJpegCompression.tiff";
public const string RgbOldJpegCompressed2 = "Tiff/OldJpegCompression2.tiff";
public const string RgbOldJpegCompressed3 = "Tiff/OldJpegCompression3.tiff";
public const string YCbCrOldJpegCompressed = "Tiff/YCbCrOldJpegCompressed.tiff";
public const string RgbWithStripsJpegCompressed = "Tiff/rgb_jpegcompressed_stripped.tiff";
public const string RgbJpegCompressedNoJpegTable = "Tiff/rgb_jpegcompressed_nojpegtable.tiff";

3
tests/Images/Input/Tiff/OldJpegCompression2.tiff

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e8f722bc322b9a7621d1d858bec36ea78d31b85221f314a2b9872d3af91d600a
size 5052

3
tests/Images/Input/Tiff/OldJpegCompression3.tiff

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4b2b73290a40c49a4a29e51ad53dadea65c1ceafc6a5384430f7092d613830db
size 1390339
Loading…
Cancel
Save