125 int ci, mcublks, tmp;
128 if (cinfo->comps_in_scan == 1) {
131 compptr = cinfo->cur_comp_info[0];
134 cinfo->MCUs_per_row = compptr->width_in_blocks;
135 cinfo->MCU_rows_in_scan = compptr->height_in_blocks;
138 compptr->MCU_width = 1;
139 compptr->MCU_height = 1;
140 compptr->MCU_blocks = 1;
141 compptr->MCU_sample_width = compptr->DCT_scaled_size;
142 compptr->last_col_width = 1;
146 tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
147 if (tmp == 0) tmp = compptr->v_samp_factor;
148 compptr->last_row_height = tmp;
151 cinfo->blocks_in_MCU = 1;
152 cinfo->MCU_membership[0] = 0;
157 if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
158 ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan,
162 cinfo->MCUs_per_row = (JDIMENSION)
163 jdiv_round_up((long) cinfo->image_width,
164 (long) (cinfo->max_h_samp_factor*DCTSIZE));
165 cinfo->MCU_rows_in_scan = (JDIMENSION)
166 jdiv_round_up((long) cinfo->image_height,
167 (long) (cinfo->max_v_samp_factor*DCTSIZE));
169 cinfo->blocks_in_MCU = 0;
171 for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
172 compptr = cinfo->cur_comp_info[ci];
174 compptr->MCU_width = compptr->h_samp_factor;
175 compptr->MCU_height = compptr->v_samp_factor;
176 compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
177 compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size;
179 tmp = (int) (compptr->width_in_blocks % compptr->MCU_width);
180 if (tmp == 0) tmp = compptr->MCU_width;
181 compptr->last_col_width = tmp;
182 tmp = (int) (compptr->height_in_blocks % compptr->MCU_height);
183 if (tmp == 0) tmp = compptr->MCU_height;
184 compptr->last_row_height = tmp;
186 mcublks = compptr->MCU_blocks;
187 if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU)
188 ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
189 while (mcublks-- > 0) {
190 cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;