190{
191 jpeg_saved_marker_ptr marker;
192 int num_markers = 0;
193 int seq_no;
194 JOCTET *icc_data;
195 unsigned int total_length;
196#define MAX_SEQ_NO 255
200
201 *icc_data_ptr = 0;
202 *icc_data_len = 0;
203
204
205
206
207
208 for (seq_no = 1; seq_no <=
MAX_SEQ_NO; seq_no++)
209 marker_present[seq_no] = 0;
210
211 for (marker = cinfo->marker_list; marker != 0; marker = marker->next) {
213 if (num_markers == 0)
214 num_markers = GETJOCTET(marker->data[13]);
215 else if (num_markers != GETJOCTET(marker->data[13]))
216 return FALSE;
217 seq_no = GETJOCTET(marker->data[12]);
218 if (seq_no <= 0 || seq_no > num_markers)
219 return FALSE;
220 if (marker_present[seq_no])
221 return FALSE;
222 marker_present[seq_no] = 1;
224 }
225 }
226
227 if (num_markers == 0)
228 return FALSE;
229
230
231
232
233
234 total_length = 0;
235 for (seq_no = 1; seq_no <= num_markers; seq_no++) {
236 if (marker_present[seq_no] == 0)
237 return FALSE;
238 data_offset[seq_no] = total_length;
239 total_length += data_length[seq_no];
240 }
241
242 if (total_length <= 0)
243 return FALSE;
244
245
246 icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET));
247 if (icc_data == 0)
248 return FALSE;
249
250
251 for (marker = cinfo->marker_list; marker != 0; marker = marker->next) {
253 JOCTET FAR *src_ptr;
254 JOCTET *dst_ptr;
256 seq_no = GETJOCTET(marker->data[12]);
257 dst_ptr = icc_data + data_offset[seq_no];
259 length = data_length[seq_no];
261 *dst_ptr++ = *src_ptr++;
262 }
263 }
264 }
265
266 *icc_data_ptr = icc_data;
267 *icc_data_len = total_length;
268
269 return TRUE;
270}
qreal length(const QPointF &vec)
static boolean marker_is_icc(jpeg_saved_marker_ptr marker)