10 #define JPEG_INTERNALS 35 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
40 qtblptr = & cinfo->quant_tbl_ptrs[
which_tbl];
48 if (temp <= 0L) temp = 1L;
49 if (temp > 32767L) temp = 32767L;
52 (*qtblptr)->quantval[i] = (
UINT16) temp;
56 (*qtblptr)->sent_table =
FALSE;
73 static const unsigned int std_luminance_quant_tbl[
DCTSIZE2] = {
74 16, 11, 10, 16, 24, 40, 51, 61,
75 12, 12, 14, 19, 26, 58, 60, 55,
76 14, 13, 16, 24, 40, 57, 69, 56,
77 14, 17, 22, 29, 51, 87, 80, 62,
78 18, 22, 37, 56, 68, 109, 103, 77,
79 24, 35, 55, 64, 81, 104, 113, 92,
80 49, 64, 78, 87, 103, 121, 120, 101,
81 72, 92, 95, 98, 112, 100, 103, 99
83 static const unsigned int std_chrominance_quant_tbl[
DCTSIZE2] = {
84 17, 18, 24, 47, 99, 99, 99, 99,
85 18, 21, 26, 66, 99, 99, 99, 99,
86 24, 26, 56, 99, 99, 99, 99, 99,
87 47, 66, 99, 99, 99, 99, 99, 99,
88 99, 99, 99, 99, 99, 99, 99, 99,
89 99, 99, 99, 99, 99, 99, 99, 99,
90 99, 99, 99, 99, 99, 99, 99, 99,
91 99, 99, 99, 99, 99, 99, 99, 99
155 if (*htblptr == NULL)
167 nsymbols += bits[
len];
168 if (nsymbols < 1 || nsymbols > 256)
169 ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
174 (*htblptr)->sent_table =
FALSE;
183 static const UINT8 bits_dc_luminance[17] =
184 { 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
185 static const UINT8 val_dc_luminance[] =
186 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
188 static const UINT8 bits_dc_chrominance[17] =
189 { 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
190 static const UINT8 val_dc_chrominance[] =
191 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
193 static const UINT8 bits_ac_luminance[17] =
194 { 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
195 static const UINT8 val_ac_luminance[] =
196 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
197 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
198 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
199 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
200 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
201 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
202 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
203 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
204 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
205 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
206 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
207 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
208 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
209 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
210 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
211 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
212 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
213 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
214 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
215 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
218 static const UINT8 bits_ac_chrominance[17] =
219 { 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
220 static const UINT8 val_ac_chrominance[] =
221 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
222 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
223 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
224 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
225 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
226 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
227 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
228 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
229 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
230 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
231 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
232 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
233 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
234 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
235 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
236 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
237 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
238 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
239 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
240 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
244 bits_dc_luminance, val_dc_luminance);
246 bits_ac_luminance, val_ac_luminance);
248 bits_dc_chrominance, val_dc_chrominance);
250 bits_ac_chrominance, val_ac_chrominance);
271 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
277 if (cinfo->comp_info == NULL)
292 cinfo->arith_dc_L[i] = 0;
293 cinfo->arith_dc_U[i] = 1;
294 cinfo->arith_ac_K[i] = 5;
298 cinfo->scan_info = NULL;
299 cinfo->num_scans = 0;
302 cinfo->raw_data_in =
FALSE;
305 cinfo->arith_code =
FALSE;
308 cinfo->optimize_coding =
FALSE;
314 if (cinfo->data_precision > 8)
315 cinfo->optimize_coding =
TRUE;
318 cinfo->CCIR601_sampling =
FALSE;
321 cinfo->smoothing_factor = 0;
327 cinfo->restart_interval = 0;
328 cinfo->restart_in_rows = 0;
339 cinfo->JFIF_major_version = 1;
340 cinfo->JFIF_minor_version = 1;
341 cinfo->density_unit = 0;
342 cinfo->X_density = 1;
343 cinfo->Y_density = 1;
358 switch (cinfo->in_color_space) {
378 ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
393 #define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ 394 (compptr = &cinfo->comp_info[index], \ 395 compptr->component_id = (id), \ 396 compptr->h_samp_factor = (hsamp), \ 397 compptr->v_samp_factor = (vsamp), \ 398 compptr->quant_tbl_no = (quant), \ 399 compptr->dc_tbl_no = (dctbl), \ 400 compptr->ac_tbl_no = (actbl) ) 404 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
412 cinfo->write_JFIF_header =
FALSE;
413 cinfo->write_Adobe_marker =
FALSE;
417 cinfo->write_JFIF_header =
TRUE;
418 cinfo->num_components = 1;
423 cinfo->write_Adobe_marker =
TRUE;
424 cinfo->num_components = 3;
430 cinfo->write_JFIF_header =
TRUE;
431 cinfo->num_components = 3;
439 cinfo->write_Adobe_marker =
TRUE;
440 cinfo->num_components = 4;
447 cinfo->write_Adobe_marker =
TRUE;
448 cinfo->num_components = 4;
455 cinfo->num_components = cinfo->input_components;
456 if (cinfo->num_components < 1 || cinfo->num_components >
MAX_COMPONENTS)
457 ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
459 for (ci = 0; ci < cinfo->num_components; ci++) {
464 ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
469 #ifdef C_PROGRESSIVE_SUPPORTED 473 int Ss,
int Se,
int Ah,
int Al)
476 scanptr->comps_in_scan = 1;
477 scanptr->component_index[0] = ci;
488 int Ss,
int Se,
int Ah,
int Al)
493 for (ci = 0; ci < ncomps; ci++) {
494 scanptr->comps_in_scan = 1;
495 scanptr->component_index[0] = ci;
513 scanptr->comps_in_scan = ncomps;
514 for (ci = 0; ci < ncomps; ci++)
515 scanptr->component_index[ci] = ci;
516 scanptr->Ss = scanptr->Se = 0;
522 scanptr =
fill_scans(scanptr, ncomps, 0, 0, Ah, Al);
536 int ncomps = cinfo->num_components;
542 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
545 if (ncomps == 3 && cinfo->jpeg_color_space ==
JCS_YCbCr) {
553 nscans = 2 + 4 * ncomps;
563 if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {
564 cinfo->script_space_size =
MAX(nscans, 10);
569 scanptr = cinfo->script_space;
570 cinfo->scan_info = scanptr;
571 cinfo->num_scans = nscans;
573 if (ncomps == 3 && cinfo->jpeg_color_space ==
JCS_YCbCr) {
597 scanptr =
fill_scans(scanptr, ncomps, 1, 5, 0, 2);
598 scanptr =
fill_scans(scanptr, ncomps, 6, 63, 0, 2);
600 scanptr =
fill_scans(scanptr, ncomps, 1, 63, 2, 1);
603 scanptr =
fill_scans(scanptr, ncomps, 1, 63, 1, 0);
fill_dc_scans(jpeg_scan_info *scanptr, int ncomps, int Ah, int Al)
fill_a_scan(jpeg_scan_info *scanptr, int ci, int Ss, int Se, int Ah, int Al)
jpeg_set_quality(j_compress_ptr cinfo, int quality, boolean force_baseline)
add_huff_table(j_compress_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val)
#define SET_COMP(index, id, hsamp, vsamp, quant, dctbl, actbl)
jpeg_set_linear_quality(j_compress_ptr cinfo, int scale_factor, boolean force_baseline)
#define MAX_COMPS_IN_SCAN
jpeg_set_defaults(j_compress_ptr cinfo)
struct jpeg_common_struct * j_common_ptr
std_huff_tables(j_compress_ptr cinfo)
#define ERREXIT(cinfo, code)
jpeg_component_info * compptr
#define MEMCOPY(dest, src, size)
jpeg_set_colorspace(j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
int const unsigned int * basic_table
jpeg_alloc_huff_table(j_common_ptr cinfo)
jpeg_alloc_quant_table(j_common_ptr cinfo)
#define ERREXIT1(cinfo, code, p1)
int boolean force_baseline
jpeg_simple_progression(j_compress_ptr cinfo)
fill_scans(jpeg_scan_info *scanptr, int ncomps, int Ss, int Se, int Ah, int Al)
jpeg_default_colorspace(j_compress_ptr cinfo)
#define ERREXIT2(cinfo, code, p1, p2)
jpeg_add_quant_table(j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline)
jpeg_quality_scaling(int quality)