Lines Matching full:marker
15 * suspension: if not all of the data for a marker is available,
17 * the marker.
25 typedef enum { /* JPEG marker codes */
98 /* Application-overridable marker processing methods */
102 /* Limit on marker data length to save for each marker type */
106 /* Status of COM/APPn marker saving */
107 jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */
108 unsigned int bytes_read; /* data bytes read so far in marker */
173 * Entry condition: JPEG marker itself has been read and its code saved
174 * in cinfo->unread_marker; input restart point is just after the marker.
179 * marker parameters; restart point has not been moved. Same routine
182 * This approach to suspension assumes that all of a marker's parameters
185 * that might not fit. If we are simply dropping such a marker, we use
187 * source manager's shoulders. If we are saving the marker's contents
189 * suspend, the marker processor updates the restart point to the end of
191 * On resumption, cinfo->unread_marker still contains the marker code,
192 * but the data source will point to the next chunk of marker data.
193 * The marker processor must retain internal state to deal with this.
196 * suspension occurs within marker parameters. Other side effects
203 /* Process an SOI marker */ in get_soi()
209 if (cinfo->marker->saw_SOI) in get_soi()
235 cinfo->marker->saw_SOI = TRUE; in get_soi()
243 /* Process a SOFn marker */ in get_sof()
266 if (cinfo->marker->saw_SOF) in get_sof()
298 cinfo->marker->saw_SOF = TRUE; in get_sof()
307 /* Process a SOS marker */ in get_sos()
314 if (!cinfo->marker->saw_SOF) in get_sos()
376 cinfo->marker->next_restart_num = 0; in get_sos()
378 /* Count another SOS marker */ in get_sos()
390 /* Process a DAC marker */ in get_dac()
436 /* Process a DHT marker */ in get_dht()
510 /* Process a DQT marker */ in get_dqt()
568 /* Process a DRI marker */ in get_dri()
606 * Take appropriate action if it is a JFIF marker. in examine_app0()
607 * datalen is # of bytes at data[], remaining is length of rest of marker data. in examine_app0()
618 /* Found JFIF APP0 marker: save info */ in examine_app0()
650 /* Found JFIF "JFXX" extension APP0 marker */ in examine_app0()
679 * Take appropriate action if it is an Adobe marker. in examine_app14()
680 * datalen is # of bytes at data[], remaining is length of rest of marker data. in examine_app14()
691 /* Found Adobe APP14 marker */ in examine_app14()
708 /* Process an APP0 or APP14 marker without saving it */ in get_interesting_appn()
718 /* get the interesting part of the marker data */ in get_interesting_appn()
756 /* Save an APPn or COM marker into the marker list */ in save_marker()
758 my_marker_ptr marker = (my_marker_ptr)cinfo->marker; in save_marker() local
759 jpeg_saved_marker_ptr cur_marker = marker->cur_marker; in save_marker()
766 /* begin reading a marker */ in save_marker()
773 limit = marker->length_limit_COM; in save_marker()
775 limit = marker->length_limit_APPn[cinfo->unread_marker - (int)M_APP0]; in save_marker()
778 /* allocate and initialize the marker item */ in save_marker()
783 cur_marker->marker = (UINT8)cinfo->unread_marker; in save_marker()
788 marker->cur_marker = cur_marker; in save_marker()
789 marker->bytes_read = 0; in save_marker()
798 /* resume reading a marker */ in save_marker()
799 bytes_read = marker->bytes_read; in save_marker()
806 marker->bytes_read = bytes_read; in save_marker()
819 /* Add new marker to end of list */ in save_marker()
830 /* Reset to initial state for next marker */ in save_marker()
831 marker->cur_marker = NULL; in save_marker()
833 /* Process the marker if interesting; else just make a generic trace msg */ in save_marker()
860 /* Skip over an unknown or uninteresting variable-length marker */ in skip_variable()
879 * Find the next JPEG marker, save it in cinfo->unread_marker.
880 * Returns FALSE if had to suspend before reaching a marker;
883 * Note that the result might not be a valid marker code,
901 cinfo->marker->discarded_bytes++; in next_marker()
914 break; /* found a valid marker, exit loop */ in next_marker()
918 cinfo->marker->discarded_bytes += 2; in next_marker()
922 if (cinfo->marker->discarded_bytes != 0) { in next_marker()
923 WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c); in next_marker()
924 cinfo->marker->discarded_bytes = 0; in next_marker()
936 /* Like next_marker, but used to obtain the initial SOI marker. */ in first_marker()
937 /* For this marker, we do not allow preceding garbage or fill; otherwise, in first_marker()
968 /* Outer loop repeats once for each marker. */ in read_markers()
970 /* Collect the marker proper, unless we already did. */ in read_markers()
973 if (!cinfo->marker->saw_SOI) { in read_markers()
981 /* At this point cinfo->unread_marker contains the marker code and the in read_markers()
982 * input point is just past the marker proper, but before any parameters. in read_markers()
1028 cinfo->unread_marker = 0; /* processed the marker */ in read_markers()
1033 cinfo->unread_marker = 0; /* processed the marker */ in read_markers()
1072 if (!(*((my_marker_ptr)cinfo->marker)->process_APPn[ in read_markers()
1078 if (!(*((my_marker_ptr)cinfo->marker)->process_COM) (cinfo)) in read_markers()
1102 * Once the JPEG 3 version-number marker is well defined, this code in read_markers()
1108 /* Successfully processed marker, so reset state variable */ in read_markers()
1115 * Read a restart marker, which is expected to appear next in the datastream;
1116 * if the marker is not there, take appropriate recovery action.
1121 * has already read a marker from the data source. Under normal conditions
1123 * it holds a marker which the decoder will be unable to read past.
1129 /* Obtain a marker unless we already did. */ in read_restart_marker()
1137 ((int)M_RST0 + cinfo->marker->next_restart_num)) { in read_restart_marker()
1138 /* Normal case --- swallow the marker and let entropy decoder continue */ in read_restart_marker()
1139 TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num); in read_restart_marker()
1145 cinfo->marker->next_restart_num)) in read_restart_marker()
1150 cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7; in read_restart_marker()
1163 * read_restart_marker calls resync_to_restart if it finds a marker other than
1164 * the restart marker it was expecting. (This code is *not* used unless
1166 * the marker code actually found (might be anything, except 0 or FF).
1167 * The desired restart marker number (0..7) is passed as a parameter.
1170 * Note that cinfo->unread_marker is treated as a marker appearing before
1178 * 1. Simply discard the marker and let the entropy decoder resume at next
1180 * 2. Read forward until we find another marker, discarding intervening
1182 * without having to discard data if we don't find the desired marker.
1185 * 3. Leave the marker unread (by failing to zero cinfo->unread_marker).
1187 * inserting dummy zeroes, and then we will reprocess the marker.
1189 * #2 is appropriate if we think the desired marker lies ahead, while #3 is
1190 * appropriate if the found marker is a future restart marker (indicating
1191 * that we have missed the desired restart marker, probably because it got
1193 * We apply #2 or #3 if the found marker is a restart marker no more than
1195 * found marker is not a legal JPEG marker code (it's certainly bogus data).
1196 * If the found marker is a restart marker more than 2 counts away, we do #1
1197 * (too much risk that the marker is erroneous; with luck we will be able to
1199 * For any valid non-restart JPEG marker, we apply #3. This keeps us from
1202 * any other marker would have to be bogus data in that case.
1208 int marker = cinfo->unread_marker; in jpeg_resync_to_restart() local
1212 WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired); in jpeg_resync_to_restart()
1216 if (marker < (int)M_SOF0) in jpeg_resync_to_restart()
1217 action = 2; /* invalid marker */ in jpeg_resync_to_restart()
1218 else if (marker < (int)M_RST0 || marker > (int)M_RST7) in jpeg_resync_to_restart()
1219 action = 3; /* valid non-restart marker */ in jpeg_resync_to_restart()
1221 if (marker == ((int)M_RST0 + ((desired + 1) & 7)) || in jpeg_resync_to_restart()
1222 marker == ((int)M_RST0 + ((desired + 2) & 7))) in jpeg_resync_to_restart()
1224 else if (marker == ((int)M_RST0 + ((desired - 1) & 7)) || in jpeg_resync_to_restart()
1225 marker == ((int)M_RST0 + ((desired - 2) & 7))) in jpeg_resync_to_restart()
1230 TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action); in jpeg_resync_to_restart()
1233 /* Discard marker and let entropy decoder resume processing. */ in jpeg_resync_to_restart()
1237 /* Scan to the next marker, and repeat the decision loop. */ in jpeg_resync_to_restart()
1240 marker = cinfo->unread_marker; in jpeg_resync_to_restart()
1243 /* Return without advancing past this marker. */ in jpeg_resync_to_restart()
1252 * Reset marker processing state to begin a fresh datastream.
1258 my_marker_ptr marker = (my_marker_ptr)cinfo->marker; in reset_marker_reader() local
1262 cinfo->unread_marker = 0; /* no pending marker */ in reset_marker_reader()
1263 marker->pub.saw_SOI = FALSE; /* set internal state too */ in reset_marker_reader()
1264 marker->pub.saw_SOF = FALSE; in reset_marker_reader()
1265 marker->pub.discarded_bytes = 0; in reset_marker_reader()
1266 marker->cur_marker = NULL; in reset_marker_reader()
1271 * Initialize the marker reader module.
1278 my_marker_ptr marker; in jinit_marker_reader() local
1282 marker = (my_marker_ptr) in jinit_marker_reader()
1285 cinfo->marker = (struct jpeg_marker_reader *)marker; in jinit_marker_reader()
1287 marker->pub.reset_marker_reader = reset_marker_reader; in jinit_marker_reader()
1288 marker->pub.read_markers = read_markers; in jinit_marker_reader()
1289 marker->pub.read_restart_marker = read_restart_marker; in jinit_marker_reader()
1294 marker->process_COM = skip_variable; in jinit_marker_reader()
1295 marker->length_limit_COM = 0; in jinit_marker_reader()
1297 marker->process_APPn[i] = skip_variable; in jinit_marker_reader()
1298 marker->length_limit_APPn[i] = 0; in jinit_marker_reader()
1300 marker->process_APPn[0] = get_interesting_appn; in jinit_marker_reader()
1301 marker->process_APPn[14] = get_interesting_appn; in jinit_marker_reader()
1302 /* Reset marker processing state */ in jinit_marker_reader()
1317 my_marker_ptr marker = (my_marker_ptr)cinfo->marker; in jpeg_save_markers() local
1346 marker->process_COM = processor; in jpeg_save_markers()
1347 marker->length_limit_COM = length_limit; in jpeg_save_markers()
1349 marker->process_APPn[marker_code - (int)M_APP0] = processor; in jpeg_save_markers()
1350 marker->length_limit_APPn[marker_code - (int)M_APP0] = length_limit; in jpeg_save_markers()
1366 my_marker_ptr marker = (my_marker_ptr)cinfo->marker; in jpeg_set_marker_processor() local
1369 marker->process_COM = routine; in jpeg_set_marker_processor()
1371 marker->process_APPn[marker_code - (int)M_APP0] = routine; in jpeg_set_marker_processor()