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
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);
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) {
553 if (ncomps > MAX_COMPS_IN_SCAN)
556 nscans = 2 + 4 * ncomps;
566 if (cinfo->script_space ==
NULL || cinfo->script_space_size < nscans) {
567 cinfo->script_space_size = MAX(nscans, 10);
568 cinfo->script_space = (jpeg_scan_info *)
569 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
570 cinfo->script_space_size * SIZEOF(jpeg_scan_info));
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) {
579 scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
581 scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2);
583 scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1);
584 scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1);
586 scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2);
588 scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1);
590 scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
592 scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0);
593 scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0);
595 fill_a_scan(scanptr, 0, 1, 63, 1, 0);
599 scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
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);
605 scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
606 fill_scans(scanptr, ncomps, 1, 63, 1, 0);