34
36
* - rename this program!
35
37
* - update quant_info[].
36
* - get rid of the command-line option '--name' (too cumbersome to use).
37
* - rewrite the parser for command-line options and use GOption instead.
38
38
* - reorganize the options: 2 groups for print options and for selection.
39
39
* - re-add the code to compare different formulas for approx. IJG quality.
43
43
#include <string.h>
46
47
#include <jpeglib.h>
48
50
#include "jpeg-quality.h"
50
52
/* command-line options */
54
const gchar *description;
57
static const OptionDesc options_desc[] =
60
"Display this help message" },
62
"Print summary information and IJG quality (enabled by default)" },
64
"Dump quantization tables" },
66
"Dump quantization tables as C code" },
67
{ "-n, --name <name>",
68
"Camera or software name (used when printing tables)" },
70
"Only print information about files with unknown tables" },
74
static gboolean option_summary = TRUE;
75
static gboolean option_ctable = FALSE;
76
static gboolean option_table_2cols = FALSE;
77
static gchar *option_name = NULL;
78
static gboolean option_unknown = FALSE;
53
static gboolean option_summary = FALSE;
54
static gboolean option_ctable = FALSE;
55
static gboolean option_table_2cols = FALSE;
56
static gboolean option_unknown = FALSE;
57
static gboolean option_ignore_err = FALSE;
59
static GOptionEntry option_entries[] =
61
{ "ignore-errors", 'i', 0, G_OPTION_ARG_NONE, &option_ignore_err,
62
"Continue processing other files after a JPEG error", NULL },
63
{ "summary", 's', 0, G_OPTION_ARG_NONE, &option_summary,
64
"Print summary information and closest IJG quality", NULL },
65
{ "tables", 't', 0, G_OPTION_ARG_NONE, &option_table_2cols,
66
"Dump quantization tables", NULL },
67
{ "c-tables", 'c', 0, G_OPTION_ARG_NONE, &option_ctable,
68
"Dump quantization tables as C code", NULL },
69
{ "ctables", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &option_ctable,
71
{ "unknown", 'u', 0, G_OPTION_ARG_NONE, &option_unknown,
72
"Only print information about files with unknown tables", NULL },
76
/* information about known JPEG quantization tables */
79
/* const guint hash; */ /* hash of luminance/chrominance tables */
80
const gint lum_sum; /* sum of luminance table divisors */
81
const gint chrom_sum; /* sum of chrominance table divisors */
82
const gint subsmp_h; /* horizontal subsampling (1st component) */
83
const gint subsmp_v; /* vertical subsampling (1st component) */
84
const gint num_quant_tables; /* number of tables (< 0 if no grayscale) */
85
const gchar *source_name; /* name of software of device */
86
const gchar *setting_name; /* name of quality setting */
87
const gint ijg_qual; /* closest IJG quality setting */
90
static const QuantInfo quant_info[] =
92
{ 64, 64, 0, 0, 2, "IJG JPEG Library", "quality 100", 100 },
93
{ 86, 115, 0, 0, 2, "IJG JPEG Library", "quality 99", 99 },
94
{ 151, 224, 0, 0, 2, "IJG JPEG Library", "quality 98", 98 },
95
{ 221, 333, 0, 0, 2, "IJG JPEG Library", "quality 97", 97 },
96
{ 292, 443, 0, 0, 2, "IJG JPEG Library", "quality 96", 96 },
97
{ 369, 558, 0, 0, 2, "IJG JPEG Library", "quality 95", 95 },
98
{ 441, 668, 0, 0, 2, "IJG JPEG Library", "quality 94", 94 },
99
{ 518, 779, 0, 0, 2, "IJG JPEG Library", "quality 93", 93 },
100
{ 592, 891, 0, 0, 2, "IJG JPEG Library", "quality 92", 92 },
101
{ 667, 999, 0, 0, 2, "IJG JPEG Library", "quality 91", 91 },
102
{ 736, 1110, 0, 0, 2, "IJG JPEG Library", "quality 90", 90 },
103
{ 814, 1223, 0, 0, 2, "IJG JPEG Library", "quality 89", 89 },
104
{ 884, 1332, 0, 0, 2, "IJG JPEG Library", "quality 88", 88 },
105
{ 961, 1444, 0, 0, 2, "IJG JPEG Library", "quality 87", 87 },
106
{ 1031, 1555, 0, 0, 2, "IJG JPEG Library", "quality 86", 86 },
107
{ 1109, 1666, 0, 0, 2, "IJG JPEG Library", "quality 85", 85 },
108
{ 1179, 1778, 0, 0, 2, "IJG JPEG Library", "quality 84", 84 },
109
{ 1251, 1888, 0, 0, 2, "IJG JPEG Library", "quality 83", 83 },
110
{ 1326, 2000, 0, 0, 2, "IJG JPEG Library", "quality 82", 82 },
111
{ 1398, 2111, 0, 0, 2, "IJG JPEG Library", "quality 81", 81 },
112
{ 1477, 2221, 0, 0, 2, "IJG JPEG Library", "quality 80", 80 },
113
{ 1552, 2336, 0, 0, 2, "IJG JPEG Library", "quality 79", 79 },
114
{ 1620, 2445, 0, 0, 2, "IJG JPEG Library", "quality 78", 78 },
115
{ 1692, 2556, 0, 0, 2, "IJG JPEG Library", "quality 77", 77 },
116
{ 1773, 2669, 0, 0, 2, "IJG JPEG Library", "quality 76", 76 },
117
{ 1858, 2780, 0, 0, 2, "IJG JPEG Library", "quality 75", 75 },
118
{ 1915, 2836, 0, 0, 2, "IJG JPEG Library", "quality 74", 74 },
119
{ 1996, 2949, 0, 0, 2, "IJG JPEG Library", "quality 73", 73 },
120
{ 2068, 3060, 0, 0, 2, "IJG JPEG Library", "quality 72", 72 },
121
{ 2136, 3169, 0, 0, 2, "IJG JPEG Library", "quality 71", 71 },
122
{ 2211, 3284, 0, 0, 2, "IJG JPEG Library", "quality 70", 70 },
123
{ 2290, 3394, 0, 0, 2, "IJG JPEG Library", "quality 69", 69 },
124
{ 2362, 3505, 0, 0, 2, "IJG JPEG Library", "quality 68", 68 },
125
{ 2437, 3617, 0, 0, 2, "IJG JPEG Library", "quality 67", 67 },
126
{ 2509, 3727, 0, 0, 2, "IJG JPEG Library", "quality 66", 66 },
127
{ 2583, 3839, 0, 0, 2, "IJG JPEG Library", "quality 65", 65 },
128
{ 2657, 3950, 0, 0, 2, "IJG JPEG Library", "quality 64", 64 },
129
{ 2727, 4061, 0, 0, 2, "IJG JPEG Library", "quality 63", 63 },
130
{ 2804, 4173, 0, 0, 2, "IJG JPEG Library", "quality 62", 62 },
131
{ 2874, 4282, 0, 0, 2, "IJG JPEG Library", "quality 61", 61 },
132
{ 2952, 4395, 0, 0, 2, "IJG JPEG Library", "quality 60", 60 },
133
{ 3021, 4506, 0, 0, 2, "IJG JPEG Library", "quality 59", 59 },
134
{ 3096, 4614, 0, 0, 2, "IJG JPEG Library", "quality 58", 58 },
135
{ 3170, 4726, 0, 0, 2, "IJG JPEG Library", "quality 57", 57 },
136
{ 3247, 4837, 0, 0, 2, "IJG JPEG Library", "quality 56", 56 },
137
{ 3323, 4947, 0, 0, 2, "IJG JPEG Library", "quality 55", 55 },
138
{ 3396, 5062, 0, 0, 2, "IJG JPEG Library", "quality 54", 54 },
139
{ 3467, 5172, 0, 0, 2, "IJG JPEG Library", "quality 53", 53 },
140
{ 3541, 5281, 0, 0, 2, "IJG JPEG Library", "quality 52", 52 },
141
{ 3621, 5396, 0, 0, 2, "IJG JPEG Library", "quality 51", 51 },
142
{ 3688, 5505, 0, 0, 2, "IJG JPEG Library", "quality 50", 50 },
143
{ 3755, 5614, 0, 0, 2, "IJG JPEG Library", "quality 49", 49 },
144
{ 3835, 5729, 0, 0, 2, "IJG JPEG Library", "quality 48", 48 },
145
{ 3909, 5838, 0, 0, 2, "IJG JPEG Library", "quality 47", 47 },
146
{ 3980, 5948, 0, 0, 2, "IJG JPEG Library", "quality 46", 46 },
147
{ 4092, 6116, 0, 0, 2, "IJG JPEG Library", "quality 45", 45 },
148
{ 4166, 6226, 0, 0, 2, "IJG JPEG Library", "quality 44", 44 },
149
{ 4280, 6396, 0, 0, 2, "IJG JPEG Library", "quality 43", 43 },
150
{ 4393, 6562, 0, 0, 2, "IJG JPEG Library", "quality 42", 42 },
151
{ 4463, 6672, 0, 0, 2, "IJG JPEG Library", "quality 41", 41 },
152
{ 4616, 6897, 0, 0, 2, "IJG JPEG Library", "quality 40", 40 },
153
{ 4719, 7060, 0, 0, 2, "IJG JPEG Library", "quality 39", 39 },
154
{ 4829, 7227, 0, 0, 2, "IJG JPEG Library", "quality 38", 38 },
155
{ 4976, 7447, 0, 0, 2, "IJG JPEG Library", "quality 37", 37 },
156
{ 5086, 7616, 0, 0, 2, "IJG JPEG Library", "quality 36", 36 },
157
{ 5240, 7841, 0, 0, 2, "IJG JPEG Library", "quality 35", 35 },
158
{ 5421, 8114, 0, 0, 2, "IJG JPEG Library", "quality 34", 34 },
159
{ 5571, 8288, 0, 0, 2, "IJG JPEG Library", "quality 33", 33 },
160
{ 5756, 8565, 0, 0, 2, "IJG JPEG Library", "quality 32", 32 },
161
{ 5939, 8844, 0, 0, 2, "IJG JPEG Library", "quality 31", 31 },
162
{ 6125, 9122, 0, 0, 2, "IJG JPEG Library", "quality 30", 30 },
163
{ 6345, 9455, 0, 0, 2, "IJG JPEG Library", "quality 29", 29 },
164
{ 6562, 9787, 0, 0, 2, "IJG JPEG Library", "quality 28", 28 },
165
{ 6823, 10175, 0, 0, 2, "IJG JPEG Library", "quality 27", 27 },
166
{ 7084, 10567, 0, 0, 2, "IJG JPEG Library", "quality 26", 26 },
167
{ 7376, 11010, 0, 0, 2, "IJG JPEG Library", "quality 25", 25 },
168
{ 7668, 11453, 0, 0, 2, "IJG JPEG Library", "quality 24", 24 },
169
{ 7995, 11954, 0, 0, 2, "IJG JPEG Library", "quality 23", 23 },
170
{ 8331, 12511, 0, 0, 2, "IJG JPEG Library", "quality 22", 22 },
171
{ 8680, 13121, 0, 0, 2, "IJG JPEG Library", "quality 21", 21 },
172
{ 9056, 13790, 0, 0, 2, "IJG JPEG Library", "quality 20", 20 },
173
{ 9368, 14204, 0, 0, 2, "IJG JPEG Library", "quality 19", 19 },
174
{ 9679, 14267, 0, 0, 2, "IJG JPEG Library", "quality 18", 18 },
175
{ 10027, 14346, 0, 0, 2, "IJG JPEG Library", "quality 17", 17 },
176
{ 10360, 14429, 0, 0, 2, "IJG JPEG Library", "quality 16", 16 },
177
{ 10714, 14526, 0, 0, 2, "IJG JPEG Library", "quality 15", 15 },
178
{ 11081, 14635, 0, 0, 2, "IJG JPEG Library", "quality 14", 14 },
179
{ 11456, 14754, 0, 0, 2, "IJG JPEG Library", "quality 13", 13 },
180
{ 11861, 14864, 0, 0, 2, "IJG JPEG Library", "quality 12", 12 },
181
{ 12240, 14985, 0, 0, 2, "IJG JPEG Library", "quality 11", 11 },
182
{ 12560, 15110, 0, 0, 2, "IJG JPEG Library", "quality 10", 10 },
183
{ 12859, 15245, 0, 0, 2, "IJG JPEG Library", "quality 9", 9 },
184
{ 13230, 15369, 0, 0, 2, "IJG JPEG Library", "quality 8", 8 },
185
{ 13623, 15523, 0, 0, 2, "IJG JPEG Library", "quality 7", 7 },
186
{ 14073, 15731, 0, 0, 2, "IJG JPEG Library", "quality 6", 6 },
187
{ 14655, 16010, 0, 0, 2, "IJG JPEG Library", "quality 5", 5 },
188
{ 15277, 16218, 0, 0, 2, "IJG JPEG Library", "quality 4", 4 },
189
{ 15946, 16320, 0, 0, 2, "IJG JPEG Library", "quality 3", 3 },
190
{ 16315, 16320, 0, 0, 2, "IJG JPEG Library", "quality 2", 2 },
191
{ 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 1", 1 },
192
{ 16320, 16320, 0, 0, 2, "IJG JPEG Library", "quality 0", 1 },
193
{ 8008, 11954, 0, 0, 2, "IJG JPEG Library", "not baseline 23", -22 },
194
{ 8370, 12511, 0, 0, 2, "IJG JPEG Library", "not baseline 22", -21 },
195
{ 8774, 13121, 0, 0, 2, "IJG JPEG Library", "not baseline 21", -20 },
196
{ 9234, 13790, 0, 0, 2, "IJG JPEG Library", "not baseline 20", -19 },
197
{ 9700, 14459, 0, 0, 2, "IJG JPEG Library", "not baseline 19", -17 },
198
{ 10209, 15236, 0, 0, 2, "IJG JPEG Library", "not baseline 18", -14 },
199
{ 10843, 16182, 0, 0, 2, "IJG JPEG Library", "not baseline 17", -11 },
200
{ 11505, 17183, 0, 0, 2, "IJG JPEG Library", "not baseline 16", -7 },
201
{ 12279, 18351, 0, 0, 2, "IJG JPEG Library", "not baseline 15", -5 },
202
{ 13166, 19633, 0, 0, 2, "IJG JPEG Library", "not baseline 14", 0 },
203
{ 14160, 21129, 0, 0, 2, "IJG JPEG Library", "not baseline 13", 0 },
204
{ 15344, 22911, 0, 0, 2, "IJG JPEG Library", "not baseline 12", 0 },
205
{ 16748, 24969, 0, 0, 2, "IJG JPEG Library", "not baseline 11", 0 },
206
{ 18440, 27525, 0, 0, 2, "IJG JPEG Library", "not baseline 10", 0 },
207
{ 20471, 30529, 0, 0, 2, "IJG JPEG Library", "not baseline 9", 0 },
208
{ 23056, 34422, 0, 0, 2, "IJG JPEG Library", "not baseline 8", 0 },
209
{ 26334, 39314, 0, 0, 2, "IJG JPEG Library", "not baseline 7", 0 },
210
{ 30719, 45876, 0, 0, 2, "IJG JPEG Library", "not baseline 6", 0 },
211
{ 36880, 55050, 0, 0, 2, "IJG JPEG Library", "not baseline 5", 0 },
212
{ 46114, 68840, 0, 0, 2, "IJG JPEG Library", "not baseline 4", 0 },
213
{ 61445, 91697, 0, 0, 2, "IJG JPEG Library", "not baseline 3", 0 },
214
{ 92200, 137625, 0, 0, 2, "IJG JPEG Library", "not baseline 2", 0 },
215
{ 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 1", 0 },
216
{ 184400, 275250, 0, 0, 2, "IJG JPEG Library", "not baseline 0", 0 },
218
/* FIXME: the following entries are incomplete and need to be verified */
220
{ 319, 665, 2, 1, -2, "ACD ?", "?", -94 },
221
{ 436, 996, 2, 1, -2, "ACD ?", "?", -92 },
222
{ 664, 1499, 2, 1, -2, "ACD ?", "?", -88 },
223
{ 1590, 3556, 2, 2, -2, "ACD ?", "?", -71 },
224
{ 109, 171, 1, 1, 2, "Adobe Photoshop CS or CS2", "quality 12", -98 },
225
{ 303, 466, 1, 1, 2, "Adobe Photoshop CS or CS2, Camera Raw 3", "quality 11", -95 },
226
{ 535, 750, 1, 1, 2, "Adobe Photoshop 7.0 (or CS2)", "quality 10", -93 },
227
{ 668, 830, 1, 1, 2, "Adobe Photoshop 7.0, CS, CS2", "quality 9", -91 },
228
{ 794, 895, 1, 1, 2, "Adobe Photoshop 7.0, CS, CS2", "quality 8", -90 },
229
{ 971, 950, 1, 1, 2, "Adobe Photoshop CS2", "quality 7", -89 },
230
{ 884, 831, 2, 2, 2, "Adobe Photoshop CS2", "quality 6", -90 },
231
{ 1032, 889, 2, 2, 2, "Adobe Photoshop CS2", "quality 5", -89 },
232
{ 1126, 940, 2, 2, 2, "Adobe Photoshop CS2", "quality 4", -88 },
233
{ 1216, 977, 2, 2, 2, "Adobe Photoshop CS2", "quality 3", -88 },
234
{ 1281, 998, 2, 2, 2, "Adobe Photoshop CS2", "quality 2", -87 },
235
{ 1484, 1083, 2, 2, 2, "Adobe Photoshop CS2", "quality 1", -86 },
236
{ 1582, 1108, 2, 2, 2, "Adobe Photoshop 7.0, CS, CS2", "quality 0", -85 },
237
{ 95, 168, 1, 1, 2, "Adobe Photoshop CS2", "save for web 100", -98 },
238
{ 234, 445, 1, 1, 2, "Adobe Photoshop CS2", "save for web 90", -96 },
239
{ 406, 724, 1, 1, 2, "Adobe Photoshop CS2", "save for web 80", -93 },
240
{ 646, 1149, 1, 1, 2, "Adobe Photoshop CS2", "save for web 70", -90 },
241
{ 974, 1769, 1, 1, 2, "Adobe Photoshop CS2", "save for web 60", -85 },
242
{ 1221, 1348, 2, 2, 2, "Adobe Photoshop CS2", "save for web 50", -86 },
243
{ 1821, 1997, 2, 2, 2, "Adobe Photoshop CS2", "save for web 40", -79 },
244
{ 2223, 2464, 2, 2, 2, "Adobe Photoshop CS2", "save for web 30", -74 },
245
{ 2575, 2903, 2, 2, 2, "Adobe Photoshop CS2", "save for web 20", -70 },
246
{ 3514, 3738, 2, 2, 2, "Adobe Photoshop CS2", "save for web 10", -60 },
247
{ 95, 166, 1, 1, 2, "Adobe Photoshop 7.0, CS, CS2 or Lightroom", "quality 12", -98 },
248
{ 232, 443, 1, 1, 2, "Adobe Photoshop CS", "quality 11", -96 },
249
{ 649, 853, 1, 1, 2, "Adobe Photoshop 7.0, CS, CS2, Elements 4.0", "quality 8", -91 },
250
{ 844, 849, 2, 2, 2, "Adobe Photoshop CS", "quality 5", -90 },
251
{ 962, 892, 2, 2, 2, "Adobe Photoshop CS", "?", -89 },
252
{ 406, 722, 1, 1, 2, "Adobe Photoshop 7.0", "quality 10", -93 },
253
{ 539, 801, 1, 1, 2, "Adobe Photoshop 5.0, 7.0", "quality 9", -92 },
254
{ 786, 926, 1, 1, 2, "Adobe Photoshop 7.0, CS2", "quality 7", -90 },
255
{ 717, 782, 2, 2, 2, "Adobe Photoshop 5.0", "?", -91 },
256
{ 1068, 941, 2, 2, 2, "Adobe Photoshop 4.0", "?", -89 },
257
{ 339, 670, 1, 1, 2, "Adobe Photoshop ?", "save for web 85", -94 },
258
{ 406, 722, 1, 1, 2, "Adobe Photoshop 6.0", "quality 10", -93 },
259
{ 427, 613, 2, 2, 2, "Adobe Photoshop ?", "?", -94 },
260
{ 525, 941, 1, 1, 2, "Adobe Photoshop ?", "save for web 75", -92 },
261
{ 803, 1428, 1, 1, 2, "Adobe Photoshop ?", "save for web 65", -87 },
262
{ 1085, 1996, 1, 1, 2, "Adobe Photoshop ?", "save for web 55", -83 },
263
{ 1156, 2116, 1, 1, 2, "Adobe Photoshop ?", "save for web 52", -82 },
264
{ 1175, 2169, 1, 1, 2, "Adobe Photoshop ?", "save for web 51", -81 },
265
{ 2272, 2522, 2, 2, 2, "Adobe Photoshop ?", "save for web 29", -73 },
266
{ 4028, 4174, 2, 2, 2, "Adobe Photoshop ?", "save for web 3", -55 },
267
{ 513, 0, 1, 1, 1, "Adobe Photoshop ?", "?", -93 },
268
{ 2515, 2831, 2, 2, 2, "Adobe ImageReady", "save for web 22", -70 },
269
{ 3822, 3975, 2, 2, 2, "Adobe ImageReady", "save for web 6", -57 },
270
{ 255, 393, 2, 1, 2, "Apple Quicktime 7.1 or 7.2", "?", -96 },
271
{ 513, 775, 2, 2, 2, "Apple Quicktime 7.2", "?", -93 },
272
{ 543, 784, 2, 1, -2, "Apple Quicktime 7.1", "?", -92 },
273
{ 361, 506, 2, 1, 2, "Apple ?", "?", -95 },
274
{ 1511, 2229, 2, 2, 2, "Apple ?", "?", -79 },
275
{ 188, 276, 2, 1, -2, "Canon EOS 300D, 350D or 400D", "Fine", -97 },
276
{ 708, 1057, 2, 1, -2, "Canon EOS 10D", "Normal", -90 },
277
{ 533, 1325, 2, 1, -2, "Canon PowerShot A95, S1, S2, SD400 or SD630", "Fine", -89 },
278
{ 192, 556, 2, 1, -2, "Canon PowerShot S5 IS, A300, A430, S200, SD500, SD700, Ixus 700 or 800", "Superfine", -95 },
279
{ 533, 1325, 1, 2, -2, "Canon Digital Ixus 400", "Fine", -89 },
280
{ 288, 443, 2, 1, -3, "FujiFilm MX-2700", "?", -96 },
281
{ 389, 560, 2, 1, -3, "FujiFilm FinePix S700", "Fine", -94 },
282
{ 515, 774, 2, 1, -3, "FujiFilm FinePix 2600 Zoom", "Fine", -93 },
283
{ 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 },
284
{ 167, 240, 2, 2, -3, "HP PhotoSmart C850, C935", "?", -97 },
285
{ 1970, 1970, 2, 2, -3, "HP PhotoSmart C812", "?", -78 },
286
{ 369, 558, 2, 1, -3, "Kodak P880", "?", 95 },
287
{ 566, 583, 2, 2, -2, "Kodak V610", "Fine", -93 },
288
{ 736, 1110, 2, 2, -2, "Kodak DC240", "?", 90 },
289
{ 736, 1110, 1, 1, -2, "Kodak Imaging", "High (high res.)", 90 },
290
{ 736, 1110, 2, 1, -2, "Kodak Imaging", "High (medium res.)", 90 },
291
{ 736, 1110, 4, 1, -2, "Kodak Imaging", "High (low res.)", 90 },
292
{ 736, 0, 1, 1, 1, "Kodak Imaging", "High (grayscale)", 90 },
293
{ 3688, 5505, 1, 1, -2, "Kodak Imaging", "Medium (high res.)", 50 },
294
{ 3688, 5505, 2, 1, -2, "Kodak Imaging", "Medium (medium res.)", 50 },
295
{ 3688, 5505, 4, 1, -2, "Kodak Imaging", "Medium (low res.)", 50 },
296
{ 3688, 0, 1, 1, 1, "Kodak Imaging", "Medium (grayscale)", 50 },
297
{ 9056, 13790, 1, 1, -2, "Kodak Imaging", "Low (high res.)", 20 },
298
{ 9056, 13790, 2, 1, -2, "Kodak Imaging", "Low (medium res.)", 20 },
299
{ 9056, 13790, 4, 1, -2, "Kodak Imaging", "Low (low res.)", 20 },
300
{ 9056, 0, 1, 1, 1, "Kodak Imaging", "Low (grayscale)", 20 },
301
{ 161, 179, 1, 1, -2, "Lead ?", "?", -98 },
302
{ 711, 1055, 1, 1, -2, "Lead ?", "?", -90 },
303
{ 1079, 1610, 1, 1, -2, "Lead ?", "?", -85 },
304
{ 2031, 3054, 1, 1, -2, "Lead ?", "?", -72 },
305
{ 4835, 7226, 1, 1, -2, "Lead ?", "?", -37 },
306
{ 8199, 12287, 1, 1, -2, "Lead ?", "?", -22 },
307
{ 96, 117, 2, 1, -2, "Leica Digilux 3", "?", -98 },
308
{ 221, 333, 2, 1, -2, "Leica M8", "?", 97 },
309
{ 582, 836, 2, 1, -2, "Medion ?", "?", -92 },
310
{ 433, 667, 2, 1, -2, "Medion ?", "?", -94 },
311
{ 1858, 2780, 2, 2, 2, "Microsoft Office", "Default", 75 },
312
{ 116, 169, 2, 1, -2, "Nikon D50, D70, D70s, D80", "Fine", -98 },
313
{ 218, 333, 2, 1, -2, "Nikon D70 or D70s", "Normal", -97 },
314
{ 616, 941, 2, 1, -2, "Nikon D70 or D70s", "Basic", -91 },
315
{ 671, 999, 2, 1, -2, "Nikon D70 or D70s", "Basic + raw", -90 },
316
{ 127, 169, 2, 1, -2, "Nikon D70 v1.0", "Fine", -98 },
317
{ 302, 444, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 },
318
{ 315, 499, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 },
319
{ 329, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 },
320
{ 346, 500, 2, 1, -2, "Nikon D70 v1.0", "Fine", -95 },
321
{ 372, 558, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 },
322
{ 389, 560, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 },
323
{ 419, 611, 2, 1, -2, "Nikon D70 v1.0", "Fine", -94 },
324
{ 449, 668, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 },
325
{ 506, 775, 2, 1, -2, "Nikon D70 v1.0", "Fine", -93 },
326
{ 529, 781, 2, 1, -2, "Nikon D70 v1.0", "Fine", -92 },
327
{ 261, 389, 2, 1, -2, "Nikon D50", "Normal", -96 },
328
{ 345, 499, 2, 1, -2, "Nikon D50", "Normal", -95 },
329
{ 855, 1279, 2, 1, -2, "Nikon D40", "?", -88 },
330
{ 667, 999, 2, 1, -3, "Nikon E4300", "Normal", 91 },
331
{ 736, 1110, 2, 1, -3, "Nikon E4300", "Normal", 90 },
332
{ 884, 1332, 2, 1, -3, "Nikon E4300", "Normal", 88 },
333
{ 64, 64, 1, 1, -2, "Nikon Browser 6", "High quality", 100 },
334
{ 779, 1164, 1, 1, -2, "Nikon Browser 6 or PictureProject 1.6", "Standard quality", -89 },
335
{ 1697, 2554, 2, 1, -2, "Nikon Browser 6", "Standard eq", -76 },
336
{ 2746, 5112, 2, 2, -2, "Nikon Browser 6", "Standard compression", -57 },
337
{ 8024, 12006, 2, 2, -2, "Nikon Browser 6", "Maximum compression", -22 },
338
{ 736, 1110, 2, 2, -2, "Olympus Camedia Master", "High quality?", 90 },
339
{ 1477, 2221, 2, 2, -2, "Olympus u710,S710", "Super high quality?", 80 },
340
{ 437, 617, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -94 },
341
{ 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 },
342
{ 447, 670, 2, 1, -2, "Olympus u30D,S410D,u410D", "High quality", -93 },
343
{ 814, 1223, 2, 1, -3, "Olympus C960Z,D460Z", "Standard quality", 89 },
344
{ 884, 1332, 2, 1, -3, "Olympus C211Z", "Standard quality", 88 },
345
{ 1552, 2336, 2, 1, -3, "Olympus C990Z,D490Z", "High quality", 79 },
346
{ 261, 392, 2, 1, -2, "Panasonic DMC-FZ5", "High", -96 },
347
{ 251, 392, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 },
348
{ 280, 445, 2, 1, -2, "Panasonic DMC-FZ30", "High", -96 },
349
{ 304, 448, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 },
350
{ 316, 499, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 },
351
{ 332, 550, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 },
352
{ 355, 555, 2, 1, -2, "Panasonic DMC-FZ30", "High", -95 },
353
{ 375, 606, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 },
354
{ 400, 615, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 },
355
{ 420, 667, 2, 1, -2, "Panasonic DMC-FZ30", "High", -94 },
356
{ 501, 775, 2, 1, -2, "Panasonic DMC-FZ30", "High", -93 },
357
{ 577, 891, 2, 1, -2, "Panasonic DMC-FZ30", "High", -92 },
358
{ 324, 499, 2, 1, 2, "Ricoh Caplio R1V", "?", -95 },
359
{ 274, 443, 2, 1, 2, "Roxio PhotoSuite", "?", -96 },
360
{ 634, 943, 2, 1, -2, "Samsung Digimax V3", "?", -91 },
361
{ 1313, 1997, 2, 1, -2, "Samsung Digimax V3", "?", -82 },
362
{ 218, 331, 2, 1, -2, "Samsung Digimax S600", "?", -97 },
363
{ 258, 389, 2, 1, -2, "Sony Cybershot", "?", -96 },
364
{ 86, 115, 2, 1, -2, "Sony DSC-W55", "Fine", 99 },
365
{ 122, 169, 2, 1, -2, "Sony DSC-F828, DSC-F88", "?", -98 },
366
{ 221, 333, 2, 1, -2, "Sony DSC-W30, DSC-W50, DSC-H2, DSC-H5", "?", 97 },
367
{ 518, 779, 2, 1, -2, "Sony DSC-W70", "?", 93 },
368
{ 1477, 2221, 2, 2, -2, "Sony DSC-W30, DSC-P43, DSC-S600", "?", 80 },
369
{ 324, 682, 2, 1, -2, "Sony DSLR-A100", "?", -94 },
370
{ 736, 1110, 2, 1, -2, "SonyEricsson K750i", "Fine", 90 },
371
{ 1858, 2780, 2, 1, -2, "SonyEricsson K750i or W200i", "Normal", 75 },
372
{ 836, 1094, 2, 2, -2, "SonyEricsson K750i", "Panorama fine", -89 },
373
{ 1672, 2188, 2, 2, -2, "SonyEricsson K750i", "Panorama normal", -79 },
374
{ 361, 555, 2, 1, -2, "SonyEricsson K750i", "?", -95 },
375
{ 433, 667, 2, 1, -2, "SonyEricsson K750i", "?", -94 },
376
{ 954, 1443, 2, 1, -2, "SonyEricsson K750i", "?", -87 },
377
{ 1024, 1504, 2, 1, -2, "SonyEricsson K750i", "?", -86 },
378
{ 1097, 1615, 2, 1, -2, "SonyEricsson K750i", "?", -85 },
379
{ 1168, 1727, 2, 1, -2, "SonyEricsson K750i", "?", -84 },
380
{ 1324, 2000, 2, 1, -2, "SonyEricsson K750i", "?", -82 },
381
{ 1473, 2170, 2, 1, -2, "SonyEricsson K750i", "?", -80 },
382
{ 1615, 2394, 2, 1, -2, "SonyEricsson K750i", "?", -78 },
383
{ 1759, 2612, 2, 1, -2, "SonyEricsson K750i", "?", -76 },
384
{ 1491, 1491, 2, 1, -2, "SonyEricsson Z600", "Default", -83 },
385
{ 2211, 3284, 2, 1, -2, "Trust 760 Powerc@m", "?", 70 },
386
{ 2211, 3284, 1, 2, -2, "Trust 760 Powerc@m", "?", 70 },
387
{ 1830, 2725, 1, 1, 2, "Xing VT-Compress", "?", -75 }
395
gint num_quant_tables;
398
guint16 luminance[DCTSIZE2];
399
guint16 chrominance[DCTSIZE2];
402
static GSList *found_tables = NULL;
404
#if 0 /* FIXME ---v-v-v---------------------------------------------v-v-v--- */
80
406
static guint16 **ijg_luminance = NULL; /* luminance, baseline */
81
407
static guint16 **ijg_chrominance = NULL; /* chrominance, baseline */
82
408
static guint16 **ijg_luminance_nb = NULL; /* luminance, not baseline */
83
409
static guint16 **ijg_chrominance_nb = NULL; /* chrominance, not baseline */
92
const gchar *source_name;
93
const gchar *setting_name;
97
static const QuantInfo quant_info[] =
99
{ 64, 64, 0, 0, "IJG JPEG Library", "quality 100", 100 },
100
{ 86, 115, 0, 0, "IJG JPEG Library", "quality 99", 99 },
101
{ 151, 224, 0, 0, "IJG JPEG Library", "quality 98", 98 },
102
{ 221, 333, 0, 0, "IJG JPEG Library", "quality 97", 97 },
103
{ 292, 443, 0, 0, "IJG JPEG Library", "quality 96", 96 },
104
{ 369, 558, 0, 0, "IJG JPEG Library", "quality 95", 95 },
105
{ 441, 668, 0, 0, "IJG JPEG Library", "quality 94", 94 },
106
{ 518, 779, 0, 0, "IJG JPEG Library", "quality 93", 93 },
107
{ 592, 891, 0, 0, "IJG JPEG Library", "quality 92", 92 },
108
{ 667, 999, 0, 0, "IJG JPEG Library", "quality 91", 91 },
109
{ 736, 1110, 0, 0, "IJG JPEG Library", "quality 90", 90 },
110
{ 814, 1223, 0, 0, "IJG JPEG Library", "quality 89", 89 },
111
{ 884, 1332, 0, 0, "IJG JPEG Library", "quality 88", 88 },
112
{ 961, 1444, 0, 0, "IJG JPEG Library", "quality 87", 87 },
113
{ 1031, 1555, 0, 0, "IJG JPEG Library", "quality 86", 86 },
114
{ 1109, 1666, 0, 0, "IJG JPEG Library", "quality 85", 85 },
115
{ 1179, 1778, 0, 0, "IJG JPEG Library", "quality 84", 84 },
116
{ 1251, 1888, 0, 0, "IJG JPEG Library", "quality 83", 83 },
117
{ 1326, 2000, 0, 0, "IJG JPEG Library", "quality 82", 82 },
118
{ 1398, 2111, 0, 0, "IJG JPEG Library", "quality 81", 81 },
119
{ 1477, 2221, 0, 0, "IJG JPEG Library", "quality 80", 80 },
120
{ 1552, 2336, 0, 0, "IJG JPEG Library", "quality 79", 79 },
121
{ 1620, 2445, 0, 0, "IJG JPEG Library", "quality 78", 78 },
122
{ 1692, 2556, 0, 0, "IJG JPEG Library", "quality 77", 77 },
123
{ 1773, 2669, 0, 0, "IJG JPEG Library", "quality 76", 76 },
124
{ 1858, 2780, 0, 0, "IJG JPEG Library", "quality 75", 75 },
125
{ 1915, 2836, 0, 0, "IJG JPEG Library", "quality 74", 74 },
126
{ 1996, 2949, 0, 0, "IJG JPEG Library", "quality 73", 73 },
127
{ 2068, 3060, 0, 0, "IJG JPEG Library", "quality 72", 72 },
128
{ 2136, 3169, 0, 0, "IJG JPEG Library", "quality 71", 71 },
129
{ 2211, 3284, 0, 0, "IJG JPEG Library", "quality 70", 70 },
130
{ 2290, 3394, 0, 0, "IJG JPEG Library", "quality 69", 69 },
131
{ 2362, 3505, 0, 0, "IJG JPEG Library", "quality 68", 68 },
132
{ 2437, 3617, 0, 0, "IJG JPEG Library", "quality 67", 67 },
133
{ 2509, 3727, 0, 0, "IJG JPEG Library", "quality 66", 66 },
134
{ 2583, 3839, 0, 0, "IJG JPEG Library", "quality 65", 65 },
135
{ 2657, 3950, 0, 0, "IJG JPEG Library", "quality 64", 64 },
136
{ 2727, 4061, 0, 0, "IJG JPEG Library", "quality 63", 63 },
137
{ 2804, 4173, 0, 0, "IJG JPEG Library", "quality 62", 62 },
138
{ 2874, 4282, 0, 0, "IJG JPEG Library", "quality 61", 61 },
139
{ 2952, 4395, 0, 0, "IJG JPEG Library", "quality 60", 60 },
140
{ 3021, 4506, 0, 0, "IJG JPEG Library", "quality 59", 59 },
141
{ 3096, 4614, 0, 0, "IJG JPEG Library", "quality 58", 58 },
142
{ 3170, 4726, 0, 0, "IJG JPEG Library", "quality 57", 57 },
143
{ 3247, 4837, 0, 0, "IJG JPEG Library", "quality 56", 56 },
144
{ 3323, 4947, 0, 0, "IJG JPEG Library", "quality 55", 55 },
145
{ 3396, 5062, 0, 0, "IJG JPEG Library", "quality 54", 54 },
146
{ 3467, 5172, 0, 0, "IJG JPEG Library", "quality 53", 53 },
147
{ 3541, 5281, 0, 0, "IJG JPEG Library", "quality 52", 52 },
148
{ 3621, 5396, 0, 0, "IJG JPEG Library", "quality 51", 51 },
149
{ 3688, 5505, 0, 0, "IJG JPEG Library", "quality 50", 50 },
150
{ 3755, 5614, 0, 0, "IJG JPEG Library", "quality 49", 49 },
151
{ 3835, 5729, 0, 0, "IJG JPEG Library", "quality 48", 48 },
152
{ 3909, 5838, 0, 0, "IJG JPEG Library", "quality 47", 47 },
153
{ 3980, 5948, 0, 0, "IJG JPEG Library", "quality 46", 46 },
154
{ 4092, 6116, 0, 0, "IJG JPEG Library", "quality 45", 45 },
155
{ 4166, 6226, 0, 0, "IJG JPEG Library", "quality 44", 44 },
156
{ 4280, 6396, 0, 0, "IJG JPEG Library", "quality 43", 43 },
157
{ 4393, 6562, 0, 0, "IJG JPEG Library", "quality 42", 42 },
158
{ 4463, 6672, 0, 0, "IJG JPEG Library", "quality 41", 41 },
159
{ 4616, 6897, 0, 0, "IJG JPEG Library", "quality 40", 40 },
160
{ 4719, 7060, 0, 0, "IJG JPEG Library", "quality 39", 39 },
161
{ 4829, 7227, 0, 0, "IJG JPEG Library", "quality 38", 38 },
162
{ 4976, 7447, 0, 0, "IJG JPEG Library", "quality 37", 37 },
163
{ 5086, 7616, 0, 0, "IJG JPEG Library", "quality 36", 36 },
164
{ 5240, 7841, 0, 0, "IJG JPEG Library", "quality 35", 35 },
165
{ 5421, 8114, 0, 0, "IJG JPEG Library", "quality 34", 34 },
166
{ 5571, 8288, 0, 0, "IJG JPEG Library", "quality 33", 33 },
167
{ 5756, 8565, 0, 0, "IJG JPEG Library", "quality 32", 32 },
168
{ 5939, 8844, 0, 0, "IJG JPEG Library", "quality 31", 31 },
169
{ 6125, 9122, 0, 0, "IJG JPEG Library", "quality 30", 30 },
170
{ 6345, 9455, 0, 0, "IJG JPEG Library", "quality 29", 29 },
171
{ 6562, 9787, 0, 0, "IJG JPEG Library", "quality 28", 28 },
172
{ 6823, 10175, 0, 0, "IJG JPEG Library", "quality 27", 27 },
173
{ 7084, 10567, 0, 0, "IJG JPEG Library", "quality 26", 26 },
174
{ 7376, 11010, 0, 0, "IJG JPEG Library", "quality 25", 25 },
175
{ 7668, 11453, 0, 0, "IJG JPEG Library", "quality 24", 24 },
176
{ 7995, 11954, 0, 0, "IJG JPEG Library", "quality 23", 23 },
177
{ 8331, 12511, 0, 0, "IJG JPEG Library", "quality 22", 22 },
178
{ 8680, 13121, 0, 0, "IJG JPEG Library", "quality 21", 21 },
179
{ 9056, 13790, 0, 0, "IJG JPEG Library", "quality 20", 20 },
180
{ 9368, 14204, 0, 0, "IJG JPEG Library", "quality 19", 19 },
181
{ 9679, 14267, 0, 0, "IJG JPEG Library", "quality 18", 18 },
182
{ 10027, 14346, 0, 0, "IJG JPEG Library", "quality 17", 17 },
183
{ 10360, 14429, 0, 0, "IJG JPEG Library", "quality 16", 16 },
184
{ 10714, 14526, 0, 0, "IJG JPEG Library", "quality 15", 15 },
185
{ 11081, 14635, 0, 0, "IJG JPEG Library", "quality 14", 14 },
186
{ 11456, 14754, 0, 0, "IJG JPEG Library", "quality 13", 13 },
187
{ 11861, 14864, 0, 0, "IJG JPEG Library", "quality 12", 12 },
188
{ 12240, 14985, 0, 0, "IJG JPEG Library", "quality 11", 11 },
189
{ 12560, 15110, 0, 0, "IJG JPEG Library", "quality 10", 10 },
190
{ 12859, 15245, 0, 0, "IJG JPEG Library", "quality 9", 9 },
191
{ 13230, 15369, 0, 0, "IJG JPEG Library", "quality 8", 8 },
192
{ 13623, 15523, 0, 0, "IJG JPEG Library", "quality 7", 7 },
193
{ 14073, 15731, 0, 0, "IJG JPEG Library", "quality 6", 6 },
194
{ 14655, 16010, 0, 0, "IJG JPEG Library", "quality 5", 5 },
195
{ 15277, 16218, 0, 0, "IJG JPEG Library", "quality 4", 4 },
196
{ 15946, 16320, 0, 0, "IJG JPEG Library", "quality 3", 3 },
197
{ 16315, 16320, 0, 0, "IJG JPEG Library", "quality 2", 2 },
198
{ 16320, 16320, 0, 0, "IJG JPEG Library", "quality 1", 1 },
199
{ 16320, 16320, 0, 0, "IJG JPEG Library", "quality 0", 1 },
200
{ 8008, 11954, 0, 0, "IJG JPEG Library", "not baseline 23", -22 },
201
{ 8370, 12511, 0, 0, "IJG JPEG Library", "not baseline 22", -21 },
202
{ 8774, 13121, 0, 0, "IJG JPEG Library", "not baseline 21", -20 },
203
{ 9234, 13790, 0, 0, "IJG JPEG Library", "not baseline 20", -19 },
204
{ 9700, 14459, 0, 0, "IJG JPEG Library", "not baseline 19", -17 },
205
{ 10209, 15236, 0, 0, "IJG JPEG Library", "not baseline 18", -14 },
206
{ 10843, 16182, 0, 0, "IJG JPEG Library", "not baseline 17", -11 },
207
{ 11505, 17183, 0, 0, "IJG JPEG Library", "not baseline 16", -7 },
208
{ 12279, 18351, 0, 0, "IJG JPEG Library", "not baseline 15", -5 },
209
{ 13166, 19633, 0, 0, "IJG JPEG Library", "not baseline 14", 0 },
210
{ 14160, 21129, 0, 0, "IJG JPEG Library", "not baseline 13", 0 },
211
{ 15344, 22911, 0, 0, "IJG JPEG Library", "not baseline 12", 0 },
212
{ 16748, 24969, 0, 0, "IJG JPEG Library", "not baseline 11", 0 },
213
{ 18440, 27525, 0, 0, "IJG JPEG Library", "not baseline 10", 0 },
214
{ 20471, 30529, 0, 0, "IJG JPEG Library", "not baseline 9", 0 },
215
{ 23056, 34422, 0, 0, "IJG JPEG Library", "not baseline 8", 0 },
216
{ 26334, 39314, 0, 0, "IJG JPEG Library", "not baseline 7", 0 },
217
{ 30719, 45876, 0, 0, "IJG JPEG Library", "not baseline 6", 0 },
218
{ 36880, 55050, 0, 0, "IJG JPEG Library", "not baseline 5", 0 },
219
{ 46114, 68840, 0, 0, "IJG JPEG Library", "not baseline 4", 0 },
220
{ 61445, 91697, 0, 0, "IJG JPEG Library", "not baseline 3", 0 },
221
{ 92200, 137625, 0, 0, "IJG JPEG Library", "not baseline 2", 0 },
222
{ 184400, 275250, 0, 0, "IJG JPEG Library", "not baseline 1", 0 },
223
{ 184400, 275250, 0, 0, "IJG JPEG Library", "not baseline 0", 0 },
224
{ 319, 665, 2, 1, "ACD ?", "?", -94 },
225
{ 436, 996, 2, 1, "ACD ?", "?", -92 },
226
{ 664, 1499, 2, 1, "ACD ?", "?", -88 },
227
{ 1590, 3556, 2, 2, "ACD ?", "?", -71 },
228
{ 284, 443, 2, 2, "Adobe Photoshop CS3", "?", -96 },
229
{ 109, 171, 1, 1, "Adobe Photoshop CS or CS2", "quality 12", -98 },
230
{ 303, 466, 1, 1, "Adobe Photoshop CS2", "quality 11", -95 },
231
{ 535, 750, 1, 1, "Adobe Photoshop CS2", "quality 10", -93 },
232
{ 668, 830, 1, 1, "Adobe Photoshop CS2", "quality 9", -91 },
233
{ 794, 895, 1, 1, "Adobe Photoshop CS2", "quality 8", -90 },
234
{ 971, 950, 1, 1, "Adobe Photoshop CS2", "quality 7", -89 },
235
{ 884, 831, 2, 2, "Adobe Photoshop CS2", "quality 6", -90 },
236
{ 1032, 889, 2, 2, "Adobe Photoshop CS2", "quality 5", -89 },
237
{ 1126, 940, 2, 2, "Adobe Photoshop CS2", "quality 4", -88 },
238
{ 1216, 977, 2, 2, "Adobe Photoshop CS2", "quality 3", -88 },
239
{ 1281, 998, 2, 2, "Adobe Photoshop CS2", "quality 2", -87 },
240
{ 1484, 1083, 2, 2, "Adobe Photoshop CS2", "quality 1", -86 },
241
{ 1582, 1108, 2, 2, "Adobe Photoshop CS2", "quality 0", -85 },
242
{ 95, 168, 1, 1, "Adobe Photoshop CS2", "save for web 100", -98 },
243
{ 234, 445, 1, 1, "Adobe Photoshop CS2", "save for web 90", -96 },
244
{ 406, 724, 1, 1, "Adobe Photoshop CS2", "save for web 80", -93 },
245
{ 646, 1149, 1, 1, "Adobe Photoshop CS2", "save for web 70", -90 },
246
{ 974, 1769, 1, 1, "Adobe Photoshop CS2", "save for web 60", -85 },
247
{ 1221, 1348, 2, 2, "Adobe Photoshop CS2", "save for web 50", -86 },
248
{ 1821, 1997, 2, 2, "Adobe Photoshop CS2", "save for web 40", -79 },
249
{ 2223, 2464, 2, 2, "Adobe Photoshop CS2", "save for web 30", -74 },
250
{ 2575, 2903, 2, 2, "Adobe Photoshop CS2", "save for web 20", -70 },
251
{ 3514, 3738, 2, 2, "Adobe Photoshop CS2", "save for web 10", -60 },
252
{ 95, 166, 1, 1, "Adobe Photoshop CS or Lightroom", "save for web 100?", -98 },
253
{ 232, 443, 1, 1, "Adobe Photoshop CS", "?", -96 },
254
{ 649, 853, 1, 1, "Adobe Photoshop CS or Elements 4.0", "?", -91 },
255
{ 844, 849, 2, 2, "Adobe Photoshop CS", "?", -90 },
256
{ 962, 892, 2, 2, "Adobe Photoshop CS", "?", -89 },
257
{ 406, 722, 1, 1, "Adobe Photoshop 7.0", "?", -93 },
258
{ 539, 801, 1, 1, "Adobe Photoshop 7.0 CE", "?", -92 },
259
{ 786, 926, 1, 1, "Adobe Photoshop 7.0", "?", -90 },
260
{ 539, 801, 1, 1, "Adobe Photoshop 5.0", "?", -92 },
261
{ 717, 782, 2, 2, "Adobe Photoshop 5.0", "?", -91 },
262
{ 1068, 941, 2, 2, "Adobe Photoshop 4.0", "?", -89 },
263
{ 339, 670, 1, 1, "Adobe Photoshop ?", "?", -94 },
264
{ 406, 722, 1, 1, "Adobe Photoshop ?", "?", -93 },
265
{ 427, 613, 2, 2, "Adobe Photoshop ?", "?", -94 },
266
{ 525, 941, 1, 1, "Adobe Photoshop ?", "?", -92 },
267
{ 803, 1428, 1, 1, "Adobe Photoshop ?", "?", -87 },
268
{ 1085, 1996, 1, 1, "Adobe Photoshop ?", "?", -83 },
269
{ 1156, 2116, 1, 1, "Adobe Photoshop ?", "?", -82 },
270
{ 1175, 2169, 1, 1, "Adobe Photoshop ?", "?", -81 },
271
{ 2272, 2522, 2, 2, "Adobe Photoshop ?", "?", -73 },
272
{ 513, 0, 1, 1, "Adobe Photoshop ?", "?", -97 },
273
{ 2515, 2831, 2, 2, "Adobe ImageReady", "?", -70 },
274
{ 3822, 3975, 2, 2, "Adobe ImageReady", "?", -57 },
275
{ 255, 393, 2, 1, "Apple Quicktime 7", "?", -96 },
276
{ 513, 775, 2, 2, "Apple Quicktime 7", "?", -93 },
277
{ 543, 784, 2, 1, "Apple Quicktime 7", "?", -92 },
278
{ 361, 506, 2, 1, "Apple ?", "?", -95 },
279
{ 1511, 2229, 2, 2, "Apple ?", "?", -79 },
280
{ 188, 276, 2, 1, "Canon EOS 300D, 350D or 400D", "Fine", -97 },
281
{ 708, 1057, 2, 1, "Canon EOS 10D", "?", -90 },
282
{ 533, 1925, 2, 1, "Canon Digital Ixus", "Fine", -86 },
283
{ 533, 1325, 2, 1, "Canon PowerShot A95, S1, S2, SD400 or SD630", "Fine", -89 },
284
{ 192, 556, 1, 2, "Canon PowerShot A430", "Superfine", -95 },
285
{ 192, 556, 2, 1, "Canon PowerShot S200 or Ixus 800", "Superfine", -95 },
286
{ 64, 64, 2, 2, "Casio EX-Z600", "Fine", 100 },
287
{ 288, 443, 2, 1, "FujiFilm MX-2700", "?", -96 },
288
{ 2056, 3102, 2, 1, "FujiFilm DX-10", "?", -71 },
289
{ 1254, 1888, 2, 1, "FujiFilm MX-1700 Zoom", "?", -82 },
290
{ 515, 774, 2, 1, "FujiFilm FinePix 2600 Zoom", "Fine", -93 },
291
{ 1375, 1131, 2, 2, "Kodak DC210", "?", -86 },
292
{ 736, 1110, 2, 2, "Kodak DC240", "?", 90 },
293
{ 161, 179, 1, 1, "Lead ?", "?", -98 },
294
{ 711, 1055, 1, 1, "Lead ?", "?", -90 },
295
{ 1079, 1610, 1, 1, "Lead ?", "?", -85 },
296
{ 2031, 3054, 1, 1, "Lead ?", "?", -72 },
297
{ 4835, 7226, 1, 1, "Lead ?", "?", -37 },
298
{ 8199, 12287, 1, 1, "Lead ?", "?", -22 },
299
{ 582, 836, 2, 1, "Medion ?", "?", -92 },
300
{ 116, 169, 2, 1, "Nikon D50, D70, D70s, D80", "Fine", -98 },
301
{ 218, 333, 2, 1, "Nikon D70 or D70s", "Normal", -97 },
302
{ 616, 941, 2, 1, "Nikon D70 or D70s", "Basic", -91 },
303
{ 671, 999, 2, 1, "Nikon D70 or D70s", "Basic + raw", -90 },
304
{ 127, 169, 2, 1, "Nikon D70 v1.0", "Fine", -98 },
305
{ 302, 444, 2, 1, "Nikon D70 v1.0", "Fine", -95 },
306
{ 315, 499, 2, 1, "Nikon D70 v1.0", "Fine", -95 },
307
{ 329, 500, 2, 1, "Nikon D70 v1.0", "Fine", -95 },
308
{ 346, 500, 2, 1, "Nikon D70 v1.0", "Fine", -95 },
309
{ 372, 558, 2, 1, "Nikon D70 v1.0", "Fine", -94 },
310
{ 389, 560, 2, 1, "Nikon D70 v1.0", "Fine", -94 },
311
{ 419, 611, 2, 1, "Nikon D70 v1.0", "Fine", -94 },
312
{ 449, 668, 2, 1, "Nikon D70 v1.0", "Fine", -93 },
313
{ 506, 775, 2, 1, "Nikon D70 v1.0", "Fine", -93 },
314
{ 529, 781, 2, 1, "Nikon D70 v1.0", "Fine", -92 },
315
{ 855, 1279, 2, 1, "Nikon D40", "?", -88 },
316
{ 64, 64, 1, 1, "Nikon Browser 6", "High quality", 100 },
317
{ 779, 1164, 1, 1, "Nikon Browser 6", "Standard quality", -89 },
318
{ 1697, 2554, 2, 1, "Nikon Browser 6", "Standard eq", -76 },
319
{ 2746, 5112, 2, 2, "Nikon Browser 6", "Standard compression", -57 },
320
{ 8024, 12006, 2, 2, "Nikon Browser 6", "Maximum compression", -22 },
321
{ 736, 1110, 2, 2, "Olympus Camedia Master", "High quality?", 90 },
322
{ 1057, 1561, 2, 1, "Olympus u770SW,S770SW", "?", -85 },
323
{ 275, 395, 2, 1, "Olympus u750,S750", "Raw?", -96 },
324
{ 1477, 2221, 2, 2, "Olympus U710,S710", "Super high quality?", 80 },
325
{ 251, 392, 2, 1, "Panasonic DMC-FZ30", "High", -96 },
326
{ 280, 445, 2, 1, "Panasonic DMC-FZ30", "High", -96 },
327
{ 304, 448, 2, 1, "Panasonic DMC-FZ30", "High", -95 },
328
{ 316, 499, 2, 1, "Panasonic DMC-FZ30", "High", -95 },
329
{ 332, 550, 2, 1, "Panasonic DMC-FZ30", "High", -95 },
330
{ 355, 555, 2, 1, "Panasonic DMC-FZ30", "High", -95 },
331
{ 375, 606, 2, 1, "Panasonic DMC-FZ30", "High", -94 },
332
{ 400, 615, 2, 1, "Panasonic DMC-FZ30", "High", -94 },
333
{ 420, 667, 2, 1, "Panasonic DMC-FZ30", "High", -94 },
334
{ 501, 775, 2, 1, "Panasonic DMC-FZ30", "High", -93 },
335
{ 577, 891, 2, 1, "Panasonic DMC-FZ30", "High", -92 },
336
{ 324, 499, 2, 1, "Ricoh Caplio R1V", "?", -95 },
337
{ 634, 943, 2, 1, "Samsung Digimax V3", "?", -91 },
338
{ 1313, 1997, 2, 1, "Samsung Digimax V3", "?", -82 },
339
{ 1075, 1612, 2, 1, "Sanyo SR6", "?", -85 },
340
{ 785, 1168, 2, 1, "Sanyo SX113", "?", -89 },
341
{ 258, 389, 2, 1, "Sony Cybershot", "?", -96 },
342
{ 2782, 4259, 2, 1, "Sony Cybershot", "?", -61 },
343
{ 86, 115, 2, 1, "Sony DSC-W55", "?", 99 },
344
{ 221, 333, 2, 1, "Sony DSC-W50", "?", 97 },
345
{ 1477, 2221, 2, 2, "Sony DSC-W30, DSC-P43, DSC-S600", "?", 80 },
346
{ 736, 1110, 2, 1, "SonyEricsson K750i", "Fine", 90 },
347
{ 1858, 2780, 2, 1, "SonyEricsson K750i", "Normal", 75 },
348
{ 836, 1094, 2, 2, "SonyEricsson K750i", "Panorama fine", -89 },
349
{ 1672, 2188, 2, 2, "SonyEricsson K750i", "Panorama normal", -79 },
350
{ 361, 555, 2, 1, "SonyEricsson K750i", "?", -95 },
351
{ 433, 667, 2, 1, "SonyEricsson K750i", "?", -94 },
352
{ 954, 1443, 2, 1, "SonyEricsson K750i", "?", -87 },
353
{ 1024, 1504, 2, 1, "SonyEricsson K750i", "?", -86 },
354
{ 1097, 1615, 2, 1, "SonyEricsson K750i", "?", -85 },
355
{ 1168, 1727, 2, 1, "SonyEricsson K750i", "?", -84 },
356
{ 1324, 2000, 2, 1, "SonyEricsson K750i", "?", -82 },
357
{ 1473, 2170, 2, 1, "SonyEricsson K750i", "?", -80 },
358
{ 1615, 2394, 2, 1, "SonyEricsson K750i", "?", -78 },
359
{ 1759, 2612, 2, 1, "SonyEricsson K750i", "?", -76 },
360
{ 1491, 1491, 2, 1, "SonyEricsson Z600", "Default", -83 },
361
{ 1830, 2725, 1, 1, "Xing VT-Compress", "?", -75 }
367
412
* Initialize the IJG quantization tables for each quality setting.