13 #define JPEG_INTERNALS
38 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
43 qtblptr = & cinfo->quant_tbl_ptrs[
which_tbl];
51 if (temp <= 0L) temp = 1L;
52 if (temp > 32767L) temp = 32767L;
55 (*qtblptr)->quantval[
i] = (
UINT16) temp;
59 (*qtblptr)->sent_table =
FALSE;
76 static const unsigned int std_luminance_quant_tbl[
DCTSIZE2] = {
77 16, 11, 10, 16, 24, 40, 51, 61,
78 12, 12, 14, 19, 26, 58, 60, 55,
79 14, 13, 16, 24, 40, 57, 69, 56,
80 14, 17, 22, 29, 51, 87, 80, 62,
81 18, 22, 37, 56, 68, 109, 103, 77,
82 24, 35, 55, 64, 81, 104, 113, 92,
83 49, 64, 78, 87, 103, 121, 120, 101,
84 72, 92, 95, 98, 112, 100, 103, 99
86 static const unsigned int std_chrominance_quant_tbl[
DCTSIZE2] = {
87 17, 18, 24, 47, 99, 99, 99, 99,
88 18, 21, 26, 66, 99, 99, 99, 99,
89 24, 26, 56, 99, 99, 99, 99, 99,
90 47, 66, 99, 99, 99, 99, 99, 99,
91 99, 99, 99, 99, 99, 99, 99, 99,
92 99, 99, 99, 99, 99, 99, 99, 99,
93 99, 99, 99, 99, 99, 99, 99, 99,
94 99, 99, 99, 99, 99, 99, 99, 99
158 if (*htblptr == NULL)
169 for (len = 1; len <= 16; len++)
170 nsymbols += bits[len];
171 if (nsymbols < 1 || nsymbols > 256)
172 ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
177 (*htblptr)->sent_table =
FALSE;
186 static const UINT8 bits_dc_luminance[17] =
187 { 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
188 static const UINT8 val_dc_luminance[] =
189 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
191 static const UINT8 bits_dc_chrominance[17] =
192 { 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
193 static const UINT8 val_dc_chrominance[] =
194 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
196 static const UINT8 bits_ac_luminance[17] =
197 { 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
198 static const UINT8 val_ac_luminance[] =
199 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
200 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
201 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
202 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
203 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
204 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
205 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
206 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
207 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
208 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
209 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
210 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
211 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
212 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
213 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
214 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
215 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
216 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
217 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
218 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
221 static const UINT8 bits_ac_chrominance[17] =
222 { 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
223 static const UINT8 val_ac_chrominance[] =
224 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
225 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
226 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
227 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
228 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
229 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
230 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
231 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
232 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
233 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
234 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
235 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
236 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
237 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
238 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
239 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
240 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
241 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
242 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
243 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
247 bits_dc_luminance, val_dc_luminance);
249 bits_ac_luminance, val_ac_luminance);
251 bits_dc_chrominance, val_dc_chrominance);
253 bits_ac_chrominance, val_ac_chrominance);
274 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
280 if (cinfo->comp_info == NULL)
295 cinfo->arith_dc_L[
i] = 0;
296 cinfo->arith_dc_U[
i] = 1;
297 cinfo->arith_ac_K[
i] = 5;
301 cinfo->scan_info = NULL;
302 cinfo->num_scans = 0;
305 cinfo->raw_data_in =
FALSE;
308 cinfo->arith_code =
FALSE;
311 cinfo->optimize_coding =
FALSE;
317 if (cinfo->data_precision > 8)
318 cinfo->optimize_coding =
TRUE;
321 cinfo->CCIR601_sampling =
FALSE;
324 cinfo->smoothing_factor = 0;
330 cinfo->restart_interval = 0;
331 cinfo->restart_in_rows = 0;
342 cinfo->JFIF_major_version = 1;
343 cinfo->JFIF_minor_version = 1;
344 cinfo->density_unit = 0;
345 cinfo->X_density = 1;
346 cinfo->Y_density = 1;
361 switch (cinfo->in_color_space) {
381 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
396 #define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \
397 (compptr = &cinfo->comp_info[index], \
398 compptr->component_id = (id), \
399 compptr->h_samp_factor = (hsamp), \
400 compptr->v_samp_factor = (vsamp), \
401 compptr->quant_tbl_no = (quant), \
402 compptr->dc_tbl_no = (dctbl), \
403 compptr->ac_tbl_no = (actbl) )
407 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
415 cinfo->write_JFIF_header =
FALSE;
416 cinfo->write_Adobe_marker =
FALSE;
420 cinfo->write_JFIF_header =
TRUE;
421 cinfo->num_components = 1;
426 cinfo->write_Adobe_marker =
TRUE;
427 cinfo->num_components = 3;
433 cinfo->write_JFIF_header =
TRUE;
434 cinfo->num_components = 3;
442 cinfo->write_Adobe_marker =
TRUE;
443 cinfo->num_components = 4;
450 cinfo->write_Adobe_marker =
TRUE;
451 cinfo->num_components = 4;
458 cinfo->num_components = cinfo->input_components;
459 if (cinfo->num_components < 1 || cinfo->num_components >
MAX_COMPONENTS)
460 ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
462 for (ci = 0; ci < cinfo->num_components; ci++) {
467 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
472 #ifdef C_PROGRESSIVE_SUPPORTED
476 int Ss,
int Se,
int Ah,
int Al)
479 scanptr->comps_in_scan = 1;
480 scanptr->component_index[0] = ci;
491 int Ss,
int Se,
int Ah,
int Al)
496 for (ci = 0; ci < ncomps; ci++) {
497 scanptr->comps_in_scan = 1;
498 scanptr->component_index[0] = ci;
516 scanptr->comps_in_scan = ncomps;
517 for (ci = 0; ci < ncomps; ci++)
518 scanptr->component_index[ci] = ci;
519 scanptr->Ss = scanptr->Se = 0;
525 scanptr =
fill_scans(scanptr, ncomps, 0, 0, Ah, Al);
539 int ncomps = cinfo->num_components;
545 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
548 if (ncomps == 3 && cinfo->jpeg_color_space ==
JCS_YCbCr) {
556 nscans = 2 + 4 * ncomps;
566 if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {
567 cinfo->script_space_size =
MAX(nscans, 10);
572 scanptr = cinfo->script_space;
573 cinfo->scan_info = scanptr;
574 cinfo->num_scans = nscans;
576 if (ncomps == 3 && cinfo->jpeg_color_space ==
JCS_YCbCr) {
600 scanptr =
fill_scans(scanptr, ncomps, 1, 5, 0, 2);
601 scanptr =
fill_scans(scanptr, ncomps, 6, 63, 0, 2);
603 scanptr =
fill_scans(scanptr, ncomps, 1, 63, 2, 1);
606 scanptr =
fill_scans(scanptr, ncomps, 1, 63, 1, 0);