10 #define JPEG_INTERNALS    89         jpeg_marker_parser_method process_APPn[16];
    93         unsigned int length_limit_APPn[16];
   112 #define INPUT_VARS(cinfo)                                     \   113         struct jpeg_source_mgr* datasrc = (cinfo)->src;           \   114         const JOCTET* next_input_byte = datasrc->next_input_byte; \   115         size_t bytes_in_buffer = datasrc->bytes_in_buffer   118 #define INPUT_SYNC(cinfo)                        \   119         (datasrc->next_input_byte = next_input_byte, \   120          datasrc->bytes_in_buffer = bytes_in_buffer)   123 #define INPUT_RELOAD(cinfo)                      \   124         (next_input_byte = datasrc->next_input_byte, \   125          bytes_in_buffer = datasrc->bytes_in_buffer)   131 #define MAKE_BYTE_AVAIL(cinfo, action)             \   132         if (bytes_in_buffer == 0)                      \   134                 if (!(*datasrc->fill_input_buffer)(cinfo)) \   138                 INPUT_RELOAD(cinfo);                       \   144 #define INPUT_BYTE(cinfo, V, action)                       \   146                 MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--; \   147                 V = GETJOCTET(*next_input_byte++);)   152 #define INPUT_2BYTES(cinfo, V, action)                          \   154                 MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--;      \   155                 V = ((unsigned int)GETJOCTET(*next_input_byte++)) << 8; \   156                 MAKE_BYTE_AVAIL(cinfo, action); bytes_in_buffer--;      \   157                 V += GETJOCTET(*next_input_byte++);)   197         if (cinfo->marker->saw_SOI) 
ERREXIT(cinfo, JERR_SOI_DUPLICATE);
   203                 cinfo->arith_dc_L[i] = 0;
   204                 cinfo->arith_dc_U[i] = 1;
   205                 cinfo->arith_ac_K[i] = 5;
   207         cinfo->restart_interval = 0;
   212         cinfo->CCIR601_sampling = 
FALSE; 
   214         cinfo->saw_JFIF_marker = 
FALSE;
   215         cinfo->JFIF_major_version = 1; 
   216         cinfo->JFIF_minor_version = 1;
   217         cinfo->density_unit = 0;
   218         cinfo->X_density = 1;
   219         cinfo->Y_density = 1;
   220         cinfo->saw_Adobe_marker = 
FALSE;
   221         cinfo->Adobe_transform = 0;
   223         cinfo->marker->saw_SOI = 
TRUE;
   237         cinfo->progressive_mode = is_prog;
   238         cinfo->arith_code = is_arith;
   250                 cinfo, 1, JTRC_SOF, cinfo->unread_marker, (
int)cinfo->image_width,
   251                 (
int)cinfo->image_height, cinfo->num_components);
   253         if (cinfo->marker->saw_SOF) 
ERREXIT(cinfo, JERR_SOF_DUPLICATE);
   259         if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
   260                 cinfo->num_components <= 0)
   261                 ERREXIT(cinfo, JERR_EMPTY_IMAGE);
   263         if (
length != (cinfo->num_components * 3)) 
ERREXIT(cinfo, JERR_BAD_LENGTH);
   265         if (cinfo->comp_info == 
nullptr) 
   270         for (ci = 0, 
compptr = cinfo->comp_info; ci < cinfo->num_components;
   286         cinfo->marker->saw_SOF = 
TRUE;
   301         if (!cinfo->marker->saw_SOF) 
ERREXIT(cinfo, JERR_SOS_NO_SOF);
   310                 ERREXIT(cinfo, JERR_BAD_LENGTH);
   312         cinfo->comps_in_scan = 
n;
   316         for (i = 0; i < 
n; i++)
   321                 for (ci = 0, 
compptr = cinfo->comp_info; ci < cinfo->num_components;
   327                 ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
   331                 cinfo->cur_comp_info[i] = 
compptr;
   346         cinfo->Ah = (
c >> 4) & 15;
   350                 cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
   353         cinfo->marker->next_restart_num = 0;
   356         cinfo->input_scan_number++;
   362 #ifdef D_ARITH_CODING_SUPPORTED   408 #define get_dac(cinfo) skip_variable(cinfo)   434                 for (i = 1; i <= 16; i++)
   443                         cinfo, 2, JTRC_HUFFBITS, bits[1], bits[2], bits[3], bits[4],
   444                         bits[5], bits[6], bits[7], bits[8]);
   446                         cinfo, 2, JTRC_HUFFBITS, bits[9], bits[10], bits[11], bits[12],
   447                         bits[13], bits[14], bits[15], bits[16]);
   453                         ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
   462                         htblptr = &cinfo->ac_huff_tbl_ptrs[
index];
   466                         htblptr = &cinfo->dc_huff_tbl_ptrs[
index];
   472                 if (*htblptr == 
nullptr)
   476                 MEMCOPY((*htblptr)->huffval, huffval, 
SIZEOF((*htblptr)->huffval));
   508                 if (cinfo->quant_tbl_ptrs[
n] == 
nullptr)
   509                         cinfo->quant_tbl_ptrs[
n] =
   511                 quant_ptr = cinfo->quant_tbl_ptrs[
n];
   523                 if (cinfo->err->trace_level >= 2)
   528                                         cinfo, 2, JTRC_QUANTVALS, quant_ptr->
quantval[i],
   562         cinfo->restart_interval = tmp;
   575 #define APP0_DATA_LEN 14    576 #define APP14_DATA_LEN 12    577 #define APPN_DATA_LEN 14    595                 cinfo->saw_JFIF_marker = 
TRUE;
   608                 if (cinfo->JFIF_major_version != 1)
   610                                 cinfo, JWRN_JFIF_MAJOR, cinfo->JFIF_major_version,
   611                                 cinfo->JFIF_minor_version);
   614                         cinfo, 1, JTRC_JFIF, cinfo->JFIF_major_version,
   615                         cinfo->JFIF_minor_version, cinfo->X_density, cinfo->Y_density,
   616                         cinfo->density_unit);
   625                         TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (
int)totallen);
   639                                 TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (
int)totallen);
   642                                 TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (
int)totallen);
   645                                 TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (
int)totallen);
   657                 TRACEMS1(cinfo, 1, JTRC_APP0, (
int)totallen);
   670         unsigned int version, flags0, flags1, 
transform;
   682                 cinfo->saw_Adobe_marker = 
TRUE;
   688                 TRACEMS1(cinfo, 1, JTRC_APP14, (
int)(datalen + remaining));
   698         unsigned int i, numtoread;
   708                 numtoread = (
unsigned int)
length;
   715         switch (cinfo->unread_marker)
   726                         ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
   732         if (
length > 0) (*cinfo->src->skip_input_data)(cinfo, (
long)
length);
   737 #ifdef SAVE_MARKERS_SUPPORTED   745         unsigned int bytes_read, data_length;
   750         if (cur_marker == 
nullptr)
   759                         if (cinfo->unread_marker == (
int)
M_COM)
   760                                 limit = marker->length_limit_COM;
   764                                                 ->length_limit_APPn[cinfo->unread_marker - (int)
M_APP0];
   770                         cur_marker->next = 
nullptr;
   771                         cur_marker->marker = (
UINT8)cinfo->unread_marker;
   772                         cur_marker->original_length = (
unsigned int)
length;
   773                         cur_marker->data_length = 
limit;
   776                         marker->cur_marker = cur_marker;
   777                         marker->bytes_read = 0;
   784                         bytes_read = data_length = 0;
   791                 bytes_read = marker->bytes_read;
   792                 data_length = cur_marker->data_length;
   793                 data = cur_marker->data + bytes_read;
   796         while (bytes_read < data_length)
   799                 marker->bytes_read = bytes_read;
   803                 while (bytes_read < data_length && bytes_in_buffer > 0)
   805                         *
data++ = *next_input_byte++;
   812         if (cur_marker != 
nullptr)
   815                 if (cinfo->marker_list == 
nullptr)
   817                         cinfo->marker_list = cur_marker;
   822                         while (prev->next != 
nullptr) prev = prev->next;
   823                         prev->next = cur_marker;
   826                 data = cur_marker->data;
   827                 length = cur_marker->original_length - data_length;
   830         marker->cur_marker = 
nullptr;
   833         switch (cinfo->unread_marker)
   843                                 cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker,
   844                                 (
int)(data_length + 
length));
   850         if (
length > 0) (*cinfo->src->skip_input_data)(cinfo, (
long)
length);
   867         TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (
int)
length);
   870         if (
length > 0) (*cinfo->src->skip_input_data)(cinfo, (
long)
length);
   901                         cinfo->marker->discarded_bytes++;
   918                 cinfo->marker->discarded_bytes += 2;
   922         if (cinfo->marker->discarded_bytes != 0)
   924                 WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, 
c);
   925                 cinfo->marker->discarded_bytes = 0;
   928         cinfo->unread_marker = 
c;
   948         if (
c != 0xFF || c2 != (
int)
M_SOI) 
ERREXIT2(cinfo, JERR_NO_SOI, 
c, c2);
   950         cinfo->unread_marker = c2;
   971                 if (cinfo->unread_marker == 0)
   973                         if (!cinfo->marker->saw_SOI)
   987                 switch (cinfo->unread_marker)
  1020                                 ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
  1025                                 cinfo->unread_marker = 0; 
  1030                                 cinfo->unread_marker = 0; 
  1066                                                    ->process_APPn[cinfo->unread_marker - (
int)
M_APP0])(
  1085                                 TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
  1101                                 ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
  1105                 cinfo->unread_marker = 0;
  1126         if (cinfo->unread_marker == 0)
  1131         if (cinfo->unread_marker == ((
int)
M_RST0 + cinfo->marker->next_restart_num))
  1135                 TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
  1136                 cinfo->unread_marker = 0;
  1142                 if (!(*cinfo->src->resync_to_restart)(
  1143                                 cinfo, cinfo->marker->next_restart_num))
  1148         cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
  1205         int marker = cinfo->unread_marker;
  1209         WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
  1214                 if (marker < (
int)
M_SOF0)
  1220                         if (marker == ((
int)
M_RST0 + ((desired + 1) & 7)) ||
  1221                                 marker == ((
int)
M_RST0 + ((desired + 2) & 7)))
  1224                                 marker == ((
int)
M_RST0 + ((desired - 1) & 7)) ||
  1225                                 marker == ((
int)
M_RST0 + ((desired - 2) & 7)))
  1230                 TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
  1235                                 cinfo->unread_marker = 0;
  1240                                 marker = cinfo->unread_marker;
  1260         cinfo->comp_info = 
nullptr; 
  1261         cinfo->input_scan_number = 0; 
  1262         cinfo->unread_marker = 0; 
  1265         marker->
pub.discarded_bytes = 0;
  1266         marker->cur_marker = 
nullptr;
  1293         marker->length_limit_COM = 0;
  1294         for (i = 0; i < 16; i++)
  1297                 marker->length_limit_APPn[i] = 0;
  1309 #ifdef SAVE_MARKERS_SUPPORTED  1317         jpeg_marker_parser_method processor;
  1323         if (((
long)length_limit) > maxlength)
  1324                 length_limit = (
unsigned int)maxlength;
  1342                 if (marker_code == (
int)
M_APP0 || marker_code == (int)
M_APP14)
  1346         if (marker_code == (
int)
M_COM)
  1348                 marker->process_COM = processor;
  1349                 marker->length_limit_COM = length_limit;
  1351         else if (marker_code >= (
int)
M_APP0 && marker_code <= (int)
M_APP15)
  1353                 marker->process_APPn[marker_code - (int)
M_APP0] = processor;
  1354                 marker->length_limit_APPn[marker_code - (int)
M_APP0] = length_limit;
  1357                 ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
  1368         j_decompress_ptr cinfo, 
int marker_code, jpeg_marker_parser_method routine)
  1372         if (marker_code == (
int)
M_COM)
  1373                 marker->process_COM = routine;
  1374         else if (marker_code >= (
int)
M_APP0 && marker_code <= (int)
M_APP15)
  1375                 marker->process_APPn[marker_code - (int)
M_APP0] = routine;
  1377                 ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
 #define INPUT_VARS(cinfo)
jinit_marker_reader(j_decompress_ptr cinfo)
#define INPUT_2BYTES(cinfo, V, action)
GLuint GLuint GLsizei count
UINT16 quantval[DCTSIZE2]
get_sof(j_decompress_ptr cinfo, boolean is_prog, boolean is_arith)
first_marker(j_decompress_ptr cinfo)
skip_variable(j_decompress_ptr cinfo)
#define MAX_COMPS_IN_SCAN
UINT8 arith_dc_U[NUM_ARITH_TBLS]
const int jpeg_natural_order[]
struct jpeg_common_struct * j_common_ptr
#define ERREXIT(cinfo, code)
#define TRACEMS2(cinfo, lvl, code, p1, p2)
struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr
read_markers(j_decompress_ptr cinfo)
my_marker_reader * my_marker_ptr
#define INPUT_BYTE(cinfo, V, action)
UINT8 arith_dc_L[NUM_ARITH_TBLS]
#define TRACEMS(cinfo, lvl, code)
get_sos(j_decompress_ptr cinfo)
#define WARNMS2(cinfo, code, p1, p2)
jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired)
UINT8 arith_ac_K[NUM_ARITH_TBLS]
#define TRACEMS1(cinfo, lvl, code, p1)
#define MEMCOPY(dest, src, size)
read_restart_marker(j_decompress_ptr cinfo)
#define TRACEMS5(cinfo, lvl, code, p1, p2, p3, p4, p5)
save_marker(j_decompress_ptr cinfo)
jpeg_alloc_huff_table(j_common_ptr cinfo)
examine_app0(j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
jpeg_marker_parser_method process_COM
reset_marker_reader(j_decompress_ptr cinfo)
get_dht(j_decompress_ptr cinfo)
jpeg_alloc_quant_table(j_common_ptr cinfo)
#define ERREXIT1(cinfo, code, p1)
get_dqt(j_decompress_ptr cinfo)
jpeg_save_markers(j_decompress_ptr cinfo, int marker_code, unsigned int length_limit)
next_marker(j_decompress_ptr cinfo)
GLuint GLsizei GLsizei * length
#define MAKE_BYTE_AVAIL(cinfo, action)
get_dri(j_decompress_ptr cinfo)
#define TRACEMS8(cinfo, lvl, code, p1, p2, p3, p4, p5, p6, p7, p8)
get_soi(j_decompress_ptr cinfo)
struct jpeg_marker_writer pub
#define TRACEMS3(cinfo, lvl, code, p1, p2, p3)
jpeg_saved_marker_ptr cur_marker
#define TRACEMS4(cinfo, lvl, code, p1, p2, p3, p4)
jpeg_set_marker_processor(j_decompress_ptr cinfo, int marker_code, jpeg_marker_parser_method routine)
GLuint GLenum GLenum transform
#define ERREXIT2(cinfo, code, p1, p2)
GLsizei GLsizei GLenum GLenum const GLvoid * data
unsigned int length_limit_COM
#define INPUT_SYNC(cinfo)
examine_app14(j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
jpeg_component_info * compptr
get_interesting_appn(j_decompress_ptr cinfo)