75 const JOCTET *icc_data_ptr,
76 unsigned int icc_data_len)
78 unsigned int num_markers;
87 while (icc_data_len > 0) {
102 jpeg_write_m_byte(cinfo, 0x49);
103 jpeg_write_m_byte(cinfo, 0x43);
104 jpeg_write_m_byte(cinfo, 0x43);
105 jpeg_write_m_byte(cinfo, 0x5F);
106 jpeg_write_m_byte(cinfo, 0x50);
107 jpeg_write_m_byte(cinfo, 0x52);
108 jpeg_write_m_byte(cinfo, 0x4F);
109 jpeg_write_m_byte(cinfo, 0x46);
110 jpeg_write_m_byte(cinfo, 0x49);
111 jpeg_write_m_byte(cinfo, 0x4C);
112 jpeg_write_m_byte(cinfo, 0x45);
113 jpeg_write_m_byte(cinfo, 0x0);
116 jpeg_write_m_byte(cinfo, cur_marker);
117 jpeg_write_m_byte(cinfo, (
int) num_markers);
121 jpeg_write_m_byte(cinfo, *icc_data_ptr);
152 GETJOCTET(marker->data[0]) == 0x49 &&
153 GETJOCTET(marker->data[1]) == 0x43 &&
154 GETJOCTET(marker->data[2]) == 0x43 &&
155 GETJOCTET(marker->data[3]) == 0x5F &&
156 GETJOCTET(marker->data[4]) == 0x50 &&
157 GETJOCTET(marker->data[5]) == 0x52 &&
158 GETJOCTET(marker->data[6]) == 0x4F &&
159 GETJOCTET(marker->data[7]) == 0x46 &&
160 GETJOCTET(marker->data[8]) == 0x49 &&
161 GETJOCTET(marker->data[9]) == 0x4C &&
162 GETJOCTET(marker->data[10]) == 0x45 &&
163 GETJOCTET(marker->data[11]) == 0x0;
188 JOCTET **icc_data_ptr,
189 unsigned int *icc_data_len)
191 jpeg_saved_marker_ptr marker;
195 unsigned int total_length;
196#define MAX_SEQ_NO 255
208 for (seq_no = 1; seq_no <=
MAX_SEQ_NO; seq_no++)
209 marker_present[seq_no] = 0;
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]))
217 seq_no = GETJOCTET(marker->data[12]);
218 if (seq_no <= 0 || seq_no > num_markers)
220 if (marker_present[seq_no])
222 marker_present[seq_no] = 1;
227 if (num_markers == 0)
235 for (seq_no = 1; seq_no <= num_markers; seq_no++) {
236 if (marker_present[seq_no] == 0)
238 data_offset[seq_no] = total_length;
239 total_length += data_length[seq_no];
242 if (total_length <= 0)
246 icc_data = (JOCTET *) malloc(total_length *
sizeof(JOCTET));
251 for (marker = cinfo->marker_list; marker != 0; marker = marker->next) {
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++;
266 *icc_data_ptr = icc_data;
267 *icc_data_len = total_length;