From 6a62905846efad45291960be48aad4b87f63d20d Mon Sep 17 00:00:00 2001 From: Raphael Quinet Date: Mon, 22 Oct 2007 23:48:19 +0000 Subject: [PATCH] Added hash value for all known quantization tables in order to detect 2007-10-23 Raphael Quinet * plug-ins/jpeg/jpegqual.c: Added hash value for all known quantization tables in order to detect transposed tables from rotated images or bad matches coming from different tables with the same sum. svn path=/trunk/; revision=23920 --- ChangeLog | 7 + plug-ins/jpeg/jpegqual.c | 642 ++++++++++++++++++++------------------- 2 files changed, 344 insertions(+), 305 deletions(-) diff --git a/ChangeLog b/ChangeLog index d1d291432a..9c6f9e9ed7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-10-23 Raphaƫl Quinet + + * plug-ins/jpeg/jpegqual.c: Added hash value for all known + quantization tables in order to detect transposed tables from + rotated images or bad matches coming from different tables with + the same sum. + 2007-10-22 Sven Neumann * plug-ins/common/depthmerge.c (util_convertColorspace): fixed diff --git a/plug-ins/jpeg/jpegqual.c b/plug-ins/jpeg/jpegqual.c index 3be5d85855..e0d690ef9e 100644 --- a/plug-ins/jpeg/jpegqual.c +++ b/plug-ins/jpeg/jpegqual.c @@ -76,7 +76,7 @@ static GOptionEntry option_entries[] = /* information about known JPEG quantization tables */ typedef struct { - /* const guint hash; */ /* hash of luminance/chrominance tables */ + const guint hash; /* hash of luminance/chrominance tables */ const gint lum_sum; /* sum of luminance table divisors */ const gint chrom_sum; /* sum of chrominance table divisors */ const gint subsmp_h; /* horizontal subsampling (1st component) */ @@ -89,301 +89,301 @@ typedef struct static const QuantInfo quant_info[] = { - { 64, 64, 0, 0, 2, "IJG JPEG Library", "quality 100", 100 }, - { 86, 115, 0, 0, 2, "IJG JPEG Library", "quality 99", 99 }, - { 151, 224, 0, 0, 2, "IJG JPEG Library", "quality 98", 98 }, - { 221, 333, 0, 0, 2, "IJG JPEG Library", "quality 97", 97 }, - { 292, 443, 0, 0, 2, "IJG JPEG Library", "quality 96", 96 }, - { 369, 558, 0, 0, 2, "IJG JPEG Library", "quality 95", 95 }, - { 441, 668, 0, 0, 2, "IJG JPEG Library", "quality 94", 94 }, - { 518, 779, 0, 0, 2, "IJG JPEG Library", "quality 93", 93 }, - { 592, 891, 0, 0, 2, "IJG JPEG Library", "quality 92", 92 }, - { 667, 999, 0, 0, 2, "IJG JPEG Library", "quality 91", 91 }, - { 736, 1110, 0, 0, 2, "IJG JPEG Library", "quality 90", 90 }, - { 814, 1223, 0, 0, 2, "IJG JPEG Library", "quality 89", 89 }, - { 884, 1332, 0, 0, 2, "IJG JPEG Library", "quality 88", 88 }, - { 961, 1444, 0, 0, 2, "IJG JPEG Library", "quality 87", 87 }, - { 1031, 1555, 0, 0, 2, "IJG JPEG Library", "quality 86", 86 }, - { 1109, 1666, 0, 0, 2, "IJG JPEG Library", "quality 85", 85 }, - { 1179, 1778, 0, 0, 2, "IJG JPEG Library", "quality 84", 84 }, - { 1251, 1888, 0, 0, 2, "IJG JPEG Library", "quality 83", 83 }, - { 1326, 2000, 0, 0, 2, "IJG JPEG Library", "quality 82", 82 }, - { 1398, 2111, 0, 0, 2, "IJG JPEG Library", "quality 81", 81 }, - { 1477, 2221, 0, 0, 2, "IJG JPEG Library", "quality 80", 80 }, - { 1552, 2336, 0, 0, 2, "IJG JPEG Library", "quality 79", 79 }, - { 1620, 2445, 0, 0, 2, "IJG JPEG Library", "quality 78", 78 }, - { 1692, 2556, 0, 0, 2, "IJG JPEG Library", "quality 77", 77 }, - { 1773, 2669, 0, 0, 2, "IJG JPEG Library", "quality 76", 76 }, - { 1858, 2780, 0, 0, 2, "IJG JPEG Library", "quality 75", 75 }, - { 1915, 2836, 0, 0, 2, "IJG JPEG Library", "quality 74", 74 }, - { 1996, 2949, 0, 0, 2, "IJG JPEG Library", "quality 73", 73 }, - { 2068, 3060, 0, 0, 2, "IJG JPEG Library", "quality 72", 72 }, - { 2136, 3169, 0, 0, 2, "IJG JPEG Library", "quality 71", 71 }, - { 2211, 3284, 0, 0, 2, "IJG JPEG Library", "quality 70", 70 }, - { 2290, 3394, 0, 0, 2, "IJG JPEG Library", "quality 69", 69 }, - { 2362, 3505, 0, 0, 2, "IJG JPEG Library", "quality 68", 68 }, - { 2437, 3617, 0, 0, 2, "IJG JPEG Library", "quality 67", 67 }, - { 2509, 3727, 0, 0, 2, "IJG JPEG Library", "quality 66", 66 }, - { 2583, 3839, 0, 0, 2, "IJG JPEG Library", "quality 65", 65 }, - { 2657, 3950, 0, 0, 2, "IJG JPEG Library", "quality 64", 64 }, - { 2727, 4061, 0, 0, 2, "IJG JPEG Library", "quality 63", 63 }, - { 2804, 4173, 0, 0, 2, "IJG JPEG Library", "quality 62", 62 }, - { 2874, 4282, 0, 0, 2, "IJG JPEG Library", "quality 61", 61 }, - { 2952, 4395, 0, 0, 2, "IJG JPEG Library", "quality 60", 60 }, - { 3021, 4506, 0, 0, 2, "IJG JPEG Library", "quality 59", 59 }, - { 3096, 4614, 0, 0, 2, "IJG JPEG Library", "quality 58", 58 }, - { 3170, 4726, 0, 0, 2, "IJG JPEG Library", "quality 57", 57 }, - { 3247, 4837, 0, 0, 2, "IJG JPEG Library", "quality 56", 56 }, - { 3323, 4947, 0, 0, 2, "IJG JPEG Library", "quality 55", 55 }, - { 3396, 5062, 0, 0, 2, "IJG JPEG Library", "quality 54", 54 }, - { 3467, 5172, 0, 0, 2, "IJG JPEG Library", "quality 53", 53 }, - { 3541, 5281, 0, 0, 2, "IJG JPEG Library", "quality 52", 52 }, - { 3621, 5396, 0, 0, 2, "IJG JPEG Library", "quality 51", 51 }, - { 3688, 5505, 0, 0, 2, "IJG JPEG Library", "quality 50", 50 }, - { 3755, 5614, 0, 0, 2, "IJG JPEG Library", "quality 49", 49 }, - { 3835, 5729, 0, 0, 2, "IJG JPEG Library", "quality 48", 48 }, - { 3909, 5838, 0, 0, 2, "IJG JPEG Library", "quality 47", 47 }, - { 3980, 5948, 0, 0, 2, "IJG JPEG Library", "quality 46", 46 }, - { 4092, 6116, 0, 0, 2, "IJG JPEG Library", "quality 45", 45 }, - { 4166, 6226, 0, 0, 2, "IJG JPEG Library", "quality 44", 44 }, - { 4280, 6396, 0, 0, 2, "IJG JPEG Library", "quality 43", 43 }, - { 4393, 6562, 0, 0, 2, "IJG JPEG Library", "quality 42", 42 }, - { 4463, 6672, 0, 0, 2, "IJG JPEG Library", "quality 41", 41 }, - { 4616, 6897, 0, 0, 2, "IJG JPEG Library", "quality 40", 40 }, - { 4719, 7060, 0, 0, 2, "IJG JPEG Library", "quality 39", 39 }, - { 4829, 7227, 0, 0, 2, "IJG JPEG Library", "quality 38", 38 }, - { 4976, 7447, 0, 0, 2, "IJG JPEG Library", "quality 37", 37 }, - { 5086, 7616, 0, 0, 2, "IJG JPEG Library", "quality 36", 36 }, - { 5240, 7841, 0, 0, 2, "IJG JPEG Library", "quality 35", 35 }, - { 5421, 8114, 0, 0, 2, "IJG JPEG Library", "quality 34", 34 }, - { 5571, 8288, 0, 0, 2, "IJG JPEG Library", "quality 33", 33 }, - { 5756, 8565, 0, 0, 2, "IJG JPEG Library", "quality 32", 32 }, - { 5939, 8844, 0, 0, 2, "IJG JPEG Library", "quality 31", 31 }, - { 6125, 9122, 0, 0, 2, "IJG JPEG Library", "quality 30", 30 }, - { 6345, 9455, 0, 0, 2, "IJG JPEG Library", "quality 29", 29 }, - { 6562, 9787, 0, 0, 2, "IJG JPEG Library", "quality 28", 28 }, - { 6823, 10175, 0, 0, 2, "IJG JPEG Library", "quality 27", 27 }, - { 7084, 10567, 0, 0, 2, "IJG JPEG Library", "quality 26", 26 }, - { 7376, 11010, 0, 0, 2, "IJG JPEG Library", "quality 25", 25 }, - { 7668, 11453, 0, 0, 2, "IJG JPEG Library", "quality 24", 24 }, - { 7995, 11954, 0, 0, 2, "IJG JPEG Library", "quality 23", 23 }, - { 8331, 12511, 0, 0, 2, "IJG JPEG Library", "quality 22", 22 }, - { 8680, 13121, 0, 0, 2, "IJG JPEG Library", "quality 21", 21 }, - { 9056, 13790, 0, 0, 2, "IJG JPEG Library", "quality 20", 20 }, - { 9368, 14204, 0, 0, 2, "IJG JPEG Library", "quality 19", 19 }, - { 9679, 14267, 0, 0, 2, "IJG JPEG Library", "quality 18", 18 }, - { 10027, 14346, 0, 0, 2, "IJG JPEG Library", "quality 17", 17 }, - { 10360, 14429, 0, 0, 2, "IJG JPEG Library", "quality 16", 16 }, - { 10714, 14526, 0, 0, 2, "IJG JPEG Library", "quality 15", 15 }, - { 11081, 14635, 0, 0, 2, "IJG JPEG Library", "quality 14", 14 }, - { 11456, 14754, 0, 0, 2, "IJG JPEG Library", "quality 13", 13 }, - { 11861, 14864, 0, 0, 2, "IJG JPEG Library", "quality 12", 12 }, - { 12240, 14985, 0, 0, 2, "IJG JPEG Library", "quality 11", 11 }, - { 12560, 15110, 0, 0, 2, "IJG JPEG Library", "quality 10", 10 }, - { 12859, 15245, 0, 0, 2, "IJG JPEG Library", "quality 9", 9 }, - { 13230, 15369, 0, 0, 2, "IJG JPEG Library", "quality 8", 8 }, - { 13623, 15523, 0, 0, 2, "IJG JPEG Library", "quality 7", 7 }, - { 14073, 15731, 0, 0, 2, "IJG JPEG Library", "quality 6", 6 }, - { 14655, 16010, 0, 0, 2, "IJG JPEG Library", "quality 5", 5 }, - { 15277, 16218, 0, 0, 2, "IJG JPEG Library", "quality 4", 4 }, - { 15946, 16320, 0, 0, 2, "IJG JPEG Library", "quality 3", 3 }, - { 16315, 16320, 0, 0, 2, "IJG JPEG Library", "quality 2", 2 }, - { 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 1", 1 }, - { 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 0", 1 }, - { 8008, 11954, 0, 0, 2, "IJG JPEG Library", "not baseline 23", -22 }, - { 8370, 12511, 0, 0, 2, "IJG JPEG Library", "not baseline 22", -21 }, - { 8774, 13121, 0, 0, 2, "IJG JPEG Library", "not baseline 21", -20 }, - { 9234, 13790, 0, 0, 2, "IJG JPEG Library", "not baseline 20", -19 }, - { 9700, 14459, 0, 0, 2, "IJG JPEG Library", "not baseline 19", -17 }, - { 10209, 15236, 0, 0, 2, "IJG JPEG Library", "not baseline 18", -14 }, - { 10843, 16182, 0, 0, 2, "IJG JPEG Library", "not baseline 17", -11 }, - { 11505, 17183, 0, 0, 2, "IJG JPEG Library", "not baseline 16", -7 }, - { 12279, 18351, 0, 0, 2, "IJG JPEG Library", "not baseline 15", -5 }, - { 13166, 19633, 0, 0, 2, "IJG JPEG Library", "not baseline 14", 0 }, - { 14160, 21129, 0, 0, 2, "IJG JPEG Library", "not baseline 13", 0 }, - { 15344, 22911, 0, 0, 2, "IJG JPEG Library", "not baseline 12", 0 }, - { 16748, 24969, 0, 0, 2, "IJG JPEG Library", "not baseline 11", 0 }, - { 18440, 27525, 0, 0, 2, "IJG JPEG Library", "not baseline 10", 0 }, - { 20471, 30529, 0, 0, 2, "IJG JPEG Library", "not baseline 9", 0 }, - { 23056, 34422, 0, 0, 2, "IJG JPEG Library", "not baseline 8", 0 }, - { 26334, 39314, 0, 0, 2, "IJG JPEG Library", "not baseline 7", 0 }, - { 30719, 45876, 0, 0, 2, "IJG JPEG Library", "not baseline 6", 0 }, - { 36880, 55050, 0, 0, 2, "IJG JPEG Library", "not baseline 5", 0 }, - { 46114, 68840, 0, 0, 2, "IJG JPEG Library", "not baseline 4", 0 }, - { 61445, 91697, 0, 0, 2, "IJG JPEG Library", "not baseline 3", 0 }, - { 92200, 137625, 0, 0, 2, "IJG JPEG Library", "not baseline 2", 0 }, - { 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 1", 0 }, - { 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 0", 0 }, + { 0x0a82648b, 64, 64, 0, 0, 2, "IJG JPEG Library", "quality 100", 100 }, + { 0x4d981764, 86, 115, 0, 0, 2, "IJG JPEG Library", "quality 99", 99 }, + { 0x62b71702, 151, 224, 0, 0, 2, "IJG JPEG Library", "quality 98", 98 }, + { 0x29e095c5, 221, 333, 0, 0, 2, "IJG JPEG Library", "quality 97", 97 }, + { 0xb62c754a, 292, 443, 0, 0, 2, "IJG JPEG Library", "quality 96", 96 }, + { 0x8e55c78a, 369, 558, 0, 0, 2, "IJG JPEG Library", "quality 95", 95 }, + { 0x0664d770, 441, 668, 0, 0, 2, "IJG JPEG Library", "quality 94", 94 }, + { 0x59e5c5bc, 518, 779, 0, 0, 2, "IJG JPEG Library", "quality 93", 93 }, + { 0xd6f26606, 592, 891, 0, 0, 2, "IJG JPEG Library", "quality 92", 92 }, + { 0x8aa986ad, 667, 999, 0, 0, 2, "IJG JPEG Library", "quality 91", 91 }, + { 0x17816eb1, 736, 1110, 0, 0, 2, "IJG JPEG Library", "quality 90", 90 }, + { 0x75de9350, 814, 1223, 0, 0, 2, "IJG JPEG Library", "quality 89", 89 }, + { 0x88fdf223, 884, 1332, 0, 0, 2, "IJG JPEG Library", "quality 88", 88 }, + { 0xf40a6a50, 961, 1444, 0, 0, 2, "IJG JPEG Library", "quality 87", 87 }, + { 0xe9f2c235, 1031, 1555, 0, 0, 2, "IJG JPEG Library", "quality 86", 86 }, + { 0x82683892, 1109, 1666, 0, 0, 2, "IJG JPEG Library", "quality 85", 85 }, + { 0xb1aecce8, 1179, 1778, 0, 0, 2, "IJG JPEG Library", "quality 84", 84 }, + { 0x83375efe, 1251, 1888, 0, 0, 2, "IJG JPEG Library", "quality 83", 83 }, + { 0x1e99f479, 1326, 2000, 0, 0, 2, "IJG JPEG Library", "quality 82", 82 }, + { 0x1a02d360, 1398, 2111, 0, 0, 2, "IJG JPEG Library", "quality 81", 81 }, + { 0x96129a0d, 1477, 2221, 0, 0, 2, "IJG JPEG Library", "quality 80", 80 }, + { 0x64d4144b, 1552, 2336, 0, 0, 2, "IJG JPEG Library", "quality 79", 79 }, + { 0x48a344ac, 1620, 2445, 0, 0, 2, "IJG JPEG Library", "quality 78", 78 }, + { 0x16e820e3, 1692, 2556, 0, 0, 2, "IJG JPEG Library", "quality 77", 77 }, + { 0x246b2e95, 1773, 2669, 0, 0, 2, "IJG JPEG Library", "quality 76", 76 }, + { 0x10b035e9, 1858, 2780, 0, 0, 2, "IJG JPEG Library", "quality 75", 75 }, + { 0xd5c653da, 1915, 2836, 0, 0, 2, "IJG JPEG Library", "quality 74", 74 }, + { 0xe349618c, 1996, 2949, 0, 0, 2, "IJG JPEG Library", "quality 73", 73 }, + { 0xb18e3dc3, 2068, 3060, 0, 0, 2, "IJG JPEG Library", "quality 72", 72 }, + { 0x955d6e24, 2136, 3169, 0, 0, 2, "IJG JPEG Library", "quality 71", 71 }, + { 0x641ee862, 2211, 3284, 0, 0, 2, "IJG JPEG Library", "quality 70", 70 }, + { 0xe02eaf0f, 2290, 3394, 0, 0, 2, "IJG JPEG Library", "quality 69", 69 }, + { 0xdb978df6, 2362, 3505, 0, 0, 2, "IJG JPEG Library", "quality 68", 68 }, + { 0x76fa2371, 2437, 3617, 0, 0, 2, "IJG JPEG Library", "quality 67", 67 }, + { 0x4882b587, 2509, 3727, 0, 0, 2, "IJG JPEG Library", "quality 66", 66 }, + { 0x25556ae1, 2583, 3839, 0, 0, 2, "IJG JPEG Library", "quality 65", 65 }, + { 0x103ec03a, 2657, 3950, 0, 0, 2, "IJG JPEG Library", "quality 64", 64 }, + { 0x0627181f, 2727, 4061, 0, 0, 2, "IJG JPEG Library", "quality 63", 63 }, + { 0x7133904c, 2804, 4173, 0, 0, 2, "IJG JPEG Library", "quality 62", 62 }, + { 0x8452ef1f, 2874, 4282, 0, 0, 2, "IJG JPEG Library", "quality 61", 61 }, + { 0xe2b013be, 2952, 4395, 0, 0, 2, "IJG JPEG Library", "quality 60", 60 }, + { 0x6f87fbc2, 3021, 4506, 0, 0, 2, "IJG JPEG Library", "quality 59", 59 }, + { 0x233f1c69, 3096, 4614, 0, 0, 2, "IJG JPEG Library", "quality 58", 58 }, + { 0xa04bbcb3, 3170, 4726, 0, 0, 2, "IJG JPEG Library", "quality 57", 57 }, + { 0xf3ccaaff, 3247, 4837, 0, 0, 2, "IJG JPEG Library", "quality 56", 56 }, + { 0x1967dbe9, 3323, 4947, 0, 0, 2, "IJG JPEG Library", "quality 55", 55 }, + { 0x44050d25, 3396, 5062, 0, 0, 2, "IJG JPEG Library", "quality 54", 54 }, + { 0xd050ecaa, 3467, 5172, 0, 0, 2, "IJG JPEG Library", "quality 53", 53 }, + { 0x9e99f8f1, 3541, 5281, 0, 0, 2, "IJG JPEG Library", "quality 52", 52 }, + { 0xdf2423f4, 3621, 5396, 0, 0, 2, "IJG JPEG Library", "quality 51", 51 }, + { 0xe0f48a64, 3688, 5505, 0, 0, 2, "IJG JPEG Library", "quality 50", 50 }, + { 0xe2c4f0d4, 3755, 5614, 0, 0, 2, "IJG JPEG Library", "quality 49", 49 }, + { 0x234f1bd7, 3835, 5729, 0, 0, 2, "IJG JPEG Library", "quality 48", 48 }, + { 0xf198281e, 3909, 5838, 0, 0, 2, "IJG JPEG Library", "quality 47", 47 }, + { 0x7de407a3, 3980, 5948, 0, 0, 2, "IJG JPEG Library", "quality 46", 46 }, + { 0xb3aa597b, 4092, 6116, 0, 0, 2, "IJG JPEG Library", "quality 45", 45 }, + { 0x32b48093, 4166, 6226, 0, 0, 2, "IJG JPEG Library", "quality 44", 44 }, + { 0x9ea9f85f, 4280, 6396, 0, 0, 2, "IJG JPEG Library", "quality 43", 43 }, + { 0x335d6006, 4393, 6562, 0, 0, 2, "IJG JPEG Library", "quality 42", 42 }, + { 0xa727ea4a, 4463, 6672, 0, 0, 2, "IJG JPEG Library", "quality 41", 41 }, + { 0x1889cfc4, 4616, 6897, 0, 0, 2, "IJG JPEG Library", "quality 40", 40 }, + { 0xb1aa548e, 4719, 7060, 0, 0, 2, "IJG JPEG Library", "quality 39", 39 }, + { 0x99bebdd3, 4829, 7227, 0, 0, 2, "IJG JPEG Library", "quality 38", 38 }, + { 0xf728d062, 4976, 7447, 0, 0, 2, "IJG JPEG Library", "quality 37", 37 }, + { 0xe1ba65b9, 5086, 7616, 0, 0, 2, "IJG JPEG Library", "quality 36", 36 }, + { 0x2c8ba6a4, 5240, 7841, 0, 0, 2, "IJG JPEG Library", "quality 35", 35 }, + { 0x03f7963a, 5421, 8114, 0, 0, 2, "IJG JPEG Library", "quality 34", 34 }, + { 0xa19bed1e, 5571, 8288, 0, 0, 2, "IJG JPEG Library", "quality 33", 33 }, + { 0x7945d01c, 5756, 8565, 0, 0, 2, "IJG JPEG Library", "quality 32", 32 }, + { 0xcc36df1a, 5939, 8844, 0, 0, 2, "IJG JPEG Library", "quality 31", 31 }, + { 0x3eb1b5ca, 6125, 9122, 0, 0, 2, "IJG JPEG Library", "quality 30", 30 }, + { 0xd7f65293, 6345, 9455, 0, 0, 2, "IJG JPEG Library", "quality 29", 29 }, + { 0x4c0a8178, 6562, 9787, 0, 0, 2, "IJG JPEG Library", "quality 28", 28 }, + { 0x8281d1a1, 6823, 10175, 0, 0, 2, "IJG JPEG Library", "quality 27", 27 }, + { 0x0bbc9f7e, 7084, 10567, 0, 0, 2, "IJG JPEG Library", "quality 26", 26 }, + { 0xa8ac1cbd, 7376, 11010, 0, 0, 2, "IJG JPEG Library", "quality 25", 25 }, + { 0x459b99fc, 7668, 11453, 0, 0, 2, "IJG JPEG Library", "quality 24", 24 }, + { 0xda09c178, 7995, 11954, 0, 0, 2, "IJG JPEG Library", "quality 23", 23 }, + { 0x1c651f15, 8331, 12511, 0, 0, 2, "IJG JPEG Library", "quality 22", 22 }, + { 0x59025244, 8680, 13121, 0, 0, 2, "IJG JPEG Library", "quality 21", 21 }, + { 0xa130f919, 9056, 13790, 0, 0, 2, "IJG JPEG Library", "quality 20", 20 }, + { 0x109756cf, 9368, 14204, 0, 0, 2, "IJG JPEG Library", "quality 19", 19 }, + { 0xe929cab5, 9679, 14267, 0, 0, 2, "IJG JPEG Library", "quality 18", 18 }, + { 0xcddca370, 10027, 14346, 0, 0, 2, "IJG JPEG Library", "quality 17", 17 }, + { 0xd5fc76c0, 10360, 14429, 0, 0, 2, "IJG JPEG Library", "quality 16", 16 }, + { 0x533a1a03, 10714, 14526, 0, 0, 2, "IJG JPEG Library", "quality 15", 15 }, + { 0x0d8adaff, 11081, 14635, 0, 0, 2, "IJG JPEG Library", "quality 14", 14 }, + { 0x0d2ee95d, 11456, 14754, 0, 0, 2, "IJG JPEG Library", "quality 13", 13 }, + { 0x3a1d59a0, 11861, 14864, 0, 0, 2, "IJG JPEG Library", "quality 12", 12 }, + { 0x66555d04, 12240, 14985, 0, 0, 2, "IJG JPEG Library", "quality 11", 11 }, + { 0x7fa051b1, 12560, 15110, 0, 0, 2, "IJG JPEG Library", "quality 10", 10 }, + { 0x7b668ca3, 12859, 15245, 0, 0, 2, "IJG JPEG Library", "quality 9", 9 }, + { 0xb44d7082, 13230, 15369, 0, 0, 2, "IJG JPEG Library", "quality 8", 8 }, + { 0xe838d325, 13623, 15523, 0, 0, 2, "IJG JPEG Library", "quality 7", 7 }, + { 0xb6f58977, 14073, 15731, 0, 0, 2, "IJG JPEG Library", "quality 6", 6 }, + { 0xfd3e9fc4, 14655, 16010, 0, 0, 2, "IJG JPEG Library", "quality 5", 5 }, + { 0x7782b922, 15277, 16218, 0, 0, 2, "IJG JPEG Library", "quality 4", 4 }, + { 0x5a03ac45, 15946, 16320, 0, 0, 2, "IJG JPEG Library", "quality 3", 3 }, + { 0xe0afaa36, 16315, 16320, 0, 0, 2, "IJG JPEG Library", "quality 2", 2 }, + { 0x6d640b8b, 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 1", 1 }, + { 0x6d640b8b, 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 0", 1 }, + { 0x4b1d5895, 8008, 11954, 0, 0, 2, "IJG JPEG Library", "not baseline 23", -22 }, + { 0x36c32c2c, 8370, 12511, 0, 0, 2, "IJG JPEG Library", "not baseline 22", -21 }, + { 0xa971f812, 8774, 13121, 0, 0, 2, "IJG JPEG Library", "not baseline 21", -20 }, + { 0xa01f5a9b, 9234, 13790, 0, 0, 2, "IJG JPEG Library", "not baseline 20", -19 }, + { 0x0e45ab9a, 9700, 14459, 0, 0, 2, "IJG JPEG Library", "not baseline 19", -17 }, + { 0x5e654320, 10209, 15236, 0, 0, 2, "IJG JPEG Library", "not baseline 18", -14 }, + { 0x5fc0115c, 10843, 16182, 0, 0, 2, "IJG JPEG Library", "not baseline 17", -11 }, + { 0x5d8b8e7b, 11505, 17183, 0, 0, 2, "IJG JPEG Library", "not baseline 16", -7 }, + { 0x63f8b8c1, 12279, 18351, 0, 0, 2, "IJG JPEG Library", "not baseline 15", -5 }, + { 0x675ecd7a, 13166, 19633, 0, 0, 2, "IJG JPEG Library", "not baseline 14", 0 }, + { 0x7a65d374, 14160, 21129, 0, 0, 2, "IJG JPEG Library", "not baseline 13", 0 }, + { 0xf5d0af6a, 15344, 22911, 0, 0, 2, "IJG JPEG Library", "not baseline 12", 0 }, + { 0x0227aaf0, 16748, 24969, 0, 0, 2, "IJG JPEG Library", "not baseline 11", 0 }, + { 0xffd2d3c8, 18440, 27525, 0, 0, 2, "IJG JPEG Library", "not baseline 10", 0 }, + { 0x27f48623, 20471, 30529, 0, 0, 2, "IJG JPEG Library", "not baseline 9", 0 }, + { 0xff1fab81, 23056, 34422, 0, 0, 2, "IJG JPEG Library", "not baseline 8", 0 }, + { 0xcfeac62b, 26334, 39314, 0, 0, 2, "IJG JPEG Library", "not baseline 7", 0 }, + { 0x4a8e947e, 30719, 45876, 0, 0, 2, "IJG JPEG Library", "not baseline 6", 0 }, + { 0xe668af85, 36880, 55050, 0, 0, 2, "IJG JPEG Library", "not baseline 5", 0 }, + { 0x6d4b1215, 46114, 68840, 0, 0, 2, "IJG JPEG Library", "not baseline 4", 0 }, + { 0xf2734901, 61445, 91697, 0, 0, 2, "IJG JPEG Library", "not baseline 3", 0 }, + { 0x9a2a42bc, 92200, 137625, 0, 0, 2, "IJG JPEG Library", "not baseline 2", 0 }, + { 0x1b178d6d, 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 1", 0 }, + { 0x1b178d6d, 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 0", 0 }, /* FIXME: the following entries are incomplete and need to be verified */ - { 319, 665, 2, 1, -2, "ACD ?", "?", -94 }, - { 436, 996, 2, 1, -2, "ACD ?", "?", -92 }, - { 664, 1499, 2, 1, -2, "ACD ?", "?", -88 }, - { 1590, 3556, 2, 2, -2, "ACD ?", "?", -71 }, - { 95, 166, 1, 1, 2, "Adobe Photoshop CS2", "quality 12", -98 }, - { 232, 443, 1, 1, 2, "Adobe Photoshop CS2", "quality 11", -96 }, - { 406, 722, 1, 1, 2, "Adobe Photoshop CS2", "quality 10", -93 }, - { 539, 801, 1, 1, 2, "Adobe Photoshop CS2", "quality 9", -92 }, - { 649, 853, 1, 1, 2, "Adobe Photoshop CS2", "quality 8", -91 }, - { 786, 926, 1, 1, 2, "Adobe Photoshop CS2", "quality 7", -90 }, - { 717, 782, 2, 2, 2, "Adobe Photoshop CS2", "quality 6", -91 }, - { 844, 849, 2, 2, 2, "Adobe Photoshop CS2", "quality 5", -90 }, - { 962, 892, 2, 2, 2, "Adobe Photoshop CS2", "quality 4", -89 }, - { 1068, 941, 2, 2, 2, "Adobe Photoshop CS2", "quality 3", -89 }, - { 1281, 998, 2, 2, 2, "Adobe Photoshop CS2", "quality 2", -87 }, - { 1484, 1083, 2, 2, 2, "Adobe Photoshop CS2", "quality 1", -86 }, - { 1582, 1108, 2, 2, 2, "Adobe Photoshop CS2", "quality 0", -85 }, - { 95, 168, 1, 1, 2, "Adobe Photoshop CS2", "save for web 100", -98 }, - { 234, 445, 1, 1, 2, "Adobe Photoshop CS2", "save for web 90", -96 }, - { 406, 724, 1, 1, 2, "Adobe Photoshop CS2", "save for web 80", -93 }, - { 646, 1149, 1, 1, 2, "Adobe Photoshop CS2", "save for web 70", -90 }, - { 974, 1769, 1, 1, 2, "Adobe Photoshop CS2", "save for web 60", -85 }, - { 1221, 1348, 2, 2, 2, "Adobe Photoshop CS2", "save for web 50", -86 }, - { 1821, 1997, 2, 2, 2, "Adobe Photoshop CS2", "save for web 40", -79 }, - { 2223, 2464, 2, 2, 2, "Adobe Photoshop CS2", "save for web 30", -74 }, - { 2575, 2903, 2, 2, 2, "Adobe Photoshop CS2", "save for web 20", -70 }, - { 3514, 3738, 2, 2, 2, "Adobe Photoshop CS2", "save for web 10", -60 }, - { 535, 750, 1, 1, 2, "Adobe Photoshop 7.0", "quality 10", -93 }, - { 109, 171, 1, 1, 2, "Adobe Photoshop CS", "quality 12", -98 }, - { 303, 466, 1, 1, 2, "Adobe Photoshop CS, Camera Raw 3", "quality 11", -95 }, - { 668, 830, 1, 1, 2, "Adobe Photoshop 7.0, CS", "quality 9", -91 }, - { 794, 895, 1, 1, 2, "Adobe Photoshop 7.0, CS", "quality 8", -90 }, - { 971, 950, 1, 1, 2, "Adobe Photoshop CS", "quality 7", -89 }, - { 884, 831, 2, 2, 2, "Adobe Photoshop CS", "quality 6", -90 }, - { 1032, 889, 2, 2, 2, "Adobe Photoshop CS", "quality 5", -89 }, - { 1126, 940, 2, 2, 2, "Adobe Photoshop CS", "quality 4", -88 }, - { 1216, 977, 2, 2, 2, "Adobe Photoshop CS", "quality 3", -88 }, - { 339, 670, 1, 1, 2, "Adobe Photoshop ?", "save for web 85", -94 }, - { 427, 613, 2, 2, 2, "Adobe Photoshop ?", "?", -94 }, - { 525, 941, 1, 1, 2, "Adobe Photoshop ?", "save for web 75", -92 }, - { 803, 1428, 1, 1, 2, "Adobe Photoshop ?", "save for web 65", -87 }, - { 1085, 1996, 1, 1, 2, "Adobe Photoshop ?", "save for web 55", -83 }, - { 1156, 2116, 1, 1, 2, "Adobe Photoshop ?", "save for web 52", -82 }, - { 1175, 2169, 1, 1, 2, "Adobe Photoshop ?", "save for web 51", -81 }, - { 2272, 2522, 2, 2, 2, "Adobe Photoshop ?", "save for web 29", -73 }, - { 2515, 2831, 2, 2, 2, "Adobe ImageReady", "save for web 22", -70 }, - { 3822, 3975, 2, 2, 2, "Adobe ImageReady", "save for web 6", -57 }, - { 4028, 4174, 2, 2, 2, "Adobe Photoshop ?", "save for web 3", -55 }, - { 513, 0, 1, 1, 1, "Adobe Photoshop ?", "?", -93 }, - { 255, 393, 2, 1, 2, "Apple Quicktime 7.1 or 7.2", "?", -96 }, - { 513, 775, 2, 2, 2, "Apple Quicktime 7.2", "?", -93 }, - { 543, 784, 2, 1, -2, "Apple Quicktime 7.1", "?", -92 }, - { 361, 506, 2, 1, 2, "Apple ?", "?", -95 }, - { 1511, 2229, 2, 2, 2, "Apple ?", "?", -79 }, - { 188, 276, 2, 1, -2, "Canon EOS 300D, 350D or 400D", "Fine", -97 }, - { 708, 1057, 2, 1, -2, "Canon EOS 10D", "Normal", -90 }, - { 533, 1325, 2, 1, -2, "Canon PowerShot A95, S1, S2, SD400 or SD630", "Fine", -89 }, - { 192, 556, 2, 1, -2, "Canon PowerShot S5 IS, A300, A430, S200, SD500, SD700, Ixus 700 or 800", "Superfine", -95 }, - { 533, 1325, 1, 2, -2, "Canon Digital Ixus 400", "Fine", -89 }, - { 288, 443, 2, 1, -3, "FujiFilm MX-2700", "?", -96 }, - { 389, 560, 2, 1, -3, "FujiFilm FinePix S700", "Fine", -94 }, - { 515, 774, 2, 1, -3, "FujiFilm FinePix 2600 Zoom", "Fine", -93 }, - { 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 }, - { 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 }, - { 1970, 1970, 2, 2, -3, "HP PhotoSmart C812", "?", -78 }, - { 369, 558, 2, 1, -3, "Kodak P880", "?", 95 }, - { 566, 583, 2, 2, -2, "Kodak V610", "Fine", -93 }, - { 736, 1110, 2, 2, -2, "Kodak DC240", "?", 90 }, - { 736, 1110, 1, 1, -2, "Kodak Imaging", "High (high res.)", 90 }, - { 736, 1110, 2, 1, -2, "Kodak Imaging", "High (medium res.)", 90 }, - { 736, 1110, 4, 1, -2, "Kodak Imaging", "High (low res.)", 90 }, - { 736, 0, 1, 1, 1, "Kodak Imaging", "High (grayscale)", 90 }, - { 3688, 5505, 1, 1, -2, "Kodak Imaging", "Medium (high res.)", 50 }, - { 3688, 5505, 2, 1, -2, "Kodak Imaging", "Medium (medium res.)", 50 }, - { 3688, 5505, 4, 1, -2, "Kodak Imaging", "Medium (low res.)", 50 }, - { 3688, 0, 1, 1, 1, "Kodak Imaging", "Medium (grayscale)", 50 }, - { 9056, 13790, 1, 1, -2, "Kodak Imaging", "Low (high res.)", 20 }, - { 9056, 13790, 2, 1, -2, "Kodak Imaging", "Low (medium res.)", 20 }, - { 9056, 13790, 4, 1, -2, "Kodak Imaging", "Low (low res.)", 20 }, - { 9056, 0, 1, 1, 1, "Kodak Imaging", "Low (grayscale)", 20 }, - { 161, 179, 1, 1, -2, "Lead ?", "?", -98 }, - { 711, 1055, 1, 1, -2, "Lead ?", "?", -90 }, - { 1079, 1610, 1, 1, -2, "Lead ?", "?", -85 }, - { 2031, 3054, 1, 1, -2, "Lead ?", "?", -72 }, - { 4835, 7226, 1, 1, -2, "Lead ?", "?", -37 }, - { 8199, 12287, 1, 1, -2, "Lead ?", "?", -22 }, - { 96, 117, 2, 1, -2, "Leica Digilux 3", "?", -98 }, - { 221, 333, 2, 1, -2, "Leica M8", "?", 97 }, - { 582, 836, 2, 1, -2, "Medion ?", "?", -92 }, - { 433, 667, 2, 1, -2, "Medion ?", "?", -94 }, - { 1858, 2780, 2, 2, 2, "Microsoft Office", "Default", 75 }, - { 116, 169, 2, 1, -2, "Nikon D50, D70, D70s, D80", "Fine", -98 }, - { 218, 333, 2, 1, -2, "Nikon D70 or D70s", "Normal", -97 }, - { 616, 941, 2, 1, -2, "Nikon D70 or D70s", "Basic", -91 }, - { 671, 999, 2, 1, -2, "Nikon D70 or D70s", "Basic + raw", -90 }, - { 127, 169, 2, 1, -2, "Nikon D70 v1.0", "Fine", -98 }, - { 302, 444, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, - { 315, 499, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, - { 329, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, - { 346, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, - { 372, 558, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, - { 389, 560, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, - { 419, 611, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, - { 449, 668, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 }, - { 506, 775, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 }, - { 529, 781, 2, 1, -2, "Nikon D70 v1.0", "Fine", -92 }, - { 261, 389, 2, 1, -2, "Nikon D50", "Normal", -96 }, - { 345, 499, 2, 1, -2, "Nikon D50", "Normal", -95 }, - { 855, 1279, 2, 1, -2, "Nikon D40", "?", -88 }, - { 667, 999, 2, 1, -3, "Nikon E4300", "Normal", 91 }, - { 736, 1110, 2, 1, -3, "Nikon E4300", "Normal", 90 }, - { 884, 1332, 2, 1, -3, "Nikon E4300", "Normal", 88 }, - { 64, 64, 1, 1, -2, "Nikon Browser 6", "High quality", 100 }, - { 779, 1164, 1, 1, -2, "Nikon Browser 6 or PictureProject 1.6", "Standard quality", -89 }, - { 1697, 2554, 2, 1, -2, "Nikon Browser 6", "Standard eq", -76 }, - { 2746, 5112, 2, 2, -2, "Nikon Browser 6", "Standard compression", -57 }, - { 8024, 12006, 2, 2, -2, "Nikon Browser 6", "Maximum compression", -22 }, - { 736, 1110, 2, 2, -2, "Olympus Camedia Master", "High quality?", 90 }, - { 1477, 2221, 2, 2, -2, "Olympus u710,S710", "Super high quality?", 80 }, - { 437, 617, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -94 }, - { 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 }, - { 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 }, - { 814, 1223, 2, 1, -3, "Olympus C960Z,D460Z", "Standard quality", 89 }, - { 884, 1332, 2, 1, -3, "Olympus C211Z", "Standard quality", 88 }, - { 1552, 2336, 2, 1, -3, "Olympus C990Z,D490Z", "High quality", 79 }, - { 261, 392, 2, 1, -2, "Panasonic DMC-FZ5", "High", -96 }, - { 251, 392, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 }, - { 280, 445, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 }, - { 304, 448, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, - { 316, 499, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, - { 332, 550, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, - { 355, 555, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, - { 375, 606, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, - { 400, 615, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, - { 420, 667, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, - { 501, 775, 2, 1, -2, "Panasonic DMC-FZ30", "High", -93 }, - { 577, 891, 2, 1, -2, "Panasonic DMC-FZ30", "High", -92 }, - { 324, 499, 2, 1, 2, "Ricoh Caplio R1V", "?", -95 }, - { 274, 443, 2, 1, 2, "Roxio PhotoSuite", "?", -96 }, - { 634, 943, 2, 1, -2, "Samsung Digimax V3", "?", -91 }, - { 1313, 1997, 2, 1, -2, "Samsung Digimax V3", "?", -82 }, - { 218, 331, 2, 1, -2, "Samsung Digimax S600", "?", -97 }, - { 258, 389, 2, 1, -2, "Sony Cybershot", "?", -96 }, - { 86, 115, 2, 1, -2, "Sony DSC-W55", "Fine", 99 }, - { 122, 169, 2, 1, -2, "Sony DSC-F828, DSC-F88", "?", -98 }, - { 221, 333, 2, 1, -2, "Sony DSC-W30, DSC-W50, DSC-H2, DSC-H5", "?", 97 }, - { 518, 779, 2, 1, -2, "Sony DSC-W70", "?", 93 }, - { 1477, 2221, 2, 2, -2, "Sony DSC-W30, DSC-P43, DSC-S600", "?", 80 }, - { 324, 682, 2, 1, -2, "Sony DSLR-A100", "?", -94 }, - { 736, 1110, 2, 1, -2, "SonyEricsson K750i", "Fine", 90 }, - { 1858, 2780, 2, 1, -2, "SonyEricsson K750i or W200i", "Normal", 75 }, - { 836, 1094, 2, 2, -2, "SonyEricsson K750i", "Panorama fine", -89 }, - { 1672, 2188, 2, 2, -2, "SonyEricsson K750i", "Panorama normal", -79 }, - { 361, 555, 2, 1, -2, "SonyEricsson K750i", "?", -95 }, - { 433, 667, 2, 1, -2, "SonyEricsson K750i", "?", -94 }, - { 954, 1443, 2, 1, -2, "SonyEricsson K750i", "?", -87 }, - { 1024, 1504, 2, 1, -2, "SonyEricsson K750i", "?", -86 }, - { 1097, 1615, 2, 1, -2, "SonyEricsson K750i", "?", -85 }, - { 1168, 1727, 2, 1, -2, "SonyEricsson K750i", "?", -84 }, - { 1324, 2000, 2, 1, -2, "SonyEricsson K750i", "?", -82 }, - { 1473, 2170, 2, 1, -2, "SonyEricsson K750i", "?", -80 }, - { 1615, 2394, 2, 1, -2, "SonyEricsson K750i", "?", -78 }, - { 1759, 2612, 2, 1, -2, "SonyEricsson K750i", "?", -76 }, - { 1491, 1491, 2, 1, -2, "SonyEricsson Z600", "Default", -83 }, - { 2211, 3284, 2, 1, -2, "Trust 760 Powerc@m", "?", 70 }, - { 2211, 3284, 1, 2, -2, "Trust 760 Powerc@m", "?", 70 }, - { 1830, 2725, 1, 1, 2, "Xing VT-Compress", "?", -75 } + { 0x31258383, 319, 665, 2, 1, -2, "ACD ?", "?", -94 }, + { 0x91d018a3, 436, 996, 2, 1, -2, "ACD ?", "?", -92 }, + { 0x954ee70e, 664, 1499, 2, 1, -2, "ACD ?", "?", -88 }, + { 0xe351bb55, 1590, 3556, 2, 2, -2, "ACD ?", "?", -71 }, + { 0x5a81e2c0, 95, 166, 1, 1, 2, "Adobe Photoshop CS2", "quality 12", -98 }, + { 0xcd0d41ae, 232, 443, 1, 1, 2, "Adobe Photoshop CS2", "quality 11", -96 }, + { 0x1b141cb3, 406, 722, 1, 1, 2, "Adobe Photoshop CS2", "quality 10", -93 }, + { 0xc84c0187, 539, 801, 1, 1, 2, "Adobe Photoshop CS2", "quality 9", -92 }, + { 0x1e822409, 649, 853, 1, 1, 2, "Adobe Photoshop CS2", "quality 8", -91 }, + { 0x3104202b, 786, 926, 1, 1, 2, "Adobe Photoshop CS2", "quality 7", -90 }, + { 0xcd21f666, 717, 782, 2, 2, 2, "Adobe Photoshop CS2", "quality 6", -91 }, + { 0x1b74e018, 844, 849, 2, 2, 2, "Adobe Photoshop CS2", "quality 5", -90 }, + { 0xde39ed89, 962, 892, 2, 2, 2, "Adobe Photoshop CS2", "quality 4", -89 }, + { 0xbdef8414, 1068, 941, 2, 2, 2, "Adobe Photoshop CS2", "quality 3", -89 }, + { 0xfedf6432, 1281, 998, 2, 2, 2, "Adobe Photoshop CS2", "quality 2", -87 }, + { 0x5d6afd92, 1484, 1083, 2, 2, 2, "Adobe Photoshop CS2", "quality 1", -86 }, + { 0x4c7d2f7d, 1582, 1108, 2, 2, 2, "Adobe Photoshop CS2", "quality 0", -85 }, + { 0x68e798b2, 95, 168, 1, 1, 2, "Adobe Photoshop CS2", "save for web 100", -98 }, + { 0x9f3456f2, 234, 445, 1, 1, 2, "Adobe Photoshop CS2", "save for web 90", -96 }, + { 0xda807dd5, 406, 724, 1, 1, 2, "Adobe Photoshop CS2", "save for web 80", -93 }, + { 0xf70a37ce, 646, 1149, 1, 1, 2, "Adobe Photoshop CS2", "save for web 70", -90 }, + { 0xf36979d2, 974, 1769, 1, 1, 2, "Adobe Photoshop CS2", "save for web 60", -85 }, + { 0x4966f484, 1221, 1348, 2, 2, 2, "Adobe Photoshop CS2", "save for web 50", -86 }, + { 0xaddf6d45, 1821, 1997, 2, 2, 2, "Adobe Photoshop CS2", "save for web 40", -79 }, + { 0xeffa362a, 2223, 2464, 2, 2, 2, "Adobe Photoshop CS2", "save for web 30", -74 }, + { 0x7aa980c1, 2575, 2903, 2, 2, 2, "Adobe Photoshop CS2", "save for web 20", -70 }, + { 0x489e344f, 3514, 3738, 2, 2, 2, "Adobe Photoshop CS2", "save for web 10", -60 }, + { 0x1a2cffe0, 535, 750, 1, 1, 2, "Adobe Photoshop 7.0", "quality 10", -93 }, + { 0x1e96d5d3, 109, 171, 1, 1, 2, "Adobe Photoshop CS", "quality 12", -98 }, + { 0x6771042c, 303, 466, 1, 1, 2, "Adobe Photoshop CS, Camera Raw 3", "quality 11", -95 }, + { 0xd4553f25, 668, 830, 1, 1, 2, "Adobe Photoshop 7.0, CS", "quality 9", -91 }, + { 0xd3b24cb4, 794, 895, 1, 1, 2, "Adobe Photoshop 7.0, CS", "quality 8", -90 }, + { 0x4ad5990c, 971, 950, 1, 1, 2, "Adobe Photoshop CS", "quality 7", -89 }, + { 0x4293dfde, 884, 831, 2, 2, 2, "Adobe Photoshop CS", "quality 6", -90 }, + { 0xba0212ec, 1032, 889, 2, 2, 2, "Adobe Photoshop CS", "quality 5", -89 }, + { 0x4b50947d, 1126, 940, 2, 2, 2, "Adobe Photoshop CS", "quality 4", -88 }, + { 0xad0f8e5c, 1216, 977, 2, 2, 2, "Adobe Photoshop CS", "quality 3", -88 }, + { 0x560b5f0c, 339, 670, 1, 1, 2, "Adobe Photoshop ?", "save for web 85", -94 }, + { 0x9539b14b, 427, 613, 2, 2, 2, "Adobe Photoshop ?", "?", -94 }, + { 0x841f2655, 525, 941, 1, 1, 2, "Adobe Photoshop ?", "save for web 75", -92 }, + { 0xaa2161e2, 803, 1428, 1, 1, 2, "Adobe Photoshop ?", "save for web 65", -87 }, + { 0x743feb84, 1085, 1996, 1, 1, 2, "Adobe Photoshop ?", "save for web 55", -83 }, + { 0xe9f14743, 1156, 2116, 1, 1, 2, "Adobe Photoshop ?", "save for web 52", -82 }, + { 0x1003c8fb, 1175, 2169, 1, 1, 2, "Adobe Photoshop ?", "save for web 51", -81 }, + { 0xd7804c45, 2272, 2522, 2, 2, 2, "Adobe Photoshop ?", "save for web 29", -73 }, + { 0xcb5aa8ad, 2515, 2831, 2, 2, 2, "Adobe ImageReady", "save for web 22", -70 }, + { 0x956d2a00, 3822, 3975, 2, 2, 2, "Adobe ImageReady", "save for web 6", -57 }, + { 0xba53e0c5, 4028, 4174, 2, 2, 2, "Adobe Photoshop ?", "save for web 3", -55 }, + { 0x13c0c8bc, 513, 0, 1, 1, 1, "Adobe Photoshop ?", "?", -93 }, + { 0x3fad5c43, 255, 393, 2, 1, 2, "Apple Quicktime 7.1 or 7.2", "?", -96 }, + { 0x6529bd03, 513, 775, 2, 2, 2, "Apple Quicktime 7.2", "?", -93 }, + { 0x354e610a, 543, 784, 2, 1, -2, "Apple Quicktime 7.1", "?", -92 }, + { 0xd596795e, 361, 506, 2, 1, 2, "Apple ?", "?", -95 }, + { 0x74da8ba7, 1511, 2229, 2, 2, 2, "Apple ?", "?", -79 }, + { 0x6391ca2b, 188, 276, 2, 1, -2, "Canon EOS 300D, 350D or 400D", "Fine", -97 }, + { 0x00474eb0, 708, 1057, 2, 1, -2, "Canon EOS 10D", "Normal", -90 }, + { 0x535174bd, 533, 1325, 2, 1, -2, "Canon PowerShot A95, S1, S2, SD400 or SD630", "Fine", -89 }, + { 0xb7be6b97, 192, 556, 2, 1, -2, "Canon PowerShot S5 IS, A300, A430, S200, SD500, SD700, Ixus 700 or 800", "Superfine", -95 }, + { 0xb5b5c61d, 533, 1325, 1, 2, -2, "Canon Digital Ixus 400", "Fine", -89 }, + { 0xa7a2c471, 288, 443, 2, 1, -3, "FujiFilm MX-2700", "?", -96 }, + { 0x8db061f0, 389, 560, 2, 1, -3, "FujiFilm FinePix S700", "Fine", -94 }, + { 0xbb7b97ba, 515, 774, 2, 1, -3, "FujiFilm FinePix 2600 Zoom", "Fine", -93 }, + { 0x71bcdf92, 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 }, + { 0x71bcdf92, 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 }, + { 0x9542cc81, 1970, 1970, 2, 2, -3, "HP PhotoSmart C812", "?", -78 }, + { 0xdb7b71d8, 369, 558, 2, 1, -3, "Kodak P880", "?", 95 }, + { 0x82e461f8, 566, 583, 2, 2, -2, "Kodak V610", "Fine", -93 }, + { 0x17816eb1, 736, 1110, 2, 2, -2, "Kodak DC240", "?", 90 }, + { 0x17816eb1, 736, 1110, 1, 1, -2, "Kodak Imaging", "High (high res.)", 90 }, + { 0x17816eb1, 736, 1110, 2, 1, -2, "Kodak Imaging", "High (medium res.)", 90 }, + { 0x17816eb1, 736, 1110, 4, 1, -2, "Kodak Imaging", "High (low res.)", 90 }, + { 0x3841f91b, 736, 0, 1, 1, 1, "Kodak Imaging", "High (grayscale)", 90 }, + { 0xe0f48a64, 3688, 5505, 1, 1, -2, "Kodak Imaging", "Medium (high res.)", 50 }, + { 0xe0f48a64, 3688, 5505, 2, 1, -2, "Kodak Imaging", "Medium (medium res.)", 50 }, + { 0xe0f48a64, 3688, 5505, 4, 1, -2, "Kodak Imaging", "Medium (low res.)", 50 }, + { 0x9ebccf53, 3688, 0, 1, 1, 1, "Kodak Imaging", "Medium (grayscale)", 50 }, + { 0xa130f919, 9056, 13790, 1, 1, -2, "Kodak Imaging", "Low (high res.)", 20 }, + { 0xa130f919, 9056, 13790, 2, 1, -2, "Kodak Imaging", "Low (medium res.)", 20 }, + { 0xa130f919, 9056, 13790, 4, 1, -2, "Kodak Imaging", "Low (low res.)", 20 }, + { 0x34216b8b, 9056, 0, 1, 1, 1, "Kodak Imaging", "Low (grayscale)", 20 }, + { 0x403b528f, 161, 179, 1, 1, -2, "Lead ?", "?", -98 }, + { 0x8550a881, 711, 1055, 1, 1, -2, "Lead ?", "?", -90 }, + { 0x98fb09fc, 1079, 1610, 1, 1, -2, "Lead ?", "?", -85 }, + { 0xfbb88fb8, 2031, 3054, 1, 1, -2, "Lead ?", "?", -72 }, + { 0x5fa57f78, 4835, 7226, 1, 1, -2, "Lead ?", "?", -37 }, + { 0x85b97881, 8199, 12287, 1, 1, -2, "Lead ?", "?", -22 }, + { 0xd3cd4ad0, 96, 117, 2, 1, -2, "Leica Digilux 3", "?", -98 }, + { 0x29e095c5, 221, 333, 2, 1, -2, "Leica M8", "?", 97 }, + { 0xee344795, 582, 836, 2, 1, -2, "Medion ?", "?", -92 }, + { 0x991408d7, 433, 667, 2, 1, -2, "Medion ?", "?", -94 }, + { 0x10b035e9, 1858, 2780, 2, 2, 2, "Microsoft Office", "Default", 75 }, + { 0x20fcfcb8, 116, 169, 2, 1, -2, "Nikon D50, D70, D70s, D80", "Fine", -98 }, + { 0x2530fec2, 218, 333, 2, 1, -2, "Nikon D70 or D70s", "Normal", -97 }, + { 0xe5dbee70, 616, 941, 2, 1, -2, "Nikon D70 or D70s", "Basic", -91 }, + { 0x0e082d61, 671, 999, 2, 1, -2, "Nikon D70 or D70s", "Basic + raw", -90 }, + { 0xcc6c9703, 127, 169, 2, 1, -2, "Nikon D70 v1.0", "Fine", -98 }, + { 0x8cdfa365, 302, 444, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, + { 0x23246639, 315, 499, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, + { 0x978378a8, 329, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, + { 0x748a8379, 346, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 }, + { 0xa85255cd, 372, 558, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, + { 0x016406e0, 389, 560, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, + { 0xda3a50f1, 419, 611, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 }, + { 0xd8e45108, 449, 668, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 }, + { 0x8a62bf3c, 506, 775, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 }, + { 0xc3108c99, 529, 781, 2, 1, -2, "Nikon D70 v1.0", "Fine", -92 }, + { 0xeabc51a5, 261, 389, 2, 1, -2, "Nikon D50", "Normal", -96 }, + { 0x0cddf617, 345, 499, 2, 1, -2, "Nikon D50", "Normal", -95 }, + { 0x2b3b6401, 855, 1279, 2, 1, -2, "Nikon D40", "?", -88 }, + { 0x5d1ca944, 667, 999, 2, 1, -3, "Nikon E4300", "Normal", 91 }, + { 0xabcbdc47, 736, 1110, 2, 1, -3, "Nikon E4300", "Normal", 90 }, + { 0x10b2ad77, 884, 1332, 2, 1, -3, "Nikon E4300", "Normal", 88 }, + { 0x0a82648b, 64, 64, 1, 1, -2, "Nikon Browser 6", "High quality", 100 }, + { 0xb091eaf2, 779, 1164, 1, 1, -2, "Nikon Browser 6 or PictureProject 1.6", "Standard quality", -89 }, + { 0x1a856066, 1697, 2554, 2, 1, -2, "Nikon Browser 6", "Standard eq", -76 }, + { 0xdf0774bd, 2746, 5112, 2, 2, -2, "Nikon Browser 6", "Standard compression", -57 }, + { 0xe2fd6fb9, 8024, 12006, 2, 2, -2, "Nikon Browser 6", "Maximum compression", -22 }, + { 0x17816eb1, 736, 1110, 2, 2, -2, "Olympus Camedia Master", "High quality?", 90 }, + { 0x96129a0d, 1477, 2221, 2, 2, -2, "Olympus u710,S710", "Super high quality?", 80 }, + { 0x824f84b9, 437, 617, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -94 }, + { 0x1b050d58, 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 }, + { 0x1b050d58, 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 }, + { 0x68058c37, 814, 1223, 2, 1, -3, "Olympus C960Z,D460Z", "Standard quality", 89 }, + { 0x10b2ad77, 884, 1332, 2, 1, -3, "Olympus C211Z", "Standard quality", 88 }, + { 0x0f5fa4cb, 1552, 2336, 2, 1, -3, "Olympus C990Z,D490Z", "High quality", 79 }, + { 0xf51554a8, 261, 392, 2, 1, -2, "Panasonic DMC-FZ5", "High", -96 }, + { 0xf01efe6e, 251, 392, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 }, + { 0x08064360, 280, 445, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 }, + { 0x05831bbb, 304, 448, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, + { 0xe6c08bea, 316, 499, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, + { 0xcb5f5f7d, 332, 550, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, + { 0xb53cf359, 355, 555, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 }, + { 0xdbcd2690, 375, 606, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, + { 0x594a3212, 400, 615, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, + { 0xde23f16a, 420, 667, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 }, + { 0xc0a43b37, 501, 775, 2, 1, -2, "Panasonic DMC-FZ30", "High", -93 }, + { 0xc298e887, 577, 891, 2, 1, -2, "Panasonic DMC-FZ30", "High", -92 }, + { 0x039b6bc2, 324, 499, 2, 1, 2, "Ricoh Caplio R1V", "?", -95 }, + { 0xf60dc348, 274, 443, 2, 1, 2, "Roxio PhotoSuite", "?", -96 }, + { 0xc6f47fa4, 634, 943, 2, 1, -2, "Samsung Digimax V3", "?", -91 }, + { 0xb9284f39, 1313, 1997, 2, 1, -2, "Samsung Digimax V3", "?", -82 }, + { 0x5dedca50, 218, 331, 2, 1, -2, "Samsung Digimax S600", "?", -97 }, + { 0x095451e2, 258, 389, 2, 1, -2, "Sony Cybershot", "?", -96 }, + { 0x4d981764, 86, 115, 2, 1, -2, "Sony DSC-W55", "Fine", 99 }, + { 0x6d2b20ce, 122, 169, 2, 1, -2, "Sony DSC-F828, DSC-F88", "?", -98 }, + { 0x29e095c5, 221, 333, 2, 1, -2, "Sony DSC-W30, DSC-W50, DSC-H2, DSC-H5", "?", 97 }, + { 0x59e5c5bc, 518, 779, 2, 1, -2, "Sony DSC-W70", "?", 93 }, + { 0x96129a0d, 1477, 2221, 2, 2, -2, "Sony DSC-W30, DSC-P43, DSC-S600", "?", 80 }, + { 0xa4d9a6d9, 324, 682, 2, 1, -2, "Sony DSLR-A100", "?", -94 }, + { 0x17816eb1, 736, 1110, 2, 1, -2, "SonyEricsson K750i", "Fine", 90 }, + { 0x10b035e9, 1858, 2780, 2, 1, -2, "SonyEricsson K750i or W200i", "Normal", 75 }, + { 0x1b0ad9d5, 836, 1094, 2, 2, -2, "SonyEricsson K750i", "Panorama fine", -89 }, + { 0x1cd8bb9f, 1672, 2188, 2, 2, -2, "SonyEricsson K750i", "Panorama normal", -79 }, + { 0x81d174af, 361, 555, 2, 1, -2, "SonyEricsson K750i", "?", -95 }, + { 0x991408d7, 433, 667, 2, 1, -2, "SonyEricsson K750i", "?", -94 }, + { 0x00034978, 954, 1443, 2, 1, -2, "SonyEricsson K750i", "?", -87 }, + { 0xd27667ab, 1024, 1504, 2, 1, -2, "SonyEricsson K750i", "?", -86 }, + { 0x94e96153, 1097, 1615, 2, 1, -2, "SonyEricsson K750i", "?", -85 }, + { 0xf524688a, 1168, 1727, 2, 1, -2, "SonyEricsson K750i", "?", -84 }, + { 0x5e5e4237, 1324, 2000, 2, 1, -2, "SonyEricsson K750i", "?", -82 }, + { 0x2e94a836, 1473, 2170, 2, 1, -2, "SonyEricsson K750i", "?", -80 }, + { 0xdd957ed4, 1615, 2394, 2, 1, -2, "SonyEricsson K750i", "?", -78 }, + { 0x4147561e, 1759, 2612, 2, 1, -2, "SonyEricsson K750i", "?", -76 }, + { 0x6f5af2b1, 1491, 1491, 2, 1, -2, "SonyEricsson Z600", "Default", -83 }, + { 0x641ee862, 2211, 3284, 2, 1, -2, "Trust 760 Powerc@m", "?", 70 }, + { 0x0bd95282, 2211, 3284, 1, 2, -2, "Trust 760 Powerc@m", "?", 70 }, + { 0xe9814c86, 1830, 2725, 1, 1, 2, "Xing VT-Compress", "?", -75 }, }; typedef struct @@ -485,6 +485,24 @@ hash_quant_tables (struct jpeg_decompress_struct *cinfo) return hashval; } +static guint32 +hash_transposed_quant_tables (struct jpeg_decompress_struct *cinfo) +{ + guint32 hashval; + gint t; + gint i; + gint j; + + hashval = 11; + for (t = 0; t < 4; t++) + if (cinfo->quant_tbl_ptrs[t]) + for (i = 0; i < DCTSIZE; i++) + for (j = 0; j < DCTSIZE; j++) + hashval = hashval * 4177 + cinfo->quant_tbl_ptrs[t]->quantval[j * 8 + + i]; + return hashval; +} + static void add_unknown_table (struct jpeg_decompress_struct *cinfo, gchar *filename) @@ -627,10 +645,9 @@ static void print_summary (struct jpeg_decompress_struct *cinfo, gint num_quant_tables) { - gint quality; - gint i; - GSList *source_list; - QuantInfo *source_info; + gint quality; + gint i; + GSList *source_list; /* detect JPEG quality - test the formula used in the jpeg plug-in */ quality = jpeg_detect_quality (cinfo); @@ -664,14 +681,31 @@ print_summary (struct jpeg_decompress_struct *cinfo, source_list = detect_source (cinfo, num_quant_tables); if (source_list) { - GSList *l; + GSList *l; + guint32 hash; + guint32 hash_t; + + hash = hash_quant_tables (cinfo); + hash_t = hash_transposed_quant_tables (cinfo); for (l = source_list; l; l = l->next) { - source_info = l->data; - g_print ("\tSource: %s - %s\n", + QuantInfo *source_info = l->data; + const gchar *comment = ""; + + if (source_info->hash == hash) + comment = ""; + else if (source_info->hash == hash_t) + comment = " (rotated)"; + else if (num_quant_tables == 1) + comment = " (grayscale)"; + else + comment = " (FALSE MATCH)"; + + g_print ("\tSource: %s - %s%s\n", source_info->source_name, - source_info->setting_name); + source_info->setting_name, + comment); } g_slist_free (source_list); } @@ -827,13 +861,11 @@ analyze_file (gchar *filename) num_quant_tables++; source_list = detect_source (&cinfo, num_quant_tables); - add_unknown_table (&cinfo, filename); /* FIXME */ - /* - if (!source_list) + if (! source_list) { add_unknown_table (&cinfo, filename); } - */ + if (! option_unknown) { if (option_summary)