275
275
cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
276
276
((j_common_ptr) cinfo, JPOOL_IMAGE,
277
277
cinfo->num_components * SIZEOF(jpeg_component_info));
279
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
279
for (ci = 0; ci < cinfo->num_components; ci++) {
280
INPUT_BYTE(cinfo, c, return FALSE);
281
/* Check to see whether component id has already been seen */
282
/* (in violation of the spec, but unfortunately seen in some */
283
/* files). If so, create "fake" component id equal to the */
284
/* max id seen so far + 1. */
285
for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) {
286
if (c == compptr->component_id) {
287
compptr = cinfo->comp_info;
288
c = compptr->component_id;
290
for (i = 1; i < ci; i++, compptr++) {
291
if (compptr->component_id > c) c = compptr->component_id;
297
compptr->component_id = c;
281
298
compptr->component_index = ci;
282
INPUT_BYTE(cinfo, compptr->component_id, return FALSE);
283
299
INPUT_BYTE(cinfo, c, return FALSE);
284
300
compptr->h_samp_factor = (c >> 4) & 15;
285
301
compptr->v_samp_factor = (c ) & 15;
323
339
/* Collect the component-spec parameters */
325
341
for (i = 0; i < n; i++) {
326
INPUT_BYTE(cinfo, cc, return FALSE);
327
342
INPUT_BYTE(cinfo, c, return FALSE);
344
/* Detect the case where component id's are not unique, and, if so, */
345
/* create a fake component id using the same logic as in get_sof. */
346
for (ci = 0; ci < i; ci++) {
347
if (c == cinfo->cur_comp_info[ci]->component_id) {
348
c = cinfo->cur_comp_info[0]->component_id;
349
for (ci = 1; ci < i; ci++) {
350
compptr = cinfo->cur_comp_info[ci];
351
if (compptr->component_id > c) c = compptr->component_id;
329
358
for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
330
359
ci++, compptr++) {
331
if (cc == compptr->component_id)
360
if (c == compptr->component_id)
335
ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
364
ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c);
339
368
cinfo->cur_comp_info[i] = compptr;
369
INPUT_BYTE(cinfo, c, return FALSE);
340
370
compptr->dc_tbl_no = (c >> 4) & 15;
341
371
compptr->ac_tbl_no = (c ) & 15;
343
TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc,
373
TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id,
344
374
compptr->dc_tbl_no, compptr->ac_tbl_no);
456
486
if (count > 256 || ((INT32) count) > length)
457
487
ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
489
MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */
459
491
for (i = 0; i < count; i++)
460
492
INPUT_BYTE(cinfo, huffval[i], return FALSE);