13 #define JPEG_INTERNALS 38 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
41 ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl);
43 qtblptr = & cinfo->quant_tbl_ptrs[
which_tbl];
49 temp = ((
long) basic_table[i] * scale_factor + 50L) / 100L;
51 if (temp <= 0L) temp = 1L;
52 if (temp > 32767L) temp = 32767L;
53 if (force_baseline && temp > 255L)
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)
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);
char int boolean force_baseline
jpeg_default_colorspace(j_compress_ptr cinfo)
struct jpeg_common_struct * j_common_ptr
#define ERREXIT(cinfo, code)
jpeg_alloc_huff_table(j_common_ptr cinfo)
jpeg_component_info * compptr
fill_dc_scans(jpeg_scan_info *scanptr, int ncomps, int Ah, int Al)
std_huff_tables(j_compress_ptr cinfo)
fill_scans(jpeg_scan_info *scanptr, int ncomps, int Ss, int Se, int Ah, int Al)
int const unsigned int * basic_table
jpeg_set_linear_quality(j_compress_ptr cinfo, int scale_factor, boolean force_baseline)
#define MEMCOPY(dest, src, size)
typedef long(ZCALLBACK *tell_file_func) OF((voidpf opaque
jpeg_simple_progression(j_compress_ptr cinfo)
#define ERREXIT1(cinfo, code, p1)
jpeg_add_quant_table(j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline)
jpeg_alloc_quant_table(j_common_ptr cinfo)
add_huff_table(j_compress_ptr cinfo, JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val)
jpeg_set_colorspace(j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
jpeg_set_defaults(j_compress_ptr cinfo)
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
fill_a_scan(jpeg_scan_info *scanptr, int ci, int Ss, int Se, int Ah, int Al)
#define ERREXIT2(cinfo, code, p1, p2)
#define SET_COMP(index, id, hsamp, vsamp, quant, dctbl, actbl)
jpeg_quality_scaling(int quality)
jpeg_set_quality(j_compress_ptr cinfo, int quality, boolean force_baseline)
#define MAX_COMPS_IN_SCAN