diff --git a/src/ImageSharp/Common/Helpers/DebugGuard.cs b/src/ImageSharp/Common/Helpers/DebugGuard.cs
index 2cf18b245..43eebeac8 100644
--- a/src/ImageSharp/Common/Helpers/DebugGuard.cs
+++ b/src/ImageSharp/Common/Helpers/DebugGuard.cs
@@ -163,6 +163,20 @@ namespace SixLabors.ImageSharp
}
}
+ ///
+ /// Verifies whether a specific condition is met, throwing an exception if it's false.
+ ///
+ /// The condition
+ /// The error message
+ [Conditional("DEBUG")]
+ public static void IsTrue(bool target, string message)
+ {
+ if (!target)
+ {
+ throw new InvalidOperationException(message);
+ }
+ }
+
///
/// Verifies, that the method parameter with specified target value is false
/// and throws an exception if it is found to be so.
diff --git a/src/ImageSharp/Common/Helpers/InliningOptions.cs b/src/ImageSharp/Common/Helpers/InliningOptions.cs
index ad85c4fc8..069a426d7 100644
--- a/src/ImageSharp/Common/Helpers/InliningOptions.cs
+++ b/src/ImageSharp/Common/Helpers/InliningOptions.cs
@@ -1,7 +1,7 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-// Uncomment this for verbose profiler results:
+// Uncomment this for verbose profiler results. DO NOT PUSH TO MAIN!
// #define PROFILING
using System.Runtime.CompilerServices;
diff --git a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs
index 2ac577264..9aeb20931 100644
--- a/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs
+++ b/src/ImageSharp/Common/Helpers/SimdUtils.ExtendedIntrinsics.cs
@@ -25,6 +25,20 @@ namespace SixLabors.ImageSharp
false;
#endif
+ ///
+ /// Widen and convert a vector of values into 2 vectors of -s.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal static void ConvertToSingle(
+ Vector source,
+ out Vector dest1,
+ out Vector dest2)
+ {
+ Vector.Widen(source, out Vector i1, out Vector i2);
+ dest1 = Vector.ConvertToSingle(i1);
+ dest2 = Vector.ConvertToSingle(i2);
+ }
+
///
/// as many elements as possible, slicing them down (keeping the remainder).
///
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.CopyTo.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.CopyTo.cs
index b7dd125a8..6bf9c8483 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.CopyTo.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.CopyTo.cs
@@ -3,64 +3,41 @@
using System.Numerics;
using System.Runtime.CompilerServices;
-
using SixLabors.ImageSharp.Memory;
+// ReSharper disable UseObjectOrCollectionInitializer
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Formats.Jpeg.Components
{
internal partial struct Block8x8F
{
///
- /// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical.
+ /// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors.
///
+ [MethodImpl(InliningOptions.ShortMethod)]
public void CopyTo(in BufferArea area, int horizontalScale, int verticalScale)
{
if (horizontalScale == 1 && verticalScale == 1)
{
- this.CopyTo(area);
+ this.Copy1x1Scale(area);
return;
}
- else if (horizontalScale == 2 && verticalScale == 2)
+
+ if (horizontalScale == 2 && verticalScale == 2)
{
- this.CopyTo2x2(area);
+ this.Copy2x2Scale(area);
return;
}
- ref float destBase = ref area.GetReferenceToOrigin();
-
- // TODO: Optimize: implement all the cases with loopless special code! (T4?)
- for (int y = 0; y < 8; y++)
- {
- int yy = y * verticalScale;
- int y8 = y * 8;
-
- for (int x = 0; x < 8; x++)
- {
- int xx = x * horizontalScale;
-
- float value = this[y8 + x];
-
- for (int i = 0; i < verticalScale; i++)
- {
- int baseIdx = ((yy + i) * area.Stride) + xx;
-
- for (int j = 0; j < horizontalScale; j++)
- {
- // area[xx + j, yy + i] = value;
- Unsafe.Add(ref destBase, baseIdx + j) = value;
- }
- }
- }
- }
+ // TODO: Optimize: implement all cases with scale-specific, loopless code!
+ this.CopyArbitraryScale(area, horizontalScale, verticalScale);
}
- // [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public void CopyTo(in BufferArea area)
+ public void Copy1x1Scale(in BufferArea destination)
{
ref byte selfBase = ref Unsafe.As(ref this);
- ref byte destBase = ref Unsafe.As(ref area.GetReferenceToOrigin());
- int destStride = area.Stride * sizeof(float);
+ ref byte destBase = ref Unsafe.As(ref destination.GetReferenceToOrigin());
+ int destStride = destination.Stride * sizeof(float);
CopyRowImpl(ref selfBase, ref destBase, destStride, 0);
CopyRowImpl(ref selfBase, ref destBase, destStride, 1);
@@ -80,76 +57,86 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
Unsafe.CopyBlock(ref d, ref s, 8 * sizeof(float));
}
- private void CopyTo2x2(in BufferArea area)
+ private void Copy2x2Scale(in BufferArea area)
{
- ref float destBase = ref area.GetReferenceToOrigin();
- int destStride = area.Stride;
-
- this.WidenCopyImpl2x2(ref destBase, 0, destStride);
- this.WidenCopyImpl2x2(ref destBase, 1, destStride);
- this.WidenCopyImpl2x2(ref destBase, 2, destStride);
- this.WidenCopyImpl2x2(ref destBase, 3, destStride);
- this.WidenCopyImpl2x2(ref destBase, 4, destStride);
- this.WidenCopyImpl2x2(ref destBase, 5, destStride);
- this.WidenCopyImpl2x2(ref destBase, 6, destStride);
- this.WidenCopyImpl2x2(ref destBase, 7, destStride);
+ ref Vector2 destBase = ref Unsafe.As(ref area.GetReferenceToOrigin());
+ int destStride = area.Stride / 2;
+
+ this.WidenCopyRowImpl2x2(ref destBase, 0, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 1, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 2, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 3, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 4, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 5, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 6, destStride);
+ this.WidenCopyRowImpl2x2(ref destBase, 7, destStride);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private void WidenCopyImpl2x2(ref float destBase, int row, int destStride)
+ private void WidenCopyRowImpl2x2(ref Vector2 destBase, int row, int destStride)
{
- ref Vector4 selfLeft = ref Unsafe.Add(ref this.V0L, 2 * row);
- ref Vector4 selfRight = ref Unsafe.Add(ref selfLeft, 1);
- ref float destLocalOrigo = ref Unsafe.Add(ref destBase, row * 2 * destStride);
-
- Unsafe.Add(ref destLocalOrigo, 0) = selfLeft.X;
- Unsafe.Add(ref destLocalOrigo, 1) = selfLeft.X;
- Unsafe.Add(ref destLocalOrigo, 2) = selfLeft.Y;
- Unsafe.Add(ref destLocalOrigo, 3) = selfLeft.Y;
- Unsafe.Add(ref destLocalOrigo, 4) = selfLeft.Z;
- Unsafe.Add(ref destLocalOrigo, 5) = selfLeft.Z;
- Unsafe.Add(ref destLocalOrigo, 6) = selfLeft.W;
- Unsafe.Add(ref destLocalOrigo, 7) = selfLeft.W;
-
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 0) = selfRight.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 1) = selfRight.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 2) = selfRight.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 3) = selfRight.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 4) = selfRight.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 5) = selfRight.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 6) = selfRight.W;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 7) = selfRight.W;
-
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 0) = selfLeft.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 1) = selfLeft.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 2) = selfLeft.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 3) = selfLeft.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 4) = selfLeft.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 5) = selfLeft.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 6) = selfLeft.W;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 7) = selfLeft.W;
-
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 0) = selfRight.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 1) = selfRight.X;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 2) = selfRight.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 3) = selfRight.Y;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 4) = selfRight.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 5) = selfRight.Z;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 6) = selfRight.W;
- Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 7) = selfRight.W;
+ ref Vector4 sLeft = ref Unsafe.Add(ref this.V0L, 2 * row);
+ ref Vector4 sRight = ref Unsafe.Add(ref sLeft, 1);
+
+ int offset = 2 * row * destStride;
+ ref Vector4 dTopLeft = ref Unsafe.As(ref Unsafe.Add(ref destBase, offset));
+ ref Vector4 dBottomLeft = ref Unsafe.As(ref Unsafe.Add(ref destBase, offset + destStride));
+
+ var xyLeft = new Vector4(sLeft.X);
+ xyLeft.Z = sLeft.Y;
+ xyLeft.W = sLeft.Y;
+
+ var zwLeft = new Vector4(sLeft.Z);
+ zwLeft.Z = sLeft.W;
+ zwLeft.W = sLeft.W;
+
+ var xyRight = new Vector4(sRight.X);
+ xyRight.Z = sRight.Y;
+ xyRight.W = sRight.Y;
+
+ var zwRight = new Vector4(sRight.Z);
+ zwRight.Z = sRight.W;
+ zwRight.W = sRight.W;
+
+ dTopLeft = xyLeft;
+ Unsafe.Add(ref dTopLeft, 1) = zwLeft;
+ Unsafe.Add(ref dTopLeft, 2) = xyRight;
+ Unsafe.Add(ref dTopLeft, 3) = zwRight;
+
+ dBottomLeft = xyLeft;
+ Unsafe.Add(ref dBottomLeft, 1) = zwLeft;
+ Unsafe.Add(ref dBottomLeft, 2) = xyRight;
+ Unsafe.Add(ref dBottomLeft, 3) = zwRight;
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static void WidenCopyImpl(ref Vector4 s, ref float destBase)
+ [MethodImpl(InliningOptions.ColdPath)]
+ private void CopyArbitraryScale(BufferArea area, int horizontalScale, int verticalScale)
{
- Unsafe.Add(ref destBase, 0) = s.X;
- Unsafe.Add(ref destBase, 1) = s.X;
- Unsafe.Add(ref destBase, 2) = s.Y;
- Unsafe.Add(ref destBase, 3) = s.Y;
- Unsafe.Add(ref destBase, 4) = s.Z;
- Unsafe.Add(ref destBase, 5) = s.Z;
- Unsafe.Add(ref destBase, 6) = s.W;
- Unsafe.Add(ref destBase, 7) = s.W;
+ ref float destBase = ref area.GetReferenceToOrigin();
+
+ for (int y = 0; y < 8; y++)
+ {
+ int yy = y * verticalScale;
+ int y8 = y * 8;
+
+ for (int x = 0; x < 8; x++)
+ {
+ int xx = x * horizontalScale;
+
+ float value = this[y8 + x];
+
+ for (int i = 0; i < verticalScale; i++)
+ {
+ int baseIdx = ((yy + i) * area.Stride) + xx;
+
+ for (int j = 0; j < horizontalScale; j++)
+ {
+ // area[xx + j, yy + i] = value;
+ Unsafe.Add(ref destBase, baseIdx + j) = value;
+ }
+ }
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs
index e83896f58..09ed6408d 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Transpose the block into the destination block.
///
/// The destination block
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void TransposeInto(ref Block8x8F d)
{
d.V0L.X = V0L.X;
@@ -119,7 +119,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// AVX2-only variant for executing and in one step.
///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void NormalizeColorsAndRoundInplaceAvx2()
{
Vector off = new Vector(128f);
@@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Fill the block from 'source' doing short -> float conversion.
///
- public void LoadFrom(ref Block8x8 source)
+ public void LoadFromInt16Scalar(ref Block8x8 source)
{
ref short selfRef = ref Unsafe.As(ref source);
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt
index 82d82ef0c..f93ee6522 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt
+++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.Generated.tt
@@ -30,7 +30,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Transpose the block into the destination block.
///
/// The destination block
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void TransposeInto(ref Block8x8F d)
{
<#
@@ -82,7 +82,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// AVX2-only variant for executing and in one step.
///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void NormalizeColorsAndRoundInplaceAvx2()
{
Vector off = new Vector(128f);
@@ -104,7 +104,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Fill the block from 'source' doing short -> float conversion.
///
- public void LoadFrom(ref Block8x8 source)
+ public void LoadFromInt16Scalar(ref Block8x8 source)
{
ref short selfRef = ref Unsafe.As(ref source);
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
index 59fc234c4..137a8029d 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
@@ -57,7 +57,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// The float value at the specified index
public float this[int idx]
{
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
get
{
GuardBlockIndex(idx);
@@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
return Unsafe.Add(ref selfRef, idx);
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
set
{
GuardBlockIndex(idx);
@@ -149,7 +149,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Fill the block with defaults (zeroes)
///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void Clear()
{
// The cheapest way to do this in C#:
@@ -160,7 +160,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Load raw 32bit floating point data from source
///
/// Source
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void LoadFrom(Span source)
{
ref byte s = ref Unsafe.As(ref MemoryMarshal.GetReference(source));
@@ -174,7 +174,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Block pointer
/// Source
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public static unsafe void LoadFrom(Block8x8F* blockPtr, Span source)
{
blockPtr->LoadFrom(source);
@@ -200,7 +200,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Copy raw 32bit floating point data to dest
///
/// Destination
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void CopyTo(Span dest)
{
ref byte d = ref Unsafe.As(ref MemoryMarshal.GetReference(dest));
@@ -214,7 +214,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Pointer to block
/// Destination
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public static unsafe void CopyTo(Block8x8F* blockPtr, Span dest)
{
float* fPtr = (float*)blockPtr;
@@ -230,7 +230,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Block pointer
/// Destination
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public static unsafe void CopyTo(Block8x8F* blockPtr, Span dest)
{
blockPtr->CopyTo(dest);
@@ -240,7 +240,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Copy raw 32bit floating point data to dest
///
/// Destination
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public unsafe void CopyTo(float[] dest)
{
fixed (void* ptr = &this.V0L)
@@ -276,7 +276,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Multiply all elements of the block.
///
/// The value to multiply by
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void MultiplyInplace(float value)
{
this.V0L *= value;
@@ -300,7 +300,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
///
/// Multiply all elements of the block by the corresponding elements of 'other'
///
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void MultiplyInplace(ref Block8x8F other)
{
this.V0L *= other.V0L;
@@ -325,7 +325,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Adds a vector to all elements of the block.
///
/// The added vector
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
public void AddToAllInplace(Vector4 diff)
{
this.V0L += diff;
@@ -420,7 +420,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
}
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private static void DivideRoundAll(ref Block8x8F a, ref Block8x8F b)
{
a.V0L = DivideRound(a.V0L, b.V0L);
@@ -493,6 +493,51 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
}
}
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public void LoadFrom(ref Block8x8 source)
+ {
+#if SUPPORTS_EXTENDED_INTRINSICS
+ if (SimdUtils.IsAvx2CompatibleArchitecture)
+ {
+ this.LoadFromInt16ExtendedAvx2(ref source);
+ return;
+ }
+#endif
+ this.LoadFromInt16Scalar(ref source);
+ }
+
+ ///
+ /// Loads values from using extended AVX2 intrinsics.
+ ///
+ /// The source
+ public void LoadFromInt16ExtendedAvx2(ref Block8x8 source)
+ {
+ DebugGuard.IsTrue(
+ SimdUtils.IsAvx2CompatibleArchitecture,
+ "LoadFromUInt16ExtendedAvx2 only works on AVX2 compatible architecture!");
+
+ ref Vector sRef = ref Unsafe.As>(ref source);
+ ref Vector dRef = ref Unsafe.As>(ref this);
+
+ // Vector.Count == 16 on AVX2
+ // We can process 2 block rows in a single step
+ SimdUtils.ExtendedIntrinsics.ConvertToSingle(sRef, out Vector top, out Vector bottom);
+ dRef = top;
+ Unsafe.Add(ref dRef, 1) = bottom;
+
+ SimdUtils.ExtendedIntrinsics.ConvertToSingle(Unsafe.Add(ref sRef, 1), out top, out bottom);
+ Unsafe.Add(ref dRef, 2) = top;
+ Unsafe.Add(ref dRef, 3) = bottom;
+
+ SimdUtils.ExtendedIntrinsics.ConvertToSingle(Unsafe.Add(ref sRef, 2), out top, out bottom);
+ Unsafe.Add(ref dRef, 4) = top;
+ Unsafe.Add(ref dRef, 5) = bottom;
+
+ SimdUtils.ExtendedIntrinsics.ConvertToSingle(Unsafe.Add(ref sRef, 3), out top, out bottom);
+ Unsafe.Add(ref dRef, 6) = top;
+ Unsafe.Add(ref dRef, 7) = bottom;
+ }
+
///
public override string ToString()
{
@@ -511,7 +556,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
return sb.ToString();
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private static Vector NormalizeAndRound(Vector row, Vector off, Vector max)
{
row += off;
@@ -520,7 +565,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
return row.FastRound();
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private static Vector4 DivideRound(Vector4 dividend, Vector4 divisor)
{
// sign(dividend) = max(min(dividend, 1), -1)
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs
index 5d7a31a12..7424145c3 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScale.cs
@@ -3,6 +3,8 @@
using System;
using System.Numerics;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters
{
@@ -17,24 +19,17 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters
public override void ConvertToRgba(in ComponentValues values, Span result)
{
- // TODO: We can optimize a lot here with Vector and SRCS.Unsafe()!
- ReadOnlySpan yVals = values.Component0;
-
- var v = new Vector4(0, 0, 0, 1);
-
var scale = new Vector4(1 / 255F, 1 / 255F, 1 / 255F, 1F);
+ ref float sBase = ref MemoryMarshal.GetReference(values.Component0);
+ ref Vector4 dBase = ref MemoryMarshal.GetReference(result);
+
for (int i = 0; i < result.Length; i++)
{
- float y = yVals[i];
-
- v.X = y;
- v.Y = y;
- v.Z = y;
-
+ var v = new Vector4(Unsafe.Add(ref sBase, i));
+ v.W = 1f;
v *= scale;
-
- result[i] = v;
+ Unsafe.Add(ref dBase, i) = v;
}
}
}
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs
index c03398033..2492a985a 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/IJpegComponent.cs
@@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Memory;
-using SixLabors.Memory;
using SixLabors.Primitives;
namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
@@ -43,16 +42,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
///
/// Gets the storing the "raw" frequency-domain decoded + unzigged blocks.
- /// We need to apply IDCT and dequantiazition to transform them into color-space blocks.
+ /// We need to apply IDCT and dequantization to transform them into color-space blocks.
///
Buffer2D SpectralBlocks { get; }
-
- ///
- /// Gets a reference to the at the given row and column index from
- ///
- /// The column
- /// The row
- /// The
- ref Block8x8 GetBlockReference(int column, int row);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs
index 65a584c4f..ef03582d6 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponent.cs
@@ -128,21 +128,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
this.SubSamplingDivisors = c0.SamplingFactors.DivideBy(this.SamplingFactors);
}
- this.SpectralBlocks = this.memoryAllocator.Allocate2D(blocksPerColumnForMcu, blocksPerLineForMcu + 1, AllocationOptions.Clean);
- }
+ int totalNumberOfBlocks = blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
+ int width = this.WidthInBlocks + 1;
+ int height = totalNumberOfBlocks / width;
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ref Block8x8 GetBlockReference(int column, int row)
- {
- int offset = ((this.WidthInBlocks + 1) * row) + column;
- return ref Unsafe.Add(ref MemoryMarshal.GetReference(this.SpectralBlocks.GetSpan()), offset);
- }
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public ref short GetBlockDataReference(int column, int row)
- {
- ref Block8x8 blockRef = ref this.GetBlockReference(column, row);
- return ref Unsafe.As(ref blockRef);
+ this.SpectralBlocks = this.memoryAllocator.Allocate2D(width, height, AllocationOptions.Clean);
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs
index 890f40259..57a53549f 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegComponentPostProcessor.cs
@@ -2,6 +2,8 @@
// Licensed under the Apache License, Version 2.0.
using System;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using SixLabors.ImageSharp.Memory;
using SixLabors.Memory;
@@ -88,12 +90,14 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
int yBuffer = y * this.blockAreaSize.Height;
- for (int x = 0; x < this.SizeInBlocks.Width; x++)
- {
- int xBlock = x;
- int xBuffer = x * this.blockAreaSize.Width;
+ Span blockRow = this.Component.SpectralBlocks.GetRowSpan(yBlock);
+
+ ref Block8x8 blockRowBase = ref MemoryMarshal.GetReference(blockRow);
- ref Block8x8 block = ref this.Component.GetBlockReference(xBlock, yBlock);
+ for (int xBlock = 0; xBlock < this.SizeInBlocks.Width; xBlock++)
+ {
+ ref Block8x8 block = ref Unsafe.Add(ref blockRowBase, xBlock);
+ int xBuffer = xBlock * this.blockAreaSize.Width;
BufferArea destArea = this.ColorBuffer.GetArea(
xBuffer,
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ScanDecoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ScanDecoder.cs
index 351e45348..5d232b571 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ScanDecoder.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ScanDecoder.cs
@@ -1,8 +1,10 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
+using System;
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.IO;
+using SixLabors.ImageSharp.Memory;
namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
{
@@ -142,7 +144,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
}
}
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private static uint LRot(uint x, int y) => (x << y) | (x >> (32 - y));
private void ParseBaselineData()
@@ -179,10 +181,14 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
int h = component.HorizontalSamplingFactor;
int v = component.VerticalSamplingFactor;
+ int mcuRow = mcu / mcusPerLine;
+
// Scan out an mcu's worth of this component; that's just determined
// by the basic H and V specified for the component
for (int y = 0; y < v; y++)
{
+ int blockRow = (mcuRow * v) + y;
+ Span blockSpan = component.SpectralBlocks.GetRowSpan(blockRow);
for (int x = 0; x < h; x++)
{
if (this.eof)
@@ -190,15 +196,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
return;
}
- int mcuRow = mcu / mcusPerLine;
int mcuCol = mcu % mcusPerLine;
- int blockRow = (mcuRow * v) + y;
int blockCol = (mcuCol * h) + x;
this.DecodeBlockBaseline(
component,
- blockRow,
- blockCol,
+ ref blockSpan[blockCol],
ref dcHuffmanTable,
ref acHuffmanTable,
ref fastACRef);
@@ -236,6 +239,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
int mcu = 0;
for (int j = 0; j < h; j++)
{
+ // TODO: Isn't blockRow == j actually?
+ int blockRow = mcu / w;
+ Span blockSpan = component.SpectralBlocks.GetRowSpan(blockRow);
+
for (int i = 0; i < w; i++)
{
if (this.eof)
@@ -243,13 +250,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
return;
}
- int blockRow = mcu / w;
+ // TODO: Isn't blockCol == i actually?
int blockCol = mcu % w;
this.DecodeBlockBaseline(
component,
- blockRow,
- blockCol,
+ ref blockSpan[blockCol],
ref dcHuffmanTable,
ref acHuffmanTable,
ref fastACRef);
@@ -299,6 +305,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
// by the basic H and V specified for the component
for (int y = 0; y < v; y++)
{
+ int mcuRow = mcu / mcusPerLine;
+ int blockRow = (mcuRow * v) + y;
+ Span blockSpan = component.SpectralBlocks.GetRowSpan(blockRow);
+
for (int x = 0; x < h; x++)
{
if (this.eof)
@@ -306,15 +316,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
return;
}
- int mcuRow = mcu / mcusPerLine;
int mcuCol = mcu % mcusPerLine;
- int blockRow = (mcuRow * v) + y;
int blockCol = (mcuCol * h) + x;
this.DecodeBlockProgressiveDC(
component,
- blockRow,
- blockCol,
+ ref blockSpan[blockCol],
ref dcHuffmanTable);
}
}
@@ -351,6 +358,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
int mcu = 0;
for (int j = 0; j < h; j++)
{
+ // TODO: isn't blockRow == j actually?
+ int blockRow = mcu / w;
+ Span blockSpan = component.SpectralBlocks.GetRowSpan(blockRow);
+
for (int i = 0; i < w; i++)
{
if (this.eof)
@@ -358,23 +369,22 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
return;
}
- int blockRow = mcu / w;
+ // TODO: isn't blockCol == i actually?
int blockCol = mcu % w;
+ ref Block8x8 block = ref blockSpan[blockCol];
+
if (this.spectralStart == 0)
{
this.DecodeBlockProgressiveDC(
component,
- blockRow,
- blockCol,
+ ref block,
ref dcHuffmanTable);
}
else
{
this.DecodeBlockProgressiveAC(
- component,
- blockRow,
- blockCol,
+ ref block,
ref acHuffmanTable,
ref fastACRef);
}
@@ -391,8 +401,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
private void DecodeBlockBaseline(
JpegComponent component,
- int row,
- int col,
+ ref Block8x8 block,
ref HuffmanTable dcTable,
ref HuffmanTable acTable,
ref short fastACRef)
@@ -405,7 +414,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
JpegThrowHelper.ThrowBadHuffmanCode();
}
- ref short blockDataRef = ref component.GetBlockDataReference(col, row);
+ ref short blockDataRef = ref Unsafe.As(ref block);
int diff = t != 0 ? this.ExtendReceive(t) : 0;
int dc = component.DcPredictor + diff;
@@ -470,8 +479,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
private void DecodeBlockProgressiveDC(
JpegComponent component,
- int row,
- int col,
+ ref Block8x8 block,
ref HuffmanTable dcTable)
{
if (this.spectralEnd != 0)
@@ -481,7 +489,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
this.CheckBits();
- ref short blockDataRef = ref component.GetBlockDataReference(col, row);
+ ref short blockDataRef = ref Unsafe.As(ref block);
if (this.successiveHigh == 0)
{
@@ -505,9 +513,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
}
private void DecodeBlockProgressiveAC(
- JpegComponent component,
- int row,
- int col,
+ ref Block8x8 block,
ref HuffmanTable acTable,
ref short fastACRef)
{
@@ -516,7 +522,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
JpegThrowHelper.ThrowImageFormatException("Can't merge DC and AC.");
}
- ref short blockDataRef = ref component.GetBlockDataReference(col, row);
+ ref short blockDataRef = ref Unsafe.As(ref block);
if (this.successiveHigh == 0)
{
diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
index 36246c682..ef73aab38 100644
--- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
+++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
@@ -913,7 +913,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// The table index
/// The codelengths
/// The values
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private void BuildHuffmanTable(HuffmanTables tables, int index, ReadOnlySpan codeLengths, ReadOnlySpan values)
=> tables[index] = new HuffmanTable(this.configuration.MemoryAllocator, codeLengths, values);
@@ -921,7 +921,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// Reads a from the stream advancing it by two bytes
///
/// The
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ [MethodImpl(InliningOptions.ShortMethod)]
private ushort ReadUint16()
{
this.InputStream.Read(this.markerBuffer, 0, 2);
@@ -936,12 +936,18 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
private Image PostProcessIntoImage()
where TPixel : struct, IPixel
{
+ var image = Image.CreateUninitialized(
+ this.configuration,
+ this.ImageWidth,
+ this.ImageHeight,
+ this.MetaData);
+
using (var postProcessor = new JpegImagePostProcessor(this.configuration, this))
{
- var image = new Image(this.configuration, this.ImageWidth, this.ImageHeight, this.MetaData);
postProcessor.PostProcess(image.Frames.RootFrame);
- return image;
}
+
+ return image;
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Image.Decode.cs b/src/ImageSharp/Image.Decode.cs
index 8b9f3fdb5..ffdab25e2 100644
--- a/src/ImageSharp/Image.Decode.cs
+++ b/src/ImageSharp/Image.Decode.cs
@@ -5,6 +5,7 @@ using System.IO;
using System.Linq;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.MetaData;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.Memory;
@@ -15,6 +16,29 @@ namespace SixLabors.ImageSharp
///
public static partial class Image
{
+ ///
+ /// Creates an instance backed by an uninitialized memory buffer.
+ /// This is an optimized creation method intended to be used by decoders.
+ /// The image might be filled with memory garbage.
+ ///
+ /// The pixel type
+ /// The
+ /// The width of the image
+ /// The height of the image
+ /// The
+ /// The result
+ internal static Image CreateUninitialized(
+ Configuration configuration,
+ int width,
+ int height,
+ ImageMetaData metadata)
+ where TPixel : struct, IPixel
+ {
+ Buffer2D uninitializedMemoryBuffer =
+ configuration.MemoryAllocator.Allocate2D(width, height);
+ return new Image(configuration, uninitializedMemoryBuffer.MemorySource, width, height, metadata);
+ }
+
///
/// By reading the header on the provided stream this calculates the images format.
///
diff --git a/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs b/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs
index 3326c3217..100649c0f 100644
--- a/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs
+++ b/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs
@@ -124,7 +124,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
private byte ConvertToByte(ReadOnlySpan buffer) => buffer[0];
- private unsafe string ConvertToString(ReadOnlySpan buffer)
+ private string ConvertToString(ReadOnlySpan buffer)
{
int nullCharIndex = buffer.IndexOf((byte)0);
@@ -382,13 +382,13 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
this.invalidTags.Add(tag);
}
+ [MethodImpl(InliningOptions.ShortMethod)]
private TEnum ToEnum(int value, TEnum defaultValue)
where TEnum : struct
{
- var enumValue = (TEnum)(object)value;
- if (Enum.GetValues(typeof(TEnum)).Cast().Any(v => v.Equals(enumValue)))
+ if (EnumHelper.IsDefined(value))
{
- return enumValue;
+ return Unsafe.As(ref value);
}
return defaultValue;
@@ -557,5 +557,18 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
? BinaryPrimitives.ReadInt16BigEndian(buffer)
: BinaryPrimitives.ReadInt16LittleEndian(buffer);
}
+
+ private class EnumHelper
+ where TEnum : struct
+ {
+ private static readonly int[] Values = Enum.GetValues(typeof(TEnum)).Cast()
+ .Select(e => Convert.ToInt32(e)).OrderBy(e => e).ToArray();
+
+ [MethodImpl(InliningOptions.ShortMethod)]
+ public static bool IsDefined(int value)
+ {
+ return Array.BinarySearch(Values, value) >= 0;
+ }
+ }
}
-}
\ No newline at end of file
+}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs
new file mode 100644
index 000000000..bf9b1af33
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo1x1.cs
@@ -0,0 +1,133 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using System.Numerics;
+using System.Runtime.CompilerServices;
+
+using BenchmarkDotNet.Attributes;
+
+using SixLabors.ImageSharp.Formats.Jpeg.Components;
+using SixLabors.ImageSharp.Memory;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations
+{
+ public class Block8x8F_CopyTo1x1
+ {
+ private Block8x8F block;
+
+ private Buffer2D buffer;
+
+ private BufferArea destArea;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ if (!SimdUtils.IsAvx2CompatibleArchitecture)
+ {
+ throw new InvalidOperationException("Benchmark Block8x8F_CopyTo1x1 is invalid on platforms without AVX2 support.");
+ }
+
+ this.buffer = Configuration.Default.MemoryAllocator.Allocate2D(1000, 500);
+ this.destArea = this.buffer.GetArea(200, 100, 64, 64);
+ }
+
+ [Benchmark(Baseline = true)]
+ public void Original()
+ {
+ ref byte selfBase = ref Unsafe.As(ref this.block);
+ ref byte destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin());
+ int destStride = this.destArea.Stride * sizeof(float);
+
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 0);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 1);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 2);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 3);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 4);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 5);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 6);
+ CopyRowImpl(ref selfBase, ref destBase, destStride, 7);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void CopyRowImpl(ref byte selfBase, ref byte destBase, int destStride, int row)
+ {
+ ref byte s = ref Unsafe.Add(ref selfBase, row * 8 * sizeof(float));
+ ref byte d = ref Unsafe.Add(ref destBase, row * destStride);
+ Unsafe.CopyBlock(ref d, ref s, 8 * sizeof(float));
+ }
+
+ [Benchmark]
+ public void UseVector8()
+ {
+ ref Block8x8F s = ref this.block;
+ ref float origin = ref this.destArea.GetReferenceToOrigin();
+ int stride = this.destArea.Stride;
+
+ ref Vector d0 = ref Unsafe.As>(ref origin);
+ ref Vector d1 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride));
+ ref Vector d2 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 2));
+ ref Vector d3 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 3));
+ ref Vector d4 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 4));
+ ref Vector d5 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 5));
+ ref Vector d6 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 6));
+ ref Vector d7 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 7));
+
+ Vector row0 = Unsafe.As>(ref s.V0L);
+ Vector row1 = Unsafe.As>(ref s.V1L);
+ Vector row2 = Unsafe.As>(ref s.V2L);
+ Vector row3 = Unsafe.As>(ref s.V3L);
+ Vector row4 = Unsafe.As>(ref s.V4L);
+ Vector row5 = Unsafe.As>(ref s.V5L);
+ Vector row6 = Unsafe.As>(ref s.V6L);
+ Vector row7 = Unsafe.As>(ref s.V7L);
+
+ d0 = row0;
+ d1 = row1;
+ d2 = row2;
+ d3 = row3;
+ d4 = row4;
+ d5 = row5;
+ d6 = row6;
+ d7 = row7;
+ }
+
+ [Benchmark]
+ public void UseVector8_V2()
+ {
+ ref Block8x8F s = ref this.block;
+ ref float origin = ref this.destArea.GetReferenceToOrigin();
+ int stride = this.destArea.Stride;
+
+ ref Vector d0 = ref Unsafe.As>(ref origin);
+ ref Vector d1 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride));
+ ref Vector d2 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 2));
+ ref Vector d3 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 3));
+ ref Vector d4 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 4));
+ ref Vector d5 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 5));
+ ref Vector d6 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 6));
+ ref Vector d7 = ref Unsafe.As>(ref Unsafe.Add(ref origin, stride * 7));
+
+ d0 = Unsafe.As>(ref s.V0L);
+ d1 = Unsafe.As>(ref s.V1L);
+ d2 = Unsafe.As>(ref s.V2L);
+ d3 = Unsafe.As>(ref s.V3L);
+ d4 = Unsafe.As>(ref s.V4L);
+ d5 = Unsafe.As>(ref s.V5L);
+ d6 = Unsafe.As>(ref s.V6L);
+ d7 = Unsafe.As>(ref s.V7L);
+ }
+
+ // RESULTS:
+ //
+ // Method | Mean | Error | StdDev | Scaled |
+ // -------------- |---------:|----------:|----------:|-------:|
+ // Original | 22.53 ns | 0.1660 ns | 0.1553 ns | 1.00 |
+ // UseVector8 | 21.59 ns | 0.3079 ns | 0.2571 ns | 0.96 |
+ // UseVector8_V2 | 22.57 ns | 0.1699 ns | 0.1506 ns | 1.00 |
+ //
+ // Conclusion:
+ // Doesn't worth to bother with this
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs
new file mode 100644
index 000000000..65176af5b
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_CopyTo2x2.cs
@@ -0,0 +1,404 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.Numerics;
+using System.Runtime.CompilerServices;
+
+using BenchmarkDotNet.Attributes;
+
+using SixLabors.ImageSharp.Formats.Jpeg.Components;
+using SixLabors.ImageSharp.Memory;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations
+{
+ public class Block8x8F_CopyTo2x2
+ {
+ private Block8x8F block;
+
+ private Buffer2D buffer;
+
+ private BufferArea destArea;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ this.buffer = Configuration.Default.MemoryAllocator.Allocate2D(1000, 500);
+ this.destArea = this.buffer.GetArea(200, 100, 128, 128);
+ }
+
+ [Benchmark(Baseline = true)]
+ public void Original()
+ {
+ ref float destBase = ref this.destArea.GetReferenceToOrigin();
+ int destStride = this.destArea.Stride;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2(ref Block8x8F src, ref float destBase, int row, int destStride)
+ {
+ ref Vector4 selfLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 selfRight = ref Unsafe.Add(ref selfLeft, 1);
+ ref float destLocalOrigo = ref Unsafe.Add(ref destBase, row * 2 * destStride);
+
+ Unsafe.Add(ref destLocalOrigo, 0) = selfLeft.X;
+ Unsafe.Add(ref destLocalOrigo, 1) = selfLeft.X;
+ Unsafe.Add(ref destLocalOrigo, 2) = selfLeft.Y;
+ Unsafe.Add(ref destLocalOrigo, 3) = selfLeft.Y;
+ Unsafe.Add(ref destLocalOrigo, 4) = selfLeft.Z;
+ Unsafe.Add(ref destLocalOrigo, 5) = selfLeft.Z;
+ Unsafe.Add(ref destLocalOrigo, 6) = selfLeft.W;
+ Unsafe.Add(ref destLocalOrigo, 7) = selfLeft.W;
+
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 0) = selfRight.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 1) = selfRight.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 2) = selfRight.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 3) = selfRight.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 4) = selfRight.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 5) = selfRight.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 6) = selfRight.W;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, 8), 7) = selfRight.W;
+
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 0) = selfLeft.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 1) = selfLeft.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 2) = selfLeft.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 3) = selfLeft.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 4) = selfLeft.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 5) = selfLeft.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 6) = selfLeft.W;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride), 7) = selfLeft.W;
+
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 0) = selfRight.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 1) = selfRight.X;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 2) = selfRight.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 3) = selfRight.Y;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 4) = selfRight.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 5) = selfRight.Z;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 6) = selfRight.W;
+ Unsafe.Add(ref Unsafe.Add(ref destLocalOrigo, destStride + 8), 7) = selfRight.W;
+ }
+
+ [Benchmark]
+ public void Original_V2()
+ {
+ ref float destBase = ref this.destArea.GetReferenceToOrigin();
+ int destStride = this.destArea.Stride;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2_V2(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2_V2(ref Block8x8F src, ref float destBase, int row, int destStride)
+ {
+ ref Vector4 selfLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 selfRight = ref Unsafe.Add(ref selfLeft, 1);
+ ref float dest0 = ref Unsafe.Add(ref destBase, row * 2 * destStride);
+
+ Unsafe.Add(ref dest0, 0) = selfLeft.X;
+ Unsafe.Add(ref dest0, 1) = selfLeft.X;
+ Unsafe.Add(ref dest0, 2) = selfLeft.Y;
+ Unsafe.Add(ref dest0, 3) = selfLeft.Y;
+ Unsafe.Add(ref dest0, 4) = selfLeft.Z;
+ Unsafe.Add(ref dest0, 5) = selfLeft.Z;
+ Unsafe.Add(ref dest0, 6) = selfLeft.W;
+ Unsafe.Add(ref dest0, 7) = selfLeft.W;
+
+ ref float dest1 = ref Unsafe.Add(ref dest0, 8);
+
+ Unsafe.Add(ref dest1, 0) = selfRight.X;
+ Unsafe.Add(ref dest1, 1) = selfRight.X;
+ Unsafe.Add(ref dest1, 2) = selfRight.Y;
+ Unsafe.Add(ref dest1, 3) = selfRight.Y;
+ Unsafe.Add(ref dest1, 4) = selfRight.Z;
+ Unsafe.Add(ref dest1, 5) = selfRight.Z;
+ Unsafe.Add(ref dest1, 6) = selfRight.W;
+ Unsafe.Add(ref dest1, 7) = selfRight.W;
+
+ ref float dest2 = ref Unsafe.Add(ref dest0, destStride);
+
+ Unsafe.Add(ref dest2, 0) = selfLeft.X;
+ Unsafe.Add(ref dest2, 1) = selfLeft.X;
+ Unsafe.Add(ref dest2, 2) = selfLeft.Y;
+ Unsafe.Add(ref dest2, 3) = selfLeft.Y;
+ Unsafe.Add(ref dest2, 4) = selfLeft.Z;
+ Unsafe.Add(ref dest2, 5) = selfLeft.Z;
+ Unsafe.Add(ref dest2, 6) = selfLeft.W;
+ Unsafe.Add(ref dest2, 7) = selfLeft.W;
+
+ ref float dest3 = ref Unsafe.Add(ref dest2, 8);
+
+ Unsafe.Add(ref dest3, 0) = selfRight.X;
+ Unsafe.Add(ref dest3, 1) = selfRight.X;
+ Unsafe.Add(ref dest3, 2) = selfRight.Y;
+ Unsafe.Add(ref dest3, 3) = selfRight.Y;
+ Unsafe.Add(ref dest3, 4) = selfRight.Z;
+ Unsafe.Add(ref dest3, 5) = selfRight.Z;
+ Unsafe.Add(ref dest3, 6) = selfRight.W;
+ Unsafe.Add(ref dest3, 7) = selfRight.W;
+ }
+
+ [Benchmark]
+ public void UseVector2()
+ {
+ ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin());
+ int destStride = this.destArea.Stride / 2;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2_Vector2(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2_Vector2(ref Block8x8F src, ref Vector2 destBase, int row, int destStride)
+ {
+ ref Vector4 sLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 sRight = ref Unsafe.Add(ref sLeft, 1);
+
+ ref Vector2 dTopLeft = ref Unsafe.Add(ref destBase, 2 * row * destStride);
+ ref Vector2 dTopRight = ref Unsafe.Add(ref dTopLeft, 4);
+ ref Vector2 dBottomLeft = ref Unsafe.Add(ref dTopLeft, destStride);
+ ref Vector2 dBottomRight = ref Unsafe.Add(ref dBottomLeft, 4);
+
+ var xLeft = new Vector2(sLeft.X);
+ var yLeft = new Vector2(sLeft.Y);
+ var zLeft = new Vector2(sLeft.Z);
+ var wLeft = new Vector2(sLeft.W);
+
+ var xRight = new Vector2(sRight.X);
+ var yRight = new Vector2(sRight.Y);
+ var zRight = new Vector2(sRight.Z);
+ var wRight = new Vector2(sRight.W);
+
+ dTopLeft = xLeft;
+ Unsafe.Add(ref dTopLeft, 1) = yLeft;
+ Unsafe.Add(ref dTopLeft, 2) = zLeft;
+ Unsafe.Add(ref dTopLeft, 3) = wLeft;
+
+ dTopRight = xRight;
+ Unsafe.Add(ref dTopRight, 1) = yRight;
+ Unsafe.Add(ref dTopRight, 2) = zRight;
+ Unsafe.Add(ref dTopRight, 3) = wRight;
+
+ dBottomLeft = xLeft;
+ Unsafe.Add(ref dBottomLeft, 1) = yLeft;
+ Unsafe.Add(ref dBottomLeft, 2) = zLeft;
+ Unsafe.Add(ref dBottomLeft, 3) = wLeft;
+
+ dBottomRight = xRight;
+ Unsafe.Add(ref dBottomRight, 1) = yRight;
+ Unsafe.Add(ref dBottomRight, 2) = zRight;
+ Unsafe.Add(ref dBottomRight, 3) = wRight;
+ }
+
+ [Benchmark]
+ public void UseVector4()
+ {
+ ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin());
+ int destStride = this.destArea.Stride / 2;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2_Vector4(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2_Vector4(ref Block8x8F src, ref Vector2 destBase, int row, int destStride)
+ {
+ ref Vector4 sLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 sRight = ref Unsafe.Add(ref sLeft, 1);
+
+ ref Vector2 dTopLeft = ref Unsafe.Add(ref destBase, 2 * row * destStride);
+ ref Vector2 dTopRight = ref Unsafe.Add(ref dTopLeft, 4);
+ ref Vector2 dBottomLeft = ref Unsafe.Add(ref dTopLeft, destStride);
+ ref Vector2 dBottomRight = ref Unsafe.Add(ref dBottomLeft, 4);
+
+ var xLeft = new Vector4(sLeft.X);
+ var yLeft = new Vector4(sLeft.Y);
+ var zLeft = new Vector4(sLeft.Z);
+ var wLeft = new Vector4(sLeft.W);
+
+ var xRight = new Vector4(sRight.X);
+ var yRight = new Vector4(sRight.Y);
+ var zRight = new Vector4(sRight.Z);
+ var wRight = new Vector4(sRight.W);
+
+ Unsafe.As(ref dTopLeft) = xLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 1)) = yLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 2)) = zLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 3)) = wLeft;
+
+ Unsafe.As(ref dTopRight) = xRight;
+ Unsafe.As(ref Unsafe.Add(ref dTopRight, 1)) = yRight;
+ Unsafe.As(ref Unsafe.Add(ref dTopRight, 2)) = zRight;
+ Unsafe.As(ref Unsafe.Add(ref dTopRight, 3)) = wRight;
+
+ Unsafe.As(ref dBottomLeft) = xLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 1)) = yLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 2)) = zLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 3)) = wLeft;
+
+ Unsafe.As(ref dBottomRight) = xRight;
+ Unsafe.As(ref Unsafe.Add(ref dBottomRight, 1)) = yRight;
+ Unsafe.As(ref Unsafe.Add(ref dBottomRight, 2)) = zRight;
+ Unsafe.As(ref Unsafe.Add(ref dBottomRight, 3)) = wRight;
+ }
+
+ [Benchmark]
+ public void UseVector4_SafeRightCorner()
+ {
+ ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin());
+ int destStride = this.destArea.Stride / 2;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2_Vector4_SafeRightCorner(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2_Vector4_SafeRightCorner(ref Block8x8F src, ref Vector2 destBase, int row, int destStride)
+ {
+ ref Vector4 sLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 sRight = ref Unsafe.Add(ref sLeft, 1);
+
+ ref Vector2 dTopLeft = ref Unsafe.Add(ref destBase, 2 * row * destStride);
+ ref Vector2 dBottomLeft = ref Unsafe.Add(ref dTopLeft, destStride);
+
+ var xLeft = new Vector4(sLeft.X);
+ var yLeft = new Vector4(sLeft.Y);
+ var zLeft = new Vector4(sLeft.Z);
+ var wLeft = new Vector4(sLeft.W);
+
+ var xRight = new Vector4(sRight.X);
+ var yRight = new Vector4(sRight.Y);
+ var zRight = new Vector4(sRight.Z);
+ var wRight = new Vector2(sRight.W);
+
+ Unsafe.As(ref dTopLeft) = xLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 1)) = yLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 2)) = zLeft;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 3)) = wLeft;
+
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 4)) = xRight;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 5)) = yRight;
+ Unsafe.As(ref Unsafe.Add(ref dTopLeft, 6)) = zRight;
+ Unsafe.Add(ref dTopLeft, 7) = wRight;
+
+ Unsafe.As(ref dBottomLeft) = xLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 1)) = yLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 2)) = zLeft;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 3)) = wLeft;
+
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 4)) = xRight;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 5)) = yRight;
+ Unsafe.As(ref Unsafe.Add(ref dBottomLeft, 6)) = zRight;
+ Unsafe.Add(ref dBottomLeft, 7) = wRight;
+ }
+
+
+ [Benchmark]
+ public void UseVector4_V2()
+ {
+ ref Vector2 destBase = ref Unsafe.As(ref this.destArea.GetReferenceToOrigin());
+ int destStride = this.destArea.Stride / 2;
+
+ ref Block8x8F src = ref this.block;
+
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 0, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 1, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 2, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 3, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 4, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 5, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 6, destStride);
+ WidenCopyImpl2x2_Vector4_V2(ref src, ref destBase, 7, destStride);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void WidenCopyImpl2x2_Vector4_V2(ref Block8x8F src, ref Vector2 destBase, int row, int destStride)
+ {
+ ref Vector4 sLeft = ref Unsafe.Add(ref src.V0L, 2 * row);
+ ref Vector4 sRight = ref Unsafe.Add(ref sLeft, 1);
+
+ int offset = 2 * row * destStride;
+ ref Vector4 dTopLeft = ref Unsafe.As(ref Unsafe.Add(ref destBase, offset));
+ ref Vector4 dBottomLeft = ref Unsafe.As(ref Unsafe.Add(ref destBase, offset + destStride));
+
+ var xyLeft = new Vector4(sLeft.X);
+ xyLeft.Z = sLeft.Y;
+ xyLeft.W = sLeft.Y;
+
+ var zwLeft = new Vector4(sLeft.Z);
+ zwLeft.Z = sLeft.W;
+ zwLeft.W = sLeft.W;
+
+ var xyRight = new Vector4(sRight.X);
+ xyRight.Z = sRight.Y;
+ xyRight.W = sRight.Y;
+
+ var zwRight = new Vector4(sRight.Z);
+ zwRight.Z = sRight.W;
+ zwRight.W = sRight.W;
+
+ dTopLeft = xyLeft;
+ Unsafe.Add(ref dTopLeft, 1) = zwLeft;
+ Unsafe.Add(ref dTopLeft, 2) = xyRight;
+ Unsafe.Add(ref dTopLeft, 3) = zwRight;
+
+ dBottomLeft = xyLeft;
+ Unsafe.Add(ref dBottomLeft, 1) = zwLeft;
+ Unsafe.Add(ref dBottomLeft, 2) = xyRight;
+ Unsafe.Add(ref dBottomLeft, 3) = zwRight;
+ }
+
+ // RESULTS:
+ // Method | Mean | Error | StdDev | Scaled | ScaledSD |
+ // --------------------------- |---------:|----------:|----------:|-------:|---------:|
+ // Original | 92.69 ns | 2.4722 ns | 2.7479 ns | 1.00 | 0.00 |
+ // Original_V2 | 91.72 ns | 1.2089 ns | 1.0095 ns | 0.99 | 0.03 |
+ // UseVector2 | 86.70 ns | 0.5873 ns | 0.5206 ns | 0.94 | 0.03 |
+ // UseVector4 | 55.42 ns | 0.2482 ns | 0.2322 ns | 0.60 | 0.02 |
+ // UseVector4_SafeRightCorner | 58.97 ns | 0.4152 ns | 0.3884 ns | 0.64 | 0.02 |
+ // UseVector4_V2 | 41.88 ns | 0.3531 ns | 0.3303 ns | 0.45 | 0.01 |
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/General/Block8x8F_DivideRound.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs
similarity index 96%
rename from tests/ImageSharp.Benchmarks/General/Block8x8F_DivideRound.cs
rename to tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs
index fcc5f9a59..5502475d4 100644
--- a/tests/ImageSharp.Benchmarks/General/Block8x8F_DivideRound.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_DivideRound.cs
@@ -10,7 +10,7 @@ using SixLabors.ImageSharp.Formats.Jpeg.Components;
// ReSharper disable InconsistentNaming
-namespace SixLabors.ImageSharp.Benchmarks.General
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations
{
///
/// The goal of this benchmark is to measure the following Jpeg-related scenario:
@@ -24,8 +24,8 @@ namespace SixLabors.ImageSharp.Benchmarks.General
private static readonly Vector4 MinusOne = new Vector4(-1);
private static readonly Vector4 Half = new Vector4(0.5f);
- private Block8x8F inputDividend = default(Block8x8F);
- private Block8x8F inputDivisior = default(Block8x8F);
+ private Block8x8F inputDividend;
+ private Block8x8F inputDivisior;
[GlobalSetup]
public void Setup()
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs
new file mode 100644
index 000000000..29ee402a0
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_LoadFromInt16.cs
@@ -0,0 +1,53 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+// ReSharper disable InconsistentNaming
+
+using System;
+using System.Numerics;
+
+using BenchmarkDotNet.Attributes;
+
+using SixLabors.ImageSharp.Formats.Jpeg.Components;
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations
+{
+ public class Block8x8F_LoadFromInt16
+ {
+ private Block8x8 source;
+
+ private Block8x8F dest = default;
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ if (Vector.Count != 8)
+ {
+ throw new NotSupportedException("Vector.Count != 8");
+ }
+
+ for (short i = 0; i < Block8x8F.Size; i++)
+ {
+ this.source[i] = i;
+ }
+ }
+
+ [Benchmark(Baseline = true)]
+ public void Scalar()
+ {
+ this.dest.LoadFromInt16Scalar(ref this.source);
+ }
+
+ [Benchmark]
+ public void ExtendedAvx2()
+ {
+ this.dest.LoadFromInt16ExtendedAvx2(ref this.source);
+ }
+
+ // RESULT:
+ // Method | Mean | Error | StdDev | Scaled |
+ // ------------- |---------:|----------:|----------:|-------:|
+ // Scalar | 34.88 ns | 0.3296 ns | 0.3083 ns | 1.00 |
+ // ExtendedAvx2 | 21.58 ns | 0.2125 ns | 0.1884 ns | 0.62 |
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/General/Block8x8F_Round.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs
similarity index 90%
rename from tests/ImageSharp.Benchmarks/General/Block8x8F_Round.cs
rename to tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs
index 200af64c2..c7b5802c4 100644
--- a/tests/ImageSharp.Benchmarks/General/Block8x8F_Round.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/BlockOperations/Block8x8F_Round.cs
@@ -1,4 +1,7 @@
-// ReSharper disable InconsistentNaming
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+// ReSharper disable InconsistentNaming
using System;
using System.Numerics;
@@ -8,7 +11,7 @@ using BenchmarkDotNet.Attributes;
using SixLabors.ImageSharp.Formats.Jpeg.Components;
-namespace SixLabors.ImageSharp.Benchmarks.General
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg.BlockOperations
{
public class Block8x8F_Round
{
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs
deleted file mode 100644
index 9b968e4db..000000000
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Drawing;
-using System.IO;
-using BenchmarkDotNet.Attributes;
-
-using SixLabors.ImageSharp.Formats.Jpeg;
-using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.ImageSharp.Tests;
-using CoreSize = SixLabors.Primitives.Size;
-using SDImage = System.Drawing.Image;
-
-namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
-{
- [Config(typeof(Config.ShortClr))]
- public class DecodeJpeg : BenchmarkBase
- {
- private byte[] jpegBytes;
-
- private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
-
- [Params(TestImages.Jpeg.Baseline.Jpeg420Exif, TestImages.Jpeg.Baseline.Calliphora)]
- public string TestImage { get; set; }
-
- [GlobalSetup]
- public void ReadImages()
- {
- if (this.jpegBytes == null)
- {
- this.jpegBytes = File.ReadAllBytes(this.TestImageFullPath);
- }
- }
-
- [Benchmark(Baseline = true, Description = "Decode Jpeg - System.Drawing")]
- public Size JpegSystemDrawing()
- {
- using (var memoryStream = new MemoryStream(this.jpegBytes))
- {
- using (var image = SDImage.FromStream(memoryStream))
- {
- return image.Size;
- }
- }
- }
-
- [Benchmark(Description = "Decode Jpeg - ImageSharp")]
- public CoreSize JpegImageSharp()
- {
- using (var memoryStream = new MemoryStream(this.jpegBytes))
- {
- using (var image = Image.Load(memoryStream, new JpegDecoder()))
- {
- return new CoreSize(image.Width, image.Height);
- }
- }
- }
- }
-}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegMultiple.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegMultiple.cs
deleted file mode 100644
index be0fe76b8..000000000
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegMultiple.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Collections.Generic;
-using BenchmarkDotNet.Attributes;
-using SixLabors.ImageSharp.Formats.Jpeg;
-using SixLabors.ImageSharp.PixelFormats;
-using SDImage = System.Drawing.Image;
-
-namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
-{
- [Config(typeof(Config.ShortClr))]
- public class DecodeJpegMultiple : MultiImageBenchmarkBase
- {
- protected override IEnumerable InputImageSubfoldersOrFiles => new[]
- {
- "Jpg/baseline",
- "Jpg/progressive",
- };
-
- protected override IEnumerable SearchPatterns => new[] { "*.jpg" };
-
- [Benchmark(Description = "DecodeJpegMultiple - ImageSharp")]
- public void DecodeJpegImageSharp()
- {
- this.ForEachStream(ms => Image.Load(ms, new JpegDecoder()));
- }
-
- [Benchmark(Baseline = true, Description = "DecodeJpegMultiple - System.Drawing")]
- public void DecodeJpegSystemDrawing()
- {
- this.ForEachStream(SDImage.FromStream);
- }
- }
-}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs
new file mode 100644
index 000000000..f8a7556ca
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs
@@ -0,0 +1,48 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.Collections.Generic;
+
+using BenchmarkDotNet.Attributes;
+
+using SixLabors.ImageSharp.Formats.Jpeg;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Tests;
+
+using SDImage = System.Drawing.Image;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
+{
+ ///
+ /// An expensive Jpeg benchmark, running on a wide range of input images, showing aggregate results.
+ ///
+ [Config(typeof(MultiImageBenchmarkBase.Config))]
+ public class DecodeJpeg_Aggregate : MultiImageBenchmarkBase
+ {
+ protected override IEnumerable InputImageSubfoldersOrFiles =>
+ new[]
+ {
+ TestImages.Jpeg.BenchmarkSuite.Jpeg400_SmallMonochrome,
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr,
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.MissingFF00ProgressiveBedroom159_MidSize420YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
+ };
+
+ [Params(InputImageCategory.AllImages)]
+ public override InputImageCategory InputCategory { get; set; }
+
+ [Benchmark]
+ public void ImageSharp()
+ {
+ this.ForEachStream(ms => Image.Load(ms, new JpegDecoder()));
+ }
+
+ [Benchmark(Baseline = true)]
+ public void SystemDrawing()
+ {
+ this.ForEachStream(SDImage.FromStream);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs
new file mode 100644
index 000000000..fe112042e
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs
@@ -0,0 +1,119 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.Drawing;
+using System.IO;
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Jobs;
+
+using SixLabors.ImageSharp.Formats.Jpeg;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Tests;
+using CoreSize = SixLabors.Primitives.Size;
+using SDImage = System.Drawing.Image;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
+{
+ ///
+ /// Image-specific Jpeg benchmarks
+ ///
+ [Config(typeof(Config.ShortClr))]
+ public class DecodeJpeg_ImageSpecific
+ {
+ public class Config : ManualConfig
+ {
+ public Config()
+ {
+ // Uncomment if you want to use any of the diagnoser
+ this.Add(new BenchmarkDotNet.Diagnosers.MemoryDiagnoser());
+ }
+
+ public class ShortClr : Benchmarks.Config
+ {
+ public ShortClr()
+ {
+ this.Add(
+ //Job.Clr.WithLaunchCount(1).WithWarmupCount(2).WithTargetCount(3),
+ Job.Core.WithLaunchCount(1).WithWarmupCount(2).WithTargetCount(3)
+ );
+ }
+ }
+ }
+
+ private byte[] jpegBytes;
+
+ private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
+
+ [Params(
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.BadRstProgressive518_Large444YCbCr,
+
+ // The scaled result for the large image "ExifGetString750Transform_Huge420YCbCr"
+ // is almost the same as the result for Jpeg420Exif,
+ // which proves that the execution time for the most common YCbCr 420 path scales linearly.
+ //
+ // TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
+
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr
+ )]
+ public string TestImage { get; set; }
+
+
+ [GlobalSetup]
+ public void ReadImages()
+ {
+ if (this.jpegBytes == null)
+ {
+ this.jpegBytes = File.ReadAllBytes(this.TestImageFullPath);
+ }
+ }
+
+ [Benchmark(Baseline = true, Description = "Decode Jpeg - System.Drawing")]
+ public Size JpegSystemDrawing()
+ {
+ using (var memoryStream = new MemoryStream(this.jpegBytes))
+ {
+ using (var image = SDImage.FromStream(memoryStream))
+ {
+ return image.Size;
+ }
+ }
+ }
+
+ [Benchmark(Description = "Decode Jpeg - ImageSharp")]
+ public CoreSize JpegImageSharp()
+ {
+ using (var memoryStream = new MemoryStream(this.jpegBytes))
+ {
+ using (var image = Image.Load(memoryStream, new JpegDecoder(){ IgnoreMetadata = true}))
+ {
+ return new CoreSize(image.Width, image.Height);
+ }
+ }
+ }
+
+ // RESULTS (2018 November 4):
+ //
+ // BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134
+ // Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
+ // Frequency=2742191 Hz, Resolution=364.6719 ns, Timer=TSC
+ // .NET Core SDK=2.1.403
+ // [Host] : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ //
+ // Method | TestImage | Mean | Error | StdDev | Scaled | ScaledSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
+ // ------------------------------- |-------------------------------------------- |-----------:|-----------:|----------:|-------:|---------:|----------:|---------:|---------:|------------:|
+ // 'Decode Jpeg - System.Drawing' | Jpg/baseline/Lake.jpg | 6.117 ms | 0.3923 ms | 0.0222 ms | 1.00 | 0.00 | 62.5000 | - | - | 205.83 KB |
+ // 'Decode Jpeg - ImageSharp' | Jpg/baseline/Lake.jpg | 18.126 ms | 0.6023 ms | 0.0340 ms | 2.96 | 0.01 | - | - | - | 19.97 KB |
+ // | | | | | | | | | | |
+ // 'Decode Jpeg - System.Drawing' | Jpg/baseline/jpeg420exif.jpg | 17.063 ms | 2.6096 ms | 0.1474 ms | 1.00 | 0.00 | 218.7500 | - | - | 757.04 KB |
+ // 'Decode Jpeg - ImageSharp' | Jpg/baseline/jpeg420exif.jpg | 41.366 ms | 1.0115 ms | 0.0572 ms | 2.42 | 0.02 | - | - | - | 21.94 KB |
+ // | | | | | | | | | | |
+ // 'Decode Jpeg - System.Drawing' | Jpg/issues/Issue518-Bad-RST-Progressive.jpg | 428.282 ms | 94.9163 ms | 5.3629 ms | 1.00 | 0.00 | 2375.0000 | - | - | 7403.76 KB |
+ // 'Decode Jpeg - ImageSharp' | Jpg/issues/Issue518-Bad-RST-Progressive.jpg | 386.698 ms | 33.0065 ms | 1.8649 ms | 0.90 | 0.01 | 125.0000 | 125.0000 | 125.0000 | 35186.97 KB |
+ // | | | | | | | | | | |
+ // 'Decode Jpeg - System.Drawing' | Jpg/issues/issue750-exif-tranform.jpg | 95.192 ms | 3.1762 ms | 0.1795 ms | 1.00 | 0.00 | 1750.0000 | - | - | 5492.63 KB |
+ // 'Decode Jpeg - ImageSharp' | Jpg/issues/issue750-exif-tranform.jpg | 230.158 ms | 48.8128 ms | 2.7580 ms | 2.42 | 0.02 | 312.5000 | 312.5000 | 312.5000 | 58834.66 KB |
+ }
+}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave.cs
deleted file mode 100644
index 77ed828ef..000000000
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using BenchmarkDotNet.Attributes;
-using System;
-using System.IO;
-using SixLabors.ImageSharp.Tests;
-using System.Drawing;
-using System.Drawing.Drawing2D;
-using System.Drawing.Imaging;
-using SixLabors.ImageSharp.Processing;
-using SDImage = System.Drawing.Image;
-using SixLabors.ImageSharp.Formats.Jpeg;
-
-namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
-{
- [Config(typeof(Config.ShortClr))]
- public class LoadResizeSave : BenchmarkBase
- {
- private readonly Configuration configuration = new Configuration(new JpegConfigurationModule());
-
- private byte[] sourceBytes;
-
- private byte[] destBytes;
-
- private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
-
- [Params(
- TestImages.Jpeg.Baseline.Jpeg420Exif
- //, TestImages.Jpeg.Baseline.Calliphora
- )]
- public string TestImage { get; set; }
-
- [Params(false, true)]
- public bool EnableParallelExecution { get; set; }
-
- [GlobalSetup]
- public void Setup()
- {
- this.configuration.MaxDegreeOfParallelism =
- this.EnableParallelExecution ? Environment.ProcessorCount : 1;
-
- if (this.sourceBytes == null)
- {
- this.sourceBytes = File.ReadAllBytes(this.TestImageFullPath);
- }
-
- if (this.destBytes == null)
- {
- this.destBytes = new byte[this.sourceBytes.Length];
- }
- }
-
- [Benchmark(Baseline = true)]
- public void SystemDrawing()
- {
- using (var sourceStream = new MemoryStream(this.sourceBytes))
- using (var destStream = new MemoryStream(this.destBytes))
- using (var source = SDImage.FromStream(sourceStream))
- using (var destination = new Bitmap(source.Width / 4, source.Height / 4))
- {
- using (var graphics = Graphics.FromImage(destination))
- {
- graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
- graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
- graphics.CompositingQuality = CompositingQuality.HighQuality;
- graphics.DrawImage(source, 0, 0, 400, 400);
- }
-
- destination.Save(destStream, ImageFormat.Jpeg);
- }
- }
-
- [Benchmark]
- public void ImageSharp()
- {
- var source = Image.Load(this.configuration, this.sourceBytes, new JpegDecoder { IgnoreMetadata = true });
- using (source)
- using (var destStream = new MemoryStream(this.destBytes))
- {
- source.Mutate(c => c.Resize(source.Width / 4, source.Height / 4));
- source.SaveAsJpeg(destStream);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs
new file mode 100644
index 000000000..e39cfa6ba
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_Aggregate.cs
@@ -0,0 +1,96 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using System.IO;
+
+using BenchmarkDotNet.Attributes;
+
+using SixLabors.ImageSharp.Formats.Jpeg;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing;
+using SixLabors.ImageSharp.Tests;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
+{
+ [Config(typeof(MultiImageBenchmarkBase.Config))]
+ public class LoadResizeSave_Aggregate : MultiImageBenchmarkBase
+ {
+ protected override IEnumerable InputImageSubfoldersOrFiles =>
+ new[]
+ {
+ TestImages.Jpeg.BenchmarkSuite.Jpeg400_SmallMonochrome,
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr,
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.MissingFF00ProgressiveBedroom159_MidSize420YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
+ };
+
+ [Params(InputImageCategory.AllImages)]
+ public override InputImageCategory InputCategory { get; set; }
+
+ private readonly Configuration configuration = new Configuration(new JpegConfigurationModule());
+
+ private byte[] destBytes;
+
+ public override void Setup()
+ {
+ base.Setup();
+
+ this.configuration.MaxDegreeOfParallelism = 1;
+ const int MaxOutputSizeInBytes = 2 * 1024 * 1024; // ~2 MB
+ this.destBytes = new byte[MaxOutputSizeInBytes];
+ }
+
+ [Benchmark(Baseline = true)]
+ public void SystemDrawing()
+ {
+ this.ForEachStream(
+ sourceStream =>
+ {
+ using (var destStream = new MemoryStream(this.destBytes))
+ using (var source = System.Drawing.Image.FromStream(sourceStream))
+ using (var destination = new Bitmap(source.Width / 4, source.Height / 4))
+ {
+ using (var g = Graphics.FromImage(destination))
+ {
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;
+ g.CompositingQuality = CompositingQuality.HighQuality;
+ g.DrawImage(source, 0, 0, 400, 400);
+ }
+
+ destination.Save(destStream, ImageFormat.Jpeg);
+ }
+
+ return null;
+ });
+ }
+
+ [Benchmark]
+ public void ImageSharp()
+ {
+ this.ForEachStream(
+ sourceStream =>
+ {
+ using (var source = Image.Load(
+ this.configuration,
+ sourceStream,
+ new JpegDecoder { IgnoreMetadata = true }))
+ {
+ using (var destStream = new MemoryStream(this.destBytes))
+ {
+ source.Mutate(c => c.Resize(source.Width / 4, source.Height / 4));
+ source.SaveAsJpeg(destStream);
+ }
+ }
+
+ return null;
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs
new file mode 100644
index 000000000..1834f77ea
--- /dev/null
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/LoadResizeSave_ImageSpecific.cs
@@ -0,0 +1,107 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using BenchmarkDotNet.Attributes;
+using System;
+using System.IO;
+using SixLabors.ImageSharp.Tests;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using SixLabors.ImageSharp.Processing;
+using SDImage = System.Drawing.Image;
+using SixLabors.ImageSharp.Formats.Jpeg;
+// ReSharper disable InconsistentNaming
+
+namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
+{
+ [Config(typeof(Config.ShortClr))]
+ public class LoadResizeSave_ImageSpecific
+ {
+ private readonly Configuration configuration = new Configuration(new JpegConfigurationModule());
+
+ private byte[] sourceBytes;
+
+ private byte[] destBytes;
+
+ private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
+
+ [Params(
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.BadRstProgressive518_Large444YCbCr,
+
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr
+ )]
+ public string TestImage { get; set; }
+
+ [Params(false, true)]
+ public bool ParallelExec { get; set; }
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ this.configuration.MaxDegreeOfParallelism =
+ this.ParallelExec ? Environment.ProcessorCount : 1;
+
+ this.sourceBytes = File.ReadAllBytes(this.TestImageFullPath);
+
+ this.destBytes = new byte[this.sourceBytes.Length * 2];
+ }
+
+ [Benchmark(Baseline = true)]
+ public void SystemDrawing()
+ {
+ using (var sourceStream = new MemoryStream(this.sourceBytes))
+ using (var destStream = new MemoryStream(this.destBytes))
+ using (var source = SDImage.FromStream(sourceStream))
+ using (var destination = new Bitmap(source.Width / 4, source.Height / 4))
+ {
+ using (var g = Graphics.FromImage(destination))
+ {
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;
+ g.CompositingQuality = CompositingQuality.HighQuality;
+ g.DrawImage(source, 0, 0, 400, 400);
+ }
+
+ destination.Save(destStream, ImageFormat.Jpeg);
+ }
+ }
+
+ [Benchmark]
+ public void ImageSharp()
+ {
+ var source = Image.Load(this.configuration, this.sourceBytes, new JpegDecoder { IgnoreMetadata = true });
+ using (source)
+ using (var destStream = new MemoryStream(this.destBytes))
+ {
+ source.Mutate(c => c.Resize(source.Width / 4, source.Height / 4));
+ source.SaveAsJpeg(destStream);
+ }
+ }
+
+ // RESULTS (2018 October 31):
+ //
+ // BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134
+ // Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
+ // Frequency=2742191 Hz, Resolution=364.6719 ns, Timer=TSC
+ // .NET Core SDK=2.1.403
+ // [Host] : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ // Job-ZPEZGV : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3190.0
+ // Job-SGOCJT : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ //
+ // Method | Runtime | TestImage | ParallelExec | Mean | Error | StdDev | Scaled | ScaledSD | Gen 0 | Allocated |
+ // -------------- |-------- |----------------------------- |------------- |----------:|----------:|----------:|-------:|---------:|---------:|----------:|
+ // SystemDrawing | Clr | Jpg/baseline/jpeg420exif.jpg | False | 64.88 ms | 3.735 ms | 0.2110 ms | 1.00 | 0.00 | 250.0000 | 791.07 KB |
+ // ImageSharp | Clr | Jpg/baseline/jpeg420exif.jpg | False | 129.53 ms | 23.423 ms | 1.3234 ms | 2.00 | 0.02 | - | 50.09 KB |
+ // | | | | | | | | | | |
+ // SystemDrawing | Core | Jpg/baseline/jpeg420exif.jpg | False | 65.87 ms | 10.488 ms | 0.5926 ms | 1.00 | 0.00 | 250.0000 | 789.79 KB |
+ // ImageSharp | Core | Jpg/baseline/jpeg420exif.jpg | False | 92.00 ms | 7.241 ms | 0.4091 ms | 1.40 | 0.01 | - | 46.36 KB |
+ // | | | | | | | | | | |
+ // SystemDrawing | Clr | Jpg/baseline/jpeg420exif.jpg | True | 64.23 ms | 5.998 ms | 0.3389 ms | 1.00 | 0.00 | 250.0000 | 791.07 KB |
+ // ImageSharp | Clr | Jpg/baseline/jpeg420exif.jpg | True | 82.63 ms | 29.320 ms | 1.6566 ms | 1.29 | 0.02 | - | 57.59 KB |
+ // | | | | | | | | | | |
+ // SystemDrawing | Core | Jpg/baseline/jpeg420exif.jpg | True | 64.20 ms | 6.560 ms | 0.3707 ms | 1.00 | 0.00 | 250.0000 | 789.79 KB |
+ // ImageSharp | Core | Jpg/baseline/jpeg420exif.jpg | True | 68.08 ms | 18.376 ms | 1.0383 ms | 1.06 | 0.01 | - | 50.49 KB |
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs
index f046f3033..446c03859 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/MultiImageBenchmarkBase.cs
@@ -3,6 +3,9 @@
// Licensed under the Apache License, Version 2.0.
//
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Jobs;
+
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Benchmarks.Codecs
@@ -20,8 +23,27 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
using CoreImage = ImageSharp.Image;
- public abstract class MultiImageBenchmarkBase : BenchmarkBase
+ public abstract class MultiImageBenchmarkBase
{
+ public class Config : ManualConfig
+ {
+ public Config()
+ {
+ // Uncomment if you want to use any of the diagnoser
+ this.Add(new BenchmarkDotNet.Diagnosers.MemoryDiagnoser());
+ }
+
+ public class ShortClr : Benchmarks.Config
+ {
+ public ShortClr()
+ {
+ this.Add(
+ Job.Core.WithLaunchCount(1).WithWarmupCount(1).WithTargetCount(2)
+ );
+ }
+ }
+ }
+
protected Dictionary FileNamesToBytes = new Dictionary();
protected Dictionary> FileNamesToImageSharpImages = new Dictionary>();
@@ -49,7 +71,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
///
/// Gets the file names containing these strings are substrings are not processed by the benchmark.
///
- protected IEnumerable ExcludeSubstringsInFileNames => new[] { "badeof", "BadEof", "CriticalEOF" };
+ protected virtual IEnumerable ExcludeSubstringsInFileNames => new[] { "badeof", "BadEof", "CriticalEOF" };
///
/// Enumerates folders containing files OR files to be processed by the benchmark.
@@ -87,7 +109,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
protected abstract IEnumerable InputImageSubfoldersOrFiles { get; }
[GlobalSetup]
- public void ReadImages()
+ public virtual void Setup()
{
if (!Vector.IsHardwareAccelerated)
{
@@ -107,11 +129,13 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
continue;
}
+ string[] excludeStrings = this.ExcludeSubstringsInFileNames.Select(s => s.ToLower()).ToArray();
+
string[] allFiles =
this.SearchPatterns.SelectMany(
f =>
Directory.EnumerateFiles(path, f, SearchOption.AllDirectories)
- .Where(fn => !this.ExcludeSubstringsInFileNames.Any(w => fn.ToLower().Contains(w)))).ToArray();
+ .Where(fn => !excludeStrings.Any(excludeStr => fn.ToLower().Contains(excludeStr)))).ToArray();
foreach (string fn in allFiles)
{
diff --git a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs
index f53061d4e..148b25328 100644
--- a/tests/ImageSharp.Benchmarks/Samplers/Resize.cs
+++ b/tests/ImageSharp.Benchmarks/Samplers/Resize.cs
@@ -22,15 +22,17 @@ namespace SixLabors.ImageSharp.Benchmarks
private Bitmap sourceBitmap;
- public const int SourceSize = 3032;
+ [Params(3032)]
+ public int SourceSize { get; set; }
- public const int DestSize = 400;
+ [Params(400)]
+ public int DestSize { get; set; }
[GlobalSetup]
public void Setup()
{
- this.sourceImage = new Image(this.Configuration, SourceSize, SourceSize);
- this.sourceBitmap = new Bitmap(SourceSize, SourceSize);
+ this.sourceImage = new Image(this.Configuration, this.SourceSize, this.SourceSize);
+ this.sourceBitmap = new Bitmap(this.SourceSize, this.SourceSize);
}
[GlobalCleanup]
@@ -43,14 +45,17 @@ namespace SixLabors.ImageSharp.Benchmarks
[Benchmark(Baseline = true)]
public int SystemDrawing()
{
- using (var destination = new Bitmap(DestSize, DestSize))
+ using (var destination = new Bitmap(this.DestSize, this.DestSize))
{
- using (var graphics = Graphics.FromImage(destination))
+ using (var g = Graphics.FromImage(destination))
{
- graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
- graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
- graphics.CompositingQuality = CompositingQuality.HighQuality;
- graphics.DrawImage(this.sourceBitmap, 0, 0, DestSize, DestSize);
+ g.CompositingMode = CompositingMode.SourceCopy;
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;
+ g.CompositingQuality = CompositingQuality.HighQuality;
+ g.SmoothingMode = SmoothingMode.HighQuality;
+
+ g.DrawImage(this.sourceBitmap, 0, 0, this.DestSize, this.DestSize);
}
return destination.Width;
@@ -83,15 +88,60 @@ namespace SixLabors.ImageSharp.Benchmarks
{
protected override void ExecuteResizeOperation(IImageProcessingContext ctx)
{
- ctx.Resize(DestSize, DestSize, KnownResamplers.Bicubic);
+ ctx.Resize(this.DestSize, this.DestSize, KnownResamplers.Bicubic);
}
+
+ // RESULTS (2018 October):
+ //
+ // BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134
+ // Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
+ // Frequency=2742191 Hz, Resolution=364.6719 ns, Timer=TSC
+ // .NET Core SDK=2.1.403
+ // [Host] : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ // Job-IGUFBA : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3190.0
+ // Job-DZFERG : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ //
+ // Method | Runtime | SourceSize | DestSize | Mean | Error | StdDev | Scaled | ScaledSD | Allocated |
+ // ----------------------------------------- |-------- |----------- |--------- |----------:|----------:|----------:|-------:|---------:|----------:|
+ // SystemDrawing | Clr | 3032 | 400 | 101.13 ms | 18.659 ms | 1.0542 ms | 1.00 | 0.00 | 0 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 1' | Clr | 3032 | 400 | 122.05 ms | 19.622 ms | 1.1087 ms | 1.21 | 0.01 | 21856 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 4' | Clr | 3032 | 400 | 41.34 ms | 54.841 ms | 3.0986 ms | 0.41 | 0.03 | 28000 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 8' | Clr | 3032 | 400 | 31.68 ms | 12.782 ms | 0.7222 ms | 0.31 | 0.01 | 28256 B |
+ // | | | | | | | | | |
+ // SystemDrawing | Core | 3032 | 400 | 100.37 ms | 18.479 ms | 1.0441 ms | 1.00 | 0.00 | 0 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 1' | Core | 3032 | 400 | 73.03 ms | 10.540 ms | 0.5955 ms | 0.73 | 0.01 | 21368 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 4' | Core | 3032 | 400 | 22.59 ms | 4.863 ms | 0.2748 ms | 0.23 | 0.00 | 25220 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 8' | Core | 3032 | 400 | 21.10 ms | 23.362 ms | 1.3200 ms | 0.21 | 0.01 | 25539 B |
+
}
public class Resize_BicubicCompand : ResizeBenchmarkBase
{
protected override void ExecuteResizeOperation(IImageProcessingContext ctx)
{
- ctx.Resize(DestSize, DestSize, KnownResamplers.Bicubic, true);
+ ctx.Resize(this.DestSize, this.DestSize, KnownResamplers.Bicubic, true);
}
+
+ // RESULTS (2018 October):
+ //
+ // BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134
+ // Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
+ // Frequency=2742191 Hz, Resolution=364.6719 ns, Timer=TSC
+ // .NET Core SDK=2.1.403
+ // [Host] : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ // Job-IGUFBA : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3190.0
+ // Job-DZFERG : .NET Core 2.1.5 (CoreCLR 4.6.26919.02, CoreFX 4.6.26919.02), 64bit RyuJIT
+ //
+ // Method | Runtime | SourceSize | DestSize | Mean | Error | StdDev | Scaled | ScaledSD | Allocated |
+ // ----------------------------------------- |-------- |----------- |--------- |----------:|----------:|----------:|-------:|---------:|----------:|
+ // SystemDrawing | Clr | 3032 | 400 | 100.63 ms | 13.864 ms | 0.7833 ms | 1.00 | 0.00 | 0 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 1' | Clr | 3032 | 400 | 156.83 ms | 28.631 ms | 1.6177 ms | 1.56 | 0.02 | 21856 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 4' | Clr | 3032 | 400 | 53.43 ms | 38.493 ms | 2.1749 ms | 0.53 | 0.02 | 28512 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 8' | Clr | 3032 | 400 | 38.47 ms | 11.969 ms | 0.6763 ms | 0.38 | 0.01 | 28000 B |
+ // | | | | | | | | | |
+ // SystemDrawing | Core | 3032 | 400 | 99.87 ms | 23.459 ms | 1.3255 ms | 1.00 | 0.00 | 0 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 1' | Core | 3032 | 400 | 108.19 ms | 38.562 ms | 2.1788 ms | 1.08 | 0.02 | 21368 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 4' | Core | 3032 | 400 | 36.21 ms | 53.802 ms | 3.0399 ms | 0.36 | 0.03 | 25300 B |
+ // 'ImageSharp, MaxDegreeOfParallelism = 8' | Core | 3032 | 400 | 26.52 ms | 2.173 ms | 0.1228 ms | 0.27 | 0.00 | 25589 B |
}
}
diff --git a/tests/ImageSharp.Sandbox46/Program.cs b/tests/ImageSharp.Sandbox46/Program.cs
index 3a3a7d31c..c0bb25a1b 100644
--- a/tests/ImageSharp.Sandbox46/Program.cs
+++ b/tests/ImageSharp.Sandbox46/Program.cs
@@ -4,6 +4,7 @@
//
using SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations;
+using SixLabors.ImageSharp.Tests.ProfilingBenchmarks;
namespace SixLabors.ImageSharp.Sandbox46
{
@@ -62,8 +63,8 @@ namespace SixLabors.ImageSharp.Sandbox46
private static void RunDecodeJpegProfilingTests()
{
Console.WriteLine("RunDecodeJpegProfilingTests...");
- var benchmarks = new JpegProfilingBenchmarks(new ConsoleOutput());
- foreach (object[] data in JpegProfilingBenchmarks.DecodeJpegData)
+ var benchmarks = new JpegBenchmarks(new ConsoleOutput());
+ foreach (object[] data in JpegBenchmarks.DecodeJpegData)
{
string fileName = (string)data[0];
benchmarks.DecodeJpeg(fileName);
diff --git a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs
index c63cb3438..4f8a2cdaf 100644
--- a/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs
+++ b/tests/ImageSharp.Tests/Common/SimdUtilsTests.cs
@@ -257,6 +257,27 @@ namespace SixLabors.ImageSharp.Tests.Common
);
}
+ [Theory]
+ [InlineData(1234)]
+ public void ExtendedIntrinsics_ConvertToSingle(short scale)
+ {
+ int n = Vector.Count;
+ short[] sData = new Random(scale).GenerateRandomInt16Array(2 * n, (short)-scale, scale);
+ float[] fData = sData.Select(u => (float)u).ToArray();
+
+ var source = new Vector(sData);
+
+ var expected1 = new Vector(fData, 0);
+ var expected2 = new Vector(fData, n);
+
+ // Act:
+ SimdUtils.ExtendedIntrinsics.ConvertToSingle(source, out Vector actual1, out Vector actual2);
+
+ // Assert:
+ Assert.Equal(expected1, actual1);
+ Assert.Equal(expected2, actual2);
+ }
+
[Theory]
[MemberData(nameof(ArbitraryArraySizes))]
public void BulkConvertNormalizedFloatToByteClampOverflows(int count)
diff --git a/tests/ImageSharp.Tests/ComplexIntegrationTests.cs b/tests/ImageSharp.Tests/ComplexIntegrationTests.cs
deleted file mode 100644
index a260ec33c..000000000
--- a/tests/ImageSharp.Tests/ComplexIntegrationTests.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using SixLabors.ImageSharp.Formats.Jpeg;
-using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.ImageSharp.Processing;
-using SixLabors.Primitives;
-
-using Xunit;
-
-namespace SixLabors.ImageSharp.Tests
-{
- ///
- /// Might be useful to catch complex bugs
- ///
- public class ComplexIntegrationTests
- {
- [Theory]
- [WithFile(TestImages.Jpeg.Baseline.Snake, PixelTypes.Rgba32, 75, JpegSubsample.Ratio420)]
- [WithFile(TestImages.Jpeg.Baseline.Lake, PixelTypes.Rgba32, 75, JpegSubsample.Ratio420)]
- [WithFile(TestImages.Jpeg.Baseline.Snake, PixelTypes.Rgba32, 75, JpegSubsample.Ratio444)]
- [WithFile(TestImages.Jpeg.Baseline.Lake, PixelTypes.Rgba32, 75, JpegSubsample.Ratio444)]
- public void LoadResizeSave(TestImageProvider provider, int quality, JpegSubsample subsample)
- where TPixel : struct, IPixel
- {
- using (Image image = provider.GetImage(x => x.Resize(new ResizeOptions { Size = new Size(150, 100), Mode = ResizeMode.Max })))
- {
-
- image.MetaData.ExifProfile = null; // Reduce the size of the file
- JpegEncoder options = new JpegEncoder { Subsample = subsample, Quality = quality };
-
- provider.Utility.TestName += $"{subsample}_Q{quality}";
- provider.Utility.SaveTestOutputFile(image, "png");
- provider.Utility.SaveTestOutputFile(image, "jpg", options);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs
index c720fdd4a..4b1abf909 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs
@@ -7,14 +7,16 @@
using SixLabors.ImageSharp.Formats.Jpeg.Components;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Tests.Formats.Jpg.Utils;
+using SixLabors.Memory;
using SixLabors.Primitives;
using Xunit;
using Xunit.Abstractions;
+// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{
- public partial class Block8x8FTests : JpegFixture
+ public partial class Block8x8FTests
{
public class CopyToBufferArea : JpegFixture
{
@@ -37,17 +39,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
}
}
- // TODO: This test occasionally fails from the same reason certain ICC tests are failing. Should be false negative.
- [Fact(Skip = "This test occasionally fails from the same reason certain ICC tests are failing. Should be false negative.")]
- //[Fact]
- public void Unscaled()
+ [Fact]
+ public void Copy1x1Scale()
{
Block8x8F block = CreateRandomFloatBlock(0, 100);
- using (var buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20))
+ using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(20, 20, AllocationOptions.Clean))
{
BufferArea area = buffer.GetArea(5, 10, 8, 8);
- block.CopyTo(area);
+ block.Copy1x1Scale(area);
Assert.Equal(block[0, 0], buffer[5, 10]);
Assert.Equal(block[1, 0], buffer[6, 10]);
@@ -59,22 +59,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
}
}
- // TODO: This test occasionally fails from the same reason certain ICC tests are failing. Should be false negative.
- [Theory(Skip = "This test occasionally fails from the same reason certain ICC tests are failing. Should be false negative.")]
- //[Theory]
+ [Theory]
[InlineData(1, 1)]
[InlineData(1, 2)]
[InlineData(2, 1)]
[InlineData(2, 2)]
[InlineData(4, 2)]
[InlineData(4, 4)]
- public void Scaled(int horizontalFactor, int verticalFactor)
+ public void CopyTo(int horizontalFactor, int verticalFactor)
{
Block8x8F block = CreateRandomFloatBlock(0, 100);
var start = new Point(50, 50);
- using (var buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100))
+ using (Buffer2D buffer = Configuration.Default.MemoryAllocator.Allocate2D(100, 100, AllocationOptions.Clean))
{
BufferArea area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor);
block.CopyTo(area, horizontalFactor, verticalFactor);
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs
index e72f4945b..81c76390c 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs
@@ -408,5 +408,47 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
Assert.Equal(original[i] * 42f, actual[i]);
}
}
+
+ [Fact]
+ public void LoadFromUInt16Scalar()
+ {
+ if (this.SkipOnNonAvx2Runner())
+ {
+ return;
+ }
+
+ short[] data = Create8x8ShortData();
+
+ var source = new Block8x8(data);
+
+ Block8x8F dest = default;
+ dest.LoadFromInt16Scalar(ref source);
+
+ for (int i = 0; i < Block8x8F.Size; i++)
+ {
+ Assert.Equal((float)data[i], dest[i]);
+ }
+ }
+
+ [Fact]
+ public void LoadFromUInt16ExtendedAvx2()
+ {
+ if (this.SkipOnNonAvx2Runner())
+ {
+ return;
+ }
+
+ short[] data = Create8x8ShortData();
+
+ var source = new Block8x8(data);
+
+ Block8x8F dest = default;
+ dest.LoadFromInt16ExtendedAvx2(ref source);
+
+ for (int i = 0; i < Block8x8F.Size; i++)
+ {
+ Assert.Equal((float)data[i], dest[i]);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs
index d14fbc3fc..89fdd5745 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/JpegFixture.cs
@@ -58,7 +58,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils
{
for (int j = 0; j < 8; j++)
{
- result[i * 8 + j] = (short)(i * 10 + j);
+ short val = (short)(i * 10 + j);
+ if ((i + j) % 2 == 0)
+ {
+ val *= -1;
+ }
+ result[i * 8 + j] = val;
}
}
return result;
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs
index 7acce84ce..e4fcd10c5 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/Utils/LibJpegTools.ComponentData.cs
@@ -67,9 +67,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils
for (int y = 0; y < result.HeightInBlocks; y++)
{
+ Span blockRow = c.SpectralBlocks.GetRowSpan(y);
for (int x = 0; x < result.WidthInBlocks; x++)
{
- short[] data = c.GetBlockReference(x, y).ToArray();
+ short[] data = blockRow[x].ToArray();
result.MakeBlock(data, y, x);
}
}
diff --git a/tests/ImageSharp.Tests/Image/ImageTests.cs b/tests/ImageSharp.Tests/Image/ImageTests.cs
index f3c04d5e1..c5c7d19e1 100644
--- a/tests/ImageSharp.Tests/Image/ImageTests.cs
+++ b/tests/ImageSharp.Tests/Image/ImageTests.cs
@@ -2,7 +2,10 @@
// Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.MetaData;
using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Tests.Memory;
+
using Xunit;
// ReSharper disable InconsistentNaming
@@ -46,7 +49,7 @@ namespace SixLabors.ImageSharp.Tests
}
[Fact]
- public void Configuration_Width_Height_BackroundColor()
+ public void Configuration_Width_Height_BackgroundColor()
{
Configuration configuration = Configuration.Default.Clone();
Rgba32 color = Rgba32.Aquamarine;
@@ -61,6 +64,26 @@ namespace SixLabors.ImageSharp.Tests
Assert.Equal(configuration, image.GetConfiguration());
}
}
+
+ [Fact]
+ public void CreateUninitialized()
+ {
+ Configuration configuration = Configuration.Default.Clone();
+
+ byte dirtyValue = 123;
+ configuration.MemoryAllocator = new TestMemoryAllocator(dirtyValue);
+ var metadata = new ImageMetaData();
+
+ using (Image image = Image.CreateUninitialized(configuration, 21, 22, metadata))
+ {
+ Assert.Equal(21, image.Width);
+ Assert.Equal(22, image.Height);
+ Assert.Same(configuration, image.GetConfiguration());
+ Assert.Same(metadata, image.MetaData);
+
+ Assert.Equal(dirtyValue, image[5, 5].PackedValue);
+ }
+ }
}
}
}
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegProfilingBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegBenchmarks.cs
similarity index 51%
rename from tests/ImageSharp.Tests/Formats/Jpg/JpegProfilingBenchmarks.cs
rename to tests/ImageSharp.Tests/ProfilingBenchmarks/JpegBenchmarks.cs
index 32538090d..e06d2da91 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegProfilingBenchmarks.cs
+++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/JpegBenchmarks.cs
@@ -13,27 +13,27 @@ using SixLabors.ImageSharp.PixelFormats;
using Xunit;
using Xunit.Abstractions;
-namespace SixLabors.ImageSharp.Tests.Formats.Jpg
+namespace SixLabors.ImageSharp.Tests.ProfilingBenchmarks
{
- public class JpegProfilingBenchmarks : MeasureFixture
+ public class JpegBenchmarks : MeasureFixture
{
- public JpegProfilingBenchmarks(ITestOutputHelper output)
+ public JpegBenchmarks(ITestOutputHelper output)
: base(output)
{
}
- public static readonly TheoryData DecodeJpegData = new TheoryData()
+ public static readonly TheoryData DecodeJpegData = new TheoryData
{
- TestImages.Jpeg.Baseline.Cmyk,
- TestImages.Jpeg.Baseline.Ycck,
- TestImages.Jpeg.Baseline.Calliphora,
- TestImages.Jpeg.Baseline.Jpeg400,
- TestImages.Jpeg.Baseline.Jpeg420Exif,
- TestImages.Jpeg.Baseline.Jpeg444,
+ TestImages.Jpeg.BenchmarkSuite.Jpeg400_SmallMonochrome,
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr,
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.MissingFF00ProgressiveBedroom159_MidSize420YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.BadRstProgressive518_Large444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
};
- // [Theory] // Benchmark, enable manually
- // [MemberData(nameof(DecodeJpegData))]
+ [Theory(Skip = ProfilingSetup.SkipProfilingTests)]
+ [MemberData(nameof(DecodeJpegData))]
public void DecodeJpeg(string fileName)
{
this.DecodeJpegBenchmarkImpl(fileName, new JpegDecoder());
@@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
return;
}
- const int ExecutionCount = 30;
+ const int ExecutionCount = 20;
if (!Vector.IsHardwareAccelerated)
{
@@ -62,17 +62,18 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
() =>
{
var img = Image.Load(bytes, decoder);
+ img.Dispose();
},
// ReSharper disable once ExplicitCallerInfoArgument
$"Decode {fileName}");
}
// Benchmark, enable manually!
- // [Theory]
- // [InlineData(1, 75, JpegSubsample.Ratio420)]
- // [InlineData(30, 75, JpegSubsample.Ratio420)]
- // [InlineData(30, 75, JpegSubsample.Ratio444)]
- // [InlineData(30, 100, JpegSubsample.Ratio444)]
+ [Theory(Skip = ProfilingSetup.SkipProfilingTests)]
+ [InlineData(1, 75, JpegSubsample.Ratio420)]
+ [InlineData(30, 75, JpegSubsample.Ratio420)]
+ [InlineData(30, 75, JpegSubsample.Ratio444)]
+ [InlineData(30, 100, JpegSubsample.Ratio444)]
public void EncodeJpeg(int executionCount, int quality, JpegSubsample subsample)
{
// do not run this on CI even by accident
@@ -82,31 +83,32 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
}
string[] testFiles = TestImages.Bmp.All
- .Concat(new[] { TestImages.Jpeg.Baseline.Calliphora, TestImages.Jpeg.Baseline.Cmyk })
- .ToArray();
+ .Concat(new[] { TestImages.Jpeg.Baseline.Calliphora, TestImages.Jpeg.Baseline.Cmyk }).ToArray();
- Image[] testImages =
- testFiles.Select(
- tf => TestImageProvider.File(tf, pixelTypeOverride: PixelTypes.Rgba32).GetImage())
- .ToArray();
+ Image[] testImages = testFiles.Select(
+ tf => TestImageProvider.File(tf, pixelTypeOverride: PixelTypes.Rgba32).GetImage()).ToArray();
using (var ms = new MemoryStream())
{
- this.Measure(executionCount,
+ this.Measure(
+ executionCount,
() =>
- {
- foreach (Image img in testImages)
{
- var options = new JpegEncoder { Quality = quality, Subsample = subsample };
- img.Save(ms, options);
- ms.Seek(0, SeekOrigin.Begin);
- }
- },
+ foreach (Image img in testImages)
+ {
+ var options = new JpegEncoder { Quality = quality, Subsample = subsample };
+ img.Save(ms, options);
+ ms.Seek(0, SeekOrigin.Begin);
+ }
+ },
// ReSharper disable once ExplicitCallerInfoArgument
- $@"Encode {testFiles.Length} images"
- );
+ $@"Encode {testFiles.Length} images");
}
- }
+ foreach (Image image in testImages)
+ {
+ image.Dispose();
+ }
+ }
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveBenchmarks.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveBenchmarks.cs
new file mode 100644
index 000000000..306072276
--- /dev/null
+++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/LoadResizeSaveBenchmarks.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.IO;
+
+using SixLabors.ImageSharp.Processing;
+
+using Xunit;
+using Xunit.Abstractions;
+
+namespace SixLabors.ImageSharp.Tests.ProfilingBenchmarks
+{
+ public class LoadResizeSaveBenchmarks : MeasureFixture
+ {
+ public LoadResizeSaveBenchmarks(ITestOutputHelper output)
+ : base(output)
+ {
+ }
+
+ [Theory(Skip = ProfilingSetup.SkipProfilingTests)]
+ [InlineData(TestImages.Jpeg.Baseline.Jpeg420Exif)]
+ public void LoadResizeSave(string imagePath)
+ {
+ var configuration = Configuration.CreateDefaultInstance();
+ configuration.MaxDegreeOfParallelism = 1;
+
+ byte[] imageBytes = TestFile.Create(imagePath).Bytes;
+
+ using (var ms = new MemoryStream())
+ {
+ this.Measure(30,
+ () =>
+ {
+ using (var image = Image.Load(configuration, imageBytes))
+ {
+ image.Mutate(x => x.Resize(image.Size() / 4));
+ image.SaveAsJpeg(ms);
+ }
+ ms.Seek(0, SeekOrigin.Begin);
+ });
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs
new file mode 100644
index 000000000..f9a68d4e7
--- /dev/null
+++ b/tests/ImageSharp.Tests/ProfilingBenchmarks/ProfilingSetup.cs
@@ -0,0 +1,18 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+// Uncomment to enable local profiling benchmarks. DO NOT PUSH TO MAIN!
+// #define PROFILING
+
+namespace SixLabors.ImageSharp.Tests.ProfilingBenchmarks
+{
+ public static class ProfilingSetup
+ {
+ public const string SkipProfilingTests =
+#if PROFILING
+ null;
+#else
+ "Profiling benchmark, enable manually!";
+#endif
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs
index 03f875485..8da458e52 100644
--- a/tests/ImageSharp.Tests/TestImages.cs
+++ b/tests/ImageSharp.Tests/TestImages.cs
@@ -165,6 +165,18 @@ namespace SixLabors.ImageSharp.Tests
}
public static readonly string[] All = Baseline.All.Concat(Progressive.All).ToArray();
+
+ public static class BenchmarkSuite
+ {
+ public const string Jpeg400_SmallMonochrome = Baseline.Jpeg400;
+ public const string Jpeg420Exif_MidSizeYCbCr = Baseline.Jpeg420Exif;
+ public const string Lake_Small444YCbCr = Baseline.Lake;
+
+ // A few large images from the "issues" set are actually very useful for benchmarking:
+ public const string MissingFF00ProgressiveBedroom159_MidSize420YCbCr = Issues.MissingFF00ProgressiveBedroom159;
+ public const string BadRstProgressive518_Large444YCbCr = Issues.BadRstProgressive518;
+ public const string ExifGetString750Transform_Huge420YCbCr = Issues.ExifGetString750Transform;
+ }
}
public static class Bmp
diff --git a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs
index 56cde41fc..e3d8bf380 100644
--- a/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/TestDataGenerator.cs
@@ -88,6 +88,17 @@ namespace SixLabors.ImageSharp.Tests
return values;
}
+ public static short[] GenerateRandomInt16Array(this Random rnd, int length, short minVal, short maxVal)
+ {
+ short[] values = new short[length];
+ for (int i = 0; i < values.Length; i++)
+ {
+ values[i] = (short)rnd.Next(minVal, maxVal);
+ }
+
+ return values;
+ }
+
private static float GetRandomFloat(this Random rnd, float minVal, float maxVal) => ((float)rnd.NextDouble() * (maxVal - minVal)) + minVal;
}
}
\ No newline at end of file
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Calliphora.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Calliphora.jpg.txt
new file mode 100644
index 000000000..dc889ab10
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Calliphora.jpg.txt
@@ -0,0 +1,331 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Calliphora.jpg]
+ Filesize: [254766] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 96 x 96 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x00000014
+ Comment length = 80
+ Comment=File source: http://commons.wikimedia.org/wiki/File:Calliphora_sp_Portrait.jpg
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000066
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 10 16 20 24
+ DQT, Row #1: 5 5 6 8 10 23 24 22
+ DQT, Row #2: 6 5 6 10 16 23 28 22
+ DQT, Row #3: 6 7 9 12 20 35 32 25
+ DQT, Row #4: 7 9 15 22 27 44 41 31
+ DQT, Row #5: 10 14 22 26 32 42 45 37
+ DQT, Row #6: 20 26 31 35 41 48 48 40
+ DQT, Row #7: 29 37 38 39 45 40 41 40
+ Approx quality factor = 79.94 (scaling=40.12 variance=1.43)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000000AB
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 10 19 40 40 40 40
+ DQT, Row #1: 7 8 10 26 40 40 40 40
+ DQT, Row #2: 10 10 22 40 40 40 40 40
+ DQT, Row #3: 19 26 40 40 40 40 40 40
+ DQT, Row #4: 40 40 40 40 40 40 40 40
+ DQT, Row #5: 40 40 40 40 40 40 40 40
+ DQT, Row #6: 40 40 40 40 40 40 40 40
+ DQT, Row #7: 40 40 40 40 40 40 40 40
+ Approx quality factor = 79.87 (scaling=40.26 variance=0.36)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000000F0
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1198
+ Samples per Line = 804
+ Image Size = 804 x 1198
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000103
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 04
+ Codes of length 03 bits (005 total): 00 01 02 03 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000121
+ Huffman table length = 79
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 06 31
+ Codes of length 07 bits (004 total): 13 22 41 51
+ Codes of length 08 bits (004 total): 14 32 61 71
+ Codes of length 09 bits (003 total): 07 81 91
+ Codes of length 10 bits (006 total): 15 23 42 52 A1 B1
+ Codes of length 11 bits (003 total): 33 62 C1
+ Codes of length 12 bits (007 total): 16 24 43 72 82 D1 F0
+ Codes of length 13 bits (002 total): 25 E1
+ Codes of length 14 bits (003 total): 34 53 92
+ Codes of length 15 bits (002 total): A2 F1
+ Codes of length 16 bits (015 total): 08 63 B2 26 44 C2 D2 73 27 35 55 74 84 93 A3
+ Total number of codes: 060
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000172
+ Huffman table length = 26
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000018E
+ Huffman table length = 59
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (002 total): 03 31
+ Codes of length 06 bits (004 total): 12 41 51 F0
+ Codes of length 07 bits (003 total): 04 61 71
+ Codes of length 08 bits (008 total): 13 22 81 91 A1 B1 C1 D1
+ Codes of length 09 bits (002 total): 32 E1
+ Codes of length 10 bits (002 total): 42 F1
+ Codes of length 11 bits (002 total): 05 23
+ Codes of length 12 bits (002 total): 52 62
+ Codes of length 13 bits (002 total): 14 33
+ Codes of length 14 bits (001 total): 72
+ Codes of length 15 bits (004 total): 24 82 92 A2
+ Codes of length 16 bits (003 total): 43 B2 E2
+ Total number of codes: 040
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000001CB
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000001D9
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0003E32C.0
+
+ Compression stats:
+ Compression Ratio: 11.36:1
+ Bits per pixel: 2.11:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2628 ( 17%)
+ # codes of length 03 bits: 10491 ( 69%)
+ # codes of length 04 bits: 1319 ( 9%)
+ # codes of length 05 bits: 611 ( 4%)
+ # codes of length 06 bits: 101 ( 1%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 23843 ( 79%)
+ # codes of length 03 bits: 3770 ( 12%)
+ # codes of length 04 bits: 1945 ( 6%)
+ # codes of length 05 bits: 653 ( 2%)
+ # codes of length 06 bits: 89 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 118632 ( 45%)
+ # codes of length 03 bits: 34447 ( 13%)
+ # codes of length 04 bits: 57131 ( 22%)
+ # codes of length 05 bits: 27139 ( 10%)
+ # codes of length 06 bits: 8648 ( 3%)
+ # codes of length 07 bits: 9574 ( 4%)
+ # codes of length 08 bits: 4195 ( 2%)
+ # codes of length 09 bits: 1503 ( 1%)
+ # codes of length 10 bits: 1711 ( 1%)
+ # codes of length 11 bits: 386 ( 0%)
+ # codes of length 12 bits: 470 ( 0%)
+ # codes of length 13 bits: 66 ( 0%)
+ # codes of length 14 bits: 62 ( 0%)
+ # codes of length 15 bits: 38 ( 0%)
+ # codes of length 16 bits: 58 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 58553 ( 58%)
+ # codes of length 03 bits: 21076 ( 21%)
+ # codes of length 04 bits: 4270 ( 4%)
+ # codes of length 05 bits: 6075 ( 6%)
+ # codes of length 06 bits: 6016 ( 6%)
+ # codes of length 07 bits: 2009 ( 2%)
+ # codes of length 08 bits: 2750 ( 3%)
+ # codes of length 09 bits: 429 ( 0%)
+ # codes of length 10 bits: 213 ( 0%)
+ # codes of length 11 bits: 91 ( 0%)
+ # codes of length 12 bits: 44 ( 0%)
+ # codes of length 13 bits: 22 ( 0%)
+ # codes of length 14 bits: 5 ( 0%)
+ # codes of length 15 bits: 9 ( 0%)
+ # codes of length 16 bits: 3 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[119] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1008, 0, 0] RGB=[254,254,254] @ MCU[ 35, 37]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0003E32C.0
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0003E32C
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01DC499064BA9264D591FDE9071DFD89
+ Signature (Rotated): 0175BAF3251040E0EFB2930B73328E7F
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C40Z,D40Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C700UZ ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ SW :[Apple ImageIO.framework ] [050 (Normal) ]
+ SW :[IJG Library ] [080 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [080 ]
+ SW :[IrfanView ] [080 ]
+ SW :[idImager ] [080 ]
+ SW :[FastStone Image Viewer ] [080 ]
+ SW :[NeatImage ] [080 ]
+ SW :[Paint.NET ] [080 ]
+ SW :[Photomatix ] [080 ]
+ SW :[XnView ] [080 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Floorplan.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Floorplan.jpg.txt
new file mode 100644
index 000000000..2c03157af
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Floorplan.jpg.txt
@@ -0,0 +1,266 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Floorplan.jpg]
+ Filesize: [161577] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 13464
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x000A
+ [Model ] = "Photosmart Plus B209a-m"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Windows Photo Editor 10.0.10011.16384"
+ [DateTime ] = "2016:01:02 20:17:37"
+ [ExifOffset ] = @ 0x091A
+ Offset to Next IFD = 0x000011B6
+
+ EXIF IFD1 @ Absolute 0x000011D4
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 96/1
+ [YResolution ] = 96/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x1214 = @ 0x1232
+ [JpegIFByteCount ] = 0x[0000227C] / 8828
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x00000938
+ Dir Length = 0x0008
+ [DateTimeOriginal ] = "2016:01:02 19:22:28"
+ [DateTimeDigitized ] = "2016:01:02 19:22:28"
+ [SubSecTimeOriginal ] = "00"
+ [SubSecTimeDigitized ] = "00"
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 0x[00000922] / 2338
+ [ExifImageHeight ] = 0x[000008C9] / 2249
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x000034AE
+ Length = 12772
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+ |
+ |Windows Photo Editor 10.0.10011.163842016-01-02T19:22:28
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00006694
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 8 10 12
+ DQT, Row #1: 2 2 3 4 5 12 12 11
+ DQT, Row #2: 3 3 3 5 8 11 14 11
+ DQT, Row #3: 3 3 4 6 10 17 16 12
+ DQT, Row #4: 4 4 7 11 14 22 21 15
+ DQT, Row #5: 5 7 11 13 16 21 23 18
+ DQT, Row #6: 10 13 16 17 21 24 24 20
+ DQT, Row #7: 14 18 19 20 22 20 21 20
+ Approx quality factor = 90.06 (scaling=19.88 variance=1.14)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000066D9
+ Frame header length = 11
+ Precision = 8
+ Number of Lines = 645
+ Samples per Line = 976
+ Image Size = 976 x 645
+ Raw Image Orientation = Landscape
+ Number of Img components = 1
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000066E6
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00006707
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000067BE
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000067C8
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00027727.0
+
+ Compression stats:
+ Compression Ratio: 4.66:1
+ Bits per pixel: 1.72:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 3571 ( 36%)
+ # codes of length 03 bits: 4320 ( 44%)
+ # codes of length 04 bits: 925 ( 9%)
+ # codes of length 05 bits: 456 ( 5%)
+ # codes of length 06 bits: 313 ( 3%)
+ # codes of length 07 bits: 291 ( 3%)
+ # codes of length 08 bits: 6 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 78118 ( 44%)
+ # codes of length 03 bits: 22349 ( 13%)
+ # codes of length 04 bits: 35264 ( 20%)
+ # codes of length 05 bits: 18811 ( 11%)
+ # codes of length 06 bits: 4312 ( 2%)
+ # codes of length 07 bits: 8245 ( 5%)
+ # codes of length 08 bits: 4682 ( 3%)
+ # codes of length 09 bits: 1584 ( 1%)
+ # codes of length 10 bits: 1900 ( 1%)
+ # codes of length 11 bits: 324 ( 0%)
+ # codes of length 12 bits: 116 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 6 ( 0%)
+ # codes of length 16 bits: 639 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[231] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1017, 0, 0] RGB=[255,255,255] @ MCU[ 7, 0]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00027726.4
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00027727
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 015C645021E37D3469A6B652789383DB
+ Signature (Rotated): 01D400C125EB43B05762A66347B271F7
+ File Offset: 0 bytes
+ Chroma subsampling: Gray
+ EXIF Make/Model: OK [???] [Photosmart Plus B209a-m]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Windows Photo Editor 10.0.10011.16384]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[IJG Library ] [090 Gray ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [090 Gray ]
+ SW :[IrfanView ] [090 Gray ]
+ SW :[idImager ] [090 Gray ]
+ SW :[FastStone Image Viewer ] [090 Gray ]
+ SW :[NeatImage ] [090 Gray ]
+ SW :[Paint.NET ] [090 Gray ]
+ SW :[Photomatix ] [090 Gray ]
+ SW :[XnView ] [090 Gray ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 2 - Image has high probability of being processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Hiyamugi.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Hiyamugi.jpg.txt
new file mode 100644
index 000000000..8538e13c8
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Hiyamugi.jpg.txt
@@ -0,0 +1,319 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Hiyamugi.jpg]
+ Filesize: [540458] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.0]
+ density = 96 x 96 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000014
+ Length = 65110
+ Identifier = [JFXX]
+ Not known APP0 type. Skipping remainder.
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x0000FE6C
+ Comment length = 31
+ Comment=LEAD Technologies Inc. V1.01.
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000FE8D
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 2 2 2 2 2 2 2 2
+ DQT, Row #1: 2 2 2 2 2 2 2 2
+ DQT, Row #2: 2 2 2 2 2 2 2 2
+ DQT, Row #3: 2 2 2 2 2 3 3 2
+ DQT, Row #4: 2 2 2 2 2 4 4 3
+ DQT, Row #5: 2 2 2 2 3 4 4 3
+ DQT, Row #6: 2 2 3 3 4 4 4 4
+ DQT, Row #7: 2 3 3 3 4 4 4 3
+ Approx quality factor = 96.75 (scaling=6.50 variance=21.01)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 2 2 2 2 3 3 3 3
+ DQT, Row #1: 2 2 2 2 3 3 3 3
+ DQT, Row #2: 2 2 2 3 3 3 3 3
+ DQT, Row #3: 2 2 3 3 3 3 3 3
+ DQT, Row #4: 3 3 3 3 3 3 3 3
+ DQT, Row #5: 3 3 3 3 3 3 3 3
+ DQT, Row #6: 3 3 3 3 3 3 3 3
+ DQT, Row #7: 3 3 3 3 3 3 3 3
+ Approx quality factor = 98.06 (scaling=3.88 variance=4.78)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000FF13
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000100B7
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 794
+ Samples per Line = 1123
+ Image Size = 1123 x 794
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000100CA
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000100D8
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00083F28.0
+
+ Compression stats:
+ Compression Ratio: 5.64:1
+ Bits per pixel: 4.26:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 727 ( 5%)
+ # codes of length 03 bits: 7443 ( 52%)
+ # codes of length 04 bits: 2171 ( 15%)
+ # codes of length 05 bits: 1627 ( 11%)
+ # codes of length 06 bits: 1355 ( 10%)
+ # codes of length 07 bits: 785 ( 6%)
+ # codes of length 08 bits: 92 ( 1%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2590 ( 36%)
+ # codes of length 03 bits: 1357 ( 19%)
+ # codes of length 04 bits: 1187 ( 17%)
+ # codes of length 05 bits: 856 ( 12%)
+ # codes of length 06 bits: 616 ( 9%)
+ # codes of length 07 bits: 346 ( 5%)
+ # codes of length 08 bits: 109 ( 2%)
+ # codes of length 09 bits: 39 ( 1%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 223973 ( 44%)
+ # codes of length 03 bits: 69375 ( 14%)
+ # codes of length 04 bits: 93550 ( 19%)
+ # codes of length 05 bits: 58421 ( 12%)
+ # codes of length 06 bits: 13137 ( 3%)
+ # codes of length 07 bits: 22630 ( 4%)
+ # codes of length 08 bits: 9176 ( 2%)
+ # codes of length 09 bits: 6545 ( 1%)
+ # codes of length 10 bits: 3947 ( 1%)
+ # codes of length 11 bits: 1890 ( 0%)
+ # codes of length 12 bits: 1162 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 77 ( 0%)
+ # codes of length 16 bits: 1763 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 44319 ( 35%)
+ # codes of length 03 bits: 21048 ( 17%)
+ # codes of length 04 bits: 24019 ( 19%)
+ # codes of length 05 bits: 17303 ( 14%)
+ # codes of length 06 bits: 9470 ( 7%)
+ # codes of length 07 bits: 2699 ( 2%)
+ # codes of length 08 bits: 3432 ( 3%)
+ # codes of length 09 bits: 2092 ( 2%)
+ # codes of length 10 bits: 717 ( 1%)
+ # codes of length 11 bits: 679 ( 1%)
+ # codes of length 12 bits: 85 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 150 ( 0%)
+ # codes of length 15 bits: 75 ( 0%)
+ # codes of length 16 bits: 425 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[117] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 812, 102, -218] RGB=[189,244,250] @ MCU[ 19, 16]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00083F27.7
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00083F28
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0193B6220463E5A621ED25A53EC2FE7D
+ Signature (Rotated): 010D9693F4FC34B402EFA979BED34733
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[LEAD Technologies Inc ] [002 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Lake.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Lake.jpg.txt
new file mode 100644
index 000000000..900f52cb7
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Lake.jpg.txt
@@ -0,0 +1,683 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Lake.jpg]
+ Filesize: [206342] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 10392
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0008
+ [Make ] = "Canon"
+ [Model ] = "Canon EOS DIGITAL REBEL XSi"
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop Camera Raw 9.8 (Windows)"
+ [DateTime ] = "2016:12:29 12:57:54"
+ [ExifOffset ] = @ 0x00DE
+ Offset to Next IFD = 0x000002D6
+
+ EXIF IFD1 @ Absolute 0x000002E2
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x0334 = @ 0x0340
+ [JpegIFByteCount ] = 0x[0000255C] / 9564
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000EA
+ Dir Length = 0x001B
+ [ExposureTime ] = 1/640 s
+ [FNumber ] = F8.0
+ [ExposureProgram ] = Normal program
+ [ISOSpeedRatings ] = 200
+ [ExifVersion ] = 02.30
+ [DateTimeOriginal ] = "2009:07:19 17:00:36"
+ [DateTimeDigitized ] = "2009:07:19 17:00:36"
+ [ShutterSpeedValue ] = 9321928/1000000
+ [ApertureValue ] = 6/1
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 4/1
+ [MeteringMode ] = Pattern
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 200 mm
+ [SubSecTimeOriginal ] = "73"
+ [SubSecTimeDigitized ] = "73"
+ [ColorSpace ] = Uncalibrated
+ [FocalPlaneXResolution ] = 4272000/878
+ [FocalPlaneYResolution ] = 2848000/584
+ [FocalPlaneResolutionUnit ] = Inch
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Auto exposure
+ [WhiteBalance ] = Auto white balance
+ [SceneCaptureType ] = Standard
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x0000289C
+ Length = 9752
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x03ED] Name="" Len=[0x0010] DefinedName="ResolutionInfo structure"
+ Horizontal resolution = 300 pixels per inch
+ Width unit = inch
+ Vertical resolution = 300 pixels per inch
+ Height unit = inch
+ 8BIM: [0x0404] Name="" Len=[0x003F] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 4
+ IPTC [002:055] Date Created = "20090719"
+ IPTC [002:060] Time Created = "170036"
+ IPTC [002:062] Digital Creation Date = "20090719"
+ IPTC [002:063] Digital Creation Time = "170036"
+ 8BIM: [0x040C] Name="" Len=[0x2578] DefinedName="Thumbnail resources"
+ Format = 1
+ Width of thumbnail = 256 pixels
+ Height of thumbnail = 171 pixels
+ Widthbytes = 768 bytes
+ Total size = 131328 bytes
+ Size after compression = 9564 bytes
+ Bits per pixel = 24 bits
+ Number of planes = 1
+ JFIF data @ 0x0000293E
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0x52 C5 4C EC 1E FE 25 B8 CA 88 F7 0D 2B 5F 09 F5 | R.L...%.....+_..
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00004EB6
+ Length = 576
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 560 bytes
+ Preferred CMM Type : 'ADBE' (0x41444245)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1999-06-03 00:00:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'none' (0x6E6F6E65)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'ADBE' (0x41444245)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x000050F8
+ Length = 10738
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 32, 22
+ | 64, 56
+ | 128, 128
+ | 192, 196
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ |
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00007AEC
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ Approx quality factor = 88.28 (scaling=23.43 variance=111.68)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 90.19 (scaling=19.62 variance=201.04)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00007B72
+ Length = 4
+ interval = 160
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x00007B78
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 49152
+ APP14Flags1 = 0
+ ColorTransform = 1 [YCbCr]
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00007B88
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 853
+ Samples per Line = 1280
+ Image Size = 1280 x 853
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007B9B
+ Huffman table length = 159
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 03
+ Codes of length 03 bits (003 total): 01 02 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (001 total): 08
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 006
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (002 total): 05 41
+ Codes of length 07 bits (003 total): 13 22 51
+ Codes of length 08 bits (006 total): 32 61 71 81 91 A1
+ Codes of length 09 bits (005 total): 06 14 23 42 B1
+ Codes of length 10 bits (002 total): 52 C1
+ Codes of length 11 bits (004 total): 15 33 62 D1
+ Codes of length 12 bits (004 total): 07 72 E1 F1
+ Codes of length 13 bits (005 total): 16 24 43 82 F0
+ Codes of length 14 bits (003 total): 34 92 A2
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (011 total): 53 63 C2 25 73 B2 D2 26 54 93 E2
+ Total number of codes: 054
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 02
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (002 total): 12 21
+ Codes of length 07 bits (002 total): 03 31
+ Codes of length 08 bits (003 total): 13 41 51
+ Codes of length 09 bits (001 total): 61
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (002 total): 04 71
+ Codes of length 12 bits (003 total): 14 22 81
+ Codes of length 13 bits (001 total): 32
+ Codes of length 14 bits (001 total): 42
+ Codes of length 15 bits (001 total): 91
+ Codes of length 16 bits (000 total):
+ Total number of codes: 020
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007C3C
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00007C4A
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00032604.0
+
+ Compression stats:
+ Compression Ratio: 18.77:1
+ Bits per pixel: 1.28:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 8237 ( 48%)
+ # codes of length 03 bits: 7451 ( 44%)
+ # codes of length 04 bits: 930 ( 5%)
+ # codes of length 05 bits: 300 ( 2%)
+ # codes of length 06 bits: 197 ( 1%)
+ # codes of length 07 bits: 5 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 16681 ( 49%)
+ # codes of length 02 bits: 10125 ( 30%)
+ # codes of length 03 bits: 5138 ( 15%)
+ # codes of length 04 bits: 1825 ( 5%)
+ # codes of length 05 bits: 432 ( 1%)
+ # codes of length 06 bits: 39 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 104267 ( 49%)
+ # codes of length 03 bits: 23564 ( 11%)
+ # codes of length 04 bits: 44372 ( 21%)
+ # codes of length 05 bits: 19037 ( 9%)
+ # codes of length 06 bits: 5565 ( 3%)
+ # codes of length 07 bits: 5437 ( 3%)
+ # codes of length 08 bits: 5066 ( 2%)
+ # codes of length 09 bits: 2163 ( 1%)
+ # codes of length 10 bits: 491 ( 0%)
+ # codes of length 11 bits: 407 ( 0%)
+ # codes of length 12 bits: 211 ( 0%)
+ # codes of length 13 bits: 115 ( 0%)
+ # codes of length 14 bits: 36 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 26 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 34240 ( 51%)
+ # codes of length 02 bits: 15658 ( 24%)
+ # codes of length 03 bits: 7424 ( 11%)
+ # codes of length 04 bits: 3865 ( 6%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 3125 ( 5%)
+ # codes of length 07 bits: 1208 ( 2%)
+ # codes of length 08 bits: 744 ( 1%)
+ # codes of length 09 bits: 113 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 60 ( 0%)
+ # codes of length 12 bits: 60 ( 0%)
+ # codes of length 13 bits: 9 ( 0%)
+ # codes of length 14 bits: 4 ( 0%)
+ # codes of length 15 bits: 1 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[122] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 714, -42, 42] RGB=[224,215,206] @ MCU[113, 24]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 106
+ Next position in scan buffer: Offset 0x00032604.0
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00032604
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000340
+ Length: 0x0000255C (9564)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: DQT
+ Length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+
+ * Embedded Thumb Marker: DRI
+ Length = 4
+
+ * Embedded Thumb Marker: APP14
+ Length = 14
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 171
+ Samples per Line = 256
+ Image Size = 256 x 171
+
+ * Embedded Thumb Marker: DHT
+ Length = 148
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 9212 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 01180AF3DE63318828A86409EF4013DD
+
+*** Searching Compression Signatures ***
+
+ Signature: 01180AF3DE63318828A86409EF4013DD
+ Signature (Rotated): 01180AF3DE63318828A86409EF4013DD
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: OK [Canon] [Canon EOS DIGITAL REBEL XSi]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop Camera Raw 9.8 (Windows)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 08 ]
+
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ Appears to be new signature for known software.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/MultiScanBaselineCMYK.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/MultiScanBaselineCMYK.jpg.txt
new file mode 100644
index 000000000..cd415a201
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/MultiScanBaselineCMYK.jpg.txt
@@ -0,0 +1,282 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\MultiScanBaselineCMYK.jpg]
+ Filesize: [47443] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x00000014
+ Length = 14
+ DCTEncodeVersion = 25600
+ APP14Flags0 = 0
+ APP14Flags1 = 0
+ ColorTransform = 2 [YCCK]
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x00000024
+ Comment length = 38
+ Comment=Created by fCoder Graphics Processor
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000004C
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 5 3 3 5 7 12 15 18
+ DQT, Row #1: 4 4 4 6 8 17 18 17
+ DQT, Row #2: 4 4 5 7 12 17 21 17
+ DQT, Row #3: 4 5 7 9 15 26 24 19
+ DQT, Row #4: 5 7 11 17 20 33 31 23
+ DQT, Row #5: 7 11 17 19 24 31 34 28
+ DQT, Row #6: 15 19 23 26 31 36 36 30
+ DQT, Row #7: 22 28 29 29 34 30 31 30
+ Approx quality factor = 84.93 (scaling=30.13 variance=1.05)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000091
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 5 5 7 14 30 30 30 30
+ DQT, Row #1: 5 6 8 20 30 30 30 30
+ DQT, Row #2: 7 8 17 30 30 30 30 30
+ DQT, Row #3: 14 20 30 30 30 30 30 30
+ DQT, Row #4: 30 30 30 30 30 30 30 30
+ DQT, Row #5: 30 30 30 30 30 30 30 30
+ DQT, Row #6: 30 30 30 30 30 30 30 30
+ DQT, Row #7: 30 30 30 30 30 30 30 30
+ Approx quality factor = 84.93 (scaling=30.15 variance=0.29)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000000D6
+ Frame header length = 20
+ Precision = 8
+ Number of Lines = 842
+ Samples per Line = 595
+ Image Size = 595 x 842
+ Raw Image Orientation = Portrait
+ Number of Img components = 4
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Cr)
+ Component[4]: ID=0x04, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (K)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000EC
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000010D
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000001C4
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000001E5
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000029C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00005825
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000766A
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000A1FA
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x04, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000B951
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0155D875C95B74D0F3C5835A62516F48
+ Signature (Rotated): 01D38A25358EB7649A254E19F1D46600
+ File Offset: 0 bytes
+ Chroma subsampling: ?x?
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[Nokia ] [N73 ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 8100 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ SW :[IJG Library ] [085 ]
+ SW :[Picasa ] [085 (Normal) ]
+ SW :[ZoomBrowser EX ] [medium ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [085 ]
+ SW :[IrfanView ] [085 ]
+ SW :[idImager ] [085 ]
+ SW :[FastStone Image Viewer ] [085 ]
+ SW :[NeatImage ] [085 ]
+ SW :[Paint.NET ] [085 ]
+ SW :[Photomatix ] [085 ]
+ SW :[XnView ] [085 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Snake.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Snake.jpg.txt
new file mode 100644
index 000000000..926da026f
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/Snake.jpg.txt
@@ -0,0 +1,683 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Snake.jpg]
+ Filesize: [165200] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 11941
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0008
+ [Make ] = "Canon"
+ [Model ] = "Canon EOS DIGITAL REBEL XSi"
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop Camera Raw 9.8 (Windows)"
+ [DateTime ] = "2016:12:29 12:57:50"
+ [ExifOffset ] = @ 0x00DE
+ Offset to Next IFD = 0x000002D6
+
+ EXIF IFD1 @ Absolute 0x000002E2
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x0334 = @ 0x0340
+ [JpegIFByteCount ] = 0x[00002B69] / 11113
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000EA
+ Dir Length = 0x001B
+ [ExposureTime ] = 1/25 s
+ [FNumber ] = F4.0
+ [ExposureProgram ] = Shutter priority
+ [ISOSpeedRatings ] = 250
+ [ExifVersion ] = 02.30
+ [DateTimeOriginal ] = "2009:07:19 13:25:29"
+ [DateTimeDigitized ] = "2009:07:19 13:25:29"
+ [ShutterSpeedValue ] = 4643856/1000000
+ [ApertureValue ] = 4/1
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 4/1
+ [MeteringMode ] = Pattern
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 200 mm
+ [SubSecTimeOriginal ] = "03"
+ [SubSecTimeDigitized ] = "03"
+ [ColorSpace ] = Uncalibrated
+ [FocalPlaneXResolution ] = 4272000/878
+ [FocalPlaneYResolution ] = 2848000/584
+ [FocalPlaneResolutionUnit ] = Inch
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Auto exposure
+ [WhiteBalance ] = Auto white balance
+ [SceneCaptureType ] = Standard
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00002EA9
+ Length = 11302
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x03ED] Name="" Len=[0x0010] DefinedName="ResolutionInfo structure"
+ Horizontal resolution = 300 pixels per inch
+ Width unit = inch
+ Vertical resolution = 300 pixels per inch
+ Height unit = inch
+ 8BIM: [0x0404] Name="" Len=[0x003F] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 4
+ IPTC [002:055] Date Created = "20090719"
+ IPTC [002:060] Time Created = "132529"
+ IPTC [002:062] Digital Creation Date = "20090719"
+ IPTC [002:063] Digital Creation Time = "132529"
+ 8BIM: [0x040C] Name="" Len=[0x2B85] DefinedName="Thumbnail resources"
+ Format = 1
+ Width of thumbnail = 256 pixels
+ Height of thumbnail = 171 pixels
+ Widthbytes = 768 bytes
+ Total size = 131328 bytes
+ Size after compression = 11113 bytes
+ Bits per pixel = 24 bits
+ Number of planes = 1
+ JFIF data @ 0x00002F4B
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0xEE 2F A2 47 C5 F8 ED 07 08 CD FF 82 A0 D1 7F F2 | ./.G............
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00005AD1
+ Length = 576
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 560 bytes
+ Preferred CMM Type : 'ADBE' (0x41444245)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1999-06-03 00:00:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'none' (0x6E6F6E65)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'ADBE' (0x41444245)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00005D13
+ Length = 10733
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 32, 22
+ | 64, 56
+ | 128, 128
+ | 192, 196
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0, 0
+ | 255, 255
+ |
+ |
+ |
+ |
+ |
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00008702
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ Approx quality factor = 88.28 (scaling=23.43 variance=111.68)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 90.19 (scaling=19.62 variance=201.04)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00008788
+ Length = 4
+ interval = 160
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x0000878E
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 49152
+ APP14Flags1 = 0
+ ColorTransform = 1 [YCbCr]
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000879E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 853
+ Samples per Line = 1280
+ Image Size = 1280 x 853
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000087B1
+ Huffman table length = 153
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 02 03
+ Codes of length 03 bits (003 total): 01 04 05
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (001 total): 08
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (001 total): 06
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (002 total): 00 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (001 total): 21
+ Codes of length 06 bits (003 total): 05 12 31
+ Codes of length 07 bits (003 total): 13 41 51
+ Codes of length 08 bits (003 total): 06 22 61
+ Codes of length 09 bits (003 total): 14 32 71
+ Codes of length 10 bits (003 total): 42 81 91
+ Codes of length 11 bits (003 total): 15 23 A1
+ Codes of length 12 bits (004 total): 07 52 B1 C1
+ Codes of length 13 bits (001 total): 33
+ Codes of length 14 bits (002 total): 24 43
+ Codes of length 15 bits (002 total): 62 D1
+ Codes of length 16 bits (011 total): 16 34 72 E1 25 53 63 92 82 A2 F0
+ Total number of codes: 045
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 02
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (003 total): 03 12 21
+ Codes of length 07 bits (001 total): 31
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (002 total): 04 41
+ Codes of length 10 bits (003 total): 13 22 51
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (003 total): 32 61 71
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (003 total): 05 14 42
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (003 total): 81 52 62
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000884C
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000885A
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0002854E.0
+
+ Compression stats:
+ Compression Ratio: 25.14:1
+ Bits per pixel: 0.95:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 7183 ( 42%)
+ # codes of length 03 bits: 7286 ( 43%)
+ # codes of length 04 bits: 1551 ( 9%)
+ # codes of length 05 bits: 856 ( 5%)
+ # codes of length 06 bits: 218 ( 1%)
+ # codes of length 07 bits: 26 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 12266 ( 36%)
+ # codes of length 02 bits: 11394 ( 33%)
+ # codes of length 03 bits: 6548 ( 19%)
+ # codes of length 04 bits: 2911 ( 9%)
+ # codes of length 05 bits: 875 ( 3%)
+ # codes of length 06 bits: 241 ( 1%)
+ # codes of length 07 bits: 5 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 59325 ( 45%)
+ # codes of length 03 bits: 31160 ( 24%)
+ # codes of length 04 bits: 18131 ( 14%)
+ # codes of length 05 bits: 4871 ( 4%)
+ # codes of length 06 bits: 9522 ( 7%)
+ # codes of length 07 bits: 4029 ( 3%)
+ # codes of length 08 bits: 2270 ( 2%)
+ # codes of length 09 bits: 1006 ( 1%)
+ # codes of length 10 bits: 515 ( 0%)
+ # codes of length 11 bits: 268 ( 0%)
+ # codes of length 12 bits: 195 ( 0%)
+ # codes of length 13 bits: 24 ( 0%)
+ # codes of length 14 bits: 29 ( 0%)
+ # codes of length 15 bits: 20 ( 0%)
+ # codes of length 16 bits: 26 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 34240 ( 51%)
+ # codes of length 02 bits: 16000 ( 24%)
+ # codes of length 03 bits: 5994 ( 9%)
+ # codes of length 04 bits: 5610 ( 8%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 3610 ( 5%)
+ # codes of length 07 bits: 600 ( 1%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 410 ( 1%)
+ # codes of length 10 bits: 200 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 70 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 17 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 6 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[110] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 954, 14, -14] RGB=[244,248,248] @ MCU[124, 21]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 106
+ Next position in scan buffer: Offset 0x0002854D.3
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0002854E
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000340
+ Length: 0x00002B69 (11113)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: DQT
+ Length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+
+ * Embedded Thumb Marker: DRI
+ Length = 4
+
+ * Embedded Thumb Marker: APP14
+ Length = 14
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 171
+ Samples per Line = 256
+ Image Size = 256 x 171
+
+ * Embedded Thumb Marker: DHT
+ Length = 150
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 10759 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 01180AF3DE63318828A86409EF4013DD
+
+*** Searching Compression Signatures ***
+
+ Signature: 01180AF3DE63318828A86409EF4013DD
+ Signature (Rotated): 01180AF3DE63318828A86409EF4013DD
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: OK [Canon] [Canon EOS DIGITAL REBEL XSi]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop Camera Raw 9.8 (Windows)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 08 ]
+
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ Appears to be new signature for known software.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badeof.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badeof.jpg.txt
new file mode 100644
index 000000000..97be4853e
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badeof.jpg.txt
@@ -0,0 +1,347 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\badeof.jpg]
+ Filesize: [5770] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 149
+ Samples per Line = 227
+ Image Size = 227 x 149
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000D2
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000189
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000001AA
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000261
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000026F
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+
+ Compression stats:
+ Compression Ratio: 19.73:1
+ Bits per pixel: 1.22:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 88 ( 15%)
+ # codes of length 03 bits: 409 ( 68%)
+ # codes of length 04 bits: 66 ( 11%)
+ # codes of length 05 bits: 33 ( 6%)
+ # codes of length 06 bits: 4 ( 1%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 134 ( 45%)
+ # codes of length 03 bits: 68 ( 23%)
+ # codes of length 04 bits: 60 ( 20%)
+ # codes of length 05 bits: 26 ( 9%)
+ # codes of length 06 bits: 12 ( 4%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2706 ( 48%)
+ # codes of length 03 bits: 636 ( 11%)
+ # codes of length 04 bits: 1331 ( 23%)
+ # codes of length 05 bits: 473 ( 8%)
+ # codes of length 06 bits: 196 ( 3%)
+ # codes of length 07 bits: 169 ( 3%)
+ # codes of length 08 bits: 66 ( 1%)
+ # codes of length 09 bits: 60 ( 1%)
+ # codes of length 10 bits: 28 ( 0%)
+ # codes of length 11 bits: 14 ( 0%)
+ # codes of length 12 bits: 4 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 5 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 697 ( 46%)
+ # codes of length 03 bits: 243 ( 16%)
+ # codes of length 04 bits: 294 ( 19%)
+ # codes of length 05 bits: 164 ( 11%)
+ # codes of length 06 bits: 68 ( 4%)
+ # codes of length 07 bits: 5 ( 0%)
+ # codes of length 08 bits: 35 ( 2%)
+ # codes of length 09 bits: 4 ( 0%)
+ # codes of length 10 bits: 2 ( 0%)
+ # codes of length 11 bits: 1 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[107] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1008, -9, 0] RGB=[254,254,250] @ MCU[ 4, 8]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00001687.2
+
+
+*** Skipped 1 marker pad bytes ***
+*** Marker: ??? (Unknown) (xFF00) ***
+ OFFSET: 0x00001689
+ WARNING: Unknown marker [0xFF00]
+ Stopping decode
+ Use [Img Search Fwd/Rev] to locate other valid embedded JPEGs
+
+*** Searching Compression Signatures ***
+
+ Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+ Signature (Rotated): 012D821C6AB210E2A753BE053B8F55D0
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[SONY ] [CYBERSHOT U ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+ SW :[Apple Quicktime ] [0466-0467 ]
+ SW :[Digital Photo Professiona] [05 ]
+ SW :[IJG Library ] [075 ]
+ SW :[MS Paint ] [ ]
+ SW :[MS Visio ] [ ]
+ SW :[ZoomBrowser EX ] [low ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [075 ]
+ SW :[IrfanView ] [075 ]
+ SW :[idImager ] [075 ]
+ SW :[FastStone Image Viewer ] [075 ]
+ SW :[NeatImage ] [075 ]
+ SW :[Paint.NET ] [075 ]
+ SW :[Photomatix ] [075 ]
+ SW :[XnView ] [075 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
+
+*** Additional Info ***
+NOTE: Data exists after EOF, range: 0x00000000-0x0000168A (5770 bytes)
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badrst.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badrst.jpg.txt
new file mode 100644
index 000000000..cb74eb88f
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/badrst.jpg.txt
@@ -0,0 +1,434 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\badrst.jpg]
+ Filesize: [74497] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 96 x 96 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 8628
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0003
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [ExifOffset ] = @ 0x083E
+ Offset to Next IFD = 0x000010B6
+
+ EXIF IFD1 @ Absolute 0x000010D4
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 96/1
+ [YResolution ] = 96/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x1114 = @ 0x1132
+ [JpegIFByteCount ] = 0x[00001097] / 4247
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x0000085C
+ Dir Length = 0x0005
+ [DateTimeOriginal ] = "2016:02:28 11:17:08"
+ [DateTimeDigitized ] = "2016:02:28 11:17:08"
+ [SubSecTimeOriginal ] = "06"
+ [SubSecTimeDigitized ] = "06"
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x000021CA
+ Length = 2464
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+ |
+ |2016-02-28T11:17:08.057
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00002B6C
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 8 10 12
+ DQT, Row #1: 2 2 3 4 5 12 12 11
+ DQT, Row #2: 3 3 3 5 8 11 14 11
+ DQT, Row #3: 3 3 4 6 10 17 16 12
+ DQT, Row #4: 4 4 7 11 14 22 21 15
+ DQT, Row #5: 5 7 11 13 16 21 23 18
+ DQT, Row #6: 10 13 16 17 21 24 24 20
+ DQT, Row #7: 14 18 19 20 22 20 21 20
+ Approx quality factor = 90.06 (scaling=19.88 variance=1.14)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00002BB1
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 4 5 9 20 20 20 20
+ DQT, Row #1: 4 4 5 13 20 20 20 20
+ DQT, Row #2: 5 5 11 20 20 20 20 20
+ DQT, Row #3: 9 13 20 20 20 20 20 20
+ DQT, Row #4: 20 20 20 20 20 20 20 20
+ DQT, Row #5: 20 20 20 20 20 20 20 20
+ DQT, Row #6: 20 20 20 20 20 20 20 20
+ DQT, Row #7: 20 20 20 20 20 20 20 20
+ Approx quality factor = 89.93 (scaling=20.14 variance=0.34)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00002BF6
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 480
+ Samples per Line = 640
+ Image Size = 640 x 480
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002C09
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002C2A
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002CE1
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002D02
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00002DB9
+ Length = 4
+ interval = 600
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002DBF
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00002DCD
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Expect Restart interval elapsed @ 0x00008802.4
+ ERROR: Restart marker not detected
+*** ERROR: Can't find huffman bitstring @ 0x00008802.5, table 0, value [0xffffffe0]
+*** ERROR: Bad huffman code @ 0x00008802.4
+*** ERROR: Bad scan data in MCU(0,15): Lum CSS(0,0) @ Offset 0x00008802.5
+ MCU located at pixel=(0,240)
+*** ERROR: Can't find huffman bitstring @ 0x00008802.6, table 0, value [0xffffffc0]
+*** ERROR: Bad huffman code @ 0x00008802.5
+*** ERROR: Bad scan data in MCU(0,15): Lum CSS(1,0) @ Offset 0x00008802.6
+ MCU located at pixel=(8,240)
+*** ERROR: Can't find huffman bitstring @ 0x00008802.7, table 0, value [0xffffff80]
+*** ERROR: Bad huffman code @ 0x00008802.6
+*** ERROR: Bad scan data in MCU(0,15): Lum CSS(0,1) @ Offset 0x00008802.7
+ MCU located at pixel=(0,248)
+*** ERROR: Can't find huffman bitstring @ 0x00008803.0, table 0, value [0xffffffff]
+*** ERROR: Bad huffman code @ 0x00008802.7
+*** ERROR: Bad scan data in MCU(0,15): Lum CSS(1,1) @ Offset 0x00008803.0
+ MCU located at pixel=(8,248)
+*** ERROR: Can't find huffman bitstring @ 0x00008803.1, table 1, value [0xfffffffe]
+*** ERROR: Bad huffman code @ 0x00008803.0
+*** ERROR: Bad scan data in MCU(0,15): Chr(Cb) CSS(0,0) @ Offset 0x00008803.1
+ MCU located at pixel=(0,240)
+*** ERROR: Can't find huffman bitstring @ 0x00008803.2, table 1, value [0xfffffffc]
+*** ERROR: Bad huffman code @ 0x00008803.1
+*** ERROR: Bad scan data in MCU(0,15): Chr(Cr) CSS(0,0) @ Offset 0x00008803.2
+ MCU located at pixel=(0,240)
+*** ERROR: Can't find huffman bitstring @ 0x00008803.3, table 0, value [0xfffffff8]
+*** ERROR: Bad huffman code @ 0x00008803.2
+ Only reported first 20 instances of this message...
+
+ Compression stats:
+ Compression Ratio: 14.80:1
+ Bits per pixel: 1.62:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 40 ( 1%)
+ # codes of length 02 bits: 202 ( 4%)
+ # codes of length 03 bits: 3515 ( 73%)
+ # codes of length 04 bits: 423 ( 9%)
+ # codes of length 05 bits: 338 ( 7%)
+ # codes of length 06 bits: 228 ( 5%)
+ # codes of length 07 bits: 54 ( 1%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 20 ( 1%)
+ # codes of length 02 bits: 1657 ( 69%)
+ # codes of length 03 bits: 311 ( 13%)
+ # codes of length 04 bits: 232 ( 10%)
+ # codes of length 05 bits: 123 ( 5%)
+ # codes of length 06 bits: 49 ( 2%)
+ # codes of length 07 bits: 8 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 32135 ( 43%)
+ # codes of length 03 bits: 8668 ( 12%)
+ # codes of length 04 bits: 15771 ( 21%)
+ # codes of length 05 bits: 7559 ( 10%)
+ # codes of length 06 bits: 2518 ( 3%)
+ # codes of length 07 bits: 3834 ( 5%)
+ # codes of length 08 bits: 1387 ( 2%)
+ # codes of length 09 bits: 1122 ( 2%)
+ # codes of length 10 bits: 562 ( 1%)
+ # codes of length 11 bits: 234 ( 0%)
+ # codes of length 12 bits: 131 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 57 ( 0%)
+ # codes of length 16 bits: 286 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 4525 ( 57%)
+ # codes of length 03 bits: 1153 ( 14%)
+ # codes of length 04 bits: 1341 ( 17%)
+ # codes of length 05 bits: 543 ( 7%)
+ # codes of length 06 bits: 281 ( 4%)
+ # codes of length 07 bits: 14 ( 0%)
+ # codes of length 08 bits: 93 ( 1%)
+ # codes of length 09 bits: 23 ( 0%)
+ # codes of length 10 bits: 3 ( 0%)
+ # codes of length 11 bits: 3 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 2 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[103] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1014, -3, -27] RGB=[248,255,252] @ MCU[ 0, 13]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 1
+ Next position in scan buffer: Offset 0x0001210E.0
+
+
+*** Skipped 10 marker pad bytes ***
+*** Marker: RST# ***
+ OFFSET: 0x0000880D
+ WARNING: Restart marker [0xFFD0] detected outside scan
+ Stopping decode
+ Use [Img Search Fwd/Rev] to locate other valid embedded JPEGs
+
+*** Searching Compression Signatures ***
+
+ Signature: 013BA18D5561625796E986FDBC09F846
+ Signature (Rotated): 01AC57E12793DFA7C46C704625C5AF0F
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[??? ] [Treo 680 ] [ ] Yes
+ CAM:[Canon ] [Canon PowerShot Pro1 ] [fine ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E3100 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 9530 ] [Superfine ] Yes
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W1 ] [ ] No
+ CAM:[SONY ] [SONY ] [ ] No
+ SW :[ACDSee ] [ ]
+ SW :[FixFoto ] [fine ]
+ SW :[IJG Library ] [090 ]
+ SW :[ZoomBrowser EX ] [high ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [090 ]
+ SW :[IrfanView ] [090 ]
+ SW :[idImager ] [090 ]
+ SW :[FastStone Image Viewer ] [090 ]
+ SW :[NeatImage ] [090 ]
+ SW :[Paint.NET ] [090 ]
+ SW :[Photomatix ] [090 ]
+ SW :[XnView ] [090 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
+
+*** Additional Info ***
+NOTE: Data exists after EOF, range: 0x00000000-0x00012301 (74497 bytes)
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/cmyk.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/cmyk.jpg.txt
new file mode 100644
index 000000000..68777cc04
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/cmyk.jpg.txt
@@ -0,0 +1,435 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\cmyk.jpg]
+ Filesize: [2531270] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x00000014
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 0
+ APP14Flags1 = 0
+ ColorTransform = 0 [Unknown (RGB or CMYK)]
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00000024
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 29
+ Profile Size : 1829080 bytes
+ Preferred CMM Type : 'HDM ' (0x48444D20)
+ Profile Version : 0.2.4.0 (0x02400000)
+ Profile Device/Class : Output Device profile ('prtr' (0x70727472))
+ Data Colour Space : cmykData ('CMYK' (0x434D594B))
+ Profile connection space (PCS) : 'Lab ' (0x4C616220)
+ Profile creation date : 2007-02-28 08:00:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : ? (0x00000000) ('....' (0x00000000))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : '....' (0x00000000)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Media-Relative Colorimetric
+ Profile creator : 'HDM ' (0x48444D20)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0000FE1E
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 2 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0001FC18
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 3 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0002FA12
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 4 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0003F80C
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 5 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0004F606
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 6 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0005F400
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 7 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0006F1FA
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 8 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0007EFF4
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 9 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0008EDEE
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 10 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0009EBE8
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 11 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000AE9E2
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 12 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000BE7DC
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 13 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000CE5D6
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 14 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000DE3D0
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 15 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000EE1CA
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 16 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000FDFC4
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 17 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0010DDBE
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 18 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0011DBB8
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 19 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0012D9B2
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 20 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0013D7AC
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 21 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0014D5A6
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 22 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0015D3A0
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 23 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0016D19A
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 24 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0017CF94
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 25 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0018CD8E
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 26 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0019CB88
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 27 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x001AC982
+ Length = 65016
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 28 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x001BC77C
+ Length = 9096
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 29 of 29
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x001BEB06
+ Length = 188
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x009F] DefinedName="IPTC-NAA record"
+ IPTC [002:025] Keywords = "jpeg, productbeelden, productie, ptc, ptc369x1, pulsar"
+ IPTC [002:210] ? = ???
+ IPTC [002:211] ? = ???
+ IPTC [002:212] ? = ???
+ IPTC [002:213] ? = ???
+ IPTC [002:214] ? = ???
+ IPTC [002:215] ? = ???
+ IPTC [002:216] ? = ???
+ IPTC [002:217] ? = ???
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x001BEBC4
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=2.99 variance=6.13)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x001BEC09
+ Frame header length = 20
+ Precision = 8
+ Number of Lines = 900
+ Samples per Line = 414
+ Image Size = 414 x 900
+ Raw Image Orientation = Portrait
+ Number of Img components = 4
+ Component[1]: ID=0x43, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Y)
+ Component[2]: ID=0x4D, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Cb)
+ Component[3]: ID=0x59, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Cr)
+ Component[4]: ID=0x4B, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (K)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x001BEC1F
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x001BEC40
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x001BECF7
+ Scan header length = 14
+ Number of img components = 4
+ Component[1]: selector=0x43, table=0(DC),0(AC)
+ Component[2]: selector=0x4D, table=0(DC),0(AC)
+ Component[3]: selector=0x59, table=0(DC),0(AC)
+ Component[4]: selector=0x4B, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00269FC4
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01BC2BB6764A7F9709F829E766D93AAE
+ Signature (Rotated): 01BC2BB6764A7F9709F829E766D93AAE
+ File Offset: 0 bytes
+ Chroma subsampling: ?x?
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[IJG Library ] [100 Gray ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [100 Gray ]
+ SW :[IrfanView ] [100 Gray ]
+ SW :[idImager ] [100 Gray ]
+ SW :[FastStone Image Viewer ] [100 Gray ]
+ SW :[NeatImage ] [100 Gray ]
+ SW :[Paint.NET ] [100 Gray ]
+ SW :[Photomatix ] [100 Gray ]
+ SW :[XnView ] [100 Gray ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/exif.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/exif.jpg.txt
new file mode 100644
index 000000000..df54994c5
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/exif.jpg.txt
@@ -0,0 +1,454 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\exif.jpg]
+ Filesize: [32764] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 7678
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0009
+ [Make ] = "Canon"
+ [Model ] = "Canon PowerShot S40"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 180/1
+ [YResolution ] = 180/1
+ [ResolutionUnit ] = Inch
+ [DateTime ] = "2003:12:14 12:01:44"
+ [YCbCrPositioning ] = Centered
+ [ExifOffset ] = @ 0x00C4
+ Offset to Next IFD = 0x000005BE
+
+ EXIF IFD1 @ Absolute 0x000005DC
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 180/1
+ [YResolution ] = 180/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x07F4 = @ 0x0812
+ [JpegIFByteCount ] = 0x[00001548] / 5448
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000E2
+ Dir Length = 0x001F
+ [ExposureTime ] = 1/500 s
+ [FNumber ] = F4.9
+ [ExifVersion ] = 02.20
+ [DateTimeOriginal ] = "2003:12:14 12:01:44"
+ [DateTimeDigitized ] = "2003:12:14 12:01:44"
+ [ComponentsConfiguration ] = [Y Cb Cr .]
+ [CompressedBitsPerPixel ] = 5/1
+ [ShutterSpeedValue ] = 287/32
+ [ApertureValue ] = 149/32
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 194698/65536
+ [MeteringMode ] = CenterWeightedAverage
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 21 mm
+ [MakerNote ] = @ 0x03AE
+ [UserComment ] = ""
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 2272
+ [ExifImageHeight ] = 1704
+ [ExifInteroperabilityOffset ] = @ 0x0588
+ [FocalPlaneXResolution ] = 2272000/280
+ [FocalPlaneYResolution ] = 1704000/210
+ [FocalPlaneResolutionUnit ] = Inch
+ [SensingMethod ] = One-chip color area sensor
+ [FileSource ] = DSC
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Auto exposure
+ [WhiteBalance ] = Auto white balance
+ [DigitalZoomRatio ] = 2272/2272
+ [SceneCaptureType ] = Standard
+
+ EXIF MakerIFD @ Absolute 0x000003CC
+ Makernote decode option not enabled.
+
+ EXIF InteropIFD @ Absolute 0x000005A6
+ Dir Length = 0x0004
+ [InteroperabilityIndex ] = "R98"
+ [InteroperabilityVersion ] = 01.00
+ [RelatedImageWidth ] = 2272
+ [RelatedImageLength ] = 1704
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00001E14
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00001E59
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00001E9E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 360
+ Samples per Line = 480
+ Image Size = 480 x 360
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001EB1
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (005 total): 01 02 04 05 06
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001ECF
+ Huffman table length = 65
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (002 total): 12 21
+ Codes of length 06 bits (004 total): 05 31 41 51
+ Codes of length 07 bits (004 total): 13 22 61 71
+ Codes of length 08 bits (004 total): 06 32 81 91
+ Codes of length 09 bits (004 total): 14 42 A1 B1
+ Codes of length 10 bits (004 total): 23 52 C1 D1
+ Codes of length 11 bits (005 total): 07 15 33 62 E1
+ Codes of length 12 bits (003 total): 43 72 F0
+ Codes of length 13 bits (003 total): 24 92 F1
+ Codes of length 14 bits (004 total): 16 34 53 82
+ Codes of length 15 bits (003 total): 25 83 C2
+ Codes of length 16 bits (000 total):
+ Total number of codes: 046
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001F12
+ Huffman table length = 26
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001F2E
+ Huffman table length = 45
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (004 total): 04 12 21 31
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (004 total): 13 22 51 61
+ Codes of length 08 bits (002 total): 32 71
+ Codes of length 09 bits (002 total): 05 14
+ Codes of length 10 bits (002 total): 23 91
+ Codes of length 11 bits (001 total): F0
+ Codes of length 12 bits (005 total): 33 42 81 A1 B1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 026
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001F5D
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00001F6B
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00007FFA.0
+
+ Compression stats:
+ Compression Ratio: 20.97:1
+ Bits per pixel: 1.14:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 509 ( 18%)
+ # codes of length 03 bits: 1910 ( 69%)
+ # codes of length 04 bits: 249 ( 9%)
+ # codes of length 05 bits: 87 ( 3%)
+ # codes of length 06 bits: 5 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 905 ( 66%)
+ # codes of length 03 bits: 213 ( 15%)
+ # codes of length 04 bits: 169 ( 12%)
+ # codes of length 05 bits: 84 ( 6%)
+ # codes of length 06 bits: 9 ( 1%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 14518 ( 48%)
+ # codes of length 03 bits: 2881 ( 10%)
+ # codes of length 04 bits: 6591 ( 22%)
+ # codes of length 05 bits: 2038 ( 7%)
+ # codes of length 06 bits: 2356 ( 8%)
+ # codes of length 07 bits: 926 ( 3%)
+ # codes of length 08 bits: 484 ( 2%)
+ # codes of length 09 bits: 220 ( 1%)
+ # codes of length 10 bits: 149 ( 0%)
+ # codes of length 11 bits: 76 ( 0%)
+ # codes of length 12 bits: 27 ( 0%)
+ # codes of length 13 bits: 14 ( 0%)
+ # codes of length 14 bits: 8 ( 0%)
+ # codes of length 15 bits: 3 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2784 ( 53%)
+ # codes of length 03 bits: 1230 ( 24%)
+ # codes of length 04 bits: 370 ( 7%)
+ # codes of length 05 bits: 582 ( 11%)
+ # codes of length 06 bits: 94 ( 2%)
+ # codes of length 07 bits: 121 ( 2%)
+ # codes of length 08 bits: 26 ( 0%)
+ # codes of length 09 bits: 14 ( 0%)
+ # codes of length 10 bits: 6 ( 0%)
+ # codes of length 11 bits: 2 ( 0%)
+ # codes of length 12 bits: 5 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[122] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1008, 9, 27] RGB=[255,251,255] @ MCU[ 15, 13]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00007FF9.7
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00007FFA
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000812
+ Length: 0x00001548 (5448)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: DQT
+ Length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 9 6 5 9 13 22 29 35
+ DQT, Row #1: 6 6 8 11 15 33 34 30
+ DQT, Row #2: 8 7 9 13 22 33 39 31
+ DQT, Row #3: 8 9 12 16 28 49 45 34
+ DQT, Row #4: 10 12 21 32 39 61 58 42
+ DQT, Row #5: 13 19 31 36 45 58 63 51
+ DQT, Row #6: 28 36 44 49 58 68 66 55
+ DQT, Row #7: 41 52 54 55 62 56 57 54
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 9 9 12 20 15 26 79 79
+ DQT, Row #1: 9 10 12 10 26 26 79 79
+ DQT, Row #2: 12 12 10 10 26 79 79 79
+ DQT, Row #3: 20 10 10 26 79 79 79 79
+ DQT, Row #4: 15 26 26 79 79 79 79 79
+ DQT, Row #5: 26 26 79 79 79 79 79 79
+ DQT, Row #6: 79 79 79 79 79 79 79 79
+ DQT, Row #7: 79 79 79 79 79 79 79 79
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 120
+ Samples per Line = 160
+ Image Size = 160 x 120
+
+ * Embedded Thumb Marker: DHT
+ Length = 418
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 4869 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 01D91E583DD0037108266E42ED3A262C
+
+*** Searching Compression Signatures ***
+
+ Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+ Signature (Rotated): 012D821C6AB210E2A753BE053B8F55D0
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: OK [Canon] [Canon PowerShot S40]
+ EXIF Makernotes: OK
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[SONY ] [CYBERSHOT U ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+ SW :[Apple Quicktime ] [0466-0467 ]
+ SW :[Digital Photo Professiona] [05 ]
+ SW :[IJG Library ] [075 ]
+ SW :[MS Paint ] [ ]
+ SW :[MS Visio ] [ ]
+ SW :[ZoomBrowser EX ] [low ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [075 ]
+ SW :[IrfanView ] [075 ]
+ SW :[idImager ] [075 ]
+ SW :[FastStone Image Viewer ] [075 ]
+ SW :[NeatImage ] [075 ]
+ SW :[Paint.NET ] [075 ]
+ SW :[Photomatix ] [075 ]
+ SW :[XnView ] [075 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 4 - Uncertain if processed or original
+ While the EXIF fields indicate original, no compression signatures
+ in the current database were found matching this make/model
+
+ Appears to be new signature for known camera.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/gamma_dalai_lama_gray.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/gamma_dalai_lama_gray.jpg.txt
new file mode 100644
index 000000000..a5adb0247
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/gamma_dalai_lama_gray.jpg.txt
@@ -0,0 +1,339 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\gamma_dalai_lama_gray.jpg]
+ Filesize: [84887] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x00000014
+ Comment length = 46
+ Comment= Scaled 1:2 this image wrongly becomes gray.
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000044
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=2.99 variance=6.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000089
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=1.54 variance=1.58)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000000CE
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 222
+ Samples per Line = 258
+ Image Size = 258 x 222
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000E1
+ Huffman table length = 25
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 01 02 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 006
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000FC
+ Huffman table length = 111
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (002 total): 05 21
+ Codes of length 06 bits (007 total): 00 06 12 13 14 31 41
+ Codes of length 07 bits (003 total): 22 51 61
+ Codes of length 08 bits (007 total): 07 15 16 32 42 71 81
+ Codes of length 09 bits (005 total): 08 23 52 62 91
+ Codes of length 10 bits (008 total): 33 43 44 72 A1 A2 B1 E3
+ Codes of length 11 bits (010 total): 17 24 53 54 55 66 82 92 95 C1
+ Codes of length 12 bits (009 total): 18 25 28 34 45 56 63 64 65
+ Codes of length 13 bits (014 total): 26 27 46 73 76 85 93 96 A3 A5 A6 C3 C7 D7
+ Codes of length 14 bits (010 total): 83 86 B2 B3 B8 C6 D3 D6 E8 F0
+ Codes of length 15 bits (011 total): 36 37 48 74 75 84 94 A8 B4 B6 D1
+ Codes of length 16 bits (001 total): D2
+ Total number of codes: 092
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000016D
+ Huffman table length = 27
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (001 total): 06
+ Codes of length 08 bits (001 total): 07
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000018A
+ Huffman table length = 121
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 02 03 04
+ Codes of length 04 bits (002 total): 05 11
+ Codes of length 05 bits (002 total): 06 21
+ Codes of length 06 bits (005 total): 07 08 12 13 31
+ Codes of length 07 bits (009 total): 00 09 14 16 17 22 32 41 51
+ Codes of length 08 bits (005 total): 0A 15 23 42 61
+ Codes of length 09 bits (005 total): 18 24 33 52 71
+ Codes of length 10 bits (002 total): 62 81
+ Codes of length 11 bits (007 total): 19 34 43 53 72 82 91
+ Codes of length 12 bits (007 total): 25 44 54 56 63 A1 A2
+ Codes of length 13 bits (014 total): 1A 26 27 28 46 47 55 57 64 73 97 B1 E3 E6
+ Codes of length 14 bits (007 total): 35 45 48 58 92 A4 C1
+ Codes of length 15 bits (002 total): D8 29
+ Codes of length 16 bits (031 total): 67 74 83 85 93 94 B2 36 68 87 88 98 D6 F0 37 39
+ 65 66 75 78 84 96 A3 A6 A8 C3 C9 D1 D3 D9 DA
+ Total number of codes: 102
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000205
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00000213
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00014B95.0
+
+ Compression stats:
+ Compression Ratio: 2.04:1
+ Bits per pixel: 11.78:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 893 ( 97%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 23 ( 2%)
+ # codes of length 04 bits: 4 ( 0%)
+ # codes of length 05 bits: 4 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 1728 ( 94%)
+ # codes of length 02 bits: 46 ( 2%)
+ # codes of length 03 bits: 30 ( 2%)
+ # codes of length 04 bits: 18 ( 1%)
+ # codes of length 05 bits: 14 ( 1%)
+ # codes of length 06 bits: 6 ( 0%)
+ # codes of length 07 bits: 4 ( 0%)
+ # codes of length 08 bits: 2 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 14381 ( 45%)
+ # codes of length 03 bits: 3819 ( 12%)
+ # codes of length 04 bits: 4489 ( 14%)
+ # codes of length 05 bits: 2199 ( 7%)
+ # codes of length 06 bits: 3836 ( 12%)
+ # codes of length 07 bits: 911 ( 3%)
+ # codes of length 08 bits: 1089 ( 3%)
+ # codes of length 09 bits: 398 ( 1%)
+ # codes of length 10 bits: 294 ( 1%)
+ # codes of length 11 bits: 190 ( 1%)
+ # codes of length 12 bits: 84 ( 0%)
+ # codes of length 13 bits: 75 ( 0%)
+ # codes of length 14 bits: 21 ( 0%)
+ # codes of length 15 bits: 11 ( 0%)
+ # codes of length 16 bits: 1 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 17100 ( 23%)
+ # codes of length 03 bits: 31709 ( 42%)
+ # codes of length 04 bits: 7638 ( 10%)
+ # codes of length 05 bits: 4203 ( 6%)
+ # codes of length 06 bits: 6465 ( 9%)
+ # codes of length 07 bits: 5462 ( 7%)
+ # codes of length 08 bits: 1472 ( 2%)
+ # codes of length 09 bits: 804 ( 1%)
+ # codes of length 10 bits: 206 ( 0%)
+ # codes of length 11 bits: 296 ( 0%)
+ # codes of length 12 bits: 156 ( 0%)
+ # codes of length 13 bits: 164 ( 0%)
+ # codes of length 14 bits: 47 ( 0%)
+ # codes of length 15 bits: 7 ( 0%)
+ # codes of length 16 bits: 55 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[125] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ -8, 0, 0] RGB=[127,127,127] @ MCU[ 0, 0]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00014B94.4
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00014B95
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01BBB1709AC9C1F89220D955A31A8F34
+ Signature (Rotated): 01BBB1709AC9C1F89220D955A31A8F34
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[CASIO COMPUTER CO.,LTD ] [EX-Z750 ] [ ] No
+ CAM:[CASIO COMPUTER CO.,LTD. ] [EX-Z1000 ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio S5i ] [ ] No
+ CAM:[SIGMA ] [SIGMA SD9 ] [ ] No
+ SW :[ACDSee ] [100 ]
+ SW :[Apple ImageIO.framework ] [100 (Best) ]
+ SW :[Digital Photo Professiona] [10 ]
+ SW :[IJG Library ] [100 ]
+ SW :[MS Office Pic Mgr ] [ ]
+ SW :[Nikon Scan ] [Excellent Qualit]
+ SW :[Picasa ] [100 (Maximum) ]
+ SW :[ZoomBrowser EX ] [highest ]
+ SW :[EOS Viewer Utility ] [ ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [100 ]
+ SW :[IrfanView ] [100 ]
+ SW :[idImager ] [100 ]
+ SW :[FastStone Image Viewer ] [100 ]
+ SW :[NeatImage ] [100 ]
+ SW :[Paint.NET ] [100 ]
+ SW :[Photomatix ] [100 ]
+ SW :[XnView ] [100 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg400jfif.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg400jfif.jpg.txt
new file mode 100644
index 000000000..b686b3ce3
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg400jfif.jpg.txt
@@ -0,0 +1,211 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\jpeg400jfif.jpg]
+ Filesize: [45066] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.2]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ Approx quality factor = 88.28 (scaling=23.43 variance=111.68)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00000059
+ Frame header length = 11
+ Precision = 8
+ Number of Lines = 800
+ Samples per Line = 600
+ Image Size = 600 x 800
+ Raw Image Orientation = Portrait
+ Number of Img components = 1
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00000066
+ Length = 4
+ interval = 75
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000006C
+ Huffman table length = 210
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (007 total): 04 05 03 02 06 01 00
+ Codes of length 04 bits (001 total): 07
+ Codes of length 05 bits (001 total): 08
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (001 total): 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 11 04 00
+ Codes of length 05 bits (003 total): 05 21 12
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 51 06 13 61
+ Codes of length 08 bits (002 total): 22 71
+ Codes of length 09 bits (006 total): 81 14 32 91 A1 07
+ Codes of length 10 bits (007 total): 15 B1 42 23 C1 52 D1
+ Codes of length 11 bits (003 total): E1 33 16
+ Codes of length 12 bits (004 total): 62 F0 24 72
+ Codes of length 13 bits (002 total): 82 F1
+ Codes of length 14 bits (006 total): 25 43 34 53 92 A2
+ Codes of length 15 bits (002 total): B2 63
+ Codes of length 16 bits (115 total): 73 C2 35 44 27 93 A3 B3 36 17 54 64 74 C3 D2 E2
+ 08 26 83 09 0A 18 19 84 94 45 46 A4 B4 56 D3 55
+ 28 1A F2 E3 F3 C4 D4 E4 F4 65 75 85 95 A5 B5 C5
+ D5 E5 F5 66 76 86 96 A6 B6 C6 D6 E6 F6 37 47 57
+ 67 77 87 97 A7 B7 C7 D7 E7 F7 38 48 58 68 78 88
+ 98 A8 B8 C8 D8 E8 F8 29 39 49 59 69 79 89 99 A9
+ B9 C9 D9 E9 F9 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA
+ DA EA FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000140
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000014A
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0000B008.0
+
+ Compression stats:
+ Compression Ratio: 10.73:1
+ Bits per pixel: 0.75:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 7215 ( 96%)
+ # codes of length 04 bits: 146 ( 2%)
+ # codes of length 05 bits: 139 ( 2%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 26194 ( 42%)
+ # codes of length 03 bits: 2772 ( 4%)
+ # codes of length 04 bits: 16626 ( 27%)
+ # codes of length 05 bits: 5914 ( 9%)
+ # codes of length 06 bits: 4996 ( 8%)
+ # codes of length 07 bits: 2599 ( 4%)
+ # codes of length 08 bits: 988 ( 2%)
+ # codes of length 09 bits: 1360 ( 2%)
+ # codes of length 10 bits: 617 ( 1%)
+ # codes of length 11 bits: 60 ( 0%)
+ # codes of length 12 bits: 152 ( 0%)
+ # codes of length 13 bits: 60 ( 0%)
+ # codes of length 14 bits: 30 ( 0%)
+ # codes of length 15 bits: 5 ( 0%)
+ # codes of length 16 bits: 28 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[ 58] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 894, 0, 0] RGB=[239,239,239] @ MCU[ 35, 23]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 99
+ Next position in scan buffer: Offset 0x0000B007.2
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000B008
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01BE82BEB1019CB30EB122273E78E87C
+ Signature (Rotated): 01BE82BEB1019CB30EB122273E78E87C
+ File Offset: 0 bytes
+ Chroma subsampling: Gray
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420exif.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420exif.jpg.txt
new file mode 100644
index 000000000..babe797d6
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420exif.jpg.txt
@@ -0,0 +1,412 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\jpeg420exif.jpg]
+ Filesize: [768608] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 8817
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0008
+ [Make ] = "Hewlett-Packard Company"
+ [Model ] = "HP PhotoSmart 715"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [YCbCrPositioning ] = Centered
+ [ExifOffset ] = @ 0x006E
+ Offset to Next IFD = 0x0000018E
+
+ EXIF IFD1 @ Absolute 0x0000019A
+ Dir Length = 0x0007
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x0C07 = @ 0x0C13
+ [JpegIFByteCount ] = 0x[00001658] / 5720
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x0000007A
+ Dir Length = 0x0015
+ [ExposureTime ] = 48/10000 s
+ [FNumber ] = F8.2
+ [ISOSpeedRatings ] = 100
+ [ExifVersion ] = 02.10
+ [DateTimeOriginal ] = "2001:10:02 14:57:31"
+ [DateTimeDigitized ] = "2001:10:02 14:57:31"
+ [ComponentsConfiguration ] = [Y Cb Cr .]
+ [CompressedBitsPerPixel ] = 20/10
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 20/10
+ [SubjectDistance ] = 5043/1000
+ [MeteringMode ] = CenterWeightedAverage
+ [LightSource ] = unknown
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 7 mm
+ [MakerNote ] = @ 0x0282
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 2048
+ [ExifImageHeight ] = 1536
+ [ExifInteroperabilityOffset ] = @ 0x0170
+
+ EXIF MakerIFD @ Absolute 0x0000028E
+ Makernote decode option not enabled.
+
+ EXIF InteropIFD @ Absolute 0x0000017C
+ Dir Length = 0x0002
+ [InteroperabilityIndex ] = "R98"
+ [InteroperabilityVersion ] = 01.00
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00002275
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 9 11 14
+ DQT, Row #1: 3 3 3 4 5 12 13 12
+ DQT, Row #2: 3 3 3 5 9 12 15 12
+ DQT, Row #3: 3 3 5 6 11 19 18 13
+ DQT, Row #4: 3 5 7 12 15 24 23 17
+ DQT, Row #5: 5 7 12 14 18 23 25 21
+ DQT, Row #6: 11 14 17 19 23 27 27 22
+ DQT, Row #7: 16 21 21 22 25 22 23 22
+ Approx quality factor = 89.24 (scaling=21.52 variance=2.21)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 3 5 10 22 22 22 22
+ DQT, Row #1: 3 5 5 14 22 22 22 22
+ DQT, Row #2: 5 5 11 22 22 22 22 22
+ DQT, Row #3: 10 14 22 22 22 22 22 22
+ DQT, Row #4: 22 22 22 22 22 22 22 22
+ DQT, Row #5: 22 22 22 22 22 22 22 22
+ DQT, Row #6: 22 22 22 22 22 22 22 22
+ DQT, Row #7: 22 22 22 22 22 22 22 22
+ Approx quality factor = 89.12 (scaling=21.76 variance=1.62)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000022FB
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000249F
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1536
+ Samples per Line = 2048
+ Image Size = 2048 x 1536
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000024B2
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000024C0
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x000BBA5E.0
+
+ Compression stats:
+ Compression Ratio: 12.43:1
+ Bits per pixel: 1.93:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 4275 ( 9%)
+ # codes of length 03 bits: 32688 ( 67%)
+ # codes of length 04 bits: 5786 ( 12%)
+ # codes of length 05 bits: 3984 ( 8%)
+ # codes of length 06 bits: 2042 ( 4%)
+ # codes of length 07 bits: 377 ( 1%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 16194 ( 66%)
+ # codes of length 03 bits: 3495 ( 14%)
+ # codes of length 04 bits: 2416 ( 10%)
+ # codes of length 05 bits: 1460 ( 6%)
+ # codes of length 06 bits: 736 ( 3%)
+ # codes of length 07 bits: 261 ( 1%)
+ # codes of length 08 bits: 14 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 363342 ( 41%)
+ # codes of length 03 bits: 113855 ( 13%)
+ # codes of length 04 bits: 200569 ( 23%)
+ # codes of length 05 bits: 102577 ( 12%)
+ # codes of length 06 bits: 32874 ( 4%)
+ # codes of length 07 bits: 43593 ( 5%)
+ # codes of length 08 bits: 14054 ( 2%)
+ # codes of length 09 bits: 8847 ( 1%)
+ # codes of length 10 bits: 4365 ( 0%)
+ # codes of length 11 bits: 2009 ( 0%)
+ # codes of length 12 bits: 770 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 17 ( 0%)
+ # codes of length 16 bits: 780 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 60258 ( 49%)
+ # codes of length 03 bits: 17570 ( 14%)
+ # codes of length 04 bits: 20881 ( 17%)
+ # codes of length 05 bits: 14001 ( 11%)
+ # codes of length 06 bits: 6443 ( 5%)
+ # codes of length 07 bits: 842 ( 1%)
+ # codes of length 08 bits: 1737 ( 1%)
+ # codes of length 09 bits: 387 ( 0%)
+ # codes of length 10 bits: 169 ( 0%)
+ # codes of length 11 bits: 93 ( 0%)
+ # codes of length 12 bits: 31 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 2 ( 0%)
+ # codes of length 15 bits: 5 ( 0%)
+ # codes of length 16 bits: 1 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[108] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 996, 0, -33] RGB=[244,255,252] @ MCU[ 32, 59]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x000BBA5D.5
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000BBA5E
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000C13
+ Length: 0x00001658 (5720)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: DQT
+ Length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 10 6 6 10 14 26 32 40
+ DQT, Row #1: 8 8 8 12 16 36 38 36
+ DQT, Row #2: 8 8 10 14 26 36 44 36
+ DQT, Row #3: 8 10 14 18 32 56 52 40
+ DQT, Row #4: 10 14 22 36 44 70 66 50
+ DQT, Row #5: 14 22 36 42 52 68 74 60
+ DQT, Row #6: 32 42 50 56 66 78 78 64
+ DQT, Row #7: 46 60 62 64 74 64 66 64
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 10 10 14 30 64 64 64 64
+ DQT, Row #1: 10 14 16 42 64 64 64 64
+ DQT, Row #2: 14 16 36 64 64 64 64 64
+ DQT, Row #3: 30 42 64 64 64 64 64 64
+ DQT, Row #4: 64 64 64 64 64 64 64 64
+ DQT, Row #5: 64 64 64 64 64 64 64 64
+ DQT, Row #6: 64 64 64 64 64 64 64 64
+ DQT, Row #7: 64 64 64 64 64 64 64 64
+
+ * Embedded Thumb Marker: DHT
+ Length = 418
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 120
+ Samples per Line = 160
+ Image Size = 160 x 120
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 5141 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 0158E595F22440126FB766B33F56B158
+
+*** Searching Compression Signatures ***
+
+ Signature: 010A5B03EB73D6AF719B39FCC8C3AE25
+ Signature (Rotated): 011326BE69D2A27FCF4DBCC33DEB07A2
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: OK [Hewlett-Packard Company] [HP PhotoSmart 715]
+ EXIF Makernotes: OK
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 4 - Uncertain if processed or original
+ While the EXIF fields indicate original, no compression signatures
+ in the current database were found matching this make/model
+
+ Appears to be new signature for known camera.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420small.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420small.jpg.txt
new file mode 100644
index 000000000..c001d7297
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg420small.jpg.txt
@@ -0,0 +1,330 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\jpeg420small.jpg]
+ Filesize: [5276] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 96 x 96 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 5 3 3 5 7 12 15 18
+ DQT, Row #1: 4 4 4 6 8 17 18 17
+ DQT, Row #2: 4 4 5 7 12 17 21 17
+ DQT, Row #3: 4 5 7 9 15 26 24 19
+ DQT, Row #4: 5 7 11 17 20 33 31 23
+ DQT, Row #5: 7 11 17 19 24 31 34 28
+ DQT, Row #6: 15 19 23 26 31 36 36 30
+ DQT, Row #7: 22 28 29 29 34 30 31 30
+ Approx quality factor = 84.93 (scaling=30.13 variance=1.05)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 5 5 7 14 30 30 30 30
+ DQT, Row #1: 5 6 8 20 30 30 30 30
+ DQT, Row #2: 7 8 17 30 30 30 30 30
+ DQT, Row #3: 14 20 30 30 30 30 30 30
+ DQT, Row #4: 30 30 30 30 30 30 30 30
+ DQT, Row #5: 30 30 30 30 30 30 30 30
+ DQT, Row #6: 30 30 30 30 30 30 30 30
+ DQT, Row #7: 30 30 30 30 30 30 30 30
+ Approx quality factor = 84.93 (scaling=30.15 variance=0.29)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 100
+ Samples per Line = 200
+ Image Size = 200 x 100
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 04
+ Codes of length 03 bits (005 total): 00 02 03 05 07
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000CF
+ Huffman table length = 66
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 11 21
+ Codes of length 05 bits (002 total): 04 12
+ Codes of length 06 bits (004 total): 05 06 31 41
+ Codes of length 07 bits (004 total): 07 13 22 51
+ Codes of length 08 bits (002 total): 32 61
+ Codes of length 09 bits (005 total): 71 72 B1 D1 D2
+ Codes of length 10 bits (007 total): 14 23 33 62 81 91 A1
+ Codes of length 11 bits (010 total): 15 16 24 25 34 42 44 82 92 A2
+ Codes of length 12 bits (007 total): 26 52 53 54 64 94 C2
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 047
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000113
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 06 07
+ Codes of length 03 bits (002 total): 04 05
+ Codes of length 04 bits (003 total): 00 03 08
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 02
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000131
+ Huffman table length = 63
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 02
+ Codes of length 04 bits (002 total): 03 04
+ Codes of length 05 bits (004 total): 05 06 11 21
+ Codes of length 06 bits (007 total): 07 12 34 51 61 72 B1
+ Codes of length 07 bits (014 total): 13 15 16 17 31 32 33 35 41 53 71 91 92 D1
+ Codes of length 08 bits (004 total): 22 62 C1 E1
+ Codes of length 09 bits (006 total): 14 52 54 81 82 B2
+ Codes of length 10 bits (003 total): 36 42 C2
+ Codes of length 11 bits (001 total): F0
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 044
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000172
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00000180
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0000149A.0
+
+ Compression stats:
+ Compression Ratio: 12.27:1
+ Bits per pixel: 1.96:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 69 ( 19%)
+ # codes of length 03 bits: 232 ( 64%)
+ # codes of length 04 bits: 34 ( 9%)
+ # codes of length 05 bits: 19 ( 5%)
+ # codes of length 06 bits: 10 ( 3%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 76 ( 42%)
+ # codes of length 03 bits: 60 ( 33%)
+ # codes of length 04 bits: 36 ( 20%)
+ # codes of length 05 bits: 5 ( 3%)
+ # codes of length 06 bits: 5 ( 3%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2698 ( 51%)
+ # codes of length 03 bits: 506 ( 10%)
+ # codes of length 04 bits: 1064 ( 20%)
+ # codes of length 05 bits: 373 ( 7%)
+ # codes of length 06 bits: 334 ( 6%)
+ # codes of length 07 bits: 133 ( 3%)
+ # codes of length 08 bits: 37 ( 1%)
+ # codes of length 09 bits: 43 ( 1%)
+ # codes of length 10 bits: 33 ( 1%)
+ # codes of length 11 bits: 26 ( 0%)
+ # codes of length 12 bits: 7 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 276 ( 20%)
+ # codes of length 03 bits: 340 ( 25%)
+ # codes of length 04 bits: 214 ( 15%)
+ # codes of length 05 bits: 190 ( 14%)
+ # codes of length 06 bits: 141 ( 10%)
+ # codes of length 07 bits: 170 ( 12%)
+ # codes of length 08 bits: 29 ( 2%)
+ # codes of length 09 bits: 17 ( 1%)
+ # codes of length 10 bits: 6 ( 0%)
+ # codes of length 11 bits: 1 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[ 86] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 250, -405, 230] RGB=[198,156, 68] @ MCU[ 0, 6]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00001499.3
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000149A
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0155D875C95B74D0F3C5835A62516F48
+ Signature (Rotated): 01D38A25358EB7649A254E19F1D46600
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[Nokia ] [N73 ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 8100 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ SW :[IJG Library ] [085 ]
+ SW :[Picasa ] [085 (Normal) ]
+ SW :[ZoomBrowser EX ] [medium ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [085 ]
+ SW :[IrfanView ] [085 ]
+ SW :[idImager ] [085 ]
+ SW :[FastStone Image Viewer ] [085 ]
+ SW :[NeatImage ] [085 ]
+ SW :[Paint.NET ] [085 ]
+ SW :[Photomatix ] [085 ]
+ SW :[XnView ] [085 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg444.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg444.jpg.txt
new file mode 100644
index 000000000..06a1ee426
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/jpeg444.jpg.txt
@@ -0,0 +1,405 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\jpeg444.jpg]
+ Filesize: [5667] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.0]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 68
+ Identifier = [This is an unknown APP marker. Compliant decoders must ignore it.]
+Identifier [This is an unknown APP marker. Compliant decoders must ignore it.] not supported. Skipping remainder.
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0000005A
+ Length = 68
+ Identifier = [This is an unknown APP marker. Compliant decoders must ignore it.]
+ Not supported. Skipping remainder.
+
+*** Marker: APP3 (xFFE3) ***
+ OFFSET: 0x000000A0
+ Length = 68
+
+*** Marker: APP4 (xFFE4) ***
+ OFFSET: 0x000000E6
+ Length = 68
+
+*** Marker: APP5 (xFFE5) ***
+ OFFSET: 0x0000012C
+ Length = 68
+
+*** Marker: APP6 (xFFE6) ***
+ OFFSET: 0x00000172
+ Length = 68
+
+*** Marker: APP7 (xFFE7) ***
+ OFFSET: 0x000001B8
+ Length = 68
+
+*** Marker: APP8 (xFFE8) ***
+ OFFSET: 0x000001FE
+ Length = 68
+
+*** Marker: APP9 (xFFE9) ***
+ OFFSET: 0x00000244
+ Length = 68
+
+*** Marker: APP10 (xFFEA) ***
+ OFFSET: 0x0000028A
+ Length = 68
+
+*** Marker: APP11 (xFFEB) ***
+ OFFSET: 0x000002D0
+ Length = 68
+
+*** Marker: APP12 (xFFEC) ***
+ OFFSET: 0x00000316
+ Length = 68
+ Identifier = [This is an unknown APP marker. Compliant decoders must ignore it.]
+ Not Photoshop DUCKY. Skipping remainder.
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x0000035C
+ Length = 68
+ Identifier = [This is an unknown APP marker. Compliant decoders must ignore it.]
+ Not Photoshop. Skipping remainder.
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x000003A2
+ Length = 68
+ DCTEncodeVersion = 26995
+ APP14Flags0 = 8289
+ APP14Flags1 = 28192
+ ColorTransform = 117 [???]
+
+*** Marker: APP15 (xFFEF) ***
+ OFFSET: 0x000003E8
+ Length = 68
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000042E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 256
+ Samples per Line = 256
+ Image Size = 256 x 256
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x02 (Chrom: Cr)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000441
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000486
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000004CB
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=2 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000510
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000006B4
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000006C2
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00001620.0
+
+ Compression stats:
+ Compression Ratio: 49.99:1
+ Bits per pixel: 0.48:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 992 ( 97%)
+ # codes of length 03 bits: 31 ( 3%)
+ # codes of length 04 bits: 0 ( 0%)
+ # codes of length 05 bits: 1 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 1023 ( 50%)
+ # codes of length 03 bits: 864 ( 42%)
+ # codes of length 04 bits: 128 ( 6%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 2 ( 0%)
+ # codes of length 08 bits: 31 ( 2%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 0 ( 0%)
+ # codes of length 04 bits: 1024 ( 50%)
+ # codes of length 05 bits: 1024 ( 50%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2048 ( 67%)
+ # codes of length 03 bits: 1024 ( 33%)
+ # codes of length 04 bits: 0 ( 0%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[126] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 984,-1026, -999] RGB=[ 75,255, 24] @ MCU[ 0, 31]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0000161F.6
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00001620
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 019DC7724B5425C464D28F2CF78F707E
+ Signature (Rotated): 016C4383FFABE35F063D8FCB331942C0
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E4800 ] [NORMAL ] No
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
+
+*** Additional Info ***
+NOTE: Data exists after EOF, range: 0x00001622-0x00001623 (1 bytes)
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ratio-1x1.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ratio-1x1.jpg.txt
new file mode 100644
index 000000000..b2ae24c46
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ratio-1x1.jpg.txt
@@ -0,0 +1,338 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\ratio-1x1.jpg]
+ Filesize: [34674] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 4 6 8 10
+ DQT, Row #1: 2 2 2 3 4 9 10 9
+ DQT, Row #2: 2 2 3 4 6 9 11 9
+ DQT, Row #3: 2 3 4 5 8 14 13 10
+ DQT, Row #4: 3 4 6 9 11 17 16 12
+ DQT, Row #5: 4 6 9 10 13 17 18 15
+ DQT, Row #6: 8 10 12 14 16 19 19 16
+ DQT, Row #7: 12 15 15 16 18 16 16 16
+ Approx quality factor = 91.86 (scaling=16.28 variance=1.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 3 4 8 16 16 16 16
+ DQT, Row #1: 3 3 4 11 16 16 16 16
+ DQT, Row #2: 4 4 9 16 16 16 16 16
+ DQT, Row #3: 8 11 16 16 16 16 16 16
+ DQT, Row #4: 16 16 16 16 16 16 16 16
+ DQT, Row #5: 16 16 16 16 16 16 16 16
+ DQT, Row #6: 16 16 16 16 16 16 16 16
+ DQT, Row #7: 16 16 16 16 16 16 16 16
+ Approx quality factor = 91.90 (scaling=16.20 variance=0.15)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 769
+ Samples per Line = 1900
+ Image Size = 1900 x 769
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 29
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 07 08
+ Codes of length 04 bits (002 total): 06 09
+ Codes of length 05 bits (002 total): 04 05
+ Codes of length 06 bits (003 total): 01 02 03
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000D0
+ Huffman table length = 78
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 01
+ Codes of length 04 bits (003 total): 02 03 04
+ Codes of length 05 bits (003 total): 05 06 11
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (005 total): 08 12 21 31 41
+ Codes of length 08 bits (005 total): 13 14 22 51 61
+ Codes of length 09 bits (003 total): 15 32 71
+ Codes of length 10 bits (009 total): 09 16 23 52 62 81 91 92 A1
+ Codes of length 11 bits (005 total): 17 33 42 72 82
+ Codes of length 12 bits (005 total): 24 43 54 93 B3
+ Codes of length 13 bits (006 total): 63 73 83 A2 B2 C2
+ Codes of length 14 bits (003 total): 25 44 A3
+ Codes of length 15 bits (009 total): 34 35 36 37 64 76 B1 B4 C1
+ Codes of length 16 bits (000 total):
+ Total number of codes: 059
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000120
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 05 06 07
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (003 total): 02 03 08
+ Codes of length 07 bits (001 total): 01
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000013E
+ Huffman table length = 64
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 01
+ Codes of length 04 bits (002 total): 02 03
+ Codes of length 05 bits (003 total): 04 05 11
+ Codes of length 06 bits (005 total): 06 21 31 71 81
+ Codes of length 07 bits (003 total): 41 51 91
+ Codes of length 08 bits (010 total): 12 13 14 22 32 61 A1 B1 C1 D1
+ Codes of length 09 bits (005 total): 15 33 42 E1 F0
+ Codes of length 10 bits (003 total): 07 23 52
+ Codes of length 11 bits (004 total): 43 62 72 82
+ Codes of length 12 bits (002 total): 92 F1
+ Codes of length 13 bits (001 total): B2
+ Codes of length 14 bits (005 total): 16 A2 C2 D2 E2
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 045
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000180
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000018E
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00008770.0
+
+ Compression stats:
+ Compression Ratio: 127.89:1
+ Bits per pixel: 0.19:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 22539 ( 97%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 379 ( 2%)
+ # codes of length 04 bits: 246 ( 1%)
+ # codes of length 05 bits: 91 ( 0%)
+ # codes of length 06 bits: 69 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 11012 ( 94%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 445 ( 4%)
+ # codes of length 04 bits: 105 ( 1%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 81 ( 1%)
+ # codes of length 07 bits: 19 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 23301 ( 56%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 4265 ( 10%)
+ # codes of length 04 bits: 7407 ( 18%)
+ # codes of length 05 bits: 3364 ( 8%)
+ # codes of length 06 bits: 767 ( 2%)
+ # codes of length 07 bits: 1399 ( 3%)
+ # codes of length 08 bits: 642 ( 2%)
+ # codes of length 09 bits: 201 ( 0%)
+ # codes of length 10 bits: 285 ( 1%)
+ # codes of length 11 bits: 99 ( 0%)
+ # codes of length 12 bits: 42 ( 0%)
+ # codes of length 13 bits: 30 ( 0%)
+ # codes of length 14 bits: 6 ( 0%)
+ # codes of length 15 bits: 9 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 11662 ( 60%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 1971 ( 10%)
+ # codes of length 04 bits: 1938 ( 10%)
+ # codes of length 05 bits: 1525 ( 8%)
+ # codes of length 06 bits: 1005 ( 5%)
+ # codes of length 07 bits: 339 ( 2%)
+ # codes of length 08 bits: 727 ( 4%)
+ # codes of length 09 bits: 148 ( 1%)
+ # codes of length 10 bits: 41 ( 0%)
+ # codes of length 11 bits: 23 ( 0%)
+ # codes of length 12 bits: 8 ( 0%)
+ # codes of length 13 bits: 2 ( 0%)
+ # codes of length 14 bits: 5 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[250] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1017, 0, 0] RGB=[255,255,255] @ MCU[ 0, 0]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0000876F.5
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00008770
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01557A9AE226A38386271DFE13D64298
+ Signature (Rotated): 0167FCEDBA3A8E8CF822163DB3564762
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Konica Minolta Camera, In] [DiMAGE Z2 ] [ ] No
+ CAM:[Minolta Co., Ltd. ] [DiMAGE F100 ] [ ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E8700 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS CORPORATION ] [C8080WZ ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-P200 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[IJG Library ] [092 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [092 ]
+ SW :[IrfanView ] [092 ]
+ SW :[idImager ] [092 ]
+ SW :[FastStone Image Viewer ] [092 ]
+ SW :[NeatImage ] [092 ]
+ SW :[Paint.NET ] [092 ]
+ SW :[Photomatix ] [092 ]
+ SW :[XnView ] [092 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testimgint.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testimgint.jpg.txt
new file mode 100644
index 000000000..ac2b2f9ad
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testimgint.jpg.txt
@@ -0,0 +1,342 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\testimgint.jpg]
+ Filesize: [5756] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 149
+ Samples per Line = 227
+ Image Size = 227 x 149
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000D2
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000189
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000001AA
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000261
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000026F
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0000167A.0
+
+ Compression stats:
+ Compression Ratio: 19.78:1
+ Bits per pixel: 1.21:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 86 ( 14%)
+ # codes of length 03 bits: 412 ( 69%)
+ # codes of length 04 bits: 65 ( 11%)
+ # codes of length 05 bits: 33 ( 6%)
+ # codes of length 06 bits: 4 ( 1%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 132 ( 44%)
+ # codes of length 03 bits: 70 ( 23%)
+ # codes of length 04 bits: 60 ( 20%)
+ # codes of length 05 bits: 26 ( 9%)
+ # codes of length 06 bits: 12 ( 4%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2692 ( 48%)
+ # codes of length 03 bits: 628 ( 11%)
+ # codes of length 04 bits: 1327 ( 23%)
+ # codes of length 05 bits: 471 ( 8%)
+ # codes of length 06 bits: 199 ( 4%)
+ # codes of length 07 bits: 170 ( 3%)
+ # codes of length 08 bits: 65 ( 1%)
+ # codes of length 09 bits: 58 ( 1%)
+ # codes of length 10 bits: 31 ( 1%)
+ # codes of length 11 bits: 15 ( 0%)
+ # codes of length 12 bits: 4 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 6 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 689 ( 46%)
+ # codes of length 03 bits: 244 ( 16%)
+ # codes of length 04 bits: 289 ( 19%)
+ # codes of length 05 bits: 158 ( 11%)
+ # codes of length 06 bits: 70 ( 5%)
+ # codes of length 07 bits: 5 ( 0%)
+ # codes of length 08 bits: 36 ( 2%)
+ # codes of length 09 bits: 5 ( 0%)
+ # codes of length 10 bits: 1 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[107] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1008, -9, 0] RGB=[254,254,250] @ MCU[ 4, 8]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00001679.6
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000167A
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+ Signature (Rotated): 012D821C6AB210E2A753BE053B8F55D0
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[SONY ] [CYBERSHOT U ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+ SW :[Apple Quicktime ] [0466-0467 ]
+ SW :[Digital Photo Professiona] [05 ]
+ SW :[IJG Library ] [075 ]
+ SW :[MS Paint ] [ ]
+ SW :[MS Visio ] [ ]
+ SW :[ZoomBrowser EX ] [low ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [075 ]
+ SW :[IrfanView ] [075 ]
+ SW :[idImager ] [075 ]
+ SW :[FastStone Image Viewer ] [075 ]
+ SW :[NeatImage ] [075 ]
+ SW :[Paint.NET ] [075 ]
+ SW :[Photomatix ] [075 ]
+ SW :[XnView ] [075 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testorig.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testorig.jpg.txt
new file mode 100644
index 000000000..8e339260b
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/testorig.jpg.txt
@@ -0,0 +1,342 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\testorig.jpg]
+ Filesize: [5770] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 149
+ Samples per Line = 227
+ Image Size = 227 x 149
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000D2
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000189
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000001AA
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000261
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000026F
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00001688.0
+
+ Compression stats:
+ Compression Ratio: 19.73:1
+ Bits per pixel: 1.22:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 88 ( 15%)
+ # codes of length 03 bits: 409 ( 68%)
+ # codes of length 04 bits: 66 ( 11%)
+ # codes of length 05 bits: 33 ( 6%)
+ # codes of length 06 bits: 4 ( 1%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 134 ( 45%)
+ # codes of length 03 bits: 68 ( 23%)
+ # codes of length 04 bits: 60 ( 20%)
+ # codes of length 05 bits: 26 ( 9%)
+ # codes of length 06 bits: 12 ( 4%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2706 ( 48%)
+ # codes of length 03 bits: 636 ( 11%)
+ # codes of length 04 bits: 1331 ( 23%)
+ # codes of length 05 bits: 473 ( 8%)
+ # codes of length 06 bits: 196 ( 3%)
+ # codes of length 07 bits: 169 ( 3%)
+ # codes of length 08 bits: 66 ( 1%)
+ # codes of length 09 bits: 60 ( 1%)
+ # codes of length 10 bits: 28 ( 0%)
+ # codes of length 11 bits: 14 ( 0%)
+ # codes of length 12 bits: 4 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 5 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 697 ( 46%)
+ # codes of length 03 bits: 243 ( 16%)
+ # codes of length 04 bits: 294 ( 19%)
+ # codes of length 05 bits: 164 ( 11%)
+ # codes of length 06 bits: 68 ( 4%)
+ # codes of length 07 bits: 5 ( 0%)
+ # codes of length 08 bits: 35 ( 2%)
+ # codes of length 09 bits: 4 ( 0%)
+ # codes of length 10 bits: 2 ( 0%)
+ # codes of length 11 bits: 1 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[107] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1008, -9, 0] RGB=[254,254,250] @ MCU[ 4, 8]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00001687.2
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00001688
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+ Signature (Rotated): 012D821C6AB210E2A753BE053B8F55D0
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[SONY ] [CYBERSHOT U ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+ SW :[Apple Quicktime ] [0466-0467 ]
+ SW :[Digital Photo Professiona] [05 ]
+ SW :[IJG Library ] [075 ]
+ SW :[MS Paint ] [ ]
+ SW :[MS Visio ] [ ]
+ SW :[ZoomBrowser EX ] [low ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [075 ]
+ SW :[IrfanView ] [075 ]
+ SW :[idImager ] [075 ]
+ SW :[FastStone Image Viewer ] [075 ]
+ SW :[NeatImage ] [075 ]
+ SW :[Paint.NET ] [075 ]
+ SW :[Photomatix ] [075 ]
+ SW :[XnView ] [075 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/turtle.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/turtle.jpg.txt
new file mode 100644
index 000000000..a8231b19e
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/turtle.jpg.txt
@@ -0,0 +1,367 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\turtle.jpg]
+ Filesize: [55126] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 28 x 28 DPcm (dots per cm)
+ thumbnail = 0 x 0
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00000014
+ Length = 3256
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 3240 bytes
+ Preferred CMM Type : 'appl' (0x6170706C)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 2012-05-11 16:46:50
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : '....' (0x00000000)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'appl' (0x6170706C)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000CCE
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 4 6 8 10
+ DQT, Row #1: 2 2 2 3 4 9 10 9
+ DQT, Row #2: 2 2 3 4 6 9 11 9
+ DQT, Row #3: 2 3 4 5 8 14 13 10
+ DQT, Row #4: 3 4 6 9 11 17 16 12
+ DQT, Row #5: 4 6 9 10 13 17 18 15
+ DQT, Row #6: 8 10 12 14 16 19 19 16
+ DQT, Row #7: 12 15 15 16 18 16 16 16
+ Approx quality factor = 91.86 (scaling=16.28 variance=1.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000D13
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 3 4 8 16 16 16 16
+ DQT, Row #1: 3 3 4 11 16 16 16 16
+ DQT, Row #2: 4 4 9 16 16 16 16 16
+ DQT, Row #3: 8 11 16 16 16 16 16 16
+ DQT, Row #4: 16 16 16 16 16 16 16 16
+ DQT, Row #5: 16 16 16 16 16 16 16 16
+ DQT, Row #6: 16 16 16 16 16 16 16 16
+ DQT, Row #7: 16 16 16 16 16 16 16 16
+ Approx quality factor = 91.90 (scaling=16.20 variance=0.15)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00000D58
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 281
+ Samples per Line = 450
+ Image Size = 450 x 281
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000D6B
+ Huffman table length = 29
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 06
+ Codes of length 03 bits (004 total): 00 04 05 07
+ Codes of length 04 bits (003 total): 01 03 08
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000D8A
+ Huffman table length = 82
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 02 03 04
+ Codes of length 04 bits (003 total): 05 06 11
+ Codes of length 05 bits (002 total): 00 12
+ Codes of length 06 bits (004 total): 07 13 21 31
+ Codes of length 07 bits (003 total): 22 41 51
+ Codes of length 08 bits (004 total): 08 14 61 71
+ Codes of length 09 bits (006 total): 15 23 32 81 91 A1
+ Codes of length 10 bits (007 total): 16 42 52 55 94 B1 D2
+ Codes of length 11 bits (004 total): 33 62 72 C1
+ Codes of length 12 bits (007 total): 24 34 82 92 A2 D1 F0
+ Codes of length 13 bits (005 total): 17 43 53 54 E1
+ Codes of length 14 bits (006 total): 09 25 35 83 93 B2
+ Codes of length 15 bits (007 total): 18 26 44 64 73 A3 C2
+ Codes of length 16 bits (001 total): A4
+ Total number of codes: 063
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000DDE
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 04 05 06 07
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000DFC
+ Huffman table length = 76
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (004 total): 00 03 04 21
+ Codes of length 05 bits (003 total): 05 12 31
+ Codes of length 06 bits (004 total): 06 41 51 61
+ Codes of length 07 bits (006 total): 13 22 71 81 91 A1
+ Codes of length 08 bits (006 total): 07 14 32 52 B1 D1
+ Codes of length 09 bits (007 total): 15 42 53 62 72 92 C1
+ Codes of length 10 bits (005 total): 23 33 A2 E1 F0
+ Codes of length 11 bits (005 total): 16 17 34 82 B2
+ Codes of length 12 bits (007 total): 24 35 54 63 73 D2 F1
+ Codes of length 13 bits (004 total): 08 25 93 C2
+ Codes of length 14 bits (003 total): 43 C3 D3
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 057
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000E4A
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00000E58
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0000D754.0
+
+ Compression stats:
+ Compression Ratio: 7.37:1
+ Bits per pixel: 3.26:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 344 ( 16%)
+ # codes of length 03 bits: 1157 ( 55%)
+ # codes of length 04 bits: 453 ( 22%)
+ # codes of length 05 bits: 102 ( 5%)
+ # codes of length 06 bits: 32 ( 2%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 216 ( 21%)
+ # codes of length 03 bits: 672 ( 64%)
+ # codes of length 04 bits: 77 ( 7%)
+ # codes of length 05 bits: 59 ( 6%)
+ # codes of length 06 bits: 20 ( 2%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 11146 ( 23%)
+ # codes of length 03 bits: 21025 ( 43%)
+ # codes of length 04 bits: 8376 ( 17%)
+ # codes of length 05 bits: 3259 ( 7%)
+ # codes of length 06 bits: 2911 ( 6%)
+ # codes of length 07 bits: 840 ( 2%)
+ # codes of length 08 bits: 696 ( 1%)
+ # codes of length 09 bits: 499 ( 1%)
+ # codes of length 10 bits: 295 ( 1%)
+ # codes of length 11 bits: 93 ( 0%)
+ # codes of length 12 bits: 85 ( 0%)
+ # codes of length 13 bits: 26 ( 0%)
+ # codes of length 14 bits: 15 ( 0%)
+ # codes of length 15 bits: 8 ( 0%)
+ # codes of length 16 bits: 1 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 5260 ( 31%)
+ # codes of length 03 bits: 4077 ( 24%)
+ # codes of length 04 bits: 4031 ( 24%)
+ # codes of length 05 bits: 1544 ( 9%)
+ # codes of length 06 bits: 912 ( 5%)
+ # codes of length 07 bits: 626 ( 4%)
+ # codes of length 08 bits: 335 ( 2%)
+ # codes of length 09 bits: 163 ( 1%)
+ # codes of length 10 bits: 58 ( 0%)
+ # codes of length 11 bits: 27 ( 0%)
+ # codes of length 12 bits: 18 ( 0%)
+ # codes of length 13 bits: 6 ( 0%)
+ # codes of length 14 bits: 3 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[167] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1017, 3, -3] RGB=[253,255,255] @ MCU[ 26, 8]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0000D753.1
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000D754
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01557A9AE226A38386271DFE13D64298
+ Signature (Rotated): 0167FCEDBA3A8E8CF822163DB3564762
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Konica Minolta Camera, In] [DiMAGE Z2 ] [ ] No
+ CAM:[Minolta Co., Ltd. ] [DiMAGE F100 ] [ ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E8700 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS CORPORATION ] [C8080WZ ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-P200 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[IJG Library ] [092 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [092 ]
+ SW :[IrfanView ] [092 ]
+ SW :[idImager ] [092 ]
+ SW :[FastStone Image Viewer ] [092 ]
+ SW :[NeatImage ] [092 ]
+ SW :[Paint.NET ] [092 ]
+ SW :[Photomatix ] [092 ]
+ SW :[XnView ] [092 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ycck.jpg.txt b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ycck.jpg.txt
new file mode 100644
index 000000000..717f35f3c
--- /dev/null
+++ b/tests/Images/Input/Jpg/baseline/JpegSnoopReports/ycck.jpg.txt
@@ -0,0 +1,640 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\ycck.jpg]
+ Filesize: [611572] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 4452
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0007
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 720000/10000
+ [YResolution ] = 720000/10000
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop CC 2015.5 (Windows)"
+ [DateTime ] = "2016:08:23 18:21:25"
+ [ExifOffset ] = @ 0x00AC
+ Offset to Next IFD = 0x000000D8
+
+ EXIF IFD1 @ Absolute 0x000000E4
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x0136 = @ 0x0142
+ [JpegIFByteCount ] = 0x[00001026] / 4134
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000B8
+ Dir Length = 0x0003
+ [ColorSpace ] = Uncalibrated
+ [ExifImageWidth ] = 0x[00000200] / 512
+ [ExifImageHeight ] = 0x[00000200] / 512
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00001168
+ Length = 6522
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
+ 8BIM: [0x043A] Name="" Len=[0x00E5] DefinedName="Print Information"
+ Print Information =
+ | 0x00 00 00 10 00 00 00 01 00 00 00 00 00 0B 70 72 | ..............pr
+ | 0x69 6E 74 4F 75 74 70 75 74 00 00 00 05 00 00 00 | intOutput.......
+ | 0x00 50 73 74 53 62 6F 6F 6C 01 00 00 00 00 49 6E | .PstSbool.....In
+ | 0x74 65 65 6E 75 6D 00 00 00 00 49 6E 74 65 00 00 | teenum....Inte..
+ | 0x00 00 43 6C 72 6D 00 00 00 0F 70 72 69 6E 74 53 | ..Clrm....printS
+ | 0x69 78 74 65 65 6E 42 69 74 62 6F 6F 6C 00 00 00 | ixteenBitbool...
+ | 0x00 0B 70 72 69 6E 74 65 72 4E 61 6D 65 54 45 58 | ..printerNameTEX
+ | 0x54 00 00 00 01 00 00 00 00 00 0F 70 72 69 6E 74 | T..........print
+ | ...
+ 8BIM: [0x043B] Name="" Len=[0x022D] DefinedName="Print Style"
+ Print Style =
+ | 0x00 00 00 10 00 00 00 01 00 00 00 00 00 12 70 72 | ..............pr
+ | 0x69 6E 74 4F 75 74 70 75 74 4F 70 74 69 6F 6E 73 | intOutputOptions
+ | 0x00 00 00 17 00 00 00 00 43 70 74 6E 62 6F 6F 6C | ........Cptnbool
+ | 0x00 00 00 00 00 43 6C 62 72 62 6F 6F 6C 00 00 00 | .....Clbrbool...
+ | 0x00 00 52 67 73 4D 62 6F 6F 6C 00 00 00 00 00 43 | ..RgsMbool.....C
+ | 0x72 6E 43 62 6F 6F 6C 00 00 00 00 00 43 6E 74 43 | rnCbool.....CntC
+ | 0x62 6F 6F 6C 00 00 00 00 00 4C 62 6C 73 62 6F 6F | bool.....Lblsboo
+ | 0x6C 00 00 00 00 00 4E 67 74 76 62 6F 6F 6C 00 00 | l.....Ngtvbool..
+ | ...
+ 8BIM: [0x03ED] Name="" Len=[0x0010] DefinedName="ResolutionInfo structure"
+ Horizontal resolution = 72 pixels per inch
+ Width unit = cm
+ Vertical resolution = 72 pixels per inch
+ Height unit = cm
+ 8BIM: [0x0426] Name="" Len=[0x000E] DefinedName="Print scale"
+ Style = centered
+ X location = 0.00000
+ Y location = 0.00000
+ Scale = 1.00000
+ 8BIM: [0x040D] Name="" Len=[0x0004] DefinedName="Global Angle"
+ Global Angle = 30 degrees
+ 8BIM: [0x0419] Name="" Len=[0x0004] DefinedName="Global Altitude"
+ Global Altitude = 30
+ 8BIM: [0x03F3] Name="" Len=[0x0009] DefinedName="Print flags"
+ Labels = false
+ Crop marks = false
+ Color bars = false
+ Registration marks = false
+ Negative = false
+ Flip = false
+ Interpolate = false
+ Caption = false
+ Print flags = true
+ 8BIM: [0x2710] Name="" Len=[0x000A] DefinedName="Print flags information"
+ Version = 1
+ Center crop marks = 0
+ Reserved = 0
+ Bleed width value = 0
+ Bleed width scale = 2
+ 8BIM: [0x03F5] Name="" Len=[0x0048] DefinedName="Color halftoning information"
+ Color halftoning information =
+ | 0x00 2F 66 66 00 01 00 6C 66 66 00 06 00 00 00 00 | ./ff...lff......
+ | 0x00 01 00 2F 66 66 00 01 00 A1 99 9A 00 06 00 00 | .../ff..........
+ | 0x00 00 00 01 00 32 00 00 00 01 00 5A 00 00 00 06 | .....2.....Z....
+ | 0x00 00 00 00 00 01 00 35 00 00 00 01 00 2D 00 00 | .......5.....-..
+ | 0x00 06 00 00 00 00 00 01 | ........
+ 8BIM: [0x03F8] Name="" Len=[0x0070] DefinedName="Color transfer functions"
+ Color transfer functions =
+ | 0x00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF 03 E8 00 00 00 00 FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF 03 E8 00 00 00 00 FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0x03 E8 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF 03 E8 00 00 | ................
+ 8BIM: [0x0400] Name="" Len=[0x0002] DefinedName="Layer state information"
+ Target layer = 0
+ 8BIM: [0x0402] Name="" Len=[0x0002] DefinedName="Layers group information"
+ Layer #0:
+ Layer Group = 0
+ 8BIM: [0x0430] Name="" Len=[0x0001] DefinedName="Layer Groups Enabled ID"
+ Layer #0:
+ Layer Group Enabled ID = 1
+ 8BIM: [0x042D] Name="" Len=[0x0006] DefinedName="Layer Selection IDs"
+ Num selected = 1
+ Layer ID = 3
+ 8BIM: [0x0408] Name="" Len=[0x0010] DefinedName="Grid and guides information"
+ Version = 1
+ Grid Horizontal = 576
+ Grid Vertical = 576
+ Number of Guide Resources = 0
+ 8BIM: [0x041E] Name="" Len=[0x0004] DefinedName="URL List"
+ URL List = | 0x00 00 00 00 | ....
+ 8BIM: [0x041A] Name="" Len=[0x0363] DefinedName="Slices"
+ Slice Header:
+ Version = 6
+ Bound Rect (top) = 0
+ Bound Rect (left) = 0
+ Bound Rect (bottom) = 512
+ Bound Rect (right) = 512
+ Name of group of slices = "imageprocessor-logo-512"
+ Number of slices = 1
+ -----
+ Slice #0:
+ Slice Resource:
+ ID = 0
+ Group ID = 0
+ Origin = 0
+ Name = ""
+ Type = 1
+ Position (top) = 0
+ Position (left) = 0
+ Position (bottom) = 512
+ Position (right) = 512
+ URL = ""
+ Target = ""
+ Message = ""
+ Alt Tag = ""
+ Cell text is HTML = true
+ Cell text = ""
+ Horizontal alignment = 0
+ Vertical alignment = 0
+ Alpha color = 0
+ Red = 0
+ Green = 0
+ Blue = 0
+ Descriptor version = 16
+ Descriptor:
+ Name from classID = ""
+ classID = "null"
+ Num items in descriptor = 2
+ -----
+ Descriptor item #0:
+ Key = "bounds"
+ OSType key = "Objc"
+ Descriptor:
+ Name from classID = ""
+ classID = "Rct1"
+ Num items in descriptor = 4
+ -----
+ Descriptor item #0:
+ Key = "Top "
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "Left"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "Btom"
+ OSType key = "long"
+ Value = 512
+ Descriptor item #3:
+ Key = "Rght"
+ OSType key = "long"
+ Value = 512
+ -----
+ Descriptor item #1:
+ Key = "slices"
+ OSType key = "VlLs"
+ Num items in list = 1
+ -----
+ Item #0:
+ OSType key = ""
+ Descriptor:
+ Name from classID = ""
+ classID = "slice"
+ Num items in descriptor = 18
+ -----
+ Descriptor item #0:
+ Key = "sliceID"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "groupID"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "origin"
+ OSType key = "enum"
+ Type = "ESliceOrigin"
+ Enum = "autoGenerated"
+ Descriptor item #3:
+ Key = "Type"
+ OSType key = "enum"
+ Type = "ESliceType"
+ Enum = "Img "
+ Descriptor item #4:
+ Key = "bounds"
+ OSType key = "Objc"
+ Descriptor:
+ Name from classID = ""
+ classID = "Rct1"
+ Num items in descriptor = 4
+ -----
+ Descriptor item #0:
+ Key = "Top "
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "Left"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "Btom"
+ OSType key = "long"
+ Value = 512
+ Descriptor item #3:
+ Key = "Rght"
+ OSType key = "long"
+ Value = 512
+ -----
+ Descriptor item #5:
+ Key = "url"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #6:
+ Key = "null"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #7:
+ Key = "Msge"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #8:
+ Key = "altTag"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #9:
+ Key = "cellTextIsHTML"
+ OSType key = "bool"
+ Value = true
+ Descriptor item #10:
+ Key = "cellText"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #11:
+ Key = "horzAlign"
+ OSType key = "enum"
+ Type = "ESliceHorzAlign"
+ Enum = "default"
+ Descriptor item #12:
+ Key = "vertAlign"
+ OSType key = "enum"
+ Type = "ESliceVertAlign"
+ Enum = "default"
+ Descriptor item #13:
+ Key = "bgColorType"
+ OSType key = "enum"
+ Type = "ESliceBGColorType"
+ Enum = "None"
+ Descriptor item #14:
+ Key = "topOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #15:
+ Key = "leftOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #16:
+ Key = "bottomOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #17:
+ Key = "rightOutset"
+ OSType key = "long"
+ Value = 0
+ -----
+ -----
+ -----
+ -----
+ 8BIM: [0x0428] Name="" Len=[0x000C] DefinedName="Pixel Aspect Ratio"
+ Version = 2
+ X/Y Ratio = 1.00000
+ 8BIM: [0x0414] Name="" Len=[0x0004] DefinedName="Document-specific IDs seed number"
+ Base value = 3
+ 8BIM: [0x040C] Name="" Len=[0x1042] DefinedName="Thumbnail resources"
+ Format = 1
+ Width of thumbnail = 160 pixels
+ Height of thumbnail = 160 pixels
+ Widthbytes = 480 bytes
+ Total size = 76800 bytes
+ Size after compression = 4134 bytes
+ Bits per pixel = 24 bits
+ Number of planes = 1
+ JFIF data @ 0x00001A3C
+ 8BIM: [0x0421] Name="" Len=[0x0061] DefinedName="Version Info"
+ Version = 1
+ hasRealMergedData = 1
+ Writer name = "Adobe Photoshop"
+ Reader name = "Adobe Photoshop CC 2015.5"
+ File version = 1
+ 8BIM: [0x0406] Name="" Len=[0x0007] DefinedName="JPEG quality"
+ Photoshop Save As Quality = 8
+ Photoshop Save Format = "Standard"
+ Photoshop Save Progressive Scans = "3 Scans"
+ ??? = 1
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00002AE4
+ Length = 3685
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0000394B
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 9
+ Profile Size : 557168 bytes
+ Preferred CMM Type : 'ADBE' (0x41444245)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Output Device profile ('prtr' (0x70727472))
+ Data Colour Space : cmykData ('CMYK' (0x434D594B))
+ Profile connection space (PCS) : 'Lab ' (0x4C616220)
+ Profile creation date : 2000-07-26 05:41:53
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'ADBE' (0x41444245)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Media-Relative Colorimetric
+ Profile creator : 'ADBE' (0x41444245)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0001392F
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 2 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00023913
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 3 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000338F7
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 4 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000438DB
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 5 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000538BF
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 6 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x000638A3
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 7 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00073887
+ Length = 65506
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 8 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0008386B
+ Length = 33264
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 9 of 9
+ Only support decode of 1st ICC Marker
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x0008BA5D
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 0
+ APP14Flags1 = 0
+ ColorTransform = 2 [YCCK]
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0008BA6D
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ Approx quality factor = 88.28 (scaling=23.43 variance=111.68)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 90.19 (scaling=19.62 variance=201.04)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0008BAF3
+ Frame header length = 20
+ Precision = 8
+ Number of Lines = 512
+ Samples per Line = 512
+ Image Size = 512 x 512
+ Raw Image Orientation = Landscape
+ Number of Img components = 4
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Cr)
+ Component[4]: ID=0x04, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (K)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x0008BB09
+ Length = 4
+ interval = 64
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0008BB0F
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (007 total): 04 05 03 02 06 01 00
+ Codes of length 04 bits (001 total): 07
+ Codes of length 05 bits (001 total): 08
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (001 total): 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 00
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (003 total): 04 05 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 11 04 00
+ Codes of length 05 bits (003 total): 05 21 12
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 51 06 13 61
+ Codes of length 08 bits (002 total): 22 71
+ Codes of length 09 bits (006 total): 81 14 32 91 A1 07
+ Codes of length 10 bits (007 total): 15 B1 42 23 C1 52 D1
+ Codes of length 11 bits (003 total): E1 33 16
+ Codes of length 12 bits (004 total): 62 F0 24 72
+ Codes of length 13 bits (002 total): 82 F1
+ Codes of length 14 bits (006 total): 25 43 34 53 92 A2
+ Codes of length 15 bits (002 total): B2 63
+ Codes of length 16 bits (115 total): 73 C2 35 44 27 93 A3 B3 36 17 54 64 74 C3 D2 E2
+ 08 26 83 09 0A 18 19 84 94 45 46 A4 B4 56 D3 55
+ 28 1A F2 E3 F3 C4 D4 E4 F4 65 75 85 95 A5 B5 C5
+ D5 E5 F5 66 76 86 96 A6 B6 C6 D6 E6 F6 37 47 57
+ 67 77 87 97 A7 B7 C7 D7 E7 F7 38 48 58 68 78 88
+ 98 A8 B8 C8 D8 E8 F8 29 39 49 59 69 79 89 99 A9
+ B9 C9 D9 E9 F9 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA
+ DA EA FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 00
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (002 total): 04 21
+ Codes of length 06 bits (003 total): 12 31 41
+ Codes of length 07 bits (005 total): 05 51 13 61 22
+ Codes of length 08 bits (005 total): 06 71 81 91 32
+ Codes of length 09 bits (004 total): A1 B1 F0 14
+ Codes of length 10 bits (005 total): C1 D1 E1 23 42
+ Codes of length 11 bits (006 total): 15 52 62 72 F1 33
+ Codes of length 12 bits (004 total): 24 34 43 82
+ Codes of length 13 bits (008 total): 16 92 53 25 A2 63 B2 C2
+ Codes of length 14 bits (003 total): 07 73 D2
+ Codes of length 15 bits (003 total): 35 E2 44
+ Codes of length 16 bits (109 total): 83 17 54 93 08 09 0A 18 19 26 36 45 1A 27 64 74
+ 55 37 F2 A3 B3 C3 28 29 D3 E3 F3 84 94 A4 B4 C4
+ D4 E4 F4 65 75 85 95 A5 B5 C5 D5 E5 F5 46 56 66
+ 76 86 96 A6 B6 C6 D6 E6 F6 47 57 67 77 87 97 A7
+ B7 C7 D7 E7 F7 38 48 58 68 78 88 98 A8 B8 C8 D8
+ E8 F8 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9 2A
+ 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0008BCB3
+ Scan header length = 14
+ Number of img components = 4
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Component[4]: selector=0x04, table=0(DC),0(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support CMYK files yet.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000954F2
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01180AF3DE63318828A86409EF4013DD
+ Signature (Rotated): 01180AF3DE63318828A86409EF4013DD
+ File Offset: 0 bytes
+ Chroma subsampling: ?x?
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop CC 2015.5 (Windows)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 08 ]
+
+ NOTE: Photoshop IRB detected
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Bedroom.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Bedroom.jpg.txt
new file mode 100644
index 000000000..ea1f5e0f7
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Bedroom.jpg.txt
@@ -0,0 +1,461 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue159-MissingFF00-Progressive-Bedroom.jpg]
+ Filesize: [338422] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 14 18 22
+ DQT, Row #1: 4 4 5 7 9 21 22 20
+ DQT, Row #2: 5 5 6 9 14 21 25 20
+ DQT, Row #3: 5 6 8 10 18 31 29 22
+ DQT, Row #4: 6 8 13 20 24 39 37 28
+ DQT, Row #5: 9 13 20 23 29 37 41 33
+ DQT, Row #6: 18 23 28 31 37 44 43 36
+ DQT, Row #7: 26 33 34 35 40 36 37 36
+ Approx quality factor = 81.99 (scaling=36.03 variance=1.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 6 6 9 17 36 36 36 36
+ DQT, Row #1: 6 8 9 24 36 36 36 36
+ DQT, Row #2: 9 9 20 36 36 36 36 36
+ DQT, Row #3: 17 24 36 36 36 36 36 36
+ DQT, Row #4: 36 36 36 36 36 36 36 36
+ DQT, Row #5: 36 36 36 36 36 36 36 36
+ DQT, Row #6: 36 36 36 36 36 36 36 36
+ DQT, Row #7: 36 36 36 36 36 36 36 36
+ Approx quality factor = 81.88 (scaling=36.24 variance=0.48)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 2300
+ Samples per Line = 2300
+ Image Size = 2300 x 2300
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 27
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 01 02
+ Codes of length 04 bits (003 total): 03 04 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000CE
+ Huffman table length = 26
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (001 total): 06
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000EA
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000CBBB
+ Huffman table length = 56
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (004 total): 00 01 02 03
+ Codes of length 04 bits (005 total): 04 10 11 12 41
+ Codes of length 05 bits (002 total): 21 31
+ Codes of length 06 bits (005 total): 05 13 20 22 32
+ Codes of length 07 bits (003 total): 15 30 42
+ Codes of length 08 bits (005 total): 14 23 33 34 50
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (002 total): 24 40
+ Codes of length 11 bits (002 total): 06 16
+ Codes of length 12 bits (002 total): 43 60
+ Codes of length 13 bits (002 total): 70 A0
+ Codes of length 14 bits (003 total): 44 80 90
+ Codes of length 15 bits (001 total): B0
+ Codes of length 16 bits (001 total): 35
+ Total number of codes: 037
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000CBF5
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0001A2A8
+ Huffman table length = 51
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (005 total): 02 03 10 20 30
+ Codes of length 05 bits (003 total): 12 13 31
+ Codes of length 06 bits (004 total): 04 21 32 40
+ Codes of length 07 bits (002 total): 14 51
+ Codes of length 08 bits (002 total): 05 41
+ Codes of length 09 bits (002 total): 33 50
+ Codes of length 10 bits (001 total): 22
+ Codes of length 11 bits (004 total): 15 52 61 70
+ Codes of length 12 bits (003 total): 23 42 60
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (003 total): 71 A0 B0
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001A2DD
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0001BB1E
+ Huffman table length = 50
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (005 total): 02 03 10 20 30
+ Codes of length 05 bits (003 total): 12 13 31
+ Codes of length 06 bits (004 total): 04 21 32 40
+ Codes of length 07 bits (002 total): 14 51
+ Codes of length 08 bits (003 total): 05 41 50
+ Codes of length 09 bits (001 total): 22
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (001 total): 61
+ Codes of length 12 bits (004 total): 23 33 60 70
+ Codes of length 13 bits (002 total): 15 43
+ Codes of length 14 bits (003 total): 52 A0 B0
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 031
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001BB52
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0001D49C
+ Huffman table length = 67
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (004 total): 10 11 21 31
+ Codes of length 05 bits (005 total): 02 41 51 71 81
+ Codes of length 06 bits (001 total): 20
+ Codes of length 07 bits (006 total): 12 22 30 61 91 A1
+ Codes of length 08 bits (004 total): 03 32 33 C1
+ Codes of length 09 bits (002 total): 40 50
+ Codes of length 10 bits (010 total): 13 23 42 52 72 82 B1 D1 E1 F0
+ Codes of length 11 bits (002 total): 34 62
+ Codes of length 12 bits (003 total): 60 92 F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (002 total): 24 80
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (007 total): 04 70 43 A2 14 C0 D0
+ Total number of codes: 048
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001D4E1
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000291D6
+ Huffman table length = 44
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 11 21
+ Codes of length 04 bits (002 total): 31 41
+ Codes of length 05 bits (001 total): 51
+ Codes of length 06 bits (003 total): 10 61 71
+ Codes of length 07 bits (003 total): 81 91 A1
+ Codes of length 08 bits (003 total): 20 B1 F0
+ Codes of length 09 bits (004 total): 30 C1 D1 E1
+ Codes of length 10 bits (003 total): 40 50 F1
+ Codes of length 11 bits (001 total): 60
+ Codes of length 12 bits (001 total): 70
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 025
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00029204
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00044080
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00047DC7
+ Huffman table length = 45
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (004 total): 10 30 31 61
+ Codes of length 05 bits (006 total): 20 21 40 41 51 71
+ Codes of length 06 bits (002 total): 50 60
+ Codes of length 07 bits (003 total): 81 91 A1
+ Codes of length 08 bits (001 total): B1
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (002 total): 70 F0
+ Codes of length 11 bits (002 total): C1 D1
+ Codes of length 12 bits (003 total): A0 B0 F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 026
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00047DF6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00048BD6
+ Huffman table length = 45
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (004 total): 20 30 31 61
+ Codes of length 05 bits (006 total): 10 21 40 41 51 71
+ Codes of length 06 bits (002 total): 50 81
+ Codes of length 07 bits (003 total): 60 91 B1
+ Codes of length 08 bits (001 total): A1
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (002 total): 70 C1
+ Codes of length 11 bits (002 total): 80 F0
+ Codes of length 12 bits (003 total): A0 B0 D1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 026
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00048C05
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00049AE7
+ Huffman table length = 48
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 70
+ Codes of length 03 bits (001 total): 00
+ Codes of length 04 bits (007 total): 01 11 31 41 51 80 91
+ Codes of length 05 bits (003 total): 10 21 81
+ Codes of length 06 bits (002 total): 50 60
+ Codes of length 07 bits (005 total): 20 40 61 71 D1
+ Codes of length 08 bits (004 total): 30 B1 E1 F1
+ Codes of length 09 bits (002 total): A1 F0
+ Codes of length 10 bits (003 total): A0 C0 C1
+ Codes of length 11 bits (001 total): D0
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 029
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00049B19
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000529F4
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0138A8D4ECE59F41D2EB9AF5168B6675
+ Signature (Rotated): 01CA9A809F737BA668C16DDE52E74092
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C700UZ ] [ ] No
+ SW :[IJG Library ] [082 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [082 ]
+ SW :[IrfanView ] [082 ]
+ SW :[idImager ] [082 ]
+ SW :[FastStone Image Viewer ] [082 ]
+ SW :[NeatImage ] [082 ]
+ SW :[Paint.NET ] [082 ]
+ SW :[Photomatix ] [082 ]
+ SW :[XnView ] [082 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Girl.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Girl.jpg.txt
new file mode 100644
index 000000000..4858b4ea1
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue159-MissingFF00-Progressive-Girl.jpg.txt
@@ -0,0 +1,520 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue159-MissingFF00-Progressive-Girl.jpg]
+ Filesize: [60927] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.2]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00000014
+ Length = 132
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x0067] DefinedName="IPTC-NAA record"
+ IPTC [002:040] Special Instructions = "FBMD01000a820d0000192d00007a4400006e460000a9470000a44e00000b7b0000cc830000e0880000a08c0000ffed0000"
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0000009A
+ Length = 3064
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 3048 bytes
+ Preferred CMM Type : '....' (0x00000000)
+ Profile Version : 0.2.0.0 (0x02000000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 2009-03-27 21:36:31
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : ? (0x00000000) ('....' (0x00000000))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : '....' (0x00000000)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000001_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : '....' (0x00000000)
+ Profile ID : 0x29F83DDE_AFF255AE_7842FAE4_CA83390D
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000C94
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 9 6 6 9 14 23 30 35
+ DQT, Row #1: 7 7 8 11 15 34 35 32
+ DQT, Row #2: 8 8 9 14 23 33 40 32
+ DQT, Row #3: 8 10 13 17 30 50 46 36
+ DQT, Row #4: 10 13 21 32 39 63 60 45
+ DQT, Row #5: 14 20 32 37 47 60 66 53
+ DQT, Row #6: 28 37 45 50 60 70 70 59
+ DQT, Row #7: 42 53 55 57 65 58 60 57
+ Approx quality factor = 71.07 (scaling=57.86 variance=0.92)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000CD9
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 10 10 14 27 57 57 57 57
+ DQT, Row #1: 10 12 15 38 57 57 57 57
+ DQT, Row #2: 14 15 32 57 57 57 57 57
+ DQT, Row #3: 27 38 57 57 57 57 57 57
+ DQT, Row #4: 57 57 57 57 57 57 57 57
+ DQT, Row #5: 57 57 57 57 57 57 57 57
+ DQT, Row #6: 57 57 57 57 57 57 57 57
+ DQT, Row #7: 57 57 57 57 57 57 57 57
+ Approx quality factor = 71.23 (scaling=57.54 variance=0.18)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x00000D1E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 990
+ Samples per Line = 750
+ Image Size = 750 x 990
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000D31
+ Huffman table length = 27
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000D4E
+ Huffman table length = 24
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 005
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000D68
+ Huffman table length = 24
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 005
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000D82
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002CED
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (003 total): 03 10 11
+ Codes of length 05 bits (003 total): 04 12 20
+ Codes of length 06 bits (004 total): 21 30 31 40
+ Codes of length 07 bits (002 total): 32 41
+ Codes of length 08 bits (002 total): 13 22
+ Codes of length 09 bits (003 total): 05 14 50
+ Codes of length 10 bits (001 total): 33
+ Codes of length 11 bits (001 total): 42
+ Codes of length 12 bits (001 total): 23
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002D19
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00004455
+ Huffman table length = 35
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 00
+ Codes of length 04 bits (005 total): 02 10 11 20 30
+ Codes of length 05 bits (001 total): 40
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (002 total): 12 50
+ Codes of length 08 bits (003 total): 03 31 41
+ Codes of length 09 bits (001 total): 21
+ Codes of length 10 bits (001 total): 51
+ Codes of length 11 bits (001 total): 60
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 016
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000447A
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000464C
+ Huffman table length = 32
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (007 total): 00 10 11 20 30 40 50
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 12
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (003 total): 21 31 70
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 013
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000466E
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00004775
+ Huffman table length = 50
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (003 total): 02 21 40
+ Codes of length 05 bits (007 total): 10 12 30 31 32 50 91
+ Codes of length 06 bits (003 total): 20 41 51
+ Codes of length 07 bits (003 total): 60 61 71
+ Codes of length 08 bits (004 total): 03 22 42 81
+ Codes of length 09 bits (002 total): 13 62
+ Codes of length 10 bits (001 total): 43
+ Codes of length 11 bits (005 total): 23 52 70 80 A1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 031
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000047A9
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00004E79
+ Huffman table length = 41
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (003 total): 10 21 31
+ Codes of length 05 bits (004 total): 41 61 71 81
+ Codes of length 06 bits (002 total): 20 51
+ Codes of length 07 bits (002 total): 30 91
+ Codes of length 08 bits (003 total): A1 D1 F0
+ Codes of length 09 bits (001 total): 40
+ Codes of length 10 bits (001 total): B1
+ Codes of length 11 bits (001 total): C1
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (001 total): E1
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00004EA4
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007B0B
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000083AB
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (003 total): 10 11 20
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (003 total): 21 30 31
+ Codes of length 07 bits (001 total): 41
+ Codes of length 08 bits (001 total): 51
+ Codes of length 09 bits (001 total): 40
+ Codes of length 10 bits (001 total): 61
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000083CC
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000088BF
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 00 10 11
+ Codes of length 04 bits (001 total): 20
+ Codes of length 05 bits (001 total): 30
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 21 31 41
+ Codes of length 08 bits (001 total): 40
+ Codes of length 09 bits (001 total): 51
+ Codes of length 10 bits (001 total): 71
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000088E0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00008C75
+ Huffman table length = 41
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (001 total): 61
+ Codes of length 07 bits (003 total): 10 71 81
+ Codes of length 08 bits (003 total): 91 A1 B1
+ Codes of length 09 bits (005 total): 20 30 C1 D1 F1
+ Codes of length 10 bits (001 total): E1
+ Codes of length 11 bits (001 total): F0
+ Codes of length 12 bits (001 total): 40
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008CA0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000EDFD
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01B8FDD60747E53114DC15797CC09B4E
+ Signature (Rotated): 011975EE86201F10E48E4F365C73A839
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[IJG Library ] [071 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [071 ]
+ SW :[IrfanView ] [071 ]
+ SW :[idImager ] [071 ]
+ SW :[FastStone Image Viewer ] [071 ]
+ SW :[NeatImage ] [071 ]
+ SW :[Paint.NET ] [071 ]
+ SW :[Photomatix ] [071 ]
+ SW :[XnView ] [071 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue178-BadCoeffsProgressive-Lemon.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue178-BadCoeffsProgressive-Lemon.jpg.txt
new file mode 100644
index 000000000..af39df365
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue178-BadCoeffsProgressive-Lemon.jpg.txt
@@ -0,0 +1,471 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue178-BadCoeffsProgressive-Lemon.jpg]
+ Filesize: [279270] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 2 2 1
+ DQT, Row #4: 1 1 1 1 1 2 2 2
+ DQT, Row #5: 1 1 1 1 2 2 2 2
+ DQT, Row #6: 1 1 2 2 2 2 2 2
+ DQT, Row #7: 1 2 2 2 2 2 2 2
+ Approx quality factor = 98.32 (scaling=3.35 variance=5.00)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 1 2 2 2 2
+ DQT, Row #1: 1 1 1 1 2 2 2 2
+ DQT, Row #2: 1 1 1 2 2 2 2 2
+ DQT, Row #3: 1 1 2 2 2 2 2 2
+ DQT, Row #4: 2 2 2 2 2 2 2 2
+ DQT, Row #5: 2 2 2 2 2 2 2 2
+ DQT, Row #6: 2 2 2 2 2 2 2 2
+ DQT, Row #7: 2 2 2 2 2 2 2 2
+ Approx quality factor = 98.83 (scaling=2.34 variance=0.89)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 710
+ Samples per Line = 710
+ Image Size = 710 x 710
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 30
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 05
+ Codes of length 03 bits (004 total): 03 04 06 07
+ Codes of length 04 bits (003 total): 00 02 08
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000D1
+ Huffman table length = 29
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (005 total): 00 01 02 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000F0
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002D06
+ Huffman table length = 49
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 02
+ Codes of length 03 bits (004 total): 00 01 03 04
+ Codes of length 04 bits (002 total): 05 11
+ Codes of length 05 bits (002 total): 06 12
+ Codes of length 06 bits (002 total): 13 21
+ Codes of length 07 bits (002 total): 07 14
+ Codes of length 08 bits (001 total): 22
+ Codes of length 09 bits (003 total): 10 15 31
+ Codes of length 10 bits (004 total): 16 23 32 41
+ Codes of length 11 bits (001 total): 20
+ Codes of length 12 bits (004 total): 08 30 33 50
+ Codes of length 13 bits (003 total): 24 40 42
+ Codes of length 14 bits (001 total): 34
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 030
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002D39
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007ADB
+ Huffman table length = 72
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (005 total): 05 22 41 51 61
+ Codes of length 07 bits (005 total): 06 13 71 81 A1
+ Codes of length 08 bits (005 total): 14 32 91 B1 F0
+ Codes of length 09 bits (006 total): 23 42 52 C1 D1 E1
+ Codes of length 10 bits (004 total): 10 15 33 62
+ Codes of length 11 bits (003 total): 07 82 F1
+ Codes of length 12 bits (006 total): 20 24 30 43 72 A2
+ Codes of length 13 bits (006 total): 16 34 53 92 B2 E2
+ Codes of length 14 bits (003 total): 25 44 93
+ Codes of length 15 bits (001 total): D2
+ Codes of length 16 bits (000 total):
+ Total number of codes: 053
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007B25
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000A7E3
+ Huffman table length = 74
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (005 total): 05 12 21 31 41
+ Codes of length 06 bits (005 total): 06 13 22 51 61
+ Codes of length 07 bits (004 total): 32 71 81 91
+ Codes of length 08 bits (006 total): 14 42 52 A1 B1 F0
+ Codes of length 09 bits (008 total): 07 10 15 23 62 C1 D1 E1
+ Codes of length 10 bits (004 total): 33 43 72 92
+ Codes of length 11 bits (004 total): 24 82 A2 F1
+ Codes of length 12 bits (004 total): 16 34 63 D2
+ Codes of length 13 bits (006 total): 20 40 53 B2 C2 E2
+ Codes of length 14 bits (003 total): 17 25 30
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 055
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000A82F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000E96D
+ Huffman table length = 84
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (003 total): 00 03 21
+ Codes of length 05 bits (005 total): 04 12 31 41 51
+ Codes of length 06 bits (004 total): 05 22 61 71
+ Codes of length 07 bits (006 total): 13 32 81 91 A1 F0
+ Codes of length 08 bits (008 total): 10 14 23 42 52 B1 C1 D1
+ Codes of length 09 bits (003 total): 33 62 E1
+ Codes of length 10 bits (005 total): 06 72 82 92 F1
+ Codes of length 11 bits (006 total): 15 20 24 43 53 A2
+ Codes of length 12 bits (004 total): 30 34 63 73
+ Codes of length 13 bits (004 total): 44 83 B2 C2
+ Codes of length 14 bits (005 total): 40 50 93 A3 D2
+ Codes of length 15 bits (002 total): 16 25
+ Codes of length 16 bits (007 total): 26 35 54 60 64 B3 E2
+ Total number of codes: 065
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000E9C3
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0001AD55
+ Huffman table length = 40
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 11 21
+ Codes of length 04 bits (002 total): 00 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (002 total): 61 71
+ Codes of length 07 bits (002 total): 81 91
+ Codes of length 08 bits (002 total): A1 B1
+ Codes of length 09 bits (003 total): C1 D1 F0
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (003 total): 10 E1 F1
+ Codes of length 12 bits (001 total): 20
+ Codes of length 13 bits (001 total): 30
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 021
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001AD7F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000287B1
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00028DB3
+ Huffman table length = 39
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 11 21
+ Codes of length 04 bits (002 total): 00 31
+ Codes of length 05 bits (001 total): 41
+ Codes of length 06 bits (003 total): 51 61 71
+ Codes of length 07 bits (003 total): 81 91 F0
+ Codes of length 08 bits (005 total): A1 B1 C1 D1 E1
+ Codes of length 09 bits (001 total): F1
+ Codes of length 10 bits (001 total): 10
+ Codes of length 11 bits (001 total): 20
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 020
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00028DDC
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0002CD0C
+ Huffman table length = 41
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 11 21
+ Codes of length 04 bits (002 total): 00 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (001 total): 61
+ Codes of length 07 bits (004 total): 71 81 91 F0
+ Codes of length 08 bits (002 total): A1 B1
+ Codes of length 09 bits (003 total): C1 D1 E1
+ Codes of length 10 bits (001 total): F1
+ Codes of length 11 bits (001 total): 30
+ Codes of length 12 bits (001 total): 10
+ Codes of length 13 bits (001 total): 20
+ Codes of length 14 bits (001 total): 40
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0002CD37
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00031187
+ Huffman table length = 38
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (001 total): 21
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 00 31 41
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (002 total): 51 61
+ Codes of length 08 bits (002 total): 71 81
+ Codes of length 09 bits (002 total): 91 A1
+ Codes of length 10 bits (002 total): B1 C1
+ Codes of length 11 bits (003 total): D1 E1 F0
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (001 total): 10
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 019
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000311AF
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000442E4
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01C7F83908166C226C06A44017421732
+ Signature (Rotated): 01D3EFDD3855C42AE3E0E6289F1A6726
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Canon ] [Canon EOS-1Ds Mark II ] [fine ] No
+ CAM:[CASIO COMPUTER CO.,LTD. ] [EX-Z1000 ] [ ] Yes
+ CAM:[NIKON ] [NIKON D2X ] [FINE ] No
+ CAM:[NIKON ] [NIKON D3 ] [FINE ] No
+ CAM:[SIGMA ] [SIGMA SD10 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD10 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD14 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD14 ] [Qual:12 ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-R1 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[Digital Photo Professiona] [09 ]
+ SW :[IJG Library ] [099 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [099 ]
+ SW :[IrfanView ] [099 ]
+ SW :[idImager ] [099 ]
+ SW :[FastStone Image Viewer ] [099 ]
+ SW :[NeatImage ] [099 ]
+ SW :[Paint.NET ] [099 ]
+ SW :[Photomatix ] [099 ]
+ SW :[XnView ] [099 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue214-CriticalEOF .jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue214-CriticalEOF .jpg.txt
new file mode 100644
index 000000000..f5b6d277d
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue214-CriticalEOF .jpg.txt
@@ -0,0 +1,94 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue214-CriticalEOF .jpg]
+ Filesize: [35601] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 39251
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0015
+ [Make ] = "NIKON CORPORATION"
+ [Model ] = "NIKON D40"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Ver.1.10 "
+ [DateTime ] = "2009:02:17 08:30:16"
+ [YCbCrPositioning ] = Co-sited
+ [ExifOffset ] = @ 0x015C
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Auto exposure
+ [WhiteBalance ] = Auto white balance
+ [SceneCaptureType ] = Standard
+ Offset to Next IFD = 0x00007652
+
+ EXIF IFD1 @ Absolute 0x00007670
+ Dir Length = 0x0007
+ [Compression ] = JPEG
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x76BC = @ 0x76DA
+ [JpegIFByteCount ] = 0x[0000228F] / 8847
+ [YCbCrPositioning ] = Co-sited
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x0000017A
+ Dir Length = 0x001C
+ [ExposureTime ] = 10/1250 s
+ [FNumber ] = F5.6
+ [ExposureProgram ] = Not defined
+ [ISOSpeedRatings ] = 220
+ [ExifVersion ] = 02.21
+ [DateTimeOriginal ] = "2009:02:17 08:30:16"
+ [DateTimeDigitized ] = "2009:02:17 08:30:15"
+ [ComponentsConfiguration ] = [Y Cb Cr .]
+ [CompressedBitsPerPixel ] = 1/1
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 41/10
+ [MeteringMode ] = Pattern
+ [LightSource ] = unknown
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 30 mm
+ [MakerNote ] = @ 0x030A
+ [UserComment ] = " "
+ [SubSecTime ] = "60"
+ [SubSecTimeOriginal ] = "60"
+ [SubSecTimeDigitized ] = "60"
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 3008
+ [ExifImageHeight ] = 2000
+ [SensingMethod ] = One-chip color area sensor
+ [FileSource ] = DSC
+ [SceneType ] = A directly photographed image
+ [CFAPattern ] =
+ = [ Blu Grn ]
+ = [ Grn Red ]
+
+ EXIF MakerIFD @ Absolute 0x00000328
+ Makernote decode option not enabled.
+
+ERROR: Early EOF - file may be missing EOI
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue385-BadZigZag-Progressive.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue385-BadZigZag-Progressive.jpg.txt
new file mode 100644
index 000000000..1f98e67dc
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue385-BadZigZag-Progressive.jpg.txt
@@ -0,0 +1,468 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue385-BadZigZag-Progressive.jpg]
+ Filesize: [388517] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 5 3 3 5 7 12 15 18
+ DQT, Row #1: 4 4 4 6 8 17 18 17
+ DQT, Row #2: 4 4 5 7 12 17 21 17
+ DQT, Row #3: 4 5 7 9 15 26 24 19
+ DQT, Row #4: 5 7 11 17 20 33 31 23
+ DQT, Row #5: 7 11 17 19 24 31 34 28
+ DQT, Row #6: 15 19 23 26 31 36 36 30
+ DQT, Row #7: 22 28 29 29 34 30 31 30
+ Approx quality factor = 84.93 (scaling=30.13 variance=1.05)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 5 5 7 14 30 30 30 30
+ DQT, Row #1: 5 6 8 20 30 30 30 30
+ DQT, Row #2: 7 8 17 30 30 30 30 30
+ DQT, Row #3: 14 20 30 30 30 30 30 30
+ DQT, Row #4: 30 30 30 30 30 30 30 30
+ DQT, Row #5: 30 30 30 30 30 30 30 30
+ DQT, Row #6: 30 30 30 30 30 30 30 30
+ DQT, Row #7: 30 30 30 30 30 30 30 30
+ Approx quality factor = 84.93 (scaling=30.15 variance=0.29)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1440
+ Samples per Line = 1920
+ Image Size = 1920 x 1440
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (003 total): 02 03 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (001 total): 08
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000CF
+ Huffman table length = 25
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 006
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000EA
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007E0B
+ Huffman table length = 55
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (003 total): 04 12 21
+ Codes of length 06 bits (002 total): 05 10
+ Codes of length 07 bits (004 total): 13 20 22 31
+ Codes of length 08 bits (004 total): 06 14 30 41
+ Codes of length 09 bits (005 total): 15 32 33 34 40
+ Codes of length 10 bits (005 total): 23 24 35 42 50
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (002 total): 25 70
+ Codes of length 13 bits (003 total): 16 44 60
+ Codes of length 14 bits (001 total): 36
+ Codes of length 15 bits (001 total): 45
+ Codes of length 16 bits (001 total): 43
+ Total number of codes: 036
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007E44
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00012C0C
+ Huffman table length = 46
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (004 total): 02 10 12 20
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (004 total): 03 21 30 31
+ Codes of length 07 bits (006 total): 13 32 40 41 50 51
+ Codes of length 08 bits (002 total): 22 61
+ Codes of length 09 bits (002 total): 04 60
+ Codes of length 10 bits (003 total): 23 33 71
+ Codes of length 11 bits (001 total): 42
+ Codes of length 12 bits (001 total): 05
+ Codes of length 13 bits (001 total): 43
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 027
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00012C3C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00013C45
+ Huffman table length = 43
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (004 total): 02 10 12 20
+ Codes of length 05 bits (001 total): 30
+ Codes of length 06 bits (004 total): 03 21 31 40
+ Codes of length 07 bits (002 total): 41 50
+ Codes of length 08 bits (002 total): 13 51
+ Codes of length 09 bits (002 total): 22 60
+ Codes of length 10 bits (003 total): 32 42 61
+ Codes of length 11 bits (001 total): 04
+ Codes of length 12 bits (001 total): 81
+ Codes of length 13 bits (001 total): 71
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00013C72
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000148F2
+ Huffman table length = 75
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (004 total): 02 11 21 31
+ Codes of length 05 bits (002 total): 03 10
+ Codes of length 06 bits (006 total): 12 20 22 32 41 51
+ Codes of length 07 bits (007 total): 04 30 33 61 71 81 91
+ Codes of length 08 bits (005 total): 13 40 50 52 72
+ Codes of length 09 bits (007 total): 23 34 42 62 82 92 A1
+ Codes of length 10 bits (001 total): B1
+ Codes of length 11 bits (006 total): 14 60 70 73 C1 E1
+ Codes of length 12 bits (005 total): 05 63 83 A2 D1
+ Codes of length 13 bits (004 total): 24 43 53 93
+ Codes of length 14 bits (002 total): 74 F0
+ Codes of length 15 bits (002 total): 15 B2
+ Codes of length 16 bits (003 total): 35 E2 F1
+ Total number of codes: 056
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001493F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0001BD13
+ Huffman table length = 44
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (002 total): 10 61
+ Codes of length 07 bits (001 total): 71
+ Codes of length 08 bits (004 total): 20 81 91 A1
+ Codes of length 09 bits (002 total): 30 B1
+ Codes of length 10 bits (002 total): C1 F0
+ Codes of length 11 bits (003 total): 40 D1 F1
+ Codes of length 12 bits (001 total): E1
+ Codes of length 13 bits (001 total): 50
+ Codes of length 14 bits (001 total): 60
+ Codes of length 15 bits (001 total): 70
+ Codes of length 16 bits (000 total):
+ Total number of codes: 025
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0001BD41
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0002C20D
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0002E1DF
+ Huffman table length = 37
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (002 total): 21 31
+ Codes of length 06 bits (002 total): 10 41
+ Codes of length 07 bits (003 total): 20 51 61
+ Codes of length 08 bits (001 total): 71
+ Codes of length 09 bits (001 total): 30
+ Codes of length 10 bits (001 total): 81
+ Codes of length 11 bits (001 total): 40
+ Codes of length 12 bits (001 total): 91
+ Codes of length 13 bits (001 total): A1
+ Codes of length 14 bits (001 total): B1
+ Codes of length 15 bits (001 total): C1
+ Codes of length 16 bits (000 total):
+ Total number of codes: 018
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0002E206
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000313D7
+ Huffman table length = 36
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (003 total): 10 21 31
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (003 total): 20 41 51
+ Codes of length 07 bits (001 total): 61
+ Codes of length 08 bits (001 total): 71
+ Codes of length 09 bits (001 total): 30
+ Codes of length 10 bits (001 total): 81
+ Codes of length 11 bits (001 total): 40
+ Codes of length 12 bits (001 total): 91
+ Codes of length 13 bits (001 total): B1
+ Codes of length 14 bits (001 total): A1
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 017
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000313FD
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00033E31
+ Huffman table length = 40
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (002 total): 61 71
+ Codes of length 07 bits (002 total): 81 91
+ Codes of length 08 bits (002 total): A1 B1
+ Codes of length 09 bits (003 total): 10 C1 D1
+ Codes of length 10 bits (001 total): F0
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (001 total): 20
+ Codes of length 14 bits (001 total): 30
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 021
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00033E5B
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0005EDA3
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0155D875C95B74D0F3C5835A62516F48
+ Signature (Rotated): 01D38A25358EB7649A254E19F1D46600
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[Nokia ] [N73 ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 8100 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ SW :[IJG Library ] [085 ]
+ SW :[Picasa ] [085 (Normal) ]
+ SW :[ZoomBrowser EX ] [medium ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [085 ]
+ SW :[IrfanView ] [085 ]
+ SW :[idImager ] [085 ]
+ SW :[FastStone Image Viewer ] [085 ]
+ SW :[NeatImage ] [085 ]
+ SW :[Paint.NET ] [085 ]
+ SW :[Photomatix ] [085 ]
+ SW :[XnView ] [085 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue394-MultiHuffmanBaseline-Speakers.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue394-MultiHuffmanBaseline-Speakers.jpg.txt
new file mode 100644
index 000000000..22e9a99dd
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue394-MultiHuffmanBaseline-Speakers.jpg.txt
@@ -0,0 +1,438 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue394-MultiHuffmanBaseline-Speakers.jpg]
+ Filesize: [257401] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00000002
+ Length = 576
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 560 bytes
+ Preferred CMM Type : 'ADBE' (0x41444245)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1999-06-03 00:00:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'none' (0x6E6F6E65)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'ADBE' (0x41444245)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00000244
+ Length = 90
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x003D] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 3
+ IPTC [002:055] Date Created = "20161215"
+ IPTC [002:060] Time Created = "043026-0600"
+ IPTC [002:221] ? = ???
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000002A0
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 9 11 12 16
+ DQT, Row #1: 4 5 5 6 8 10 12 12
+ DQT, Row #2: 4 5 5 6 10 12 12 12
+ DQT, Row #3: 6 6 6 11 12 12 12 12
+ DQT, Row #4: 9 8 10 12 12 12 12 12
+ DQT, Row #5: 11 10 12 12 12 12 12 12
+ DQT, Row #6: 12 12 12 12 12 12 12 12
+ DQT, Row #7: 16 12 12 12 12 12 12 12
+ Approx quality factor = 88.28 (scaling=23.43 variance=111.68)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 13 24 20 20 17 17
+ DQT, Row #1: 7 12 16 14 14 12 12 12
+ DQT, Row #2: 13 16 14 14 12 12 12 12
+ DQT, Row #3: 24 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 90.19 (scaling=19.62 variance=201.04)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00000326
+ Length = 4
+ interval = 115
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x0000032C
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 49152
+ APP14Flags1 = 0
+ ColorTransform = 1 [YCbCr]
+
+*** Marker: SOF1 (Extended Sequential DCT, Huffman) (xFFC1) ***
+ OFFSET: 0x0000033C
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 496
+ Samples per Line = 920
+ Image Size = 920 x 496
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000034F
+ Huffman table length = 626
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 05
+ Codes of length 03 bits (005 total): 02 03 04 06 07
+ Codes of length 04 bits (001 total): 01
+ Codes of length 05 bits (001 total): 08
+ Codes of length 06 bits (001 total): 00
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (003 total): 09 0A 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 02 03
+ Codes of length 03 bits (003 total): 01 04 05
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (002 total): 07 08
+ Codes of length 08 bits (003 total): 09 0A 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 2
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (003 total): 00 03 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (005 total): 07 08 09 0A 0B
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (002 total): 03 11
+ Codes of length 04 bits (002 total): 04 12
+ Codes of length 05 bits (001 total): 21
+ Codes of length 06 bits (003 total): 00 05 13
+ Codes of length 07 bits (002 total): 22 31
+ Codes of length 08 bits (004 total): 06 14 32 41
+ Codes of length 09 bits (002 total): 23 51
+ Codes of length 10 bits (003 total): 15 42 61
+ Codes of length 11 bits (005 total): 07 16 33 52 71
+ Codes of length 12 bits (006 total): 24 43 62 81 91 F0
+ Codes of length 13 bits (006 total): 25 34 72 A1 B1 C1
+ Codes of length 14 bits (012 total): 08 18 26 46 53 63 82 92 93 D1 D2 F1
+ Codes of length 15 bits (111 total): 09 0A 17 19 1A 27 28 29 2A 35 36 37 38 39 3A 44
+ 45 47 48 49 4A 54 55 56 57 58 59 5A 64 65 66 67
+ 68 69 6A 73 74 75 76 77 78 79 7A 83 84 85 86 87
+ 88 89 8A 94 95 96 97 98 99 9A A2 A3 A4 A5 A6 A7
+ A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5
+ C6 C7 C8 C9 CA D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3
+ E4 E5 E6 E7 E8 E9 EA F2 F3 F4 F5 F6 F7 F8 F9
+ Codes of length 16 bits (001 total): FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (003 total): 02 21 31
+ Codes of length 05 bits (004 total): 41 51 61 F0
+ Codes of length 06 bits (006 total): 03 12 13 71 81 91
+ Codes of length 07 bits (006 total): 14 A1 B1 C1 D1 E1
+ Codes of length 08 bits (002 total): 04 F1
+ Codes of length 09 bits (002 total): 22 32
+ Codes of length 10 bits (002 total): 52 62
+ Codes of length 11 bits (004 total): 05 42 72 A2
+ Codes of length 12 bits (125 total): 06 07 08 09 0A 15 16 17 18 19 1A 23 24 25 26 27
+ 28 29 2A 33 34 35 36 37 38 39 3A 43 44 45 46 47
+ 48 49 4A 53 54 55 56 57 58 59 5A 63 64 65 66 67
+ 68 69 6A 73 74 75 76 77 78 79 7A 82 83 84 85 86
+ 87 88 89 8A 92 93 94 95 96 97 98 99 9A A3 A4 A5
+ A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3
+ C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA
+ E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3 F4 F5
+ Codes of length 13 bits (005 total): F6 F7 F8 F9 FA
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 162
+
+ ----
+ Destination ID = 2
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 02
+ Codes of length 05 bits (005 total): 12 21 31 41 51
+ Codes of length 06 bits (004 total): 03 61 71 F0
+ Codes of length 07 bits (004 total): 13 81 91 A1
+ Codes of length 08 bits (006 total): 04 14 C1 D1 E1 F1
+ Codes of length 09 bits (002 total): 22 B1
+ Codes of length 10 bits (001 total): 42
+ Codes of length 11 bits (004 total): 32 52 92 D2
+ Codes of length 12 bits (131 total): 05 06 07 08 09 0A 15 16 17 18 19 1A 23 24 25 26
+ 27 28 29 2A 33 34 35 36 37 38 39 3A 43 44 45 46
+ 47 48 49 4A 53 54 55 56 57 58 59 5A 62 63 64 65
+ 66 67 68 69 6A 72 73 74 75 76 77 78 79 7A 82 83
+ 84 85 86 87 88 89 8A 93 94 95 96 97 98 99 9A A2
+ A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9
+ BA C2 C3 C4 C5 C6 C7 C8 C9 CA D3 D4 D5 D6 D7 D8
+ D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3 F4 F5 F6
+ F7 F8 F9
+ Codes of length 13 bits (001 total): FA
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000005C3
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=2(DC),2(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000005D1
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0003ED77.0
+
+ Compression stats:
+ Compression Ratio: 5.35:1
+ Bits per pixel: 4.49:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 1109 ( 16%)
+ # codes of length 03 bits: 4934 ( 69%)
+ # codes of length 04 bits: 705 ( 10%)
+ # codes of length 05 bits: 22 ( 0%)
+ # codes of length 06 bits: 360 ( 5%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 2599 ( 36%)
+ # codes of length 03 bits: 2938 ( 41%)
+ # codes of length 04 bits: 1592 ( 22%)
+ # codes of length 05 bits: 1 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 2, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 3838 ( 54%)
+ # codes of length 03 bits: 3132 ( 44%)
+ # codes of length 04 bits: 156 ( 2%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 4 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 170962 ( 54%)
+ # codes of length 03 bits: 67518 ( 21%)
+ # codes of length 04 bits: 33616 ( 11%)
+ # codes of length 05 bits: 9306 ( 3%)
+ # codes of length 06 bits: 15458 ( 5%)
+ # codes of length 07 bits: 7462 ( 2%)
+ # codes of length 08 bits: 6393 ( 2%)
+ # codes of length 09 bits: 1640 ( 1%)
+ # codes of length 10 bits: 1220 ( 0%)
+ # codes of length 11 bits: 975 ( 0%)
+ # codes of length 12 bits: 581 ( 0%)
+ # codes of length 13 bits: 213 ( 0%)
+ # codes of length 14 bits: 134 ( 0%)
+ # codes of length 15 bits: 75 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 11236 ( 26%)
+ # codes of length 03 bits: 12123 ( 28%)
+ # codes of length 04 bits: 7424 ( 17%)
+ # codes of length 05 bits: 5864 ( 13%)
+ # codes of length 06 bits: 4420 ( 10%)
+ # codes of length 07 bits: 1997 ( 5%)
+ # codes of length 08 bits: 545 ( 1%)
+ # codes of length 09 bits: 244 ( 1%)
+ # codes of length 10 bits: 61 ( 0%)
+ # codes of length 11 bits: 41 ( 0%)
+ # codes of length 12 bits: 31 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 2, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 15434 ( 46%)
+ # codes of length 03 bits: 3540 ( 11%)
+ # codes of length 04 bits: 2524 ( 8%)
+ # codes of length 05 bits: 5638 ( 17%)
+ # codes of length 06 bits: 3224 ( 10%)
+ # codes of length 07 bits: 1556 ( 5%)
+ # codes of length 08 bits: 1170 ( 3%)
+ # codes of length 09 bits: 277 ( 1%)
+ # codes of length 10 bits: 14 ( 0%)
+ # codes of length 11 bits: 111 ( 0%)
+ # codes of length 12 bits: 34 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[ 97] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 762, 70, -70] RGB=[210,226,237] @ MCU[ 56, 4]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 61
+ Next position in scan buffer: Offset 0x0003ED76.3
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0003ED77
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01180AF3DE63318828A86409EF4013DD
+ Signature (Rotated): 01180AF3DE63318828A86409EF4013DD
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 08 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue517-No-EOI-Progressive.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue517-No-EOI-Progressive.jpg.txt
new file mode 100644
index 000000000..47e77a4f4
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue517-No-EOI-Progressive.jpg.txt
@@ -0,0 +1,406 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue517-No-EOI-Progressive.jpg]
+ Filesize: [2192567] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 500 x 500 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 248
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0007
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 500/1
+ [YResolution ] = 500/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop CS6 (Macintosh)"
+ [DateTime ] = "2018:01:06 12:59:23"
+ [ExifOffset ] = @ 0x00A6
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000C4
+ Dir Length = 0x0004
+ [DateTimeDigitized ] = "2018:01:06 04:40:19"
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 0x[000008CA] / 2250
+ [ExifImageHeight ] = 0x[000008CA] / 2250
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x0000010E
+ Length = 4875
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x0000141B
+ Length = 100
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x002C] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 2
+ IPTC [002:062] Digital Creation Date = "20180106"
+ IPTC [002:063] Digital Creation Time = "044019-0500"
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0x5D 51 F3 F0 D0 DE FC 5F 94 67 16 6F B1 02 A3 89 | ]Q....._.g.o....
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x00001481
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 2250
+ Samples per Line = 2250
+ Image Size = 2250 x 2250
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001494
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (005 total): 02 04 01 05 00
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000014B5
+ Huffman table length = 195
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 02 00 03
+ Codes of length 04 bits (003 total): 11 04 12
+ Codes of length 05 bits (002 total): 21 05
+ Codes of length 06 bits (004 total): 31 13 22 10
+ Codes of length 07 bits (003 total): 06 41 51
+ Codes of length 08 bits (004 total): 32 14 61 71
+ Codes of length 09 bits (006 total): 23 07 81 20 91 42
+ Codes of length 10 bits (004 total): 15 A1 52 33
+ Codes of length 11 bits (007 total): B1 24 62 30 16 C1 72
+ Codes of length 12 bits (006 total): D1 43 92 34 82 08
+ Codes of length 13 bits (004 total): E1 53 40 25
+ Codes of length 14 bits (008 total): 63 17 35 F0 93 73 A2 50
+ Codes of length 15 bits (006 total): 44 B2 83 F1 26 54
+ Codes of length 16 bits (115 total): 36 64 94 74 C2 60 D2 84 A3 18 70 E2 27 45 37 65
+ B3 55 75 A4 95 C3 85 F2 D3 46 76 80 E3 47 56 66
+ B4 09 0A 19 1A 28 29 2A 38 39 3A 48 49 4A 57 58
+ 59 5A 67 68 69 6A 77 78 79 7A 86 87 88 89 8A 90
+ 96 97 98 99 9A A0 A5 A6 A7 A8 A9 AA B0 B5 B6 B7
+ B8 B9 BA C0 C4 C5 C6 C7 C8 C9 CA D0 D4 D5 D6 D7
+ D8 D9 DA E0 E4 E5 E6 E7 E8 E9 EA F3 F4 F5 F6 F7
+ F8 F9 FA
+ Total number of codes: 176
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000157A
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 01 02 00
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000159B
+ Huffman table length = 195
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 00
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (003 total): 10 12 21
+ Codes of length 06 bits (003 total): 04 20 31
+ Codes of length 07 bits (003 total): 41 13 05
+ Codes of length 08 bits (002 total): 30 22
+ Codes of length 09 bits (003 total): 32 51 14
+ Codes of length 10 bits (005 total): 40 06 33 23 61
+ Codes of length 11 bits (002 total): 42 15
+ Codes of length 12 bits (005 total): 71 52 34 81 50
+ Codes of length 13 bits (002 total): 24 91
+ Codes of length 14 bits (004 total): A1 43 B1 16
+ Codes of length 15 bits (004 total): 07 62 35 53
+ Codes of length 16 bits (135 total): F0 D1 25 60 C1 44 E1 72 F1 17 82 63 36 70 26 45
+ 54 92 27 A2 D2 08 09 0A 18 19 1A 28 29 2A 37 38
+ 39 3A 46 47 48 49 4A 55 56 57 58 59 5A 64 65 66
+ 67 68 69 6A 73 74 75 76 77 78 79 7A 80 83 84 85
+ 86 87 88 89 8A 90 93 94 95 96 97 98 99 9A A0 A3
+ A4 A5 A6 A7 A8 A9 AA B0 B2 B3 B4 B5 B6 B7 B8 B9
+ BA C0 C2 C3 C4 C5 C6 C7 C8 C9 CA D0 D3 D4 D5 D6
+ D7 D8 D9 DA E0 E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 176
+
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00001660
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 2
+ DQT, Row #1: 1 1 1 1 1 1 1 2
+ DQT, Row #2: 1 1 1 1 1 1 2 2
+ DQT, Row #3: 1 1 1 1 1 2 2 3
+ DQT, Row #4: 1 1 1 1 2 2 3 3
+ DQT, Row #5: 1 1 1 2 2 3 3 3
+ DQT, Row #6: 1 1 2 2 3 3 3 3
+ DQT, Row #7: 2 2 2 3 3 3 3 3
+ Approx quality factor = 98.11 (scaling=3.79 variance=4.10)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000016A5
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 2 3 3 3 3
+ DQT, Row #1: 1 1 1 2 3 3 3 3
+ DQT, Row #2: 1 1 2 3 3 3 3 3
+ DQT, Row #3: 2 2 3 3 3 3 3 3
+ DQT, Row #4: 3 3 3 3 3 3 3 3
+ DQT, Row #5: 3 3 3 3 3 3 3 3
+ DQT, Row #6: 3 3 3 3 3 3 3 3
+ DQT, Row #7: 3 3 3 3 3 3 3 3
+ Approx quality factor = 98.36 (scaling=3.29 variance=0.42)
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000016EA
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00023AAF
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0003E82C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0006B107
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0008AA32
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000BA727
+ Huffman table length = 51
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 11 00 21
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (002 total): 51 61
+ Codes of length 07 bits (002 total): 71 81
+ Codes of length 08 bits (002 total): 91 A1
+ Codes of length 09 bits (002 total): B1 C1
+ Codes of length 10 bits (003 total): F0 D1 10
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (002 total): 20 30
+ Codes of length 16 bits (011 total): 40 50 60 70 80 90 A0 B0 C0 D0 E0
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000BA75C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000FE1E7
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x001056B6
+ Huffman table length = 51
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 21 31 10
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (001 total): 41
+ Codes of length 08 bits (002 total): 51 61
+ Codes of length 09 bits (005 total): 20 71 F0 91 81
+ Codes of length 10 bits (005 total): A1 B1 D1 C1 E1
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (001 total): 30
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): 40
+ Codes of length 15 bits (001 total): 50
+ Codes of length 16 bits (009 total): 60 70 80 90 A0 B0 C0 D0 E0
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x001056EB
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0014E060
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x001879C8
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x002174B5
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01DADDC4908E9BA57CC067EEAD54E67D
+ Signature (Rotated): 01DADDC4908E9BA57CC067EEAD54E67D
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop CS6 (Macintosh)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 12 ]
+
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue518-Bad-RST-Progressive.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue518-Bad-RST-Progressive.jpg.txt
new file mode 100644
index 000000000..1b1027f27
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue518-Bad-RST-Progressive.jpg.txt
@@ -0,0 +1,759 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue518-Bad-RST-Progressive.jpg]
+ Filesize: [3764739] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 14215
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0009
+ [Make ] = "OLYMPUS CORPORATION"
+ [Model ] = "E-1"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 300/1
+ [YResolution ] = 300/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "GIMP 2.8.10"
+ [DateTime ] = "2017:04:18 16:37:56"
+ [ExifOffset ] = @ 0x00BE
+ Offset to Next IFD = 0x000001DC
+
+ EXIF IFD1 @ Absolute 0x000001FA
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x023A = @ 0x0258
+ [JpegIFByteCount ] = 0x[00003545] / 13637
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000DC
+ Dir Length = 0x0011
+ [ExposureTime ] = 1/4 s
+ [FNumber ] = F18.0
+ [ExposureProgram ] = Manual
+ [ISOSpeedRatings ] = 100
+ [ExifVersion ] = 02.21
+ [DateTimeOriginal ] = "2005:07:20 20:08:42"
+ [ShutterSpeedValue ] = 2/1
+ [ApertureValue ] = 833985/100000
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 2972656/1000000
+ [MeteringMode ] = CenterWeightedAverage
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 14 mm
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = Uncalibrated
+ [ExifImageWidth ] = 0x[00000BB8] / 3000
+ [ExifImageHeight ] = 0x[00000BB8] / 3000
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x0000379D
+ Comment length = 3
+ Comment=
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x000037A2
+ Length = 5091
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+ |
+ |
+ |
+ |
+ | 3.1
+ | _7201666.ORF
+ | Custom
+ | 7450
+ | -7
+ | -0.75
+ | True
+ | 4
+ | True
+ | 100
+ | True
+ | 0
+ | 0
+ | 25
+ | 0
+ | 25
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | Medium Contrast
+ | ACR 2.4
+ | True
+ | False
+ | True
+ |
+ |
+ | 0, 0
+ | 32, 22
+ | 64, 56
+ | 128, 128
+ | 192, 196
+ | 255, 255
+ |
+ |
+ | 3.1
+ | _7201666.ORF
+ | Custom
+ | 7450
+ | -7
+ | -0.75
+ | True
+ | 4
+ | True
+ | 100
+ | True
+ | 0
+ | 0
+ | 25
+ | 0
+ | 25
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | 0
+ | Medium Contrast
+ | ACR 2.4
+ | True
+ | False
+ | True
+ |
+ |
+ | 0, 0
+ | 32, 22
+ | 64, 56
+ | 128, 128
+ | 192, 196
+ | 255, 255
+ |
+ |
+ |
+ |
+ | 0
+ | Adobe Photoshop CS6 (Macintosh)
+ | 0
+ | 2014-06-09T12:43:59-04:00
+ | 2005-07-21T18:39:06-06:00
+ | 2014-06-09T12:43:59-04:00
+ |
+ |
+ | xmp.iid:0A801174072068118083C9374AAA53C2
+ | uuid:021303F2FBA711D98B5DCD54C315AFD0
+ |
+ | xmp.iid:0A801174072068118083C9374AAA53C2
+ | uuid:021303F2FBA711D98B5DCD54C315AFD0
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | image/jpeg
+ |
+ |
+ | 2005-07-20T20:08:42
+ | A8D68AA81537D1C7170A5C69A46C6C94
+ | 3
+ | Adobe RGB (1998)
+ |
+ |
+ | 100
+ |
+ |
+ |
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00004B87
+ Length = 3160
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 3144 bytes
+ Preferred CMM Type : 'Lino' (0x4C696E6F)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1998-02-09 06:49:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Microsoft Corporation ('MSFT' (0x4D534654))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'IEC ' (0x49454320)
+ Device Model : 'sRGB' (0x73524742)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'HP ' (0x48502020)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000057E1
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 8 10 12
+ DQT, Row #1: 2 2 3 4 5 12 12 11
+ DQT, Row #2: 3 3 3 5 8 11 14 11
+ DQT, Row #3: 3 3 4 6 10 17 16 12
+ DQT, Row #4: 4 4 7 11 14 22 21 15
+ DQT, Row #5: 5 7 11 13 16 21 23 18
+ DQT, Row #6: 10 13 16 17 21 24 24 20
+ DQT, Row #7: 14 18 19 20 22 20 21 20
+ Approx quality factor = 90.06 (scaling=19.88 variance=1.14)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00005826
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 4 5 9 20 20 20 20
+ DQT, Row #1: 4 4 5 13 20 20 20 20
+ DQT, Row #2: 5 5 11 20 20 20 20 20
+ DQT, Row #3: 9 13 20 20 20 20 20 20
+ DQT, Row #4: 20 20 20 20 20 20 20 20
+ DQT, Row #5: 20 20 20 20 20 20 20 20
+ DQT, Row #6: 20 20 20 20 20 20 20 20
+ DQT, Row #7: 20 20 20 20 20 20 20 20
+ Approx quality factor = 89.93 (scaling=20.14 variance=0.34)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000586B
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 3000
+ Samples per Line = 3000
+ Image Size = 3000 x 3000
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000587E
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 04 05
+ Codes of length 03 bits (002 total): 03 06
+ Codes of length 04 bits (003 total): 00 01 02
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000589C
+ Huffman table length = 27
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 01 02 03
+ Codes of length 03 bits (001 total): 00
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x000058B9
+ Length = 4
+ interval = 375
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000058BF
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0004A3DA
+ Huffman table length = 55
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 02 03
+ Codes of length 03 bits (003 total): 01 04 05
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (001 total): 00
+ Codes of length 06 bits (004 total): 06 11 12 13
+ Codes of length 07 bits (001 total): 14
+ Codes of length 08 bits (003 total): 15 21 22
+ Codes of length 09 bits (003 total): 10 23 31
+ Codes of length 10 bits (004 total): 07 20 24 41
+ Codes of length 11 bits (002 total): 16 32
+ Codes of length 12 bits (002 total): 30 33
+ Codes of length 13 bits (002 total): 25 40
+ Codes of length 14 bits (002 total): 17 42
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (007 total): 34 50 60 43 26 35 44
+ Total number of codes: 036
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0004A413
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000B0746
+ Huffman table length = 62
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (004 total): 03 10 12 31
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (004 total): 13 20 22 51
+ Codes of length 08 bits (002 total): 04 32
+ Codes of length 09 bits (001 total): 61
+ Codes of length 10 bits (003 total): 14 30 71
+ Codes of length 11 bits (003 total): 23 40 42
+ Codes of length 12 bits (003 total): 33 50 52
+ Codes of length 13 bits (003 total): 05 81 91
+ Codes of length 14 bits (003 total): 60 A1 B1
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (011 total): 15 24 62 43 53 C1 D1 72 F0 F1 E1
+ Total number of codes: 043
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000B0786
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000E3DFE
+ Huffman table length = 69
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (002 total): 03 21
+ Codes of length 05 bits (002 total): 12 31
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (006 total): 04 10 13 22 41 51
+ Codes of length 08 bits (001 total): 32
+ Codes of length 09 bits (002 total): 20 61
+ Codes of length 10 bits (005 total): 05 14 23 42 71
+ Codes of length 11 bits (002 total): 30 52
+ Codes of length 12 bits (004 total): 33 40 81 91
+ Codes of length 13 bits (005 total): 15 50 60 A1 B1
+ Codes of length 14 bits (002 total): 62 F0
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (015 total): 24 43 70 C1 D1 06 53 72 E1 F1 25 34 44 63 A2
+ Total number of codes: 050
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000E3E45
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0012926F
+ Huffman table length = 79
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 03
+ Codes of length 04 bits (002 total): 11 12
+ Codes of length 05 bits (005 total): 04 13 21 31 41
+ Codes of length 06 bits (003 total): 22 32 51
+ Codes of length 07 bits (003 total): 23 42 61
+ Codes of length 08 bits (002 total): 05 14
+ Codes of length 09 bits (003 total): 33 52 71
+ Codes of length 10 bits (007 total): 10 24 43 62 81 91 A1
+ Codes of length 11 bits (001 total): B1
+ Codes of length 12 bits (006 total): 15 20 30 53 72 C1
+ Codes of length 13 bits (004 total): 34 40 50 82
+ Codes of length 14 bits (003 total): 60 63 92
+ Codes of length 15 bits (002 total): A2 D1
+ Codes of length 16 bits (015 total): 25 44 70 E1 F0 73 83 B2 F1 06 54 16 35 C2 74
+ Total number of codes: 060
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x001292C0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x001CCECE
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (003 total): 41 51 61
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (002 total): 71 81
+ Codes of length 08 bits (002 total): 91 A1
+ Codes of length 09 bits (002 total): 10 B1
+ Codes of length 10 bits (002 total): C1 D1
+ Codes of length 11 bits (003 total): 20 E1 F0
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (001 total): 30
+ Codes of length 14 bits (001 total): 40
+ Codes of length 15 bits (001 total): 50
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x001CCEFA
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0024E532
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0025B81A
+ Huffman table length = 42
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (002 total): 10 51
+ Codes of length 09 bits (002 total): 61 71
+ Codes of length 10 bits (001 total): 81
+ Codes of length 11 bits (003 total): 20 91 A1
+ Codes of length 12 bits (005 total): 30 B1 C1 D1 F0
+ Codes of length 13 bits (001 total): E1
+ Codes of length 14 bits (001 total): 40
+ Codes of length 15 bits (001 total): F1
+ Codes of length 16 bits (001 total): 50
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0025B846
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0029943F
+ Huffman table length = 43
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (002 total): 41 51
+ Codes of length 08 bits (002 total): 10 61
+ Codes of length 09 bits (001 total): 71
+ Codes of length 10 bits (003 total): 81 91 A1
+ Codes of length 11 bits (005 total): 20 B1 C1 D1 F0
+ Codes of length 12 bits (001 total): E1
+ Codes of length 13 bits (001 total): 30
+ Codes of length 14 bits (001 total): F1
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (003 total): 40 50 60
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0029946C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x002E23F1
+ Huffman table length = 41
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (003 total): 41 51 61
+ Codes of length 06 bits (001 total): 71
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (002 total): 81 91
+ Codes of length 09 bits (002 total): A1 B1
+ Codes of length 10 bits (002 total): C1 D1
+ Codes of length 11 bits (003 total): 10 E1 F0
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (001 total): 20
+ Codes of length 14 bits (001 total): 30
+ Codes of length 15 bits (001 total): 40
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x002E241C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00397201
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000258
+ Length: 0x00003545 (13637)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: APP0
+ Length = 16
+
+ * Embedded Thumb Marker: DQT
+ Length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+
+ * Embedded Thumb Marker: DQT
+ Length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 196
+ Samples per Line = 196
+ Image Size = 196 x 196
+
+ * Embedded Thumb Marker: DHT
+ Length = 31
+
+ * Embedded Thumb Marker: DHT
+ Length = 181
+
+ * Embedded Thumb Marker: DHT
+ Length = 31
+
+ * Embedded Thumb Marker: DHT
+ Length = 181
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 13024 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+
+*** Searching Compression Signatures ***
+
+ Signature: 013BA18D5561625796E986FDBC09F846
+ Signature (Rotated): 01AC57E12793DFA7C46C704625C5AF0F
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: OK [OLYMPUS CORPORATION] [E-1]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [GIMP 2.8.10]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[??? ] [Treo 680 ] [ ] No
+ CAM:[Canon ] [Canon PowerShot Pro1 ] [fine ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E3100 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 9530 ] [Superfine ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W1 ] [ ] No
+ CAM:[SONY ] [SONY ] [ ] No
+ SW :[ACDSee ] [ ]
+ SW :[FixFoto ] [fine ]
+ SW :[IJG Library ] [090 ]
+ SW :[ZoomBrowser EX ] [high ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [090 ]
+ SW :[IrfanView ] [090 ]
+ SW :[idImager ] [090 ]
+ SW :[FastStone Image Viewer ] [090 ]
+ SW :[NeatImage ] [090 ]
+ SW :[Paint.NET ] [090 ]
+ SW :[Photomatix ] [090 ]
+ SW :[XnView ] [090 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 2 - Image has high probability of being processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue520-InvalidCast.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue520-InvalidCast.jpg.txt
new file mode 100644
index 000000000..aadf150e6
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue520-InvalidCast.jpg.txt
@@ -0,0 +1,364 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue520-InvalidCast.jpg]
+ Filesize: [7751] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 499
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0011
+ [DateTime ] = "2017:09:06 15:13:32"
+ [Model ] = "SAMSUNG-SM-J320AZ"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [WhiteBalance ] = Auto white balance
+ [DateTime ] = "2017:09:06 15:13:04"
+ [Make ] = "samsung"
+ [GPSOffset ] = @ 0x0124
+ [ExifOffset ] = @ 0x01CD
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000001EB
+ Dir Length = 0x0002
+
+ EXIF GPSIFD @ Absolute 0x00000142
+ Dir Length = 0x0008
+ [GPSTimeStamp ] = 115:8:12.00
+ [GPSLatitudeRef ] = "N"
+ [GPSLongitude ] = 115 deg 8' 12.000"
+ [GPSLongitudeRef ] = "W"
+ [GPSDateStamp ] = "2017:08:08"
+ [GPSLatitude ] = 36 deg 11' 18.000"
+ [GPSAltitudeRef ] = Below Sea Level
+ [GPSAltitude ] = 0.000 m
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000209
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 2 2 1
+ DQT, Row #4: 1 1 1 1 1 2 2 2
+ DQT, Row #5: 1 1 1 1 2 2 2 2
+ DQT, Row #6: 1 1 2 2 2 2 2 2
+ DQT, Row #7: 1 2 2 2 2 2 2 2
+ Approx quality factor = 98.32 (scaling=3.35 variance=5.00)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000024E
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 1 2 2 2 2
+ DQT, Row #1: 1 1 1 1 2 2 2 2
+ DQT, Row #2: 1 1 1 2 2 2 2 2
+ DQT, Row #3: 1 1 2 2 2 2 2 2
+ DQT, Row #4: 2 2 2 2 2 2 2 2
+ DQT, Row #5: 2 2 2 2 2 2 2 2
+ DQT, Row #6: 2 2 2 2 2 2 2 2
+ DQT, Row #7: 2 2 2 2 2 2 2 2
+ Approx quality factor = 98.83 (scaling=2.34 variance=0.89)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00000293
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 100
+ Samples per Line = 100
+ Image Size = 100 x 100
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000002A6
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 0A
+ Codes of length 03 bits (001 total): 09
+ Codes of length 04 bits (004 total): 06 07 08 0B
+ Codes of length 05 bits (003 total): 03 04 05
+ Codes of length 06 bits (001 total): 01
+ Codes of length 07 bits (001 total): 02
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000002C7
+ Huffman table length = 60
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (004 total): 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (003 total): 00 07 11
+ Codes of length 06 bits (003 total): 08 12 13
+ Codes of length 07 bits (002 total): 14 21
+ Codes of length 08 bits (003 total): 09 22 31
+ Codes of length 09 bits (005 total): 0A 15 41 51 61
+ Codes of length 10 bits (006 total): 16 23 24 32 33 71
+ Codes of length 11 bits (003 total): 17 52 62
+ Codes of length 12 bits (009 total): 18 42 54 73 91 93 A3 B1 B2
+ Codes of length 13 bits (001 total): D2
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 041
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000305
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 03 04 05 06 07
+ Codes of length 04 bits (001 total): 08
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 01
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000323
+ Huffman table length = 50
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 04 05 11
+ Codes of length 05 bits (003 total): 00 12 21
+ Codes of length 06 bits (003 total): 06 22 31
+ Codes of length 07 bits (003 total): 13 41 51
+ Codes of length 08 bits (002 total): 61 71
+ Codes of length 09 bits (004 total): 07 14 32 91
+ Codes of length 10 bits (005 total): 15 23 42 81 D1
+ Codes of length 11 bits (005 total): 16 62 92 A1 B1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 031
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000357
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00000365
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00001E45.0
+
+ Compression stats:
+ Compression Ratio: 4.36:1
+ Bits per pixel: 5.50:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 97 ( 49%)
+ # codes of length 03 bits: 25 ( 13%)
+ # codes of length 04 bits: 51 ( 26%)
+ # codes of length 05 bits: 18 ( 9%)
+ # codes of length 06 bits: 3 ( 2%)
+ # codes of length 07 bits: 2 ( 1%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 26 ( 27%)
+ # codes of length 03 bits: 62 ( 63%)
+ # codes of length 04 bits: 5 ( 5%)
+ # codes of length 05 bits: 3 ( 3%)
+ # codes of length 06 bits: 2 ( 2%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 971 ( 16%)
+ # codes of length 03 bits: 3435 ( 57%)
+ # codes of length 04 bits: 456 ( 8%)
+ # codes of length 05 bits: 579 ( 10%)
+ # codes of length 06 bits: 285 ( 5%)
+ # codes of length 07 bits: 96 ( 2%)
+ # codes of length 08 bits: 74 ( 1%)
+ # codes of length 09 bits: 59 ( 1%)
+ # codes of length 10 bits: 30 ( 0%)
+ # codes of length 11 bits: 7 ( 0%)
+ # codes of length 12 bits: 9 ( 0%)
+ # codes of length 13 bits: 1 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 1143 ( 50%)
+ # codes of length 03 bits: 254 ( 11%)
+ # codes of length 04 bits: 445 ( 19%)
+ # codes of length 05 bits: 228 ( 10%)
+ # codes of length 06 bits: 111 ( 5%)
+ # codes of length 07 bits: 48 ( 2%)
+ # codes of length 08 bits: 20 ( 1%)
+ # codes of length 09 bits: 22 ( 1%)
+ # codes of length 10 bits: 13 ( 1%)
+ # codes of length 11 bits: 5 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[193] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1001, -7, 97] RGB=[255,244,251] @ MCU[ 5, 3]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00001E44.1
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00001E45
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01C7F83908166C226C06A44017421732
+ Signature (Rotated): 01D3EFDD3855C42AE3E0E6289F1A6726
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: OK [samsung] [SAMSUNG-SM-J320AZ]
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Canon ] [Canon EOS-1Ds Mark II ] [fine ] No
+ CAM:[CASIO COMPUTER CO.,LTD. ] [EX-Z1000 ] [ ] Yes
+ CAM:[NIKON ] [NIKON D2X ] [FINE ] No
+ CAM:[NIKON ] [NIKON D3 ] [FINE ] No
+ CAM:[SIGMA ] [SIGMA SD10 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD10 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD14 ] [Qual:12 ] No
+ CAM:[SIGMA ] [SIGMA SD14 ] [Qual:12 ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-R1 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[Digital Photo Professiona] [09 ]
+ SW :[IJG Library ] [099 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [099 ]
+ SW :[IrfanView ] [099 ]
+ SW :[idImager ] [099 ]
+ SW :[FastStone Image Viewer ] [099 ]
+ SW :[NeatImage ] [099 ]
+ SW :[Paint.NET ] [099 ]
+ SW :[Photomatix ] [099 ]
+ SW :[XnView ] [099 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 2 - Image has high probability of being processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue624-DhtHasWrongLength-Progressive-N.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue624-DhtHasWrongLength-Progressive-N.jpg.txt
new file mode 100644
index 000000000..0ee1736d3
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue624-DhtHasWrongLength-Progressive-N.jpg.txt
@@ -0,0 +1,284 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue624-DhtHasWrongLength-Progressive-N.jpg]
+ Filesize: [30441] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 6 6 7 10 15 22 34
+ DQT, Row #1: 6 7 8 11 14 16 21 30
+ DQT, Row #2: 6 8 10 12 17 25 36 54
+ DQT, Row #3: 7 11 12 16 21 30 42 62
+ DQT, Row #4: 10 14 17 21 28 38 52 76
+ DQT, Row #5: 15 16 25 30 38 50 68 95
+ DQT, Row #6: 22 21 36 42 52 68 90 124
+ DQT, Row #7: 34 30 54 62 76 95 124 167
+ Approx quality factor = 71.19 (scaling=57.62 variance=593.35)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 6 6 6 7 10 15 22 34
+ DQT, Row #1: 6 7 8 11 14 16 21 30
+ DQT, Row #2: 6 8 10 12 17 25 36 54
+ DQT, Row #3: 7 11 12 16 21 30 42 62
+ DQT, Row #4: 10 14 17 21 28 38 52 76
+ DQT, Row #5: 15 16 25 30 38 50 68 95
+ DQT, Row #6: 22 21 36 42 52 68 90 124
+ DQT, Row #7: 34 30 54 62 76 95 124 167
+ Approx quality factor = 80.24 (scaling=39.51 variance=961.47)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009A
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1080
+ Samples per Line = 1080
+ Image Size = 1080 x 1080
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000AD
+ Huffman table length = 51
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 05 06
+ Codes of length 04 bits (003 total): 01 03 04
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 02 04 06
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000E2
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000151B
+ Huffman table length = 2
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000151F
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000022BA
+ Huffman table length = 2
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000022BE
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000309F
+ Huffman table length = 53
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (003 total): 00 04 20
+ Codes of length 05 bits (007 total): 11 31 33 34 50 71 72
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (005 total): 12 21 52 60 61
+ Codes of length 08 bits (007 total): 10 13 22 32 41 51 A1
+ Codes of length 09 bits (003 total): 23 53 62
+ Codes of length 10 bits (005 total): 70 80 81 A0 F1
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 034
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000030D6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003353
+ Huffman table length = 54
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 04
+ Codes of length 04 bits (002 total): 03 05
+ Codes of length 05 bits (008 total): 00 06 20 32 50 63 71 B1
+ Codes of length 06 bits (005 total): 11 25 31 35 73
+ Codes of length 07 bits (002 total): 12 21
+ Codes of length 08 bits (004 total): 10 22 51 60
+ Codes of length 09 bits (005 total): 13 23 41 42 52
+ Codes of length 10 bits (005 total): 14 33 70 80 A1
+ Codes of length 11 bits (001 total): A0
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 035
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000338B
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000378D
+ Huffman table length = 83
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 02 03 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (003 total): 06 07 11
+ Codes of length 06 bits (005 total): 00 21 30 31 B2
+ Codes of length 07 bits (009 total): 12 13 32 40 41 50 51 72 74
+ Codes of length 08 bits (011 total): 14 16 22 33 35 42 52 61 71 B1 B3
+ Codes of length 09 bits (009 total): 15 20 23 24 60 62 81 91 C2
+ Codes of length 10 bits (006 total): 10 25 36 43 75 92
+ Codes of length 11 bits (004 total): 82 93 A1 A2
+ Codes of length 12 bits (006 total): 34 63 64 73 C3 D2
+ Codes of length 13 bits (001 total): A3
+ Codes of length 14 bits (005 total): 26 45 53 65 83
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 064
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000037E2
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000076E7
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 014D6128740A2927C9914C433E852F5A
+ Signature (Rotated): 014D6128740A2927C9914C433E852F5A
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue694-Decode-Exif-OutOfRange.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue694-Decode-Exif-OutOfRange.jpg.txt
new file mode 100644
index 000000000..9feef52cc
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue694-Decode-Exif-OutOfRange.jpg.txt
@@ -0,0 +1,368 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue694-Decode-Exif-OutOfRange.jpg]
+ Filesize: [226421] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 194
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0007
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 96/1
+ [YResolution ] = 96/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "PhotoFiltre 7"
+ [DateTime ] = "2017:08:30 22:45:26"
+ [ExifOffset ] = @ 0x0094
+ Offset to Next IFD = 0xFC5019BC
+
+ EXIF IFD1 @ Absolute 0xFC5019C8
+ Dir Length = 0x0000
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000A0
+ Dir Length = 0x0003
+ [ExifVersion ] = 02.10
+ [ExifImageWidth ] = 1400
+ [ExifImageHeight ] = 1400
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000000C6
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=2.99 variance=6.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000010B
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=1.54 variance=1.58)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00000150
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1400
+ Samples per Line = 1400
+ Image Size = 1400 x 1400
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000163
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000184
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000023B
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000025C
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000313
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00000321
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00037473.0
+
+ Compression stats:
+ Compression Ratio: 26.06:1
+ Bits per pixel: 0.92:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 25384 ( 82%)
+ # codes of length 03 bits: 1101 ( 4%)
+ # codes of length 04 bits: 566 ( 2%)
+ # codes of length 05 bits: 758 ( 2%)
+ # codes of length 06 bits: 429 ( 1%)
+ # codes of length 07 bits: 616 ( 2%)
+ # codes of length 08 bits: 933 ( 3%)
+ # codes of length 09 bits: 1189 ( 4%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 13762 ( 89%)
+ # codes of length 03 bits: 146 ( 1%)
+ # codes of length 04 bits: 264 ( 2%)
+ # codes of length 05 bits: 354 ( 2%)
+ # codes of length 06 bits: 509 ( 3%)
+ # codes of length 07 bits: 335 ( 2%)
+ # codes of length 08 bits: 116 ( 1%)
+ # codes of length 09 bits: 2 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 48125 ( 26%)
+ # codes of length 03 bits: 20074 ( 11%)
+ # codes of length 04 bits: 54692 ( 30%)
+ # codes of length 05 bits: 21145 ( 12%)
+ # codes of length 06 bits: 3017 ( 2%)
+ # codes of length 07 bits: 14358 ( 8%)
+ # codes of length 08 bits: 8803 ( 5%)
+ # codes of length 09 bits: 2231 ( 1%)
+ # codes of length 10 bits: 5065 ( 3%)
+ # codes of length 11 bits: 1096 ( 1%)
+ # codes of length 12 bits: 224 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 6 ( 0%)
+ # codes of length 16 bits: 4924 ( 3%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 25772 ( 49%)
+ # codes of length 03 bits: 5924 ( 11%)
+ # codes of length 04 bits: 7056 ( 13%)
+ # codes of length 05 bits: 6378 ( 12%)
+ # codes of length 06 bits: 2891 ( 5%)
+ # codes of length 07 bits: 1200 ( 2%)
+ # codes of length 08 bits: 1082 ( 2%)
+ # codes of length 09 bits: 1030 ( 2%)
+ # codes of length 10 bits: 559 ( 1%)
+ # codes of length 11 bits: 299 ( 1%)
+ # codes of length 12 bits: 38 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 73 ( 0%)
+ # codes of length 15 bits: 67 ( 0%)
+ # codes of length 16 bits: 260 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[ 57] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1016, 0, 0] RGB=[255,255,255] @ MCU[ 40, 2]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x00037472.4
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00037473
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01BBB1709AC9C1F89220D955A31A8F34
+ Signature (Rotated): 01BBB1709AC9C1F89220D955A31A8F34
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: OK [PhotoFiltre 7]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[CASIO COMPUTER CO.,LTD ] [EX-Z750 ] [ ] Yes
+ CAM:[CASIO COMPUTER CO.,LTD. ] [EX-Z1000 ] [ ] Yes
+ CAM:[PENTAX ] [PENTAX Optio S5i ] [ ] Yes
+ CAM:[SIGMA ] [SIGMA SD9 ] [ ] Yes
+ SW :[ACDSee ] [100 ]
+ SW :[Apple ImageIO.framework ] [100 (Best) ]
+ SW :[Digital Photo Professiona] [10 ]
+ SW :[IJG Library ] [100 ]
+ SW :[MS Office Pic Mgr ] [ ]
+ SW :[Nikon Scan ] [Excellent Qualit]
+ SW :[Picasa ] [100 (Maximum) ]
+ SW :[ZoomBrowser EX ] [highest ]
+ SW :[EOS Viewer Utility ] [ ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [100 ]
+ SW :[IrfanView ] [100 ]
+ SW :[idImager ] [100 ]
+ SW :[FastStone Image Viewer ] [100 ]
+ SW :[NeatImage ] [100 ]
+ SW :[Paint.NET ] [100 ]
+ SW :[Photomatix ] [100 ]
+ SW :[XnView ] [100 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue695-Invalid-EOI.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue695-Invalid-EOI.jpg.txt
new file mode 100644
index 000000000..8911896af
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue695-Invalid-EOI.jpg.txt
@@ -0,0 +1,39 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue695-Invalid-EOI.jpg]
+ Filesize: [4805575] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 64
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0001
+ [ExifOffset ] = @ 0x001A
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x00000038
+ Dir Length = 0x0002
+ [ExifImageWidth ] = 0x[000003E8] / 1000
+ [ExifImageHeight ] = 0x[000003E8] / 1000
+
+ERROR: Expected marker 0xFF, got 0x49 @ offset 0x00000056. Consider using [Tools->Img Search Fwd/Rev].
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue696-Resize-Exif-OutOfRange.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue696-Resize-Exif-OutOfRange.jpg.txt
new file mode 100644
index 000000000..566291b47
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue696-Resize-Exif-OutOfRange.jpg.txt
@@ -0,0 +1,377 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue696-Resize-Exif-OutOfRange.jpg]
+ Filesize: [3196058] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 201
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x0007
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 96/1
+ [YResolution ] = 96/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "PhotoFiltre Studio X"
+ [DateTime ] = "2017:09:12 23:47:30"
+ [ExifOffset ] = @ 0x009B
+ Offset to Next IFD = 0xFFFFFFFF
+
+ EXIF IFD1 @ Absolute 0x0000001D
+ Dir Length = 0x4900
+ Excessive # components (117440512). Limiting to first 4000.
+ Offset to Next IFD = 0x03011200
+
+ EXIF SubIFD @ Absolute 0x000000B9
+ Dir Length = 0x0003
+ [ExifVersion ] = 02.10
+ [ExifImageWidth ] = 3000
+ [ExifImageHeight ] = 3000
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000000DF
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=2.99 variance=6.13)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000124
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 1 1 1 1 1
+ DQT, Row #1: 1 1 1 1 1 1 1 1
+ DQT, Row #2: 1 1 1 1 1 1 1 1
+ DQT, Row #3: 1 1 1 1 1 1 1 1
+ DQT, Row #4: 1 1 1 1 1 1 1 1
+ DQT, Row #5: 1 1 1 1 1 1 1 1
+ DQT, Row #6: 1 1 1 1 1 1 1 1
+ DQT, Row #7: 1 1 1 1 1 1 1 1
+ Approx quality factor = 100.00 (scaling=1.54 variance=1.58)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00000169
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 3000
+ Samples per Line = 3000
+ Image Size = 3000 x 3000
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000017C
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000019D
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000254
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000275
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000032C
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x0000033A
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0030C498.0
+
+ Compression stats:
+ Compression Ratio: 8.45:1
+ Bits per pixel: 2.84:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 35306 ( 25%)
+ # codes of length 03 bits: 79378 ( 56%)
+ # codes of length 04 bits: 10642 ( 8%)
+ # codes of length 05 bits: 5371 ( 4%)
+ # codes of length 06 bits: 3913 ( 3%)
+ # codes of length 07 bits: 2829 ( 2%)
+ # codes of length 08 bits: 2486 ( 2%)
+ # codes of length 09 bits: 1451 ( 1%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 45165 ( 64%)
+ # codes of length 03 bits: 10069 ( 14%)
+ # codes of length 04 bits: 6960 ( 10%)
+ # codes of length 05 bits: 3541 ( 5%)
+ # codes of length 06 bits: 2100 ( 3%)
+ # codes of length 07 bits: 1345 ( 2%)
+ # codes of length 08 bits: 1100 ( 2%)
+ # codes of length 09 bits: 324 ( 0%)
+ # codes of length 10 bits: 84 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 1981662 ( 53%)
+ # codes of length 03 bits: 213036 ( 6%)
+ # codes of length 04 bits: 749857 ( 20%)
+ # codes of length 05 bits: 410362 ( 11%)
+ # codes of length 06 bits: 173055 ( 5%)
+ # codes of length 07 bits: 94282 ( 3%)
+ # codes of length 08 bits: 61648 ( 2%)
+ # codes of length 09 bits: 36705 ( 1%)
+ # codes of length 10 bits: 19723 ( 1%)
+ # codes of length 11 bits: 10118 ( 0%)
+ # codes of length 12 bits: 2157 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 211 ( 0%)
+ # codes of length 16 bits: 9772 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 425513 ( 38%)
+ # codes of length 03 bits: 127308 ( 11%)
+ # codes of length 04 bits: 204956 ( 18%)
+ # codes of length 05 bits: 171523 ( 15%)
+ # codes of length 06 bits: 89715 ( 8%)
+ # codes of length 07 bits: 30159 ( 3%)
+ # codes of length 08 bits: 25054 ( 2%)
+ # codes of length 09 bits: 22104 ( 2%)
+ # codes of length 10 bits: 10243 ( 1%)
+ # codes of length 11 bits: 4250 ( 0%)
+ # codes of length 12 bits: 210 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 1829 ( 0%)
+ # codes of length 15 bits: 1498 ( 0%)
+ # codes of length 16 bits: 2262 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[127] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 992, -112, 17] RGB=[254,255,227] @ MCU[ 35, 79]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0030C497.3
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0030C498
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01BBB1709AC9C1F89220D955A31A8F34
+ Signature (Rotated): 01BBB1709AC9C1F89220D955A31A8F34
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: OK [PhotoFiltre Studio X]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[CASIO COMPUTER CO.,LTD ] [EX-Z750 ] [ ] Yes
+ CAM:[CASIO COMPUTER CO.,LTD. ] [EX-Z1000 ] [ ] Yes
+ CAM:[PENTAX ] [PENTAX Optio S5i ] [ ] Yes
+ CAM:[SIGMA ] [SIGMA SD9 ] [ ] Yes
+ SW :[ACDSee ] [100 ]
+ SW :[Apple ImageIO.framework ] [100 (Best) ]
+ SW :[Digital Photo Professiona] [10 ]
+ SW :[IJG Library ] [100 ]
+ SW :[MS Office Pic Mgr ] [ ]
+ SW :[Nikon Scan ] [Excellent Qualit]
+ SW :[Picasa ] [100 (Maximum) ]
+ SW :[ZoomBrowser EX ] [highest ]
+ SW :[EOS Viewer Utility ] [ ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [100 ]
+ SW :[IrfanView ] [100 ]
+ SW :[idImager ] [100 ]
+ SW :[FastStone Image Viewer ] [100 ]
+ SW :[NeatImage ] [100 ]
+ SW :[Paint.NET ] [100 ]
+ SW :[Photomatix ] [100 ]
+ SW :[XnView ] [100 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue721-InvalidAPP0.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue721-InvalidAPP0.jpg.txt
new file mode 100644
index 000000000..dc283bfcf
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue721-InvalidAPP0.jpg.txt
@@ -0,0 +1,446 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue721-InvalidAPP0.jpg]
+ Filesize: [1225163] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 806
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0007
+ [Make ] = "NIKON CORPORATION"
+ [Model ] = "NIKON D300S"
+ [Software ] = "Adobe Bridge CS6 (Windows)"
+ [DateTime ] = "2017:06:07 16:49:51"
+ [Artist ] = ""Evgeniy Ivahiv Mr.Ivas""
+ [Copyright ] = "Evgeniy Ivahiv Erich Krause"
+ [ExifOffset ] = @ 0x00EC
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000F8
+ Dir Length = 0x0022
+ [ExposureTime ] = 1/160 s
+ [FNumber ] = F10.0
+ [ExposureProgram ] = Manual
+ [ISOSpeedRatings ] = 200
+ [ExifVersion ] = 02.21
+ [DateTimeOriginal ] = "2017:06:06 11:29:53"
+ [ShutterSpeedValue ] = 7321928/1000000
+ [ApertureValue ] = 6643856/1000000
+ [ExposureBiasValue ] = -3.00 eV
+ [MaxApertureValue ] = 50/10
+ [MeteringMode ] = CenterWeightedAverage
+ [LightSource ] = unknown
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 48 mm
+ [SubSecTimeOriginal ] = "24"
+ [ColorSpace ] = Uncalibrated
+ [ExifImageWidth ] = 2304
+ [ExifImageHeight ] = 2998
+ [SensingMethod ] = One-chip color area sensor
+ [FileSource ] = DSC
+ [SceneType ] = A directly photographed image
+ [ExposureMode ] = Manual exposure
+ [WhiteBalance ] = Manual white balance
+ [DigitalZoomRatio ] = 1/1
+ [FocalLengthIn35mmFilm ] = 72
+ [SceneCaptureType ] = Standard
+ [GainControl ] = 0
+ [Contrast ] = 0
+ [Saturation ] = 0
+ [Sharpness ] = 2
+ [SubjectDistanceRange ] = 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x0000032A
+ Length = 4442
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00001486
+ Length = 160
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x0068] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 4
+ IPTC [002:055] Date Created = "20170606"
+ IPTC [002:060] Time Created = "112953"
+ IPTC [002:080] By-line = "Evgeniy Ivahiv Mr.Ivas"
+ IPTC [002:116] Copyright Notice = "Evgeniy Ivahiv Erich Krause"
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0x59 13 63 D2 BD 08 14 B4 2B E3 4F 37 D7 52 D2 6F | Y.c.....+.O7.R.o
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00001528
+ Length = 3160
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 3144 bytes
+ Preferred CMM Type : 'Lino' (0x4C696E6F)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1998-02-09 06:49:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Microsoft Corporation ('MSFT' (0x4D534654))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'IEC ' (0x49454320)
+ Device Model : 'sRGB' (0x73524742)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'HP ' (0x48502020)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00002182
+ Length = 12
+ Identifier = [Adobe_CM]
+ Not known APP0 type. Skipping remainder.
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00002190
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 7 11 14 17 22 17
+ DQT, Row #1: 4 5 6 10 14 19 12 12
+ DQT, Row #2: 7 6 8 14 19 12 12 12
+ DQT, Row #3: 11 10 14 19 12 12 12 12
+ DQT, Row #4: 14 14 19 12 12 12 12 12
+ DQT, Row #5: 17 19 12 12 12 12 12 12
+ DQT, Row #6: 22 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 83.88 (scaling=32.24 variance=430.71)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 9 19 34 20 20 17 17
+ DQT, Row #1: 9 12 19 14 14 12 12 12
+ DQT, Row #2: 19 19 14 14 12 12 12 12
+ DQT, Row #3: 34 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 89.11 (scaling=21.78 variance=377.49)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00002216
+ Length = 4
+ interval = 288
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x0000221C
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 49152
+ APP14Flags1 = 0
+ ColorTransform = 1 [YCbCr]
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x0000222C
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 2998
+ Samples per Line = 2304
+ Image Size = 2304 x 2998
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000223F
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (004 total): 03 04 05 06
+ Codes of length 04 bits (003 total): 02 07 08
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (001 total): 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (001 total): 06
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (002 total): 07 08
+ Codes of length 10 bits (003 total): 09 0A 0B
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 02 03 11
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (004 total): 04 12 31 41
+ Codes of length 06 bits (002 total): 51 61
+ Codes of length 07 bits (008 total): 05 13 22 71 81 91 A1 F0
+ Codes of length 08 bits (004 total): 06 14 B1 C1
+ Codes of length 09 bits (005 total): 23 32 D1 E1 F1
+ Codes of length 10 bits (002 total): 07 42
+ Codes of length 11 bits (003 total): 15 24 52
+ Codes of length 12 bits (002 total): 33 62
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 16
+ Codes of length 16 bits (125 total): 34 43 72 82 92 A2 08 17 53 B2 C2 25 D2 E2 44 83
+ 84 F2 09 0A 18 19 1A 26 27 28 29 2A 35 36 37 38
+ 39 3A 45 46 47 48 49 4A 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 85
+ 86 87 88 89 8A 93 94 95 96 97 98 B3 C3 D3 99 9A
+ A3 A4 A5 A6 A7 A8 A9 AA B4 B5 B6 B7 B8 B9 BA C4
+ C5 C6 C7 C8 C9 CA D4 D5 D6 D7 D8 D9 DA E3 E4 E5
+ E6 E7 E8 E9 EA F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 02 11
+ Codes of length 05 bits (001 total): 03
+ Codes of length 06 bits (003 total): 12 21 31
+ Codes of length 07 bits (001 total): 41
+ Codes of length 08 bits (005 total): 04 13 51 61 71
+ Codes of length 09 bits (002 total): 81 F0
+ Codes of length 10 bits (006 total): 22 91 A1 B1 C1 D1
+ Codes of length 11 bits (003 total): 14 32 E1
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (127 total): 05 06 07 08 09 0A 15 16 17 18 19 1A 23 24 25 26
+ 27 28 29 2A 33 34 35 36 37 38 39 3A 42 43 44 45
+ 46 47 48 49 4A 52 53 54 55 56 57 58 59 5A 62 63
+ 64 65 66 67 68 69 6A 72 73 74 75 76 77 78 79 7A
+ 82 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98
+ 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6
+ B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4
+ D5 D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA
+ Codes of length 15 bits (009 total): F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Codes of length 16 bits (000 total):
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000023E3
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000023F1
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+*** ERROR: Overread scan segment (after bitstring)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.6
+*** ERROR: Bad scan data in MCU(272,16): Lum CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(2176,128)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(272,16): Chr(Cb) CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(2176,128)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(272,16): Chr(Cr) CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(2176,128)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(0,17): Lum CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(0,136)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(0,17): Chr(Cb) CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(0,136)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(0,17): Chr(Cr) CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(0,136)
+*** ERROR: Overread scan segment (before nCode)! @ Offset: 0x00003EA5.1
+*** ERROR: Bad huffman code @ 0x00003EA5.1
+*** ERROR: Bad scan data in MCU(0,18): Lum CSS(0,0) @ Offset 0x00003EA5.1
+ MCU located at pixel=(0,144)
+ Only reported first 20 instances of this message...
+
+ Compression stats:
+ Compression Ratio: 3031.33:1
+ Bits per pixel: 0.01:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 4841 ( 99%)
+ # codes of length 03 bits: 33 ( 1%)
+ # codes of length 04 bits: 6 ( 0%)
+ # codes of length 05 bits: 1 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 9732 (100%)
+ # codes of length 02 bits: 23 ( 0%)
+ # codes of length 03 bits: 5 ( 0%)
+ # codes of length 04 bits: 0 ( 0%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 274 ( 5%)
+ # codes of length 03 bits: 297 ( 5%)
+ # codes of length 04 bits: 4903 ( 85%)
+ # codes of length 05 bits: 88 ( 2%)
+ # codes of length 06 bits: 26 ( 0%)
+ # codes of length 07 bits: 98 ( 2%)
+ # codes of length 08 bits: 25 ( 0%)
+ # codes of length 09 bits: 4 ( 0%)
+ # codes of length 10 bits: 14 ( 0%)
+ # codes of length 11 bits: 1 ( 0%)
+ # codes of length 12 bits: 2 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 17 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 9760 (100%)
+ # codes of length 02 bits: 5 ( 0%)
+ # codes of length 03 bits: 0 ( 0%)
+ # codes of length 04 bits: 14 ( 0%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 2 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[128] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1014, 0, 0] RGB=[254,254,254] @ MCU[ 0, 0]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 17
+ Next position in scan buffer: Offset 0x00003EA5.1
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0012B1C9
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01A20F69263117021CD16AEF44D6E650
+ Signature (Rotated): 01A20F69263117021CD16AEF44D6E650
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: OK [NIKON] [NIKON D300S]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Bridge CS6 (Windows)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[Adobe Photoshop ] [Save As 08 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 2 - Image has high probability of being processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-A.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-A.jpg.txt
new file mode 100644
index 000000000..92adfb315
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-A.jpg.txt
@@ -0,0 +1,519 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue723-Ordered-Interleaved-Progressive-A.jpg]
+ Filesize: [42798] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 2 1 1 2 2 4 5 6
+ DQT, Row #1: 1 1 1 2 3 6 6 6
+ DQT, Row #2: 1 1 2 2 4 6 7 6
+ DQT, Row #3: 1 2 2 3 5 9 8 6
+ DQT, Row #4: 2 2 4 6 7 11 10 8
+ DQT, Row #5: 2 4 6 6 8 10 11 9
+ DQT, Row #6: 5 6 8 9 10 12 12 10
+ DQT, Row #7: 7 9 10 10 11 10 10 10
+ Approx quality factor = 95.04 (scaling=9.93 variance=1.25)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 2 2 2 5 10 10 10 10
+ DQT, Row #1: 2 2 3 7 10 10 10 10
+ DQT, Row #2: 2 3 6 10 10 10 10 10
+ DQT, Row #3: 5 7 10 10 10 10 10 10
+ DQT, Row #4: 10 10 10 10 10 10 10 10
+ DQT, Row #5: 10 10 10 10 10 10 10 10
+ DQT, Row #6: 10 10 10 10 10 10 10 10
+ DQT, Row #7: 10 10 10 10 10 10 10 10
+ Approx quality factor = 94.91 (scaling=10.18 variance=0.26)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 600
+ Samples per Line = 600
+ Image Size = 600 x 600
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 29
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 01 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (005 total): 04 05 06 07 08
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000D0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000A58
+ Huffman table length = 27
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 01 02
+ Codes of length 04 bits (003 total): 03 04 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000A75
+ Scan header length = 10
+ Number of img components = 2
+ Component[1]: selector=0x02, table=1(DC),0(AC)
+ Component[2]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000E55
+ Huffman table length = 37
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (005 total): 02 04 05 11 12
+ Codes of length 04 bits (004 total): 00 01 03 06
+ Codes of length 05 bits (001 total): 30
+ Codes of length 06 bits (005 total): 10 13 14 15 16
+ Codes of length 07 bits (001 total): 40
+ Codes of length 08 bits (001 total): 20
+ Codes of length 09 bits (001 total): A0
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 018
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000E7C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 2
+ Successive approximation = 0x03
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000015BD
+ Huffman table length = 82
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (004 total): 00 04 05 11
+ Codes of length 05 bits (002 total): 12 21
+ Codes of length 06 bits (002 total): 13 31
+ Codes of length 07 bits (011 total): 06 10 14 22 30 32 40 41 51 61 92
+ Codes of length 08 bits (012 total): 15 23 25 52 53 54 71 73 91 A1 B1 C1
+ Codes of length 09 bits (007 total): 20 24 33 42 72 81 93
+ Codes of length 10 bits (006 total): 43 44 55 62 63 A2
+ Codes of length 11 bits (003 total): 82 83 D1
+ Codes of length 12 bits (006 total): 16 26 34 50 A0 B2
+ Codes of length 13 bits (007 total): 35 45 64 84 A3 C2 E1
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 063
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001611
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 3 .. 63
+ Successive approximation = 0x03
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002E3F
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 11
+ Codes of length 03 bits (001 total): 00
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (004 total): 10 41 51 61
+ Codes of length 06 bits (005 total): 20 71 81 91 F0
+ Codes of length 07 bits (005 total): 30 A1 B1 C1 D1
+ Codes of length 08 bits (001 total): F1
+ Codes of length 09 bits (001 total): E1
+ Codes of length 10 bits (001 total): 40
+ Codes of length 11 bits (001 total): A0
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002E6B
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x32
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003F38
+ Huffman table length = 43
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (001 total): 61
+ Codes of length 07 bits (004 total): 10 71 81 91
+ Codes of length 08 bits (001 total): A1
+ Codes of length 09 bits (005 total): 30 B1 C1 D1 F0
+ Codes of length 10 bits (001 total): E1
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (003 total): 20 40 A0
+ Codes of length 14 bits (001 total): 50
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003F65
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00005B9B
+ Huffman table length = 58
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 03
+ Codes of length 04 bits (003 total): 04 11 12
+ Codes of length 05 bits (001 total): 21
+ Codes of length 06 bits (005 total): 05 13 14 31 51
+ Codes of length 07 bits (005 total): 10 15 20 30 41
+ Codes of length 08 bits (005 total): 22 23 32 33 71
+ Codes of length 09 bits (005 total): 24 34 61 81 F0
+ Codes of length 10 bits (008 total): 80 91 A1 B1 C1 D1 E1 F1
+ Codes of length 11 bits (003 total): 42 52 62
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 039
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00005BD7
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00006270
+ Huffman table length = 57
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (004 total): 00 02 03 11
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (002 total): 05 30
+ Codes of length 07 bits (004 total): 10 13 14 20
+ Codes of length 08 bits (003 total): 32 41 51
+ Codes of length 09 bits (007 total): 15 22 23 61 71 81 F0
+ Codes of length 10 bits (002 total): 91 A1
+ Codes of length 11 bits (004 total): 24 25 33 80
+ Codes of length 12 bits (007 total): 42 62 B1 C1 D1 E1 F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 038
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000062AB
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00006827
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (002 total): 51 61
+ Codes of length 07 bits (001 total): 71
+ Codes of length 08 bits (004 total): 81 91 A1 B1
+ Codes of length 09 bits (003 total): 30 C1 D1
+ Codes of length 10 bits (001 total): F0
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (001 total): 10
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (003 total): 40 A0 F1
+ Codes of length 15 bits (001 total): 20
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00006853
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000099AB
+ Huffman table length = 41
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (003 total): 31 41 61
+ Codes of length 06 bits (003 total): 10 51 91
+ Codes of length 07 bits (004 total): 20 71 81 B1
+ Codes of length 08 bits (002 total): 30 A1
+ Codes of length 09 bits (002 total): C1 F0
+ Codes of length 10 bits (003 total): 80 E1 F1
+ Codes of length 11 bits (001 total): D1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000099D6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000A0BC
+ Huffman table length = 41
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (001 total): 41
+ Codes of length 06 bits (004 total): 10 51 61 71
+ Codes of length 07 bits (002 total): 30 91
+ Codes of length 08 bits (002 total): 20 81
+ Codes of length 09 bits (002 total): A1 B1
+ Codes of length 10 bits (002 total): C1 D1
+ Codes of length 11 bits (003 total): 40 80 E1
+ Codes of length 12 bits (001 total): F1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000A0E7
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000A72C
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01E764F3ECB6C14A51FF83F1FF6D546B
+ Signature (Rotated): 01E6610D026E8E6FE4BECEA9B3328A63
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Minolta Co., Ltd. ] [DiMAGE F100 ] [ ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5400 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E8700 ] [FINE ] No
+ CAM:[OLYMPUS CORPORATION ] [C8080WZ ] [ ] No
+ CAM:[PENTAX ] [PENTAX K10D ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [Pro 815 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV 7, NV 7 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV10, NV10 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-F828 ] [ ] No
+ CAM:[SONY ] [DSC-H1 ] [ ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-H5 ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-L1 ] [ ] No
+ CAM:[SONY ] [DSC-N1 ] [ ] No
+ CAM:[SONY ] [DSC-P150 ] [ ] No
+ CAM:[SONY ] [DSC-P200 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-V3 ] [ ] No
+ CAM:[SONY ] [DSC-W55 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[Apple ImageIO.framework ] [084 ]
+ SW :[IJG Library ] [095 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [095 ]
+ SW :[IrfanView ] [095 ]
+ SW :[idImager ] [095 ]
+ SW :[FastStone Image Viewer ] [095 ]
+ SW :[NeatImage ] [095 ]
+ SW :[Paint.NET ] [095 ]
+ SW :[Photomatix ] [095 ]
+ SW :[XnView ] [095 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-B.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-B.jpg.txt
new file mode 100644
index 000000000..bcbe9f7f1
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-B.jpg.txt
@@ -0,0 +1,477 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue723-Ordered-Interleaved-Progressive-B.jpg]
+ Filesize: [36937] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 8 10 12
+ DQT, Row #1: 2 2 3 4 5 12 12 11
+ DQT, Row #2: 3 3 3 5 8 11 14 11
+ DQT, Row #3: 3 3 4 6 10 17 16 12
+ DQT, Row #4: 4 4 7 11 14 22 21 15
+ DQT, Row #5: 5 7 11 13 16 21 23 18
+ DQT, Row #6: 10 13 16 17 21 24 24 20
+ DQT, Row #7: 14 18 19 20 22 20 21 20
+ Approx quality factor = 90.06 (scaling=19.88 variance=1.14)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 4 5 9 20 20 20 20
+ DQT, Row #1: 4 4 5 13 20 20 20 20
+ DQT, Row #2: 5 5 11 20 20 20 20 20
+ DQT, Row #3: 9 13 20 20 20 20 20 20
+ DQT, Row #4: 20 20 20 20 20 20 20 20
+ DQT, Row #5: 20 20 20 20 20 20 20 20
+ DQT, Row #6: 20 20 20 20 20 20 20 20
+ DQT, Row #7: 20 20 20 20 20 20 20 20
+ Approx quality factor = 89.93 (scaling=20.14 variance=0.34)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 600
+ Samples per Line = 600
+ Image Size = 600 x 600
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 30
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (007 total): 02 03 04 05 06 07 08
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000D1
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000A95
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 04 05
+ Codes of length 04 bits (003 total): 01 03 06
+ Codes of length 05 bits (001 total): 02
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (001 total): 08
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000AB3
+ Scan header length = 10
+ Number of img components = 2
+ Component[1]: selector=0x02, table=1(DC),0(AC)
+ Component[2]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000E60
+ Huffman table length = 54
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (006 total): 00 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (003 total): 11 12 13
+ Codes of length 06 bits (002 total): 21 50
+ Codes of length 07 bits (004 total): 07 10 14 15
+ Codes of length 08 bits (004 total): 20 22 23 31
+ Codes of length 09 bits (005 total): 16 24 30 32 36
+ Codes of length 10 bits (003 total): 25 40 41
+ Codes of length 11 bits (004 total): 17 42 43 80
+ Codes of length 12 bits (003 total): 26 33 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 035
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000E98
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001E73
+ Huffman table length = 75
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (002 total): 00 11
+ Codes of length 05 bits (002 total): 04 12
+ Codes of length 06 bits (005 total): 13 21 31 41 51
+ Codes of length 07 bits (006 total): 10 22 52 61 71 81
+ Codes of length 08 bits (010 total): 05 14 20 32 42 50 91 A1 B1 C1
+ Codes of length 09 bits (005 total): 23 33 62 72 D1
+ Codes of length 10 bits (010 total): 24 30 40 53 63 73 82 92 E1 F0
+ Codes of length 11 bits (005 total): 15 34 35 43 A2
+ Codes of length 12 bits (004 total): 64 74 80 B2
+ Codes of length 13 bits (003 total): 60 93 F1
+ Codes of length 14 bits (001 total): A3
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 056
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001EC0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003A1E
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (005 total): 10 51 61 71 81
+ Codes of length 07 bits (004 total): 50 91 A1 B1
+ Codes of length 08 bits (002 total): C1 F0
+ Codes of length 09 bits (003 total): 20 D1 E1
+ Codes of length 10 bits (001 total): F1
+ Codes of length 11 bits (001 total): 40
+ Codes of length 12 bits (001 total): 80
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003A4A
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00005386
+ Huffman table length = 43
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (001 total): 51
+ Codes of length 07 bits (003 total): 61 71 81
+ Codes of length 08 bits (004 total): 50 91 A1 B1
+ Codes of length 09 bits (002 total): 10 C1
+ Codes of length 10 bits (003 total): D1 E1 F0
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (003 total): 20 80 F1
+ Codes of length 13 bits (001 total): 30
+ Codes of length 14 bits (001 total): 40
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000053B3
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007B5B
+ Huffman table length = 50
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (003 total): 13 31 40
+ Codes of length 07 bits (003 total): 06 22 41
+ Codes of length 08 bits (002 total): 14 32
+ Codes of length 09 bits (004 total): 10 16 23 33
+ Codes of length 10 bits (005 total): 15 20 42 60 61
+ Codes of length 11 bits (005 total): 24 34 50 51 52
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 031
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007B8F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 12
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000081EE
+ Huffman table length = 49
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (004 total): 21 31 41 51
+ Codes of length 05 bits (003 total): 02 61 71
+ Codes of length 06 bits (007 total): 10 40 81 91 A1 B1 C1
+ Codes of length 07 bits (003 total): D1 E1 F0
+ Codes of length 08 bits (003 total): 03 50 F1
+ Codes of length 09 bits (004 total): 12 22 30 60
+ Codes of length 10 bits (003 total): 20 32 70
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 030
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008221
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 13 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000084F2
+ Huffman table length = 48
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (002 total): 03 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (003 total): 00 11 12
+ Codes of length 06 bits (003 total): 06 21 31
+ Codes of length 07 bits (003 total): 13 22 40
+ Codes of length 08 bits (002 total): 14 41
+ Codes of length 09 bits (005 total): 07 10 15 32 50
+ Codes of length 10 bits (003 total): 42 60 61
+ Codes of length 11 bits (005 total): 20 23 33 43 51
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 029
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008524
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 12
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00008C10
+ Huffman table length = 51
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (004 total): 02 31 41 51
+ Codes of length 06 bits (002 total): 61 71
+ Codes of length 07 bits (009 total): 03 12 40 81 91 A1 B1 C1 D1
+ Codes of length 08 bits (003 total): 10 E1 F0
+ Codes of length 09 bits (003 total): 22 32 F1
+ Codes of length 10 bits (004 total): 04 50 52 70
+ Codes of length 11 bits (003 total): 20 42 60
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008C45
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 13 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00009047
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 013BA18D5561625796E986FDBC09F846
+ Signature (Rotated): 01AC57E12793DFA7C46C704625C5AF0F
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[??? ] [Treo 680 ] [ ] Yes
+ CAM:[Canon ] [Canon PowerShot Pro1 ] [fine ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E3100 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 9530 ] [Superfine ] Yes
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W1 ] [ ] No
+ CAM:[SONY ] [SONY ] [ ] No
+ SW :[ACDSee ] [ ]
+ SW :[FixFoto ] [fine ]
+ SW :[IJG Library ] [090 ]
+ SW :[ZoomBrowser EX ] [high ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [090 ]
+ SW :[IrfanView ] [090 ]
+ SW :[idImager ] [090 ]
+ SW :[FastStone Image Viewer ] [090 ]
+ SW :[NeatImage ] [090 ]
+ SW :[Paint.NET ] [090 ]
+ SW :[Photomatix ] [090 ]
+ SW :[XnView ] [090 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-C.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-C.jpg.txt
new file mode 100644
index 000000000..c76b74431
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/Issue723-Ordered-Interleaved-Progressive-C.jpg.txt
@@ -0,0 +1,484 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Issue723-Ordered-Interleaved-Progressive-C.jpg]
+ Filesize: [46799] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 38 x 38 DPcm (dots per cm)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 2 1 1 2 2 4 5 6
+ DQT, Row #1: 1 1 1 2 3 6 6 6
+ DQT, Row #2: 1 1 2 2 4 6 7 6
+ DQT, Row #3: 1 2 2 3 5 9 8 6
+ DQT, Row #4: 2 2 4 6 7 11 10 8
+ DQT, Row #5: 2 4 6 6 8 10 11 9
+ DQT, Row #6: 5 6 8 9 10 12 12 10
+ DQT, Row #7: 7 9 10 10 11 10 10 10
+ Approx quality factor = 95.04 (scaling=9.93 variance=1.25)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 2 2 2 5 10 10 10 10
+ DQT, Row #1: 2 2 3 7 10 10 10 10
+ DQT, Row #2: 2 3 6 10 10 10 10 10
+ DQT, Row #3: 5 7 10 10 10 10 10 10
+ DQT, Row #4: 10 10 10 10 10 10 10 10
+ DQT, Row #5: 10 10 10 10 10 10 10 10
+ DQT, Row #6: 10 10 10 10 10 10 10 10
+ DQT, Row #7: 10 10 10 10 10 10 10 10
+ Approx quality factor = 94.91 (scaling=10.18 variance=0.26)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 517
+ Samples per Line = 502
+ Image Size = 502 x 517
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 30
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 06
+ Codes of length 04 bits (004 total): 04 05 07 08
+ Codes of length 05 bits (003 total): 02 03 09
+ Codes of length 06 bits (001 total): 01
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000D1
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000858
+ Huffman table length = 29
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (001 total): 05
+ Codes of length 04 bits (005 total): 02 03 04 06 07
+ Codes of length 05 bits (001 total): 01
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000877
+ Scan header length = 10
+ Number of img components = 2
+ Component[1]: selector=0x02, table=1(DC),0(AC)
+ Component[2]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000012C2
+ Huffman table length = 67
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (004 total): 01 02 04 05
+ Codes of length 04 bits (002 total): 00 06
+ Codes of length 05 bits (001 total): 11
+ Codes of length 06 bits (002 total): 07 12
+ Codes of length 07 bits (004 total): 13 14 21 50
+ Codes of length 08 bits (004 total): 08 15 22 31
+ Codes of length 09 bits (002 total): 17 23
+ Codes of length 10 bits (006 total): 10 16 20 24 32 41
+ Codes of length 11 bits (008 total): 25 33 34 42 51 52 54 62
+ Codes of length 12 bits (004 total): 26 30 35 40
+ Codes of length 13 bits (005 total): 18 27 37 55 56
+ Codes of length 14 bits (005 total): 44 53 61 70 80
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 048
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001307
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 12
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002FBE
+ Huffman table length = 80
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (005 total): 13 22 41 51 61
+ Codes of length 07 bits (011 total): 05 10 14 32 50 71 81 91 A1 B1 C1
+ Codes of length 08 bits (007 total): 20 23 42 52 62 82 D1
+ Codes of length 09 bits (009 total): 15 30 33 53 72 92 A2 B2 E1
+ Codes of length 10 bits (006 total): 24 40 43 73 C2 E2
+ Codes of length 11 bits (004 total): 06 63 D2 F0
+ Codes of length 12 bits (005 total): 25 54 75 A3 B3
+ Codes of length 13 bits (005 total): 44 64 70 80 83
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 061
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003010
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 13 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000048A9
+ Huffman table length = 43
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (001 total): 41
+ Codes of length 06 bits (003 total): 51 61 71
+ Codes of length 07 bits (003 total): 10 81 A1
+ Codes of length 08 bits (004 total): 50 91 B1 C1
+ Codes of length 09 bits (003 total): 20 D1 F0
+ Codes of length 10 bits (001 total): F1
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (001 total): 30
+ Codes of length 13 bits (001 total): 70
+ Codes of length 14 bits (001 total): 80
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000048D6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000060D3
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (002 total): 51 61
+ Codes of length 07 bits (001 total): 71
+ Codes of length 08 bits (004 total): 50 81 91 A1
+ Codes of length 09 bits (002 total): 10 B1
+ Codes of length 10 bits (002 total): C1 F0
+ Codes of length 11 bits (002 total): D1 F1
+ Codes of length 12 bits (003 total): 30 70 E1
+ Codes of length 13 bits (001 total): 20
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000060FF
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007FD1
+ Huffman table length = 54
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (004 total): 01 02 04 05
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (002 total): 06 11
+ Codes of length 06 bits (006 total): 07 12 13 21 31 50
+ Codes of length 07 bits (001 total): 14
+ Codes of length 08 bits (002 total): 15 22
+ Codes of length 09 bits (005 total): 10 23 32 33 41
+ Codes of length 10 bits (003 total): 16 17 20
+ Codes of length 11 bits (002 total): 24 34
+ Codes of length 12 bits (007 total): 25 26 30 40 42 51 70
+ Codes of length 13 bits (001 total): 80
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 035
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008009
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 8
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00008F76
+ Huffman table length = 59
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (004 total): 03 12 41 51
+ Codes of length 06 bits (003 total): 61 71 81
+ Codes of length 07 bits (005 total): 10 22 50 91 A1
+ Codes of length 08 bits (007 total): 32 52 B1 C1 D1 F0 F1
+ Codes of length 09 bits (002 total): 04 13
+ Codes of length 10 bits (004 total): 20 23 42 72
+ Codes of length 11 bits (006 total): 62 70 80 82 92 E1
+ Codes of length 12 bits (003 total): 30 60 A2
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 040
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008FB3
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 9 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00009B28
+ Huffman table length = 51
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 03
+ Codes of length 03 bits (004 total): 01 02 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (003 total): 00 07 11
+ Codes of length 06 bits (003 total): 12 13 31
+ Codes of length 07 bits (003 total): 08 21 50
+ Codes of length 08 bits (003 total): 10 14 15
+ Codes of length 09 bits (004 total): 20 23 32 41
+ Codes of length 10 bits (001 total): 16
+ Codes of length 11 bits (003 total): 22 24 40
+ Codes of length 12 bits (005 total): 17 18 33 34 70
+ Codes of length 13 bits (001 total): 80
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00009B5D
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 8
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000AB99
+ Huffman table length = 62
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 11
+ Codes of length 04 bits (002 total): 03 21
+ Codes of length 05 bits (004 total): 12 31 41 51
+ Codes of length 06 bits (003 total): 04 61 71
+ Codes of length 07 bits (005 total): 10 22 32 50 81
+ Codes of length 08 bits (004 total): 13 91 A1 B1
+ Codes of length 09 bits (008 total): 20 23 42 52 62 72 C1 D1
+ Codes of length 10 bits (005 total): 05 14 92 E1 F0
+ Codes of length 11 bits (003 total): 30 33 F1
+ Codes of length 12 bits (005 total): 70 80 82 90 A2
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 043
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000ABD9
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 9 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000B6CD
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 01E764F3ECB6C14A51FF83F1FF6D546B
+ Signature (Rotated): 01E6610D026E8E6FE4BECEA9B3328A63
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Minolta Co., Ltd. ] [DiMAGE F100 ] [ ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5400 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E8700 ] [FINE ] No
+ CAM:[OLYMPUS CORPORATION ] [C8080WZ ] [ ] No
+ CAM:[PENTAX ] [PENTAX K10D ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [Pro 815 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV 7, NV 7 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV10, NV10 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-F828 ] [ ] No
+ CAM:[SONY ] [DSC-H1 ] [ ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-H5 ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-L1 ] [ ] No
+ CAM:[SONY ] [DSC-N1 ] [ ] No
+ CAM:[SONY ] [DSC-P150 ] [ ] No
+ CAM:[SONY ] [DSC-P200 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-V3 ] [ ] No
+ CAM:[SONY ] [DSC-W55 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ SW :[Apple ImageIO.framework ] [084 ]
+ SW :[IJG Library ] [095 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [095 ]
+ SW :[IrfanView ] [095 ]
+ SW :[idImager ] [095 ]
+ SW :[FastStone Image Viewer ] [095 ]
+ SW :[NeatImage ] [095 ]
+ SW :[Paint.NET ] [095 ]
+ SW :[Photomatix ] [095 ]
+ SW :[XnView ] [095 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-load.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-load.jpg.txt
new file mode 100644
index 000000000..6070e1cda
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-load.jpg.txt
@@ -0,0 +1,772 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\issue750-exif-load.jpg]
+ Filesize: [36885] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000002
+ Length = 3656
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 08000000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000014
+ Dir Length = 0x0010
+ [Make ] = "Canon"
+ [Model ] = "Canon EOS 70D"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 720000/10000
+ [YResolution ] = 720000/10000
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop CS6 (Windows)"
+ [DateTime ] = "2018:02:28 17:51:59"
+ [YCbCrPositioning ] = Centered
+ [ExifOffset ] = @ 0x012C
+ [GPSOffset ] = @ 0x04C8
+ Offset to Next IFD = 0x000004DC
+
+ EXIF IFD1 @ Absolute 0x000004E8
+ Dir Length = 0x0006
+ [Compression ] = JPEG
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [JpegIFOffset ] = @ +0x053A = @ 0x0546
+ [JpegIFByteCount ] = 0x[00000906] / 2310
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x00000138
+ Dir Length = 0x0025
+ [ExposureTime ] = 1/60 s
+ [FNumber ] = F11.0
+ [ExposureProgram ] = Manual
+ [ISOSpeedRatings ] = 100
+ [ExifVersion ] = 02.30
+ [DateTimeOriginal ] = "2017:09:14 14:41:54"
+ [DateTimeDigitized ] = "2017:09:14 14:41:54"
+ [ComponentsConfiguration ] = [Y Cb Cr .]
+ [ShutterSpeedValue ] = 393216/65536
+ [ApertureValue ] = 458752/65536
+ [ExposureBiasValue ] = 0.00 eV
+ [MeteringMode ] = Pattern
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 50 mm
+ [UserComment ] = ""
+ [SubSecTime ] = "277"
+ [SubSecTimeOriginal ] = "00"
+ [SubSecTimeDigitized ] = "00"
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 0x[000001D3] / 467
+ [ExifImageHeight ] = 0x[000002BC] / 700
+ [ExifInteroperabilityOffset ] = @ 0x04A8
+ [FocalPlaneXResolution ] = 5472000/899
+ [FocalPlaneYResolution ] = 3648000/599
+ [FocalPlaneResolutionUnit ] = Inch
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Manual exposure
+ [WhiteBalance ] = Auto white balance
+ [SceneCaptureType ] = Standard
+
+ EXIF GPSIFD @ Absolute 0x000004D4
+ Dir Length = 0x0001
+ [GPSVersionID ] = 2.3.0.0
+
+ EXIF InteropIFD @ Absolute 0x000004B4
+ Dir Length = 0x0002
+ [InteroperabilityIndex ] = "R98"
+ [InteroperabilityVersion ] = 01.00
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00000E4C
+ Length = 4648
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x002C] DefinedName="IPTC-NAA record"
+ IPTC [001:090] Coded Character Set = "%G"
+ IPTC [002:000] Record Version = 51658
+ IPTC [002:055] Date Created = "20170914"
+ IPTC [002:060] Time Created = "144154+0000"
+ 8BIM: [0x0425] Name="" Len=[0x0010] DefinedName="Caption digest"
+ Caption digest = | 0x8B 58 80 D1 16 85 C7 6D 47 04 59 0B 61 59 FA 69 | .X.....mG.Y.aY.i
+ 8BIM: [0x043A] Name="" Len=[0x00E5] DefinedName="Print Information"
+ Print Information =
+ | 0x00 00 00 10 00 00 00 01 00 00 00 00 00 0B 70 72 | ..............pr
+ | 0x69 6E 74 4F 75 74 70 75 74 00 00 00 05 00 00 00 | intOutput.......
+ | 0x00 50 73 74 53 62 6F 6F 6C 01 00 00 00 00 49 6E | .PstSbool.....In
+ | 0x74 65 65 6E 75 6D 00 00 00 00 49 6E 74 65 00 00 | teenum....Inte..
+ | 0x00 00 43 6C 72 6D 00 00 00 0F 70 72 69 6E 74 53 | ..Clrm....printS
+ | 0x69 78 74 65 65 6E 42 69 74 62 6F 6F 6C 00 00 00 | ixteenBitbool...
+ | 0x00 0B 70 72 69 6E 74 65 72 4E 61 6D 65 54 45 58 | ..printerNameTEX
+ | 0x54 00 00 00 01 00 00 00 00 00 0F 70 72 69 6E 74 | T..........print
+ | ...
+ 8BIM: [0x043B] Name="" Len=[0x022D] DefinedName="Print Style"
+ Print Style =
+ | 0x00 00 00 10 00 00 00 01 00 00 00 00 00 12 70 72 | ..............pr
+ | 0x69 6E 74 4F 75 74 70 75 74 4F 70 74 69 6F 6E 73 | intOutputOptions
+ | 0x00 00 00 17 00 00 00 00 43 70 74 6E 62 6F 6F 6C | ........Cptnbool
+ | 0x00 00 00 00 00 43 6C 62 72 62 6F 6F 6C 00 00 00 | .....Clbrbool...
+ | 0x00 00 52 67 73 4D 62 6F 6F 6C 00 00 00 00 00 43 | ..RgsMbool.....C
+ | 0x72 6E 43 62 6F 6F 6C 00 00 00 00 00 43 6E 74 43 | rnCbool.....CntC
+ | 0x62 6F 6F 6C 00 00 00 00 00 4C 62 6C 73 62 6F 6F | bool.....Lblsboo
+ | 0x6C 00 00 00 00 00 4E 67 74 76 62 6F 6F 6C 00 00 | l.....Ngtvbool..
+ | ...
+ 8BIM: [0x03ED] Name="" Len=[0x0010] DefinedName="ResolutionInfo structure"
+ Horizontal resolution = 72 pixels per inch
+ Width unit = cm
+ Vertical resolution = 72 pixels per inch
+ Height unit = cm
+ 8BIM: [0x0426] Name="" Len=[0x000E] DefinedName="Print scale"
+ Style = centered
+ X location = 0.00000
+ Y location = 0.00000
+ Scale = 1.00000
+ 8BIM: [0x040D] Name="" Len=[0x0004] DefinedName="Global Angle"
+ Global Angle = 30 degrees
+ 8BIM: [0x0419] Name="" Len=[0x0004] DefinedName="Global Altitude"
+ Global Altitude = 30
+ 8BIM: [0x03F3] Name="" Len=[0x0009] DefinedName="Print flags"
+ Labels = false
+ Crop marks = false
+ Color bars = false
+ Registration marks = false
+ Negative = false
+ Flip = false
+ Interpolate = false
+ Caption = false
+ Print flags = true
+ 8BIM: [0x2710] Name="" Len=[0x000A] DefinedName="Print flags information"
+ Version = 1
+ Center crop marks = 0
+ Reserved = 0
+ Bleed width value = 0
+ Bleed width scale = 2
+ 8BIM: [0x03F5] Name="" Len=[0x0048] DefinedName="Color halftoning information"
+ Color halftoning information =
+ | 0x00 2F 66 66 00 01 00 6C 66 66 00 06 00 00 00 00 | ./ff...lff......
+ | 0x00 01 00 2F 66 66 00 01 00 A1 99 9A 00 06 00 00 | .../ff..........
+ | 0x00 00 00 01 00 32 00 00 00 01 00 5A 00 00 00 06 | .....2.....Z....
+ | 0x00 00 00 00 00 01 00 35 00 00 00 01 00 2D 00 00 | .......5.....-..
+ | 0x00 06 00 00 00 00 00 01 | ........
+ 8BIM: [0x03F8] Name="" Len=[0x0070] DefinedName="Color transfer functions"
+ Color transfer functions =
+ | 0x00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF 03 E8 00 00 00 00 FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF 03 E8 00 00 00 00 FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
+ | 0x03 E8 00 00 00 00 FF FF FF FF FF FF FF FF FF FF | ................
+ | 0xFF FF FF FF FF FF FF FF FF FF FF FF 03 E8 00 00 | ................
+ 8BIM: [0x0408] Name="" Len=[0x0010] DefinedName="Grid and guides information"
+ Version = 1
+ Grid Horizontal = 576
+ Grid Vertical = 576
+ Number of Guide Resources = 0
+ 8BIM: [0x041E] Name="" Len=[0x0004] DefinedName="URL List"
+ URL List = | 0x00 00 00 00 | ....
+ 8BIM: [0x041A] Name="" Len=[0x0341] DefinedName="Slices"
+ Slice Header:
+ Version = 6
+ Bound Rect (top) = 0
+ Bound Rect (left) = 0
+ Bound Rect (bottom) = 700
+ Bound Rect (right) = 467
+ Name of group of slices = "513566"
+ Number of slices = 1
+ -----
+ Slice #0:
+ Slice Resource:
+ ID = 0
+ Group ID = 0
+ Origin = 0
+ Name = ""
+ Type = 1
+ Position (top) = 0
+ Position (left) = 0
+ Position (bottom) = 467
+ Position (right) = 700
+ URL = ""
+ Target = ""
+ Message = ""
+ Alt Tag = ""
+ Cell text is HTML = true
+ Cell text = ""
+ Horizontal alignment = 0
+ Vertical alignment = 0
+ Alpha color = 0
+ Red = 0
+ Green = 0
+ Blue = 0
+ Descriptor version = 16
+ Descriptor:
+ Name from classID = ""
+ classID = "null"
+ Num items in descriptor = 2
+ -----
+ Descriptor item #0:
+ Key = "bounds"
+ OSType key = "Objc"
+ Descriptor:
+ Name from classID = ""
+ classID = "Rct1"
+ Num items in descriptor = 4
+ -----
+ Descriptor item #0:
+ Key = "Top "
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "Left"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "Btom"
+ OSType key = "long"
+ Value = 700
+ Descriptor item #3:
+ Key = "Rght"
+ OSType key = "long"
+ Value = 467
+ -----
+ Descriptor item #1:
+ Key = "slices"
+ OSType key = "VlLs"
+ Num items in list = 1
+ -----
+ Item #0:
+ OSType key = ""
+ Descriptor:
+ Name from classID = ""
+ classID = "slice"
+ Num items in descriptor = 18
+ -----
+ Descriptor item #0:
+ Key = "sliceID"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "groupID"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "origin"
+ OSType key = "enum"
+ Type = "ESliceOrigin"
+ Enum = "autoGenerated"
+ Descriptor item #3:
+ Key = "Type"
+ OSType key = "enum"
+ Type = "ESliceType"
+ Enum = "Img "
+ Descriptor item #4:
+ Key = "bounds"
+ OSType key = "Objc"
+ Descriptor:
+ Name from classID = ""
+ classID = "Rct1"
+ Num items in descriptor = 4
+ -----
+ Descriptor item #0:
+ Key = "Top "
+ OSType key = "long"
+ Value = 0
+ Descriptor item #1:
+ Key = "Left"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #2:
+ Key = "Btom"
+ OSType key = "long"
+ Value = 700
+ Descriptor item #3:
+ Key = "Rght"
+ OSType key = "long"
+ Value = 467
+ -----
+ Descriptor item #5:
+ Key = "url"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #6:
+ Key = "null"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #7:
+ Key = "Msge"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #8:
+ Key = "altTag"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #9:
+ Key = "cellTextIsHTML"
+ OSType key = "bool"
+ Value = true
+ Descriptor item #10:
+ Key = "cellText"
+ OSType key = "TEXT"
+ String = ""
+ Descriptor item #11:
+ Key = "horzAlign"
+ OSType key = "enum"
+ Type = "ESliceHorzAlign"
+ Enum = "default"
+ Descriptor item #12:
+ Key = "vertAlign"
+ OSType key = "enum"
+ Type = "ESliceVertAlign"
+ Enum = "default"
+ Descriptor item #13:
+ Key = "bgColorType"
+ OSType key = "enum"
+ Type = "ESliceBGColorType"
+ Enum = "None"
+ Descriptor item #14:
+ Key = "topOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #15:
+ Key = "leftOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #16:
+ Key = "bottomOutset"
+ OSType key = "long"
+ Value = 0
+ Descriptor item #17:
+ Key = "rightOutset"
+ OSType key = "long"
+ Value = 0
+ -----
+ -----
+ -----
+ -----
+ 8BIM: [0x0428] Name="" Len=[0x000C] DefinedName="Pixel Aspect Ratio"
+ Version = 2
+ X/Y Ratio = 1.00000
+ 8BIM: [0x0414] Name="" Len=[0x0004] DefinedName="Document-specific IDs seed number"
+ Base value = 1
+ 8BIM: [0x040C] Name="" Len=[0x0922] DefinedName="Thumbnail resources"
+ Format = 1
+ Width of thumbnail = 107 pixels
+ Height of thumbnail = 160 pixels
+ Widthbytes = 324 bytes
+ Total size = 51840 bytes
+ Size after compression = 2310 bytes
+ Bits per pixel = 24 bits
+ Number of planes = 1
+ JFIF data @ 0x000016FA
+ 8BIM: [0x0421] Name="" Len=[0x0055] DefinedName="Version Info"
+ Version = 1
+ hasRealMergedData = 1
+ Writer name = "Adobe Photoshop"
+ Reader name = "Adobe Photoshop CS6"
+ File version = 1
+ 8BIM: [0x0406] Name="" Len=[0x0007] DefinedName="JPEG quality"
+ Photoshop Save As Quality = 7
+ Photoshop Save Format = "Standard"
+ Photoshop Save Progressive Scans = "3 Scans"
+ ??? = 1
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00002076
+ Length = 3752
+ Identifier = [http://ns.adobe.com/xap/1.0/]
+ XMP =
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00002F20
+ Length = 3160
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 3144 bytes
+ Preferred CMM Type : 'Lino' (0x4C696E6F)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 1998-02-09 06:49:00
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Microsoft Corporation ('MSFT' (0x4D534654))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : 'IEC ' (0x49454320)
+ Device Model : 'sRGB' (0x73524742)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'HP ' (0x48502020)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: APP14 (xFFEE) ***
+ OFFSET: 0x00003B7A
+ Length = 14
+ DCTEncodeVersion = 100
+ APP14Flags0 = 0
+ APP14Flags1 = 0
+ ColorTransform = 1 [YCbCr]
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00003B8A
+ Table length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 10 7 7 10 15 18 20 17
+ DQT, Row #1: 7 8 8 10 13 16 12 12
+ DQT, Row #2: 7 8 8 10 16 12 12 12
+ DQT, Row #3: 10 10 10 18 12 12 12 12
+ DQT, Row #4: 15 13 16 12 12 12 12 12
+ DQT, Row #5: 18 16 12 12 12 12 12 12
+ DQT, Row #6: 20 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 83.48 (scaling=33.04 variance=462.13)
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 11 12 21 34 20 20 17 17
+ DQT, Row #1: 12 19 24 14 14 12 12 12
+ DQT, Row #2: 21 24 14 14 12 12 12 12
+ DQT, Row #3: 34 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ Approx quality factor = 87.98 (scaling=24.05 variance=592.80)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x00003C10
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 700
+ Samples per Line = 467
+ Image Size = 467 x 700
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DRI (Restart Interval) (xFFDD) ***
+ OFFSET: 0x00003C23
+ Length = 4
+ interval = 59
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003C29
+ Huffman table length = 418
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (007 total): 04 05 03 02 06 01 00
+ Codes of length 04 bits (001 total): 07
+ Codes of length 05 bits (001 total): 08
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (001 total): 0A
+ Codes of length 08 bits (001 total): 0B
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 00
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (003 total): 04 05 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 11 04 00
+ Codes of length 05 bits (003 total): 05 21 12
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 51 06 13 61
+ Codes of length 08 bits (002 total): 22 71
+ Codes of length 09 bits (006 total): 81 14 32 91 A1 07
+ Codes of length 10 bits (007 total): 15 B1 42 23 C1 52 D1
+ Codes of length 11 bits (003 total): E1 33 16
+ Codes of length 12 bits (004 total): 62 F0 24 72
+ Codes of length 13 bits (002 total): 82 F1
+ Codes of length 14 bits (006 total): 25 43 34 53 92 A2
+ Codes of length 15 bits (002 total): B2 63
+ Codes of length 16 bits (115 total): 73 C2 35 44 27 93 A3 B3 36 17 54 64 74 C3 D2 E2
+ 08 26 83 09 0A 18 19 84 94 45 46 A4 B4 56 D3 55
+ 28 1A F2 E3 F3 C4 D4 E4 F4 65 75 85 95 A5 B5 C5
+ D5 E5 F5 66 76 86 96 A6 B6 C6 D6 E6 F6 37 47 57
+ 67 77 87 97 A7 B7 C7 D7 E7 F7 38 48 58 68 78 88
+ 98 A8 B8 C8 D8 E8 F8 29 39 49 59 69 79 89 99 A9
+ B9 C9 D9 E9 F9 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA
+ DA EA FA
+ Total number of codes: 162
+
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 00
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (002 total): 04 21
+ Codes of length 06 bits (003 total): 12 31 41
+ Codes of length 07 bits (005 total): 05 51 13 61 22
+ Codes of length 08 bits (005 total): 06 71 81 91 32
+ Codes of length 09 bits (004 total): A1 B1 F0 14
+ Codes of length 10 bits (005 total): C1 D1 E1 23 42
+ Codes of length 11 bits (006 total): 15 52 62 72 F1 33
+ Codes of length 12 bits (004 total): 24 34 43 82
+ Codes of length 13 bits (008 total): 16 92 53 25 A2 63 B2 C2
+ Codes of length 14 bits (003 total): 07 73 D2
+ Codes of length 15 bits (003 total): 35 E2 44
+ Codes of length 16 bits (109 total): 83 17 54 93 08 09 0A 18 19 26 36 45 1A 27 64 74
+ 55 37 F2 A3 B3 C3 28 29 D3 E3 F3 84 94 A4 B4 C4
+ D4 E4 F4 65 75 85 95 A5 B5 C5 D5 E5 F5 46 56 66
+ 76 86 96 A6 B6 C6 D6 E6 F6 47 57 67 77 87 97 A7
+ B7 C7 D7 E7 F7 38 48 58 68 78 88 98 A8 B8 C8 D8
+ E8 F8 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9 2A
+ 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003DCD
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x00003DDB
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x00009013.0
+
+ Compression stats:
+ Compression Ratio: 46.60:1
+ Bits per pixel: 0.52:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 0 ( 0%)
+ # codes of length 03 bits: 4910 ( 95%)
+ # codes of length 04 bits: 280 ( 5%)
+ # codes of length 05 bits: 2 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 9997 ( 96%)
+ # codes of length 03 bits: 335 ( 3%)
+ # codes of length 04 bits: 52 ( 1%)
+ # codes of length 05 bits: 0 ( 0%)
+ # codes of length 06 bits: 0 ( 0%)
+ # codes of length 07 bits: 0 ( 0%)
+ # codes of length 08 bits: 0 ( 0%)
+ # codes of length 09 bits: 0 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 5649 ( 33%)
+ # codes of length 03 bits: 1560 ( 9%)
+ # codes of length 04 bits: 6758 ( 39%)
+ # codes of length 05 bits: 1189 ( 7%)
+ # codes of length 06 bits: 349 ( 2%)
+ # codes of length 07 bits: 488 ( 3%)
+ # codes of length 08 bits: 255 ( 1%)
+ # codes of length 09 bits: 351 ( 2%)
+ # codes of length 10 bits: 254 ( 1%)
+ # codes of length 11 bits: 70 ( 0%)
+ # codes of length 12 bits: 76 ( 0%)
+ # codes of length 13 bits: 14 ( 0%)
+ # codes of length 14 bits: 115 ( 1%)
+ # codes of length 15 bits: 41 ( 0%)
+ # codes of length 16 bits: 88 ( 1%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 10917 ( 93%)
+ # codes of length 03 bits: 435 ( 4%)
+ # codes of length 04 bits: 77 ( 1%)
+ # codes of length 05 bits: 75 ( 1%)
+ # codes of length 06 bits: 121 ( 1%)
+ # codes of length 07 bits: 47 ( 0%)
+ # codes of length 08 bits: 36 ( 0%)
+ # codes of length 09 bits: 5 ( 0%)
+ # codes of length 10 bits: 15 ( 0%)
+ # codes of length 11 bits: 39 ( 0%)
+ # codes of length 12 bits: 11 ( 0%)
+ # codes of length 13 bits: 3 ( 0%)
+ # codes of length 14 bits: 2 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 1 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[222] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1020, 0, 0] RGB=[255,255,255] @ MCU[ 0, 0]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 87
+ Next position in scan buffer: Offset 0x00009012.5
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00009013
+
+
+*** Embedded JPEG Thumbnail ***
+ Offset: 0x00000546
+ Length: 0x00000906 (2310)
+
+ * Embedded Thumb Marker: SOI
+
+ * Embedded Thumb Marker: APP13
+ Length = 12
+
+ * Embedded Thumb Marker: APP14
+ Length = 14
+
+ * Embedded Thumb Marker: DQT
+ Length = 132
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance, typically)
+ DQT, Row #0: 12 8 8 12 17 21 24 17
+ DQT, Row #1: 8 9 9 11 15 19 12 12
+ DQT, Row #2: 8 9 10 12 19 12 12 12
+ DQT, Row #3: 12 11 12 21 12 12 12 12
+ DQT, Row #4: 17 15 19 12 12 12 12 12
+ DQT, Row #5: 21 19 12 12 12 12 12 12
+ DQT, Row #6: 24 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance, typically)
+ DQT, Row #0: 13 11 13 16 20 20 17 17
+ DQT, Row #1: 11 14 14 14 14 12 12 12
+ DQT, Row #2: 13 14 14 14 12 12 12 12
+ DQT, Row #3: 16 14 14 12 12 12 12 12
+ DQT, Row #4: 20 14 12 12 12 12 12 12
+ DQT, Row #5: 20 12 12 12 12 12 12 12
+ DQT, Row #6: 17 12 12 12 12 12 12 12
+ DQT, Row #7: 17 12 12 12 12 12 12 12
+
+ * Embedded Thumb Marker: SOF
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 160
+ Samples per Line = 107
+ Image Size = 107 x 160
+
+ * Embedded Thumb Marker: DRI
+ Length = 4
+
+ * Embedded Thumb Marker: DHT
+ Length = 319
+
+ * Embedded Thumb Marker: SOS
+ Skipping scan data
+ Skipped 1785 bytes
+
+ * Embedded Thumb Marker: EOI
+
+ * Embedded Thumb Signature: 01C2DDA29A1B5DCCD5E217CF9C558A62
+
+*** Searching Compression Signatures ***
+
+ Signature: 0165B3F1B409A4D8D5F2ADFFA970D3A5
+ Signature (Rotated): 0165B3F1B409A4D8D5F2ADFFA970D3A5
+ File Offset: 0 bytes
+ Chroma subsampling: 1x1
+ EXIF Make/Model: OK [Canon] [Canon EOS 70D]
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop CS6 (Windows)]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E885 ] [FINE ] Yes
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C700UZ ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+
+ NOTE: Photoshop IRB detected
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+
diff --git a/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-tranform.jpg.txt b/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-tranform.jpg.txt
new file mode 100644
index 000000000..48760626b
--- /dev/null
+++ b/tests/Images/Input/Jpg/issues/JpegSnoopReports/issue750-exif-tranform.jpg.txt
@@ -0,0 +1,435 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\issue750-exif-tranform.jpg]
+ Filesize: [5587341] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 300 x 300 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 8272
+ Identifier = [Exif]
+ Identifier TIFF = 0x[4D4D002A 00000008]
+ Endian = Motorola (big)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x00000026
+ Dir Length = 0x000A
+ [Make ] = "Canon"
+ [Model ] = "Canon EOS 500D"
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [DateTime ] = "2017:12:06 15:48:51"
+ [Artist ] = ""
+ [YCbCrPositioning ] = Co-sited
+ [Copyright ] = ""
+ [ExifOffset ] = @ 0x00B0
+ [GPSOffset ] = @ 0x2034
+ [XPAuthor ] = "??"
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x000000CE
+ Dir Length = 0x0020
+ [ExposureTime ] = 1/160 s
+ [FNumber ] = F9.0
+ [ExposureProgram ] = Normal program
+ [ISOSpeedRatings ] = 3200
+ [ExifVersion ] = 02.21
+ [DateTimeOriginal ] = "2017:12:06 15:48:51"
+ [DateTimeDigitized ] = "2017:12:06 15:48:51"
+ [ComponentsConfiguration ] = [Y Cb Cr .]
+ [ShutterSpeedValue ] = 483328/65536
+ [ApertureValue ] = 417792/65536
+ [ExposureBiasValue ] = 1.00 eV
+ [MeteringMode ] = Pattern
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 24 mm
+ [MakerNote ] = @ 0x028E
+ [UserComment ] = ""
+ [SubSecTime ] = "80"
+ [SubSecTimeOriginal ] = "80"
+ [SubSecTimeDigitized ] = "80"
+ [FlashPixVersion ] = 01.00
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 4752
+ [ExifImageHeight ] = 3168
+ [ExifInteroperabilityOffset ] = @ 0x2010
+ [FocalPlaneXResolution ] = 4752000/894
+ [FocalPlaneYResolution ] = 3168000/593
+ [FocalPlaneResolutionUnit ] = Inch
+ [CustomRendered ] = Normal process
+ [ExposureMode ] = Auto exposure
+ [WhiteBalance ] = Auto white balance
+ [SceneCaptureType ] = Standard
+
+ EXIF MakerIFD @ Absolute 0x000002AC
+ Makernote decode option not enabled.
+
+ EXIF GPSIFD @ Absolute 0x00002052
+ Dir Length = 0x0001
+ [GPSVersionID ] = 2.2.0.0
+
+ EXIF InteropIFD @ Absolute 0x0000202E
+ Dir Length = 0x0001
+ [InteroperabilityVersion ] = 01.00
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00002066
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 1 1 1 1 1 2 3 4
+ DQT, Row #1: 1 1 1 1 2 3 4 3
+ DQT, Row #2: 1 1 1 1 2 3 4 3
+ DQT, Row #3: 1 1 1 2 3 5 5 4
+ DQT, Row #4: 1 1 2 3 4 7 6 5
+ DQT, Row #5: 1 2 3 4 5 6 7 6
+ DQT, Row #6: 3 4 5 5 6 7 7 6
+ DQT, Row #7: 4 6 6 6 7 6 6 6
+ Approx quality factor = 96.95 (scaling=6.11 variance=1.09)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000020AB
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 1 1 1 3 6 6 6 6
+ DQT, Row #1: 1 1 2 4 6 6 6 6
+ DQT, Row #2: 1 2 3 6 6 6 6 6
+ DQT, Row #3: 3 4 6 6 6 6 6 6
+ DQT, Row #4: 6 6 6 6 6 6 6 6
+ DQT, Row #5: 6 6 6 6 6 6 6 6
+ DQT, Row #6: 6 6 6 6 6 6 6 6
+ DQT, Row #7: 6 6 6 6 6 6 6 6
+ Approx quality factor = 96.99 (scaling=6.01 variance=0.24)
+
+*** Marker: SOF0 (Baseline DCT) (xFFC0) ***
+ OFFSET: 0x000020F0
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 3168
+ Samples per Line = 4752
+ Image Size = 4752 x 3168
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002103
+ Huffman table length = 31
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (005 total): 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 09
+ Codes of length 08 bits (001 total): 0A
+ Codes of length 09 bits (001 total): 0B
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002124
+ Huffman table length = 181
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (003 total): 00 04 11
+ Codes of length 05 bits (003 total): 05 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 06 13 51 61
+ Codes of length 08 bits (003 total): 07 22 71
+ Codes of length 09 bits (005 total): 14 32 81 91 A1
+ Codes of length 10 bits (005 total): 08 23 42 B1 C1
+ Codes of length 11 bits (004 total): 15 52 D1 F0
+ Codes of length 12 bits (004 total): 24 33 62 72
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (001 total): 82
+ Codes of length 16 bits (125 total): 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36
+ 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56
+ 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76
+ 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95
+ 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3
+ B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA
+ D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7
+ E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000021DB
+ Huffman table length = 31
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 02
+ Codes of length 03 bits (001 total): 03
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (001 total): 05
+ Codes of length 06 bits (001 total): 06
+ Codes of length 07 bits (001 total): 07
+ Codes of length 08 bits (001 total): 08
+ Codes of length 09 bits (001 total): 09
+ Codes of length 10 bits (001 total): 0A
+ Codes of length 11 bits (001 total): 0B
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 012
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000021FC
+ Huffman table length = 181
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (002 total): 03 11
+ Codes of length 05 bits (004 total): 04 05 21 31
+ Codes of length 06 bits (004 total): 06 12 41 51
+ Codes of length 07 bits (003 total): 07 61 71
+ Codes of length 08 bits (004 total): 13 22 32 81
+ Codes of length 09 bits (007 total): 08 14 42 91 A1 B1 C1
+ Codes of length 10 bits (005 total): 09 23 33 52 F0
+ Codes of length 11 bits (004 total): 15 62 72 D1
+ Codes of length 12 bits (004 total): 0A 16 24 34
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (001 total): E1
+ Codes of length 15 bits (002 total): 25 F1
+ Codes of length 16 bits (119 total): 17 18 19 1A 26 27 28 29 2A 35 36 37 38 39 3A 43
+ 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63
+ 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 82
+ 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99
+ 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7
+ B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5
+ D6 D7 D8 D9 DA E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3
+ F4 F5 F6 F7 F8 F9 FA
+ Total number of codes: 162
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000022B3
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),1(AC)
+ Component[3]: selector=0x03, table=1(DC),1(AC)
+ Spectral selection = 0 .. 63
+ Successive approximation = 0x00
+
+
+*** Decoding SCAN Data ***
+ OFFSET: 0x000022C1
+ Scan Decode Mode: No IDCT (DC only)
+ NOTE: Low-resolution DC component shown. Can decode full-res with [Options->Scan Segment->Full IDCT]
+
+ Scan Data encountered marker 0xFFD9 @ 0x0055418B.0
+
+ Compression stats:
+ Compression Ratio: 8.10:1
+ Bits per pixel: 2.96:1
+
+ Huffman code histogram stats:
+ Huffman Table: (Dest ID: 0, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 7852 ( 3%)
+ # codes of length 03 bits: 194801 ( 83%)
+ # codes of length 04 bits: 18114 ( 8%)
+ # codes of length 05 bits: 9703 ( 4%)
+ # codes of length 06 bits: 3623 ( 2%)
+ # codes of length 07 bits: 941 ( 0%)
+ # codes of length 08 bits: 188 ( 0%)
+ # codes of length 09 bits: 2 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: DC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 53609 ( 46%)
+ # codes of length 03 bits: 36337 ( 31%)
+ # codes of length 04 bits: 20089 ( 17%)
+ # codes of length 05 bits: 4404 ( 4%)
+ # codes of length 06 bits: 2062 ( 2%)
+ # codes of length 07 bits: 903 ( 1%)
+ # codes of length 08 bits: 206 ( 0%)
+ # codes of length 09 bits: 2 ( 0%)
+ # codes of length 10 bits: 0 ( 0%)
+ # codes of length 11 bits: 0 ( 0%)
+ # codes of length 12 bits: 0 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 0 ( 0%)
+ # codes of length 16 bits: 0 ( 0%)
+
+ Huffman Table: (Dest ID: 0, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 3801677 ( 49%)
+ # codes of length 03 bits: 1263986 ( 16%)
+ # codes of length 04 bits: 1288745 ( 17%)
+ # codes of length 05 bits: 606891 ( 8%)
+ # codes of length 06 bits: 282047 ( 4%)
+ # codes of length 07 bits: 273734 ( 4%)
+ # codes of length 08 bits: 85749 ( 1%)
+ # codes of length 09 bits: 90483 ( 1%)
+ # codes of length 10 bits: 39213 ( 1%)
+ # codes of length 11 bits: 19089 ( 0%)
+ # codes of length 12 bits: 6439 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 0 ( 0%)
+ # codes of length 15 bits: 136 ( 0%)
+ # codes of length 16 bits: 7545 ( 0%)
+
+ Huffman Table: (Dest ID: 1, Class: AC)
+ # codes of length 01 bits: 0 ( 0%)
+ # codes of length 02 bits: 309037 ( 51%)
+ # codes of length 03 bits: 124353 ( 21%)
+ # codes of length 04 bits: 87742 ( 14%)
+ # codes of length 05 bits: 43060 ( 7%)
+ # codes of length 06 bits: 28928 ( 5%)
+ # codes of length 07 bits: 2442 ( 0%)
+ # codes of length 08 bits: 8544 ( 1%)
+ # codes of length 09 bits: 1150 ( 0%)
+ # codes of length 10 bits: 376 ( 0%)
+ # codes of length 11 bits: 126 ( 0%)
+ # codes of length 12 bits: 30 ( 0%)
+ # codes of length 13 bits: 0 ( 0%)
+ # codes of length 14 bits: 50 ( 0%)
+ # codes of length 15 bits: 24 ( 0%)
+ # codes of length 16 bits: 4 ( 0%)
+
+ YCC clipping in DC:
+ Y component: [<0= 0] [>255= 0]
+ Cb component: [<0= 0] [>255= 0]
+ Cr component: [<0= 0] [>255= 0]
+
+ RGB clipping in DC:
+ R component: [<0= 0] [>255= 0]
+ G component: [<0= 0] [>255= 0]
+ B component: [<0= 0] [>255= 0]
+
+ Average Pixel Luminance (Y):
+ Y=[215] (range: 0..255)
+
+ Brightest Pixel Search:
+ YCC=[ 1016, -3, 3] RGB=[255,255,253] @ MCU[ 92, 26]
+
+ Finished Decoding SCAN Data
+ Number of RESTART markers decoded: 0
+ Next position in scan buffer: Offset 0x0055418A.7
+
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0055418B
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 010564D93F295ADB889B91604DC82EE1
+ Signature (Rotated): 014302FE54745F4DBB58A0D51CDC66BD
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: OK [Canon] [Canon EOS 500D]
+ EXIF Makernotes: OK
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[Leica Camera AG ] [M8 Digital Camera ] [ ] No
+ CAM:[Leica Camera AG ] [M8 Digital Camera ] [ ] No
+ CAM:[Leica Camera AG ] [M8 Digital Camera ] [ ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5400 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[OLYMPUS CORPORATION ] [C8080WZ ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C40Z,D40Z ] [ ] No
+ CAM:[Samsung Techwin ] [Digimax V50/a5 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [Pro 815 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV 7, NV 7 ] [ ] No
+ CAM:[SAMSUNG TECHWIN ] [VLUU NV10, NV10 ] [ ] No
+ CAM:[SONY ] [CYBERSHOT ] [ ] No
+ CAM:[SONY ] [DSC-H1 ] [ ] No
+ CAM:[SONY ] [DSC-H2 ] [ ] No
+ CAM:[SONY ] [DSC-H5 ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-L1 ] [ ] No
+ CAM:[SONY ] [DSC-N2 ] [ ] No
+ CAM:[SONY ] [DSC-P150 ] [ ] No
+ CAM:[SONY ] [DSC-P200 ] [ ] No
+ CAM:[SONY ] [DSC-R1 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-V1 ] [ ] No
+ CAM:[SONY ] [DSC-V3 ] [ ] No
+ CAM:[SONY ] [DSC-W35 ] [ ] No
+ CAM:[SONY ] [DSC-W7 ] [ ] No
+ CAM:[SONY ] [SONY ] [ ] No
+ SW :[IJG Library ] [097 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [097 ]
+ SW :[IrfanView ] [097 ]
+ SW :[idImager ] [097 ]
+ SW :[FastStone Image Viewer ] [097 ]
+ SW :[NeatImage ] [097 ]
+ SW :[Paint.NET ] [097 ]
+ SW :[Photomatix ] [097 ]
+ SW :[XnView ] [097 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 4 - Uncertain if processed or original
+ While the EXIF fields indicate original, no compression signatures
+ in the current database were found matching this make/model
+
+ Appears to be new signature for known camera.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/progressive/JpegSnoopReports/BadEofProgressive.jpg.txt b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/BadEofProgressive.jpg.txt
new file mode 100644
index 000000000..b6a1fe809
--- /dev/null
+++ b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/BadEofProgressive.jpg.txt
@@ -0,0 +1,452 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\BadEofProgressive.jpg]
+ Filesize: [67503] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.2]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: APP13 (xFFED) ***
+ OFFSET: 0x00000014
+ Length = 124
+ Identifier = [Photoshop 3.0]
+ 8BIM: [0x0404] Name="" Len=[0x005F] DefinedName="IPTC-NAA record"
+ IPTC [002:040] Special Instructions = "FBMD2300098903000068210000c735000008450000e88e0000fab00000c6cd000002f80000191a0100653f0100"
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x00000092
+ Length = 540
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 524 bytes
+ Preferred CMM Type : 'lcms' (0x6C636D73)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 2012-01-25 03:41:57
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : '....' (0x00000000)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'lcms' (0x6C636D73)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000002B0
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 6 4 4 6 10 16 20 24
+ DQT, Row #1: 5 5 6 8 10 23 24 22
+ DQT, Row #2: 6 5 6 10 16 23 28 22
+ DQT, Row #3: 6 7 9 12 20 35 32 25
+ DQT, Row #4: 7 9 15 22 27 44 41 31
+ DQT, Row #5: 10 14 22 26 32 42 45 37
+ DQT, Row #6: 20 26 31 35 41 48 48 40
+ DQT, Row #7: 29 37 38 39 45 40 41 40
+ Approx quality factor = 79.94 (scaling=40.12 variance=1.43)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x000002F5
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 7 7 10 19 40 40 40 40
+ DQT, Row #1: 7 8 10 26 40 40 40 40
+ DQT, Row #2: 10 10 22 40 40 40 40 40
+ DQT, Row #3: 19 26 40 40 40 40 40 40
+ DQT, Row #4: 40 40 40 40 40 40 40 40
+ DQT, Row #5: 40 40 40 40 40 40 40 40
+ DQT, Row #6: 40 40 40 40 40 40 40 40
+ DQT, Row #7: 40 40 40 40 40 40 40 40
+ Approx quality factor = 79.87 (scaling=40.26 variance=0.36)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000033A
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 640
+ Samples per Line = 640
+ Image Size = 640 x 640
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000034D
+ Huffman table length = 29
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (007 total): 01 02 03 04 05 06 07
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (001 total): 08
+ Codes of length 06 bits (001 total): 09
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000036C
+ Huffman table length = 27
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (003 total): 00 03 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 07
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000389
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),0(AC)
+ Component[3]: selector=0x02, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002127
+ Huffman table length = 63
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (004 total): 00 02 03 11
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (002 total): 05 41
+ Codes of length 07 bits (003 total): 13 22 51
+ Codes of length 08 bits (004 total): 10 32 61 A1
+ Codes of length 09 bits (007 total): 14 20 71 81 91 B1 F0
+ Codes of length 10 bits (007 total): 06 23 42 52 C1 D1 E1
+ Codes of length 11 bits (002 total): 15 30
+ Codes of length 12 bits (005 total): 16 24 33 34 62
+ Codes of length 13 bits (005 total): 25 40 50 72 F1
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 044
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002168
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003588
+ Huffman table length = 61
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (003 total): 04 12 21
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (004 total): 05 10 13 51
+ Codes of length 08 bits (003 total): 14 20 22
+ Codes of length 09 bits (005 total): 32 42 61 71 91
+ Codes of length 10 bits (007 total): 15 23 33 81 A1 B1 C1
+ Codes of length 11 bits (003 total): 06 30 D1
+ Codes of length 12 bits (002 total): E1 F0
+ Codes of length 13 bits (007 total): 16 24 34 40 43 50 52
+ Codes of length 14 bits (001 total): 62
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 042
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000035C7
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x00
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000044BF
+ Huffman table length = 71
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (003 total): 12 21 31
+ Codes of length 06 bits (004 total): 13 22 41 51
+ Codes of length 07 bits (007 total): 05 10 20 32 61 71 81
+ Codes of length 08 bits (005 total): 14 23 42 52 91
+ Codes of length 09 bits (005 total): 30 33 62 72 A1
+ Codes of length 10 bits (007 total): 15 34 43 53 82 92 B1
+ Codes of length 11 bits (003 total): 06 24 40
+ Codes of length 12 bits (004 total): 44 A2 C1 D1
+ Codes of length 13 bits (001 total): E1
+ Codes of length 14 bits (004 total): 25 35 50 F0
+ Codes of length 15 bits (003 total): 54 63 73
+ Codes of length 16 bits (000 total):
+ Total number of codes: 052
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00004508
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00008EC5
+ Huffman table length = 33
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 10 21 31
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (001 total): 51
+ Codes of length 08 bits (001 total): 20
+ Codes of length 09 bits (001 total): 61
+ Codes of length 10 bits (001 total): 71
+ Codes of length 11 bits (001 total): 30
+ Codes of length 12 bits (001 total): 81
+ Codes of length 13 bits (001 total): 40
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 014
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00008EE8
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 10
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000B0CE
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (006 total): 10 41 51 61 71 91
+ Codes of length 06 bits (002 total): 20 81
+ Codes of length 07 bits (001 total): 30
+ Codes of length 08 bits (005 total): 40 A1 B1 C1 F0
+ Codes of length 09 bits (001 total): D1
+ Codes of length 10 bits (001 total): F1
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (001 total): 50
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000B0FA
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 11 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000CDA4
+ Huffman table length = 32
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (001 total): 10
+ Codes of length 07 bits (001 total): 41
+ Codes of length 08 bits (001 total): 51
+ Codes of length 09 bits (001 total): 20
+ Codes of length 10 bits (001 total): 61
+ Codes of length 11 bits (001 total): 71
+ Codes of length 12 bits (001 total): 81
+ Codes of length 13 bits (001 total): 91
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 013
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000CDC6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 10
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000F7DF
+ Huffman table length = 33
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 10 41
+ Codes of length 06 bits (003 total): 51 61 71
+ Codes of length 07 bits (001 total): 20
+ Codes of length 08 bits (001 total): 81
+ Codes of length 09 bits (001 total): 30
+ Codes of length 10 bits (001 total): 40
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 014
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000F802
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 11 .. 19
+ Successive approximation = 0x10
+ERROR: Ran out of buffer before EOI during phase 1 of Scan decode @ 0x000107B0
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+ERROR: Early EOF - file may be missing EOI
+
+*** Searching Compression Signatures ***
+
+ Signature: 01DC499064BA9264D591FDE9071DFD89
+ Signature (Rotated): 0175BAF3251040E0EFB2930B73328E7F
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C40Z,D40Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C700UZ ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ SW :[Apple ImageIO.framework ] [050 (Normal) ]
+ SW :[IJG Library ] [080 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [080 ]
+ SW :[IrfanView ] [080 ]
+ SW :[idImager ] [080 ]
+ SW :[FastStone Image Viewer ] [080 ]
+ SW :[NeatImage ] [080 ]
+ SW :[Paint.NET ] [080 ]
+ SW :[Photomatix ] [080 ]
+ SW :[XnView ] [080 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/progressive/JpegSnoopReports/ExifUndefType.jpg.txt b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/ExifUndefType.jpg.txt
new file mode 100644
index 000000000..397343c5e
--- /dev/null
+++ b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/ExifUndefType.jpg.txt
@@ -0,0 +1,535 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\ExifUndefType.jpg]
+ Filesize: [6582] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 72 x 72 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: APP1 (xFFE1) ***
+ OFFSET: 0x00000014
+ Length = 804
+ Identifier = [Exif]
+ Identifier TIFF = 0x[49492A00 86020000]
+ Endian = Intel (little)
+ TAG Mark x002A = 0x002A
+
+ EXIF IFD0 @ Absolute 0x000002A4
+ Dir Length = 0x000C
+ [Orientation ] = 1 = Row 0: top, Col 0: left
+ [XResolution ] = 72/1
+ [YResolution ] = 72/1
+ [ResolutionUnit ] = Inch
+ [Software ] = "Adobe Photoshop CS4 Windows"
+ [DateTime ] = "2014:03:28 16:44:10"
+ [WhitePoint ] = 0/1000000, 0/1000000
+ [PrimChromaticities ] = 0/1000000, 0/1000000, 0/1000000, 0/1000000, 0/1000000, 0/1000000
+ [YCbCrCoefficients ] = 0/1000000, 0/1000000, 0/1000000
+ [YCbCrPositioning ] = 0
+ [ReferenceBlackWhite ] = 0/1000000, 0/1000000, 0/1000000, 0/1000000, 0/1000000, 0/1000000
+ [ExifOffset ] = @ 0x0138
+ Offset to Next IFD = 0x00000000
+
+ EXIF SubIFD @ Absolute 0x00000156
+ Dir Length = 0x001B
+ [ExposureTime ] = 0/1000000 s
+ [FNumber ] = F0.0
+ [ExposureProgram ] = Not defined
+ [ISOSpeedRatings ] = 0, 0
+ [ExifVersion ] = 12.20
+ [CompressedBitsPerPixel ] = 0/1000000
+ [ShutterSpeedValue ] = 0/1000000
+ [ApertureValue ] = 0/1000000
+ [BrightnessValue ] = 0/1000000
+ [ExposureBiasValue ] = 0.00 eV
+ [MaxApertureValue ] = 0/1000000
+ [SubjectDistance ] = 0/1000000
+ [MeteringMode ] = Unknown
+ [LightSource ] = unknown
+ [Flash ] = Flash did not fire
+ [FocalLength ] = 0 mm
+ [FlashPixVersion ] =
+ [ColorSpace ] = sRGB
+ [ExifImageWidth ] = 850
+ [ExifImageHeight ] = 638
+ [FocalPlaneXResolution ] = 0/1000000
+ [FocalPlaneYResolution ] = 0/1000000
+ [FocalPlaneResolutionUnit ] = 0
+ [ExposureIndex ] = 0/1000000
+ [SensingMethod ] = 0
+ [FileSource ] = 0
+ [SceneType ] = 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000033A
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 3 2 2 3 5 8 10 12
+ DQT, Row #1: 2 2 3 4 5 12 12 11
+ DQT, Row #2: 3 3 3 5 8 11 14 11
+ DQT, Row #3: 3 3 4 6 10 17 16 12
+ DQT, Row #4: 4 4 7 11 14 22 21 15
+ DQT, Row #5: 5 7 11 13 16 21 23 18
+ DQT, Row #6: 10 13 16 17 21 24 24 20
+ DQT, Row #7: 14 18 19 20 22 20 21 20
+ Approx quality factor = 90.06 (scaling=19.88 variance=1.14)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000037F
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 3 4 5 9 20 20 20 20
+ DQT, Row #1: 4 4 5 13 20 20 20 20
+ DQT, Row #2: 5 5 11 20 20 20 20 20
+ DQT, Row #3: 9 13 20 20 20 20 20 20
+ DQT, Row #4: 20 20 20 20 20 20 20 20
+ DQT, Row #5: 20 20 20 20 20 20 20 20
+ DQT, Row #6: 20 20 20 20 20 20 20 20
+ DQT, Row #7: 20 20 20 20 20 20 20 20
+ Approx quality factor = 89.93 (scaling=20.14 variance=0.34)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x000003C4
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 165
+ Samples per Line = 220
+ Image Size = 220 x 165
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000003D7
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 03 07
+ Codes of length 04 bits (003 total): 02 04 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (001 total): 01
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000003F5
+ Huffman table length = 22
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 003
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000040D
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000581
+ Huffman table length = 41
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (006 total): 00 01 02 03 04 05
+ Codes of length 04 bits (001 total): 06
+ Codes of length 05 bits (003 total): 11 15 16
+ Codes of length 06 bits (004 total): 12 13 14 21
+ Codes of length 07 bits (002 total): 07 10
+ Codes of length 08 bits (002 total): 22 40
+ Codes of length 09 bits (003 total): 17 30 60
+ Codes of length 10 bits (001 total): 24
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000005AC
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000883
+ Huffman table length = 27
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 11
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 01 10
+ Codes of length 05 bits (003 total): 20 30 40
+ Codes of length 06 bits (001 total): 50
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000008A0
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000008BF
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (001 total): 01
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 10 21 30
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 20 40 50
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000008DD
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000905
+ Huffman table length = 65
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (004 total): 00 01 02 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (004 total): 12 21 31 34
+ Codes of length 06 bits (008 total): 13 32 33 35 91 92 93 D2
+ Codes of length 07 bits (009 total): 05 10 14 22 41 51 71 A1 D1
+ Codes of length 08 bits (010 total): 20 23 40 42 52 61 81 A2 A3 B1
+ Codes of length 09 bits (007 total): 15 24 60 62 72 E1 E2
+ Codes of length 10 bits (001 total): 30
+ Codes of length 11 bits (001 total): B2
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 046
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000948
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000E49
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (004 total): 51 61 71 D1
+ Codes of length 07 bits (006 total): 81 91 A1 C1 F0 F1
+ Codes of length 08 bits (002 total): 40 B1
+ Codes of length 09 bits (003 total): 10 20 60
+ Codes of length 10 bits (001 total): 30
+ Codes of length 11 bits (001 total): E1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000E75
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001266
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000012E8
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (001 total): 10
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (002 total): 30 51
+ Codes of length 06 bits (003 total): 21 40 50
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001306
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000133E
+ Huffman table length = 30
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (003 total): 10 30 51
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (002 total): 20 61
+ Codes of length 07 bits (003 total): 21 40 50
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000135E
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000139C
+ Huffman table length = 42
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (003 total): 41 51 61
+ Codes of length 07 bits (003 total): 71 81 B1
+ Codes of length 08 bits (003 total): 91 A1 D1
+ Codes of length 09 bits (004 total): 10 40 E1 F0
+ Codes of length 10 bits (003 total): 20 C1 F1
+ Codes of length 11 bits (001 total): 60
+ Codes of length 12 bits (001 total): 30
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 023
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000013C8
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x000019B4
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 013BA18D5561625796E986FDBC09F846
+ Signature (Rotated): 01AC57E12793DFA7C46C704625C5AF0F
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: OK [Adobe Photoshop CS4 Windows]
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[??? ] [Treo 680 ] [ ] Yes
+ CAM:[Canon ] [Canon PowerShot Pro1 ] [fine ] No
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[NIKON ] [E3100 ] [FINE ] No
+ CAM:[NIKON ] [E4500 ] [FINE ] No
+ CAM:[NIKON ] [E5000 ] [FINE ] No
+ CAM:[NIKON ] [E5700 ] [FINE ] No
+ CAM:[NIKON ] [E775 ] [FINE ] No
+ CAM:[NIKON ] [E885 ] [FINE ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 9530 ] [Superfine ] Yes
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ CAM:[SONY ] [DSC-H7 ] [ ] No
+ CAM:[SONY ] [DSC-H9 ] [ ] No
+ CAM:[SONY ] [DSC-S90 ] [ ] No
+ CAM:[SONY ] [DSC-W1 ] [ ] No
+ CAM:[SONY ] [SONY ] [ ] No
+ SW :[ACDSee ] [ ]
+ SW :[FixFoto ] [fine ]
+ SW :[IJG Library ] [090 ]
+ SW :[ZoomBrowser EX ] [high ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [090 ]
+ SW :[IrfanView ] [090 ]
+ SW :[idImager ] [090 ]
+ SW :[FastStone Image Viewer ] [090 ]
+ SW :[NeatImage ] [090 ]
+ SW :[Paint.NET ] [090 ]
+ SW :[Photomatix ] [090 ]
+ SW :[XnView ] [090 ]
+
+ NOTE: EXIF Software field recognized as from editor
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ Appears to be new signature for known software.
+ If the camera/software doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/progressive/JpegSnoopReports/Festzug.jpg.txt b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/Festzug.jpg.txt
new file mode 100644
index 000000000..445e80a7e
--- /dev/null
+++ b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/Festzug.jpg.txt
@@ -0,0 +1,459 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\Festzug.jpg]
+ Filesize: [49977] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 229 x 229 DPI (dots per inch)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 131
+ ----
+ Precision=16 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 53 37 33 53 80 133 170 203
+ DQT, Row #1: 40 40 47 63 87 193 200 183
+ DQT, Row #2: 47 43 53 80 133 190 230 186
+ DQT, Row #3: 47 57 73 97 170 290 266 206
+ DQT, Row #4: 60 73 123 186 226 363 343 256
+ DQT, Row #5: 80 117 183 213 270 346 376 306
+ DQT, Row #6: 163 213 260 290 343 403 400 336
+ DQT, Row #7: 240 306 316 326 373 333 343 330
+ Approx quality factor = 15.01 (scaling=333.00 variance=1.25)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000099
+ Table length = 131
+ ----
+ Precision=16 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 57 60 80 157 330 330 330 330
+ DQT, Row #1: 60 70 87 220 330 330 330 330
+ DQT, Row #2: 80 87 186 330 330 330 330 330
+ DQT, Row #3: 157 220 330 330 330 330 330 330
+ DQT, Row #4: 330 330 330 330 330 330 330 330
+ DQT, Row #5: 330 330 330 330 330 330 330 330
+ DQT, Row #6: 330 330 330 330 330 330 330 330
+ DQT, Row #7: 330 330 330 330 330 330 330 330
+ Approx quality factor = 15.00 (scaling=333.41 variance=0.14)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000011E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 1071
+ Samples per Line = 1443
+ Image Size = 1443 x 1071
+ Raw Image Orientation = Landscape
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000131
+ Huffman table length = 25
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 03
+ Codes of length 05 bits (001 total): 04
+ Codes of length 06 bits (001 total): 05
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 006
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000014C
+ Huffman table length = 22
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (001 total): 00
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 003
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000164
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000028E0
+ Huffman table length = 38
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (004 total): 02 10 20 30
+ Codes of length 05 bits (003 total): 12 31 40
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 21 41 50
+ Codes of length 08 bits (001 total): 60
+ Codes of length 09 bits (001 total): 03
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (003 total): 22 32 42
+ Codes of length 12 bits (001 total): 13
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 019
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002908
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003D97
+ Huffman table length = 29
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (003 total): 00 10 11
+ Codes of length 04 bits (001 total): 20
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (002 total): 30 60
+ Codes of length 07 bits (003 total): 80 90 C0
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 010
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003DB6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003DE1
+ Huffman table length = 28
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 10 11
+ Codes of length 04 bits (003 total): 00 20 60
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (003 total): 80 90 C0
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003DFF
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003E21
+ Huffman table length = 23
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 21
+ Codes of length 02 bits (001 total): D0
+ Codes of length 03 bits (001 total): A0
+ Codes of length 04 bits (001 total): B0
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 004
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003E3A
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003E4C
+ Huffman table length = 36
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 10 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (003 total): 20 30 41
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 40 50 51
+ Codes of length 08 bits (001 total): 61
+ Codes of length 09 bits (001 total): 60
+ Codes of length 10 bits (001 total): 71
+ Codes of length 11 bits (001 total): 81
+ Codes of length 12 bits (001 total): B1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 017
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00003E72
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00006325
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007512
+ Huffman table length = 30
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (003 total): 10 21 60
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 20 41 80
+ Codes of length 08 bits (001 total): C0
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00007532
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000075CE
+ Huffman table length = 30
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 11
+ Codes of length 03 bits (001 total): 10
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 21 31 60
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (003 total): 20 80 C0
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 011
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000075EE
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00007676
+ Huffman table length = 43
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (002 total): 21 31
+ Codes of length 06 bits (002 total): 10 41
+ Codes of length 07 bits (002 total): 20 51
+ Codes of length 08 bits (002 total): 30 61
+ Codes of length 09 bits (003 total): 40 50 71
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (003 total): 60 81 91
+ Codes of length 12 bits (001 total): A1
+ Codes of length 13 bits (001 total): B1
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (002 total): C1 D1
+ Codes of length 16 bits (003 total): E1 F0 F1
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000076A3
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000C337
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0105A3D95D2D36DE9351313E30D8E945
+ Signature (Rotated): 013C3A43642D2E8325A76C3818B3C324
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ SW :[IJG Library ] [015 ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [015 ]
+ SW :[IrfanView ] [015 ]
+ SW :[idImager ] [015 ]
+ SW :[FastStone Image Viewer ] [015 ]
+ SW :[NeatImage ] [015 ]
+ SW :[Paint.NET ] [015 ]
+ SW :[Photomatix ] [015 ]
+ SW :[XnView ] [015 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/progressive/JpegSnoopReports/fb.jpg.txt b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/fb.jpg.txt
new file mode 100644
index 000000000..6f20fc1ee
--- /dev/null
+++ b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/fb.jpg.txt
@@ -0,0 +1,525 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\fb.jpg]
+ Filesize: [15787] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.2]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: COM (Comment) (xFFFE) ***
+ OFFSET: 0x00000014
+ Comment length = 4
+ Comment=*.
+
+*** Marker: APP2 (xFFE2) ***
+ OFFSET: 0x0000001A
+ Length = 540
+ Identifier = [ICC_PROFILE]
+ ICC Profile:
+ Marker Number = 1 of 1
+ Profile Size : 524 bytes
+ Preferred CMM Type : 'lcms' (0x6C636D73)
+ Profile Version : 0.2.1.0 (0x02100000)
+ Profile Device/Class : Display Device profile ('mntr' (0x6D6E7472))
+ Data Colour Space : rgbData ('RGB ' (0x52474220))
+ Profile connection space (PCS) : 'XYZ ' (0x58595A20)
+ Profile creation date : 2012-01-25 03:41:57
+ Profile file signature : 'acsp' (0x61637370)
+ Primary platform : Apple Computer, Inc. ('APPL' (0x4150504C))
+ Profile flags : 0x00000000
+ Profile flags > Profile not embedded
+ Profile flags > Profile can't be used independently of embedded
+ Device Manufacturer : '....' (0x00000000)
+ Device Model : '....' (0x00000000)
+ Device attributes : 0x00000000_00000000
+ Device attributes > Reflective
+ Device attributes > Glossy
+ Device attributes > Media polarity = negative
+ Device attributes > Black & white media
+ Rendering intent : Perceptual
+ Profile creator : 'lcms' (0x6C636D73)
+ Profile ID : 0x00000000_00000000_00000000_00000000
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000238
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 8 6 5 8 12 20 26 31
+ DQT, Row #1: 6 6 7 10 13 29 30 28
+ DQT, Row #2: 7 7 8 12 20 29 35 28
+ DQT, Row #3: 7 9 11 15 26 44 40 31
+ DQT, Row #4: 9 11 19 28 34 55 52 39
+ DQT, Row #5: 12 18 28 32 41 52 57 46
+ DQT, Row #6: 25 32 39 44 52 61 60 51
+ DQT, Row #7: 36 46 48 49 56 50 52 50
+ Approx quality factor = 74.75 (scaling=50.51 variance=0.81)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x0000027D
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 9 9 12 24 50 50 50 50
+ DQT, Row #1: 9 11 13 33 50 50 50 50
+ DQT, Row #2: 12 13 28 50 50 50 50 50
+ DQT, Row #3: 24 33 50 50 50 50 50 50
+ DQT, Row #4: 50 50 50 50 50 50 50 50
+ DQT, Row #5: 50 50 50 50 50 50 50 50
+ DQT, Row #6: 50 50 50 50 50 50 50 50
+ DQT, Row #7: 50 50 50 50 50 50 50 50
+ Approx quality factor = 74.74 (scaling=50.52 variance=0.19)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x000002C2
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 336
+ Samples per Line = 276
+ Image Size = 276 x 336
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x00, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x01, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000002D5
+ Huffman table length = 27
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 04
+ Codes of length 03 bits (005 total): 00 02 03 05 06
+ Codes of length 04 bits (001 total): 01
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 008
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000002F2
+ Huffman table length = 24
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 03
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 005
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000030C
+ Huffman table length = 24
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (003 total): 00 01 03
+ Codes of length 03 bits (001 total): 02
+ Codes of length 04 bits (001 total): 04
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 005
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000326
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000935
+ Huffman table length = 43
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 02 03
+ Codes of length 03 bits (002 total): 01 04
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (002 total): 11 12
+ Codes of length 06 bits (006 total): 05 10 13 20 31 32
+ Codes of length 07 bits (002 total): 21 33
+ Codes of length 08 bits (002 total): 14 22
+ Codes of length 09 bits (002 total): 34 41
+ Codes of length 10 bits (003 total): 15 23 30
+ Codes of length 11 bits (001 total): 24
+ Codes of length 12 bits (001 total): 42
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 024
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000962
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000012EE
+ Huffman table length = 39
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 10
+ Codes of length 05 bits (004 total): 03 20 21 31
+ Codes of length 06 bits (001 total): 12
+ Codes of length 07 bits (004 total): 13 30 41 51
+ Codes of length 08 bits (001 total): 22
+ Codes of length 09 bits (005 total): 32 40 42 50 61
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 020
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001317
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000142A
+ Huffman table length = 36
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (001 total): 10
+ Codes of length 05 bits (004 total): 03 20 21 31
+ Codes of length 06 bits (002 total): 12 30
+ Codes of length 07 bits (002 total): 13 41
+ Codes of length 08 bits (003 total): 22 40 51
+ Codes of length 09 bits (001 total): 50
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 017
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001450
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x0000155A
+ Huffman table length = 51
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (002 total): 00 02
+ Codes of length 04 bits (003 total): 03 10 11
+ Codes of length 05 bits (006 total): 12 20 21 31 41 51
+ Codes of length 06 bits (005 total): 22 32 61 71 81
+ Codes of length 07 bits (002 total): 13 30
+ Codes of length 08 bits (005 total): 04 33 42 72 91
+ Codes of length 09 bits (004 total): 14 52 62 A1
+ Codes of length 10 bits (003 total): 23 82 B1
+ Codes of length 11 bits (001 total): 43
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 032
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000158F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00001D3E
+ Huffman table length = 40
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 11 21
+ Codes of length 04 bits (001 total): 31
+ Codes of length 05 bits (003 total): 10 41 51
+ Codes of length 06 bits (004 total): 20 61 71 A1
+ Codes of length 07 bits (002 total): 81 91
+ Codes of length 08 bits (002 total): B1 F0
+ Codes of length 09 bits (003 total): 30 C1 D1
+ Codes of length 10 bits (001 total): E1
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 021
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00001D68
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000028B9
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Component[2]: selector=0x01, table=1(DC),1(AC)
+ Component[3]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000029E4
+ Huffman table length = 32
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (000 total):
+ Codes of length 05 bits (003 total): 10 21 31
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (003 total): 20 41 51
+ Codes of length 08 bits (001 total): 30
+ Codes of length 09 bits (001 total): 61
+ Codes of length 10 bits (001 total): 40
+ Codes of length 11 bits (001 total): 50
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 013
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002A06
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002B55
+ Huffman table length = 32
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (003 total): 10 21 31
+ Codes of length 05 bits (001 total): 20
+ Codes of length 06 bits (001 total): 41
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (003 total): 30 51 61
+ Codes of length 09 bits (001 total): 71
+ Codes of length 10 bits (001 total): 40
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 013
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002B77
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=1(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002CEA
+ Huffman table length = 40
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (003 total): 31 41 51
+ Codes of length 06 bits (003 total): 10 61 71
+ Codes of length 07 bits (004 total): 81 91 A1 B1
+ Codes of length 08 bits (003 total): 20 C1 F0
+ Codes of length 09 bits (001 total): D1
+ Codes of length 10 bits (001 total): E1
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (001 total): 30
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 021
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00002D14
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x00, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x00003DA9
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0182408A81A4ABF04D4A34A8A5E98C58
+ Signature (Rotated): 012D821C6AB210E2A753BE053B8F55D0
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[SONY ] [CYBERSHOT U ] [ ] Yes
+ SW :[Adobe Photoshop 7.0 ] [Save As 07 ]
+ SW :[Apple Quicktime ] [0466-0467 ]
+ SW :[Digital Photo Professiona] [05 ]
+ SW :[IJG Library ] [075 ]
+ SW :[MS Paint ] [ ]
+ SW :[MS Visio ] [ ]
+ SW :[ZoomBrowser EX ] [low ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [075 ]
+ SW :[IrfanView ] [075 ]
+ SW :[idImager ] [075 ]
+ SW :[FastStone Image Viewer ] [075 ]
+ SW :[NeatImage ] [075 ]
+ SW :[Paint.NET ] [075 ]
+ SW :[Photomatix ] [075 ]
+ SW :[XnView ] [075 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+
diff --git a/tests/Images/Input/Jpg/progressive/JpegSnoopReports/progress.jpg.txt b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/progress.jpg.txt
new file mode 100644
index 000000000..f38a11532
--- /dev/null
+++ b/tests/Images/Input/Jpg/progressive/JpegSnoopReports/progress.jpg.txt
@@ -0,0 +1,468 @@
+
+JPEGsnoop 1.8.0 by Calvin Hass
+ http://www.impulseadventure.com/photo/
+ -------------------------------------
+
+ Filename: [.\progress.jpg]
+ Filesize: [44884] Bytes
+
+Start Offset: 0x00000000
+*** Marker: SOI (xFFD8) ***
+ OFFSET: 0x00000000
+
+*** Marker: APP0 (xFFE0) ***
+ OFFSET: 0x00000002
+ Length = 16
+ Identifier = [JFIF]
+ version = [1.1]
+ density = 1 x 1 (aspect ratio)
+ thumbnail = 0 x 0
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000014
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=0 (Luminance)
+ DQT, Row #0: 5 3 3 5 7 12 15 18
+ DQT, Row #1: 4 4 4 6 8 17 18 17
+ DQT, Row #2: 4 4 5 7 12 17 21 17
+ DQT, Row #3: 4 5 7 9 15 26 24 19
+ DQT, Row #4: 5 7 11 17 20 33 31 23
+ DQT, Row #5: 7 11 17 19 24 31 34 28
+ DQT, Row #6: 15 19 23 26 31 36 36 30
+ DQT, Row #7: 22 28 29 29 34 30 31 30
+ Approx quality factor = 84.93 (scaling=30.13 variance=1.05)
+
+*** Marker: DQT (xFFDB) ***
+ Define a Quantization Table.
+ OFFSET: 0x00000059
+ Table length = 67
+ ----
+ Precision=8 bits
+ Destination ID=1 (Chrominance)
+ DQT, Row #0: 5 5 7 14 30 30 30 30
+ DQT, Row #1: 5 6 8 20 30 30 30 30
+ DQT, Row #2: 7 8 17 30 30 30 30 30
+ DQT, Row #3: 14 20 30 30 30 30 30 30
+ DQT, Row #4: 30 30 30 30 30 30 30 30
+ DQT, Row #5: 30 30 30 30 30 30 30 30
+ DQT, Row #6: 30 30 30 30 30 30 30 30
+ DQT, Row #7: 30 30 30 30 30 30 30 30
+ Approx quality factor = 84.93 (scaling=30.15 variance=0.29)
+
+*** Marker: SOF2 (Progressive DCT, Huffman) (xFFC2) ***
+ OFFSET: 0x0000009E
+ Frame header length = 17
+ Precision = 8
+ Number of Lines = 486
+ Samples per Line = 341
+ Image Size = 341 x 486
+ Raw Image Orientation = Portrait
+ Number of Img components = 3
+ Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
+ Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
+ Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000B1
+ Huffman table length = 28
+ ----
+ Destination ID = 0
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 04
+ Codes of length 03 bits (005 total): 01 02 03 05 06
+ Codes of length 04 bits (001 total): 00
+ Codes of length 05 bits (001 total): 07
+ Codes of length 06 bits (001 total): 08
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 009
+
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000000CF
+ Huffman table length = 26
+ ----
+ Destination ID = 1
+ Class = 0 (DC / Lossless Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 02 03
+ Codes of length 03 bits (003 total): 00 01 04
+ Codes of length 04 bits (001 total): 05
+ Codes of length 05 bits (001 total): 06
+ Codes of length 06 bits (000 total):
+ Codes of length 07 bits (000 total):
+ Codes of length 08 bits (000 total):
+ Codes of length 09 bits (000 total):
+ Codes of length 10 bits (000 total):
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 007
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000000EB
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=1(DC),0(AC)
+ Component[3]: selector=0x03, table=1(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00000CCC
+ Huffman table length = 45
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 01 02
+ Codes of length 03 bits (002 total): 00 03
+ Codes of length 04 bits (002 total): 04 11
+ Codes of length 05 bits (001 total): 12
+ Codes of length 06 bits (003 total): 05 13 21
+ Codes of length 07 bits (003 total): 10 22 31
+ Codes of length 08 bits (004 total): 14 20 32 41
+ Codes of length 09 bits (002 total): 06 23
+ Codes of length 10 bits (002 total): 30 33
+ Codes of length 11 bits (003 total): 15 24 42
+ Codes of length 12 bits (001 total): 34
+ Codes of length 13 bits (001 total): 43
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 026
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00000CFB
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 5
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000020DC
+ Huffman table length = 46
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 03
+ Codes of length 04 bits (001 total): 11
+ Codes of length 05 bits (004 total): 04 10 21 31
+ Codes of length 06 bits (001 total): 12
+ Codes of length 07 bits (003 total): 13 20 41
+ Codes of length 08 bits (003 total): 05 22 51
+ Codes of length 09 bits (003 total): 23 32 61
+ Codes of length 10 bits (005 total): 14 30 33 42 71
+ Codes of length 11 bits (000 total):
+ Codes of length 12 bits (003 total): 15 52 91
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 027
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000210C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00002604
+ Huffman table length = 41
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (002 total): 00 01
+ Codes of length 03 bits (002 total): 02 11
+ Codes of length 04 bits (002 total): 03 10
+ Codes of length 05 bits (002 total): 21 31
+ Codes of length 06 bits (002 total): 12 20
+ Codes of length 07 bits (001 total): 13
+ Codes of length 08 bits (004 total): 04 22 41 61
+ Codes of length 09 bits (002 total): 42 51
+ Codes of length 10 bits (002 total): 14 32
+ Codes of length 11 bits (003 total): 33 71 F0
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 022
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000262F
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x01
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000029A7
+ Huffman table length = 61
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (000 total):
+ Codes of length 02 bits (001 total): 01
+ Codes of length 03 bits (003 total): 00 02 11
+ Codes of length 04 bits (003 total): 03 12 21
+ Codes of length 05 bits (001 total): 31
+ Codes of length 06 bits (005 total): 10 22 41 51 61
+ Codes of length 07 bits (006 total): 04 13 20 32 71 81
+ Codes of length 08 bits (005 total): 23 30 42 52 91
+ Codes of length 09 bits (002 total): A1 B1
+ Codes of length 10 bits (004 total): 62 72 C1 F0
+ Codes of length 11 bits (006 total): 14 33 40 82 D1 E1
+ Codes of length 12 bits (001 total): 24
+ Codes of length 13 bits (005 total): 05 43 53 73 F1
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 042
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000029E6
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 6 .. 63
+ Successive approximation = 0x02
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00003FF3
+ Huffman table length = 39
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (002 total): 21 31
+ Codes of length 05 bits (002 total): 41 51
+ Codes of length 06 bits (001 total): 61
+ Codes of length 07 bits (003 total): 71 81 91
+ Codes of length 08 bits (004 total): 10 A1 B1 C1
+ Codes of length 09 bits (003 total): D1 E1 F0
+ Codes of length 10 bits (001 total): 20
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 020
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x0000401C
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x21
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00006299
+ Scan header length = 12
+ Number of img components = 3
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Component[2]: selector=0x02, table=0(DC),0(AC)
+ Component[3]: selector=0x03, table=0(DC),0(AC)
+ Spectral selection = 0 .. 0
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x000064A9
+ Huffman table length = 39
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (000 total):
+ Codes of length 03 bits (002 total): 00 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (003 total): 31 41 51
+ Codes of length 06 bits (003 total): 10 61 71
+ Codes of length 07 bits (004 total): 81 91 D1 F0
+ Codes of length 08 bits (003 total): A1 B1 E1
+ Codes of length 09 bits (001 total): C1
+ Codes of length 10 bits (001 total): F1
+ Codes of length 11 bits (001 total): 20
+ Codes of length 12 bits (000 total):
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 020
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x000064D2
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x03, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00006ACB
+ Huffman table length = 38
+ ----
+ Destination ID = 1
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 00
+ Codes of length 03 bits (001 total): 11
+ Codes of length 04 bits (001 total): 21
+ Codes of length 05 bits (000 total):
+ Codes of length 06 bits (002 total): 31 41
+ Codes of length 07 bits (002 total): 10 51
+ Codes of length 08 bits (001 total): 61
+ Codes of length 09 bits (003 total): 91 D1 F0
+ Codes of length 10 bits (005 total): 71 81 A1 B1 C1
+ Codes of length 11 bits (001 total): 20
+ Codes of length 12 bits (001 total): E1
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 019
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00006AF3
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x02, table=0(DC),1(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: DHT (Define Huffman Table) (xFFC4) ***
+ OFFSET: 0x00006F95
+ Huffman table length = 38
+ ----
+ Destination ID = 0
+ Class = 1 (AC Table)
+ Codes of length 01 bits (001 total): 01
+ Codes of length 02 bits (001 total): 11
+ Codes of length 03 bits (000 total):
+ Codes of length 04 bits (002 total): 00 21
+ Codes of length 05 bits (002 total): 31 41
+ Codes of length 06 bits (002 total): 51 61
+ Codes of length 07 bits (002 total): 71 81
+ Codes of length 08 bits (002 total): 91 A1
+ Codes of length 09 bits (002 total): B1 F0
+ Codes of length 10 bits (003 total): C1 D1 E1
+ Codes of length 11 bits (001 total): F1
+ Codes of length 12 bits (001 total): 10
+ Codes of length 13 bits (000 total):
+ Codes of length 14 bits (000 total):
+ Codes of length 15 bits (000 total):
+ Codes of length 16 bits (000 total):
+ Total number of codes: 019
+
+
+*** Marker: SOS (Start of Scan) (xFFDA) ***
+ OFFSET: 0x00006FBD
+ Scan header length = 8
+ Number of img components = 1
+ Component[1]: selector=0x01, table=0(DC),0(AC)
+ Spectral selection = 1 .. 63
+ Successive approximation = 0x10
+
+ NOTE: Scan parsing doesn't support this SOF mode.
+
+*** Marker: EOI (End of Image) (xFFD9) ***
+ OFFSET: 0x0000AF52
+
+
+*** Searching Compression Signatures ***
+
+ Signature: 0155D875C95B74D0F3C5835A62516F48
+ Signature (Rotated): 01D38A25358EB7649A254E19F1D46600
+ File Offset: 0 bytes
+ Chroma subsampling: 2x2
+ EXIF Make/Model: NONE
+ EXIF Makernotes: NONE
+ EXIF Software: NONE
+
+ Searching Compression Signatures: (3347 built-in, 0 user(*) )
+
+ EXIF.Make / Software EXIF.Model Quality Subsamp Match?
+ ------------------------- ----------------------------------- ---------------- --------------
+ CAM:[NIKON ] [E2500 ] [FINE ] No
+ CAM:[Nokia ] [N73 ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C2000Z ] [ ] No
+ CAM:[OLYMPUS OPTICAL CO.,LTD ] [C3040Z ] [ ] No
+ CAM:[PENTAX ] [PENTAX Optio 550 ] [ ] No
+ CAM:[Research In Motion ] [BlackBerry 8100 ] [ ] No
+ CAM:[SEIKO EPSON CORP. ] [PhotoPC 3000Z ] [ ] No
+ SW :[IJG Library ] [085 ]
+ SW :[Picasa ] [085 (Normal) ]
+ SW :[ZoomBrowser EX ] [medium ]
+
+ The following IJG-based editors also match this signature:
+ SW :[GIMP ] [085 ]
+ SW :[IrfanView ] [085 ]
+ SW :[idImager ] [085 ]
+ SW :[FastStone Image Viewer ] [085 ]
+ SW :[NeatImage ] [085 ]
+ SW :[Paint.NET ] [085 ]
+ SW :[Photomatix ] [085 ]
+ SW :[XnView ] [085 ]
+
+ Based on the analysis of compression characteristics and EXIF metadata:
+
+ ASSESSMENT: Class 1 - Image is processed/edited
+
+ This may be a new software editor for the database.
+ If this file is processed, and editor doesn't appear in list above,
+ PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]
+