ReactOS  0.4.14-dev-376-gaedba84
jdmarker.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
Include dependency graph for jdmarker.c:

Go to the source code of this file.

Classes

struct  my_marker_reader
 

Macros

#define JPEG_INTERNALS
 
#define INPUT_VARS(cinfo)
 
#define INPUT_SYNC(cinfo)
 
#define INPUT_RELOAD(cinfo)
 
#define MAKE_BYTE_AVAIL(cinfo, action)
 
#define INPUT_BYTE(cinfo, V, action)
 
#define INPUT_2BYTES(cinfo, V, action)
 
#define get_dac(cinfo)   skip_variable(cinfo)
 
#define APP0_DATA_LEN   14 /* Length of interesting data in APP0 */
 
#define APP14_DATA_LEN   12 /* Length of interesting data in APP14 */
 
#define APPN_DATA_LEN   14 /* Must be the largest of the above!! */
 

Typedefs

typedef my_marker_readermy_marker_ptr
 

Enumerations

enum  JPEG_MARKER {
  M_SOF0 = 0xc0, M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3,
  M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, M_JPG = 0xc8,
  M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, M_SOF13 = 0xcd,
  M_SOF14 = 0xce, M_SOF15 = 0xcf, M_DHT = 0xc4, M_DAC = 0xcc,
  M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, M_RST3 = 0xd3,
  M_RST4 = 0xd4, M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7,
  M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, M_DQT = 0xdb,
  M_DNL = 0xdc, M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf,
  M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, M_APP3 = 0xe3,
  M_APP4 = 0xe4, M_APP5 = 0xe5, M_APP6 = 0xe6, M_APP7 = 0xe7,
  M_APP8 = 0xe8, M_APP9 = 0xe9, M_APP10 = 0xea, M_APP11 = 0xeb,
  M_APP12 = 0xec, M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef,
  M_JPG0 = 0xf0, M_JPG8 = 0xf8, M_JPG13 = 0xfd, M_COM = 0xfe,
  M_TEM = 0x01, M_ERROR = 0x100, M_SOF0 = 0xc0, M_SOF1 = 0xc1,
  M_SOF2 = 0xc2, M_SOF3 = 0xc3, M_SOF5 = 0xc5, M_SOF6 = 0xc6,
  M_SOF7 = 0xc7, M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca,
  M_SOF11 = 0xcb, M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf,
  M_DHT = 0xc4, M_DAC = 0xcc, M_RST0 = 0xd0, M_RST1 = 0xd1,
  M_RST2 = 0xd2, M_RST3 = 0xd3, M_RST4 = 0xd4, M_RST5 = 0xd5,
  M_RST6 = 0xd6, M_RST7 = 0xd7, M_SOI = 0xd8, M_EOI = 0xd9,
  M_SOS = 0xda, M_DQT = 0xdb, M_DNL = 0xdc, M_DRI = 0xdd,
  M_DHP = 0xde, M_EXP = 0xdf, M_APP0 = 0xe0, M_APP1 = 0xe1,
  M_APP2 = 0xe2, M_APP3 = 0xe3, M_APP4 = 0xe4, M_APP5 = 0xe5,
  M_APP6 = 0xe6, M_APP7 = 0xe7, M_APP8 = 0xe8, M_APP9 = 0xe9,
  M_APP10 = 0xea, M_APP11 = 0xeb, M_APP12 = 0xec, M_APP13 = 0xed,
  M_APP14 = 0xee, M_APP15 = 0xef, M_JPG0 = 0xf0, M_JPG8 = 0xf8,
  M_JPG13 = 0xfd, M_COM = 0xfe, M_TEM = 0x01, M_ERROR = 0x100
}
 

Functions

 get_soi (j_decompress_ptr cinfo)
 
 get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, boolean is_arith)
 
 get_sos (j_decompress_ptr cinfo)
 
 get_dht (j_decompress_ptr cinfo)
 
 get_dqt (j_decompress_ptr cinfo)
 
 get_dri (j_decompress_ptr cinfo)
 
 get_lse (j_decompress_ptr cinfo)
 
 examine_app0 (j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
 
 examine_app14 (j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
 
 get_interesting_appn (j_decompress_ptr cinfo)
 
 skip_variable (j_decompress_ptr cinfo)
 
 next_marker (j_decompress_ptr cinfo)
 
 first_marker (j_decompress_ptr cinfo)
 
 read_markers (j_decompress_ptr cinfo)
 
 read_restart_marker (j_decompress_ptr cinfo)
 
 jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired)
 
 reset_marker_reader (j_decompress_ptr cinfo)
 
 jinit_marker_reader (j_decompress_ptr cinfo)
 
 jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code, jpeg_marker_parser_method routine)
 

Macro Definition Documentation

◆ APP0_DATA_LEN

#define APP0_DATA_LEN   14 /* Length of interesting data in APP0 */

Definition at line 714 of file jdmarker.c.

◆ APP14_DATA_LEN

#define APP14_DATA_LEN   12 /* Length of interesting data in APP14 */

Definition at line 715 of file jdmarker.c.

◆ APPN_DATA_LEN

#define APPN_DATA_LEN   14 /* Must be the largest of the above!! */

Definition at line 716 of file jdmarker.c.

◆ get_dac

#define get_dac (   cinfo)    skip_variable(cinfo)

Definition at line 453 of file jdmarker.c.

◆ INPUT_2BYTES

#define INPUT_2BYTES (   cinfo,
  V,
  action 
)
Value:
bytes_in_buffer--; \
V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
MAKE_BYTE_AVAIL(cinfo,action); \
bytes_in_buffer--; \
V += GETJOCTET(*next_input_byte++); )
#define GETJOCTET(value)
Definition: jmorecfg.h:171
const WCHAR * action
Definition: action.c:7783
#define MAKESTMT(stuff)
Definition: jerror.h:248
#define MAKE_BYTE_AVAIL(cinfo, action)
Definition: jdmarker.c:140
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Definition at line 158 of file jdmarker.c.

◆ INPUT_BYTE

#define INPUT_BYTE (   cinfo,
  V,
  action 
)
Value:
bytes_in_buffer--; \
V = GETJOCTET(*next_input_byte++); )
#define GETJOCTET(value)
Definition: jmorecfg.h:171
const WCHAR * action
Definition: action.c:7783
#define MAKESTMT(stuff)
Definition: jerror.h:248
#define MAKE_BYTE_AVAIL(cinfo, action)
Definition: jdmarker.c:140

Definition at line 150 of file jdmarker.c.

◆ INPUT_RELOAD

#define INPUT_RELOAD (   cinfo)
Value:
( next_input_byte = datasrc->next_input_byte, \
bytes_in_buffer = datasrc->bytes_in_buffer )

Definition at line 132 of file jdmarker.c.

◆ INPUT_SYNC

#define INPUT_SYNC (   cinfo)
Value:
( datasrc->next_input_byte = next_input_byte, \
datasrc->bytes_in_buffer = bytes_in_buffer )

Definition at line 127 of file jdmarker.c.

◆ INPUT_VARS

#define INPUT_VARS (   cinfo)
Value:
struct jpeg_source_mgr * datasrc = (cinfo)->src; \
const JOCTET * next_input_byte = datasrc->next_input_byte; \
size_t bytes_in_buffer = datasrc->bytes_in_buffer
size_t bytes_in_buffer
Definition: jpeglib.h:786
GLenum src
Definition: glext.h:6340
char JOCTET
Definition: jmorecfg.h:167
const JOCTET * next_input_byte
Definition: jpeglib.h:785

Definition at line 121 of file jdmarker.c.

◆ JPEG_INTERNALS

#define JPEG_INTERNALS

Definition at line 16 of file jdmarker.c.

◆ MAKE_BYTE_AVAIL

#define MAKE_BYTE_AVAIL (   cinfo,
  action 
)
Value:
if (bytes_in_buffer == 0) { \
if (! (*datasrc->fill_input_buffer) (cinfo)) \
{ action; } \
INPUT_RELOAD(cinfo); \
}
size_t bytes_in_buffer
Definition: jpeglib.h:786
const WCHAR * action
Definition: action.c:7783

Definition at line 140 of file jdmarker.c.

Typedef Documentation

◆ my_marker_ptr

Definition at line 109 of file jdmarker.c.

Enumeration Type Documentation

◆ JPEG_MARKER

Enumerator
M_SOF0 
M_SOF1 
M_SOF2 
M_SOF3 
M_SOF5 
M_SOF6 
M_SOF7 
M_JPG 
M_SOF9 
M_SOF10 
M_SOF11 
M_SOF13 
M_SOF14 
M_SOF15 
M_DHT 
M_DAC 
M_RST0 
M_RST1 
M_RST2 
M_RST3 
M_RST4 
M_RST5 
M_RST6 
M_RST7 
M_SOI 
M_EOI 
M_SOS 
M_DQT 
M_DNL 
M_DRI 
M_DHP 
M_EXP 
M_APP0 
M_APP1 
M_APP2 
M_APP3 
M_APP4 
M_APP5 
M_APP6 
M_APP7 
M_APP8 
M_APP9 
M_APP10 
M_APP11 
M_APP12 
M_APP13 
M_APP14 
M_APP15 
M_JPG0 
M_JPG8 
M_JPG13 
M_COM 
M_TEM 
M_ERROR 
M_SOF0 
M_SOF1 
M_SOF2 
M_SOF3 
M_SOF5 
M_SOF6 
M_SOF7 
M_JPG 
M_SOF9 
M_SOF10 
M_SOF11 
M_SOF13 
M_SOF14 
M_SOF15 
M_DHT 
M_DAC 
M_RST0 
M_RST1 
M_RST2 
M_RST3 
M_RST4 
M_RST5 
M_RST6 
M_RST7 
M_SOI 
M_EOI 
M_SOS 
M_DQT 
M_DNL 
M_DRI 
M_DHP 
M_EXP 
M_APP0 
M_APP1 
M_APP2 
M_APP3 
M_APP4 
M_APP5 
M_APP6 
M_APP7 
M_APP8 
M_APP9 
M_APP10 
M_APP11 
M_APP12 
M_APP13 
M_APP14 
M_APP15 
M_JPG0 
M_JPG8 
M_JPG13 
M_COM 
M_TEM 
M_ERROR 

Definition at line 21 of file jdmarker.c.

21  { /* JPEG marker codes */
22  M_SOF0 = 0xc0,
23  M_SOF1 = 0xc1,
24  M_SOF2 = 0xc2,
25  M_SOF3 = 0xc3,
26 
27  M_SOF5 = 0xc5,
28  M_SOF6 = 0xc6,
29  M_SOF7 = 0xc7,
30 
31  M_JPG = 0xc8,
32  M_SOF9 = 0xc9,
33  M_SOF10 = 0xca,
34  M_SOF11 = 0xcb,
35 
36  M_SOF13 = 0xcd,
37  M_SOF14 = 0xce,
38  M_SOF15 = 0xcf,
39 
40  M_DHT = 0xc4,
41 
42  M_DAC = 0xcc,
43 
44  M_RST0 = 0xd0,
45  M_RST1 = 0xd1,
46  M_RST2 = 0xd2,
47  M_RST3 = 0xd3,
48  M_RST4 = 0xd4,
49  M_RST5 = 0xd5,
50  M_RST6 = 0xd6,
51  M_RST7 = 0xd7,
52 
53  M_SOI = 0xd8,
54  M_EOI = 0xd9,
55  M_SOS = 0xda,
56  M_DQT = 0xdb,
57  M_DNL = 0xdc,
58  M_DRI = 0xdd,
59  M_DHP = 0xde,
60  M_EXP = 0xdf,
61 
62  M_APP0 = 0xe0,
63  M_APP1 = 0xe1,
64  M_APP2 = 0xe2,
65  M_APP3 = 0xe3,
66  M_APP4 = 0xe4,
67  M_APP5 = 0xe5,
68  M_APP6 = 0xe6,
69  M_APP7 = 0xe7,
70  M_APP8 = 0xe8,
71  M_APP9 = 0xe9,
72  M_APP10 = 0xea,
73  M_APP11 = 0xeb,
74  M_APP12 = 0xec,
75  M_APP13 = 0xed,
76  M_APP14 = 0xee,
77  M_APP15 = 0xef,
78 
79  M_JPG0 = 0xf0,
80  M_JPG8 = 0xf8,
81  M_JPG13 = 0xfd,
82  M_COM = 0xfe,
83 
84  M_TEM = 0x01,
85 
86  M_ERROR = 0x100
87 } JPEG_MARKER;
Definition: jdmarker.c:31
Definition: jdmarker.c:84
Definition: jdmarker.c:40
Definition: jdmarker.c:53
Definition: jdmarker.c:56
JPEG_MARKER
Definition: jdmarker.c:21
Definition: jdmarker.c:58
Definition: jdmarker.c:42
Definition: jdmarker.c:59
Definition: jdmarker.c:57
Definition: jdmarker.c:54
Definition: jdmarker.c:82
Definition: jdmarker.c:60
Definition: jdmarker.c:55

Function Documentation

◆ examine_app0()

examine_app0 ( j_decompress_ptr  cinfo,
JOCTET FAR data,
unsigned int  datalen,
INT32  remaining 
)

Definition at line 720 of file jdmarker.c.

726 {
727  INT32 totallen = (INT32) datalen + remaining;
728 
729  if (datalen >= APP0_DATA_LEN &&
730  GETJOCTET(data[0]) == 0x4A &&
731  GETJOCTET(data[1]) == 0x46 &&
732  GETJOCTET(data[2]) == 0x49 &&
733  GETJOCTET(data[3]) == 0x46 &&
734  GETJOCTET(data[4]) == 0) {
735  /* Found JFIF APP0 marker: save info */
736  cinfo->saw_JFIF_marker = TRUE;
737  cinfo->JFIF_major_version = GETJOCTET(data[5]);
738  cinfo->JFIF_minor_version = GETJOCTET(data[6]);
739  cinfo->density_unit = GETJOCTET(data[7]);
740  cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
741  cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
742  /* Check version.
743  * Major version must be 1 or 2, anything else signals an incompatible
744  * change.
745  * (We used to treat this as an error, but now it's a nonfatal warning,
746  * because some bozo at Hijaak couldn't read the spec.)
747  * Minor version should be 0..2, but process anyway if newer.
748  */
749  if (cinfo->JFIF_major_version != 1 && cinfo->JFIF_major_version != 2)
750  WARNMS2(cinfo, JWRN_JFIF_MAJOR,
751  cinfo->JFIF_major_version, cinfo->JFIF_minor_version);
752  /* Generate trace messages */
753  TRACEMS5(cinfo, 1, JTRC_JFIF,
754  cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
755  cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
756  /* Validate thumbnail dimensions and issue appropriate messages */
757  if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
758  TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
759  GETJOCTET(data[12]), GETJOCTET(data[13]));
760  totallen -= APP0_DATA_LEN;
761  if (totallen !=
762  ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3))
763  TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
764  } else if (datalen >= 6 &&
765  GETJOCTET(data[0]) == 0x4A &&
766  GETJOCTET(data[1]) == 0x46 &&
767  GETJOCTET(data[2]) == 0x58 &&
768  GETJOCTET(data[3]) == 0x58 &&
769  GETJOCTET(data[4]) == 0) {
770  /* Found JFIF "JFXX" extension APP0 marker */
771  /* The library doesn't actually do anything with these,
772  * but we try to produce a helpful trace message.
773  */
774  switch (GETJOCTET(data[5])) {
775  case 0x10:
776  TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
777  break;
778  case 0x11:
779  TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
780  break;
781  case 0x13:
782  TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
783  break;
784  default:
785  TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
786  GETJOCTET(data[5]), (int) totallen);
787  break;
788  }
789  } else {
790  /* Start of APP0 does not match "JFIF" or "JFXX", or too short */
791  TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
792  }
793 }
#define TRUE
Definition: types.h:120
#define GETJOCTET(value)
Definition: jmorecfg.h:171
#define APP0_DATA_LEN
Definition: jdmarker.c:714
boolean saw_JFIF_marker
Definition: jpeglib.h:599
#define TRACEMS2(cinfo, lvl, code, p1, p2)
Definition: jerror.h:272
int const JOCTET unsigned int datalen
Definition: jpeglib.h:1027
#define WARNMS2(cinfo, code, p1, p2)
Definition: jerror.h:258
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
#define TRACEMS5(cinfo, lvl, code, p1, p2, p3, p4, p5)
Definition: jerror.h:287
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
signed int INT32

Referenced by get_interesting_appn().

◆ examine_app14()

examine_app14 ( j_decompress_ptr  cinfo,
JOCTET FAR data,
unsigned int  datalen,
INT32  remaining 
)

Definition at line 797 of file jdmarker.c.

803 {
804  unsigned int version, flags0, flags1, transform;
805 
806  if (datalen >= APP14_DATA_LEN &&
807  GETJOCTET(data[0]) == 0x41 &&
808  GETJOCTET(data[1]) == 0x64 &&
809  GETJOCTET(data[2]) == 0x6F &&
810  GETJOCTET(data[3]) == 0x62 &&
811  GETJOCTET(data[4]) == 0x65) {
812  /* Found Adobe APP14 marker */
813  version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
814  flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
815  flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
816  transform = GETJOCTET(data[11]);
817  TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
818  cinfo->saw_Adobe_marker = TRUE;
819  cinfo->Adobe_transform = (UINT8) transform;
820  } else {
821  /* Start of APP14 does not match "Adobe", or too short */
822  TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
823  }
824 }
#define APP14_DATA_LEN
Definition: jdmarker.c:715
#define TRUE
Definition: types.h:120
#define GETJOCTET(value)
Definition: jmorecfg.h:171
int const JOCTET unsigned int datalen
Definition: jpeglib.h:1027
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
static const WCHAR version[]
Definition: asmname.c:66
boolean saw_Adobe_marker
Definition: jpeglib.h:606
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define TRACEMS4(cinfo, lvl, code, p1, p2, p3, p4)
Definition: jerror.h:282
GLuint GLenum GLenum transform
Definition: glext.h:9407
unsigned char UINT8

Referenced by get_interesting_appn().

◆ first_marker()

first_marker ( j_decompress_ptr  cinfo)

Definition at line 1058 of file jdmarker.c.

1065 {
1066  int c, c2;
1067  INPUT_VARS(cinfo);
1068 
1069  INPUT_BYTE(cinfo, c, return FALSE);
1070  INPUT_BYTE(cinfo, c2, return FALSE);
1071  if (c != 0xFF || c2 != (int) M_SOI)
1072  ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
1073 
1074  cinfo->unread_marker = c2;
1075 
1076  INPUT_SYNC(cinfo);
1077  return TRUE;
1078 }
#define TRUE
Definition: types.h:120
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
Definition: jdmarker.c:53
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
#define ERREXIT2(cinfo, code, p1, p2)
Definition: jerror.h:216

Referenced by read_markers().

◆ get_dht()

get_dht ( j_decompress_ptr  cinfo)

Definition at line 459 of file jdmarker.c.

461 {
462  INT32 length;
463  UINT8 bits[17];
464  UINT8 huffval[256];
465  int i, index, count;
466  JHUFF_TBL **htblptr;
467  INPUT_VARS(cinfo);
468 
469  INPUT_2BYTES(cinfo, length, return FALSE);
470  length -= 2;
471 
472  while (length > 16) {
473  INPUT_BYTE(cinfo, index, return FALSE);
474 
475  TRACEMS1(cinfo, 1, JTRC_DHT, index);
476 
477  bits[0] = 0;
478  count = 0;
479  for (i = 1; i <= 16; i++) {
480  INPUT_BYTE(cinfo, bits[i], return FALSE);
481  count += bits[i];
482  }
483 
484  length -= 1 + 16;
485 
486  TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
487  bits[1], bits[2], bits[3], bits[4],
488  bits[5], bits[6], bits[7], bits[8]);
489  TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
490  bits[9], bits[10], bits[11], bits[12],
491  bits[13], bits[14], bits[15], bits[16]);
492 
493  /* Here we just do minimal validation of the counts to avoid walking
494  * off the end of our table space. jdhuff.c will check more carefully.
495  */
496  if (count > 256 || ((INT32) count) > length)
497  ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
498 
499  MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */
500 
501  for (i = 0; i < count; i++)
502  INPUT_BYTE(cinfo, huffval[i], return FALSE);
503 
504  length -= count;
505 
506  if (index & 0x10) { /* AC table definition */
507  index -= 0x10;
508  htblptr = &cinfo->ac_huff_tbl_ptrs[index];
509  } else { /* DC table definition */
510  htblptr = &cinfo->dc_huff_tbl_ptrs[index];
511  }
512 
514  ERREXIT1(cinfo, JERR_DHT_INDEX, index);
515 
516  if (*htblptr == NULL)
517  *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
518 
519  MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
520  MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
521  }
522 
523  if (length != 0)
524  ERREXIT(cinfo, JERR_BAD_LENGTH);
525 
526  INPUT_SYNC(cinfo);
527  return TRUE;
528 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
GLuint GLuint GLsizei count
Definition: gl.h:1545
JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:573
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
#define NUM_HUFF_TBLS
Definition: jpeglib.h:53
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define MEMZERO(addr, type, size)
Definition: svc_dg.c:324
jpeg_alloc_huff_table(j_common_ptr cinfo)
Definition: jcomapi.c:98
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define SIZEOF(_ar)
Definition: calc.h:97
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
smooth NULL
Definition: ftsmooth.c:416
#define MEMCOPY(dest, src, size)
Definition: jinclude.h:69
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLuint index
Definition: glext.h:6031
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define index(s, c)
Definition: various.h:29
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]
Definition: jpeglib.h:574
#define TRACEMS8(cinfo, lvl, code, p1, p2, p3, p4, p5, p6, p7, p8)
Definition: jerror.h:293
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158
unsigned char UINT8

Referenced by read_markers().

◆ get_dqt()

get_dqt ( j_decompress_ptr  cinfo)

Definition at line 532 of file jdmarker.c.

534 {
535  INT32 length, count, i;
536  int n, prec;
537  unsigned int tmp;
538  JQUANT_TBL *quant_ptr;
539  const int *natural_order;
540  INPUT_VARS(cinfo);
541 
542  INPUT_2BYTES(cinfo, length, return FALSE);
543  length -= 2;
544 
545  while (length > 0) {
546  length--;
547  INPUT_BYTE(cinfo, n, return FALSE);
548  prec = n >> 4;
549  n &= 0x0F;
550 
551  TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
552 
553  if (n >= NUM_QUANT_TBLS)
554  ERREXIT1(cinfo, JERR_DQT_INDEX, n);
555 
556  if (cinfo->quant_tbl_ptrs[n] == NULL)
558  quant_ptr = cinfo->quant_tbl_ptrs[n];
559 
560  if (prec) {
561  if (length < DCTSIZE2 * 2) {
562  /* Initialize full table for safety. */
563  for (i = 0; i < DCTSIZE2; i++) {
564  quant_ptr->quantval[i] = 1;
565  }
566  count = length >> 1;
567  } else
568  count = DCTSIZE2;
569  } else {
570  if (length < DCTSIZE2) {
571  /* Initialize full table for safety. */
572  for (i = 0; i < DCTSIZE2; i++) {
573  quant_ptr->quantval[i] = 1;
574  }
575  count = length;
576  } else
577  count = DCTSIZE2;
578  }
579 
580  switch (count) {
581  case (2*2): natural_order = jpeg_natural_order2; break;
582  case (3*3): natural_order = jpeg_natural_order3; break;
583  case (4*4): natural_order = jpeg_natural_order4; break;
584  case (5*5): natural_order = jpeg_natural_order5; break;
585  case (6*6): natural_order = jpeg_natural_order6; break;
586  case (7*7): natural_order = jpeg_natural_order7; break;
587  default: natural_order = jpeg_natural_order; break;
588  }
589 
590  for (i = 0; i < count; i++) {
591  if (prec)
592  INPUT_2BYTES(cinfo, tmp, return FALSE);
593  else
594  INPUT_BYTE(cinfo, tmp, return FALSE);
595  /* We convert the zigzag-order table to natural array order. */
596  quant_ptr->quantval[natural_order[i]] = (UINT16) tmp;
597  }
598 
599  if (cinfo->err->trace_level >= 2) {
600  for (i = 0; i < DCTSIZE2; i += 8) {
601  TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
602  quant_ptr->quantval[i], quant_ptr->quantval[i+1],
603  quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
604  quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
605  quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
606  }
607  }
608 
609  length -= count;
610  if (prec) length -= count;
611  }
612 
613  if (length != 0)
614  ERREXIT(cinfo, JERR_BAD_LENGTH);
615 
616  INPUT_SYNC(cinfo);
617  return TRUE;
618 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
#define NUM_QUANT_TBLS
Definition: jpeglib.h:52
GLuint GLuint GLsizei count
Definition: gl.h:1545
UINT16 quantval[DCTSIZE2]
Definition: jpeglib.h:97
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
GLdouble n
Definition: glext.h:7729
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define TRACEMS2(cinfo, lvl, code, p1, p2)
Definition: jerror.h:272
const int jpeg_natural_order2[2 *2+16]
Definition: jutils.c:112
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const int jpeg_natural_order7[7 *7+16]
Definition: jutils.c:67
smooth NULL
Definition: ftsmooth.c:416
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
#define DCTSIZE2
Definition: jpeglib.h:51
const int jpeg_natural_order4[4 *4+16]
Definition: jutils.c:98
const int jpeg_natural_order3[3 *3+16]
Definition: jutils.c:105
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
const int jpeg_natural_order5[5 *5+16]
Definition: jutils.c:89
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
jpeg_alloc_quant_table(j_common_ptr cinfo)
Definition: jcomapi.c:86
const int jpeg_natural_order[DCTSIZE2+16]
Definition: jutils.c:54
unsigned short UINT16
#define TRACEMS8(cinfo, lvl, code, p1, p2, p3, p4, p5, p6, p7, p8)
Definition: jerror.h:293
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158
JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]
Definition: jpeglib.h:570
const int jpeg_natural_order6[6 *6+16]
Definition: jutils.c:79

Referenced by read_markers().

◆ get_dri()

get_dri ( j_decompress_ptr  cinfo)

Definition at line 622 of file jdmarker.c.

624 {
625  INT32 length;
626  unsigned int tmp;
627  INPUT_VARS(cinfo);
628 
629  INPUT_2BYTES(cinfo, length, return FALSE);
630 
631  if (length != 4)
632  ERREXIT(cinfo, JERR_BAD_LENGTH);
633 
634  INPUT_2BYTES(cinfo, tmp, return FALSE);
635 
636  TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
637 
638  cinfo->restart_interval = tmp;
639 
640  INPUT_SYNC(cinfo);
641  return TRUE;
642 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
unsigned int restart_interval
Definition: jpeglib.h:594
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158

Referenced by read_markers().

◆ get_interesting_appn()

get_interesting_appn ( j_decompress_ptr  cinfo)

Definition at line 828 of file jdmarker.c.

830 {
831  INT32 length;
833  unsigned int i, numtoread;
834  INPUT_VARS(cinfo);
835 
836  INPUT_2BYTES(cinfo, length, return FALSE);
837  length -= 2;
838 
839  /* get the interesting part of the marker data */
840  if (length >= APPN_DATA_LEN)
841  numtoread = APPN_DATA_LEN;
842  else if (length > 0)
843  numtoread = (unsigned int) length;
844  else
845  numtoread = 0;
846  for (i = 0; i < numtoread; i++)
847  INPUT_BYTE(cinfo, b[i], return FALSE);
848  length -= numtoread;
849 
850  /* process it */
851  switch (cinfo->unread_marker) {
852  case M_APP0:
853  examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length);
854  break;
855  case M_APP14:
856  examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length);
857  break;
858  default:
859  /* can't get here unless jpeg_save_markers chooses wrong processor */
860  ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
861  break;
862  }
863 
864  /* skip any remaining data -- could be lots */
865  INPUT_SYNC(cinfo);
866  if (length > 0)
867  (*cinfo->src->skip_input_data) (cinfo, (long) length);
868 
869  return TRUE;
870 }
#define TRUE
Definition: types.h:120
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
examine_app0(j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
Definition: jdmarker.c:720
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FAR
Definition: guiddef.h:36
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
struct jpeg_source_mgr * src
Definition: jpeglib.h:463
#define APPN_DATA_LEN
Definition: jdmarker.c:716
signed int INT32
char JOCTET
Definition: jmorecfg.h:167
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158
examine_app14(j_decompress_ptr cinfo, JOCTET FAR *data, unsigned int datalen, INT32 remaining)
Definition: jdmarker.c:797
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by jinit_marker_reader().

◆ get_lse()

get_lse ( j_decompress_ptr  cinfo)

Definition at line 646 of file jdmarker.c.

648 {
649  INT32 length;
650  unsigned int tmp;
651  int cid;
652  INPUT_VARS(cinfo);
653 
654  if (! cinfo->marker->saw_SOF)
655  ERREXITS(cinfo, JERR_SOF_BEFORE, "LSE");
656 
657  if (cinfo->num_components < 3) goto bad;
658 
659  INPUT_2BYTES(cinfo, length, return FALSE);
660 
661  if (length != 24)
662  ERREXIT(cinfo, JERR_BAD_LENGTH);
663 
664  INPUT_BYTE(cinfo, tmp, return FALSE);
665  if (tmp != 0x0D) /* ID inverse transform specification */
666  ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
667  INPUT_2BYTES(cinfo, tmp, return FALSE);
668  if (tmp != MAXJSAMPLE) goto bad; /* MAXTRANS */
669  INPUT_BYTE(cinfo, tmp, return FALSE);
670  if (tmp != 3) goto bad; /* Nt=3 */
671  INPUT_BYTE(cinfo, cid, return FALSE);
672  if (cid != cinfo->comp_info[1].component_id) goto bad;
673  INPUT_BYTE(cinfo, cid, return FALSE);
674  if (cid != cinfo->comp_info[0].component_id) goto bad;
675  INPUT_BYTE(cinfo, cid, return FALSE);
676  if (cid != cinfo->comp_info[2].component_id) goto bad;
677  INPUT_BYTE(cinfo, tmp, return FALSE);
678  if (tmp != 0x80) goto bad; /* F1: CENTER1=1, NORM1=0 */
679  INPUT_2BYTES(cinfo, tmp, return FALSE);
680  if (tmp != 0) goto bad; /* A(1,1)=0 */
681  INPUT_2BYTES(cinfo, tmp, return FALSE);
682  if (tmp != 0) goto bad; /* A(1,2)=0 */
683  INPUT_BYTE(cinfo, tmp, return FALSE);
684  if (tmp != 0) goto bad; /* F2: CENTER2=0, NORM2=0 */
685  INPUT_2BYTES(cinfo, tmp, return FALSE);
686  if (tmp != 1) goto bad; /* A(2,1)=1 */
687  INPUT_2BYTES(cinfo, tmp, return FALSE);
688  if (tmp != 0) goto bad; /* A(2,2)=0 */
689  INPUT_BYTE(cinfo, tmp, return FALSE);
690  if (tmp != 0) goto bad; /* F3: CENTER3=0, NORM3=0 */
691  INPUT_2BYTES(cinfo, tmp, return FALSE);
692  if (tmp != 1) goto bad; /* A(3,1)=1 */
693  INPUT_2BYTES(cinfo, tmp, return FALSE);
694  if (tmp != 0) { /* A(3,2)=0 */
695  bad:
696  ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
697  }
698 
699  /* OK, valid transform that we can handle. */
701 
702  INPUT_SYNC(cinfo);
703  return TRUE;
704 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
jpeg_component_info * comp_info
Definition: jpeglib.h:583
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define MAXJSAMPLE
Definition: jmorecfg.h:83
static TfClientId cid
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:609
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158
#define ERREXITS(cinfo, code, str)
Definition: jerror.h:243

Referenced by read_markers().

◆ get_sof()

get_sof ( j_decompress_ptr  cinfo,
boolean  is_baseline,
boolean  is_prog,
boolean  is_arith 
)

Definition at line 240 of file jdmarker.c.

243 {
244  INT32 length;
245  int c, ci, i;
247  INPUT_VARS(cinfo);
248 
249  cinfo->is_baseline = is_baseline;
250  cinfo->progressive_mode = is_prog;
251  cinfo->arith_code = is_arith;
252 
253  INPUT_2BYTES(cinfo, length, return FALSE);
254 
255  INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE);
256  INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE);
257  INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE);
258  INPUT_BYTE(cinfo, cinfo->num_components, return FALSE);
259 
260  length -= 8;
261 
262  TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker,
263  (int) cinfo->image_width, (int) cinfo->image_height,
264  cinfo->num_components);
265 
266  if (cinfo->marker->saw_SOF)
267  ERREXIT(cinfo, JERR_SOF_DUPLICATE);
268 
269  /* We don't support files in which the image height is initially specified */
270  /* as 0 and is later redefined by DNL. As long as we have to check that, */
271  /* might as well have a general sanity check. */
272  if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
273  cinfo->num_components <= 0)
274  ERREXIT(cinfo, JERR_EMPTY_IMAGE);
275 
276  if (length != (cinfo->num_components * 3))
277  ERREXIT(cinfo, JERR_BAD_LENGTH);
278 
279  if (cinfo->comp_info == NULL) /* do only once, even if suspend */
280  cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
281  ((j_common_ptr) cinfo, JPOOL_IMAGE,
283 
284  for (ci = 0; ci < cinfo->num_components; ci++) {
285  INPUT_BYTE(cinfo, c, return FALSE);
286  /* Check to see whether component id has already been seen */
287  /* (in violation of the spec, but unfortunately seen in some */
288  /* files). If so, create "fake" component id equal to the */
289  /* max id seen so far + 1. */
290  for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) {
291  if (c == compptr->component_id) {
292  compptr = cinfo->comp_info;
294  compptr++;
295  for (i = 1; i < ci; i++, compptr++) {
297  }
298  c++;
299  break;
300  }
301  }
303  compptr->component_index = ci;
304  INPUT_BYTE(cinfo, c, return FALSE);
305  compptr->h_samp_factor = (c >> 4) & 15;
306  compptr->v_samp_factor = (c ) & 15;
307  INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE);
308 
309  TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
312  }
313 
314  cinfo->marker->saw_SOF = TRUE;
315 
316  INPUT_SYNC(cinfo);
317  return TRUE;
318 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
jpeg_component_info * comp_info
Definition: jpeglib.h:583
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
JDIMENSION image_width
Definition: jpeglib.h:468
JDIMENSION image_height
Definition: jpeglib.h:469
jpeg_component_info * compptr
Definition: jdct.h:238
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define SIZEOF(_ar)
Definition: calc.h:97
#define JPOOL_IMAGE
Definition: jpeglib.h:808
smooth NULL
Definition: ftsmooth.c:416
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
const GLubyte * c
Definition: glext.h:8905
boolean progressive_mode
Definition: jpeglib.h:587
#define TRACEMS4(cinfo, lvl, code, p1, p2, p3, p4)
Definition: jerror.h:282
#define c
Definition: ke_i.h:80
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158

Referenced by read_markers().

◆ get_soi()

get_soi ( j_decompress_ptr  cinfo)

Definition at line 199 of file jdmarker.c.

201 {
202  int i;
203 
204  TRACEMS(cinfo, 1, JTRC_SOI);
205 
206  if (cinfo->marker->saw_SOI)
207  ERREXIT(cinfo, JERR_SOI_DUPLICATE);
208 
209  /* Reset all parameters that are defined to be reset by SOI */
210 
211  for (i = 0; i < NUM_ARITH_TBLS; i++) {
212  cinfo->arith_dc_L[i] = 0;
213  cinfo->arith_dc_U[i] = 1;
214  cinfo->arith_ac_K[i] = 5;
215  }
216  cinfo->restart_interval = 0;
217 
218  /* Set initial assumptions for colorspace etc */
219 
220  cinfo->jpeg_color_space = JCS_UNKNOWN;
221  cinfo->color_transform = JCT_NONE;
222  cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */
223 
224  cinfo->saw_JFIF_marker = FALSE;
225  cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */
226  cinfo->JFIF_minor_version = 1;
227  cinfo->density_unit = 0;
228  cinfo->X_density = 1;
229  cinfo->Y_density = 1;
230  cinfo->saw_Adobe_marker = FALSE;
231  cinfo->Adobe_transform = 0;
232 
233  cinfo->marker->saw_SOI = TRUE;
234 
235  return TRUE;
236 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
UINT8 arith_dc_U[NUM_ARITH_TBLS]
Definition: jpeglib.h:591
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
boolean saw_JFIF_marker
Definition: jpeglib.h:599
UINT8 arith_dc_L[NUM_ARITH_TBLS]
Definition: jpeglib.h:590
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TRACEMS(cinfo, lvl, code)
Definition: jerror.h:265
UINT8 arith_ac_K[NUM_ARITH_TBLS]
Definition: jpeglib.h:592
unsigned int restart_interval
Definition: jpeglib.h:594
boolean saw_Adobe_marker
Definition: jpeglib.h:606
boolean CCIR601_sampling
Definition: jpeglib.h:612
J_COLOR_TRANSFORM color_transform
Definition: jpeglib.h:609
#define NUM_ARITH_TBLS
Definition: jpeglib.h:54
J_COLOR_SPACE jpeg_color_space
Definition: jpeglib.h:471

Referenced by read_markers().

◆ get_sos()

get_sos ( j_decompress_ptr  cinfo)

Definition at line 322 of file jdmarker.c.

324 {
325  INT32 length;
326  int c, ci, i, n;
328  INPUT_VARS(cinfo);
329 
330  if (! cinfo->marker->saw_SOF)
331  ERREXITS(cinfo, JERR_SOF_BEFORE, "SOS");
332 
333  INPUT_2BYTES(cinfo, length, return FALSE);
334 
335  INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */
336 
337  TRACEMS1(cinfo, 1, JTRC_SOS, n);
338 
339  if (length != (n * 2 + 6) || n > MAX_COMPS_IN_SCAN ||
340  (n == 0 && !cinfo->progressive_mode))
341  /* pseudo SOS marker only allowed in progressive mode */
342  ERREXIT(cinfo, JERR_BAD_LENGTH);
343 
344  cinfo->comps_in_scan = n;
345 
346  /* Collect the component-spec parameters */
347 
348  for (i = 0; i < n; i++) {
349  INPUT_BYTE(cinfo, c, return FALSE);
350 
351  /* Detect the case where component id's are not unique, and, if so, */
352  /* create a fake component id using the same logic as in get_sof. */
353  /* Note: This also ensures that all of the SOF components are */
354  /* referenced in the single scan case, which prevents access to */
355  /* uninitialized memory in later decoding stages. */
356  for (ci = 0; ci < i; ci++) {
357  if (c == cinfo->cur_comp_info[ci]->component_id) {
358  c = cinfo->cur_comp_info[0]->component_id;
359  for (ci = 1; ci < i; ci++) {
360  compptr = cinfo->cur_comp_info[ci];
362  }
363  c++;
364  break;
365  }
366  }
367 
368  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
369  ci++, compptr++) {
370  if (c == compptr->component_id)
371  goto id_found;
372  }
373 
374  ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c);
375 
376  id_found:
377 
378  cinfo->cur_comp_info[i] = compptr;
379  INPUT_BYTE(cinfo, c, return FALSE);
380  compptr->dc_tbl_no = (c >> 4) & 15;
381  compptr->ac_tbl_no = (c ) & 15;
382 
383  TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id,
385  }
386 
387  /* Collect the additional scan parameters Ss, Se, Ah/Al. */
388  INPUT_BYTE(cinfo, c, return FALSE);
389  cinfo->Ss = c;
390  INPUT_BYTE(cinfo, c, return FALSE);
391  cinfo->Se = c;
392  INPUT_BYTE(cinfo, c, return FALSE);
393  cinfo->Ah = (c >> 4) & 15;
394  cinfo->Al = (c ) & 15;
395 
396  TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se,
397  cinfo->Ah, cinfo->Al);
398 
399  /* Prepare to scan data & restart markers */
400  cinfo->marker->next_restart_num = 0;
401 
402  /* Count another (non-pseudo) SOS marker */
403  if (n) cinfo->input_scan_number++;
404 
405  INPUT_SYNC(cinfo);
406  return TRUE;
407 }
#define TRUE
Definition: types.h:120
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]
Definition: jpeglib.h:650
jpeg_component_info * comp_info
Definition: jpeglib.h:583
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
GLdouble n
Definition: glext.h:7729
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
jpeg_component_info * compptr
Definition: jdct.h:238
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
const GLubyte * c
Definition: glext.h:8905
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
boolean progressive_mode
Definition: jpeglib.h:587
#define TRACEMS3(cinfo, lvl, code, p1, p2, p3)
Definition: jerror.h:277
#define TRACEMS4(cinfo, lvl, code, p1, p2, p3, p4)
Definition: jerror.h:282
#define c
Definition: ke_i.h:80
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158
#define MAX_COMPS_IN_SCAN
Definition: jpeglib.h:55
#define ERREXITS(cinfo, code, str)
Definition: jerror.h:243

Referenced by read_markers().

◆ jinit_marker_reader()

jinit_marker_reader ( j_decompress_ptr  cinfo)

Definition at line 1413 of file jdmarker.c.

1414 {
1416  int i;
1417 
1418  /* Create subobject in permanent pool */
1419  marker = (my_marker_ptr)
1420  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
1422  cinfo->marker = &marker->pub;
1423  /* Initialize public method pointers */
1424  marker->pub.reset_marker_reader = reset_marker_reader;
1425  marker->pub.read_markers = read_markers;
1426  marker->pub.read_restart_marker = read_restart_marker;
1427  /* Initialize COM/APPn processing.
1428  * By default, we examine and then discard APP0 and APP14,
1429  * but simply discard COM and all other APPn.
1430  */
1431  marker->process_COM = skip_variable;
1432  marker->length_limit_COM = 0;
1433  for (i = 0; i < 16; i++) {
1434  marker->process_APPn[i] = skip_variable;
1435  marker->length_limit_APPn[i] = 0;
1436  }
1437  marker->process_APPn[0] = get_interesting_appn;
1438  marker->process_APPn[14] = get_interesting_appn;
1439  /* Reset marker processing state */
1440  reset_marker_reader(cinfo);
1441 }
my_marker_reader * my_marker_ptr
Definition: jdmarker.c:109
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
read_restart_marker(j_decompress_ptr cinfo)
Definition: jdmarker.c:1264
skip_variable(j_decompress_ptr cinfo)
Definition: jdmarker.c:982
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define SIZEOF(_ar)
Definition: calc.h:97
int marker
Definition: jpeglib.h:1027
get_interesting_appn(j_decompress_ptr cinfo)
Definition: jdmarker.c:828
reset_marker_reader(j_decompress_ptr cinfo)
Definition: jdmarker.c:1393
read_markers(j_decompress_ptr cinfo)
Definition: jdmarker.c:1094
#define JPOOL_PERMANENT
Definition: jpeglib.h:807

Referenced by jpeg_CreateDecompress().

◆ jpeg_resync_to_restart()

jpeg_resync_to_restart ( j_decompress_ptr  cinfo,
int  desired 
)

Definition at line 1343 of file jdmarker.c.

1344 {
1345  int marker = cinfo->unread_marker;
1346  int action = 1;
1347 
1348  /* Always put up a warning. */
1349  WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
1350 
1351  /* Outer loop handles repeated decision after scanning forward. */
1352  for (;;) {
1353  if (marker < (int) M_SOF0)
1354  action = 2; /* invalid marker */
1355  else if (marker < (int) M_RST0 || marker > (int) M_RST7)
1356  action = 3; /* valid non-restart marker */
1357  else {
1358  if (marker == ((int) M_RST0 + ((desired+1) & 7)) ||
1359  marker == ((int) M_RST0 + ((desired+2) & 7)))
1360  action = 3; /* one of the next two expected restarts */
1361  else if (marker == ((int) M_RST0 + ((desired-1) & 7)) ||
1362  marker == ((int) M_RST0 + ((desired-2) & 7)))
1363  action = 2; /* a prior restart, so advance */
1364  else
1365  action = 1; /* desired restart or too far away */
1366  }
1367  TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
1368  switch (action) {
1369  case 1:
1370  /* Discard marker and let entropy decoder resume processing. */
1371  cinfo->unread_marker = 0;
1372  return TRUE;
1373  case 2:
1374  /* Scan to the next marker, and repeat the decision loop. */
1375  if (! next_marker(cinfo))
1376  return FALSE;
1377  marker = cinfo->unread_marker;
1378  break;
1379  case 3:
1380  /* Return without advancing past this marker. */
1381  /* Entropy decoder will be forced to process an empty segment. */
1382  return TRUE;
1383  }
1384  } /* end loop */
1385 }
#define TRUE
Definition: types.h:120
int desired
Definition: jpeglib.h:1116
#define TRACEMS2(cinfo, lvl, code, p1, p2)
Definition: jerror.h:272
#define WARNMS2(cinfo, code, p1, p2)
Definition: jerror.h:258
int marker
Definition: jpeglib.h:1027
const WCHAR * action
Definition: action.c:7783
next_marker(j_decompress_ptr cinfo)
Definition: jdmarker.c:1011

Referenced by jpeg_mem_src(), and jpeg_stdio_src().

◆ jpeg_set_marker_processor()

jpeg_set_marker_processor ( j_decompress_ptr  cinfo,
int  marker_code,
jpeg_marker_parser_method  routine 
)

Definition at line 1500 of file jdmarker.c.

1502 {
1504 
1505  if (marker_code == (int) M_COM)
1506  marker->process_COM = routine;
1507  else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15)
1508  marker->process_APPn[marker_code - (int) M_APP0] = routine;
1509  else
1510  ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
1511 }
my_marker_reader * my_marker_ptr
Definition: jdmarker.c:109
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
int marker
Definition: jpeglib.h:1027
if(!(yy_init))
Definition: macro.lex.yy.c:714
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
int jpeg_marker_parser_method routine
Definition: jpeglib.h:1089
int marker_code
Definition: jpeglib.h:1084
Definition: jdmarker.c:82
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by main().

◆ next_marker()

next_marker ( j_decompress_ptr  cinfo)

Definition at line 1011 of file jdmarker.c.

1012 {
1013  int c;
1014  INPUT_VARS(cinfo);
1015 
1016  for (;;) {
1017  INPUT_BYTE(cinfo, c, return FALSE);
1018  /* Skip any non-FF bytes.
1019  * This may look a bit inefficient, but it will not occur in a valid file.
1020  * We sync after each discarded byte so that a suspending data source
1021  * can discard the byte from its buffer.
1022  */
1023  while (c != 0xFF) {
1024  cinfo->marker->discarded_bytes++;
1025  INPUT_SYNC(cinfo);
1026  INPUT_BYTE(cinfo, c, return FALSE);
1027  }
1028  /* This loop swallows any duplicate FF bytes. Extra FFs are legal as
1029  * pad bytes, so don't count them in discarded_bytes. We assume there
1030  * will not be so many consecutive FF bytes as to overflow a suspending
1031  * data source's input buffer.
1032  */
1033  do {
1034  INPUT_BYTE(cinfo, c, return FALSE);
1035  } while (c == 0xFF);
1036  if (c != 0)
1037  break; /* found a valid marker, exit loop */
1038  /* Reach here if we found a stuffed-zero data sequence (FF/00).
1039  * Discard it and loop back to try again.
1040  */
1041  cinfo->marker->discarded_bytes += 2;
1042  INPUT_SYNC(cinfo);
1043  }
1044 
1045  if (cinfo->marker->discarded_bytes != 0) {
1046  WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
1047  cinfo->marker->discarded_bytes = 0;
1048  }
1049 
1050  cinfo->unread_marker = c;
1051 
1052  INPUT_SYNC(cinfo);
1053  return TRUE;
1054 }
#define TRUE
Definition: types.h:120
#define INPUT_BYTE(cinfo, V, action)
Definition: jdmarker.c:150
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define WARNMS2(cinfo, code, p1, p2)
Definition: jerror.h:258
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80

Referenced by jpeg_resync_to_restart(), read_markers(), and read_restart_marker().

◆ read_markers()

read_markers ( j_decompress_ptr  cinfo)

Definition at line 1094 of file jdmarker.c.

1095 {
1096  /* Outer loop repeats once for each marker. */
1097  for (;;) {
1098  /* Collect the marker proper, unless we already did. */
1099  /* NB: first_marker() enforces the requirement that SOI appear first. */
1100  if (cinfo->unread_marker == 0) {
1101  if (! cinfo->marker->saw_SOI) {
1102  if (! first_marker(cinfo))
1103  return JPEG_SUSPENDED;
1104  } else {
1105  if (! next_marker(cinfo))
1106  return JPEG_SUSPENDED;
1107  }
1108  }
1109  /* At this point cinfo->unread_marker contains the marker code and the
1110  * input point is just past the marker proper, but before any parameters.
1111  * A suspension will cause us to return with this state still true.
1112  */
1113  switch (cinfo->unread_marker) {
1114  case M_SOI:
1115  if (! get_soi(cinfo))
1116  return JPEG_SUSPENDED;
1117  break;
1118 
1119  case M_SOF0: /* Baseline */
1120  if (! get_sof(cinfo, TRUE, FALSE, FALSE))
1121  return JPEG_SUSPENDED;
1122  break;
1123 
1124  case M_SOF1: /* Extended sequential, Huffman */
1125  if (! get_sof(cinfo, FALSE, FALSE, FALSE))
1126  return JPEG_SUSPENDED;
1127  break;
1128 
1129  case M_SOF2: /* Progressive, Huffman */
1130  if (! get_sof(cinfo, FALSE, TRUE, FALSE))
1131  return JPEG_SUSPENDED;
1132  break;
1133 
1134  case M_SOF9: /* Extended sequential, arithmetic */
1135  if (! get_sof(cinfo, FALSE, FALSE, TRUE))
1136  return JPEG_SUSPENDED;
1137  break;
1138 
1139  case M_SOF10: /* Progressive, arithmetic */
1140  if (! get_sof(cinfo, FALSE, TRUE, TRUE))
1141  return JPEG_SUSPENDED;
1142  break;
1143 
1144  /* Currently unsupported SOFn types */
1145  case M_SOF3: /* Lossless, Huffman */
1146  case M_SOF5: /* Differential sequential, Huffman */
1147  case M_SOF6: /* Differential progressive, Huffman */
1148  case M_SOF7: /* Differential lossless, Huffman */
1149  case M_JPG: /* Reserved for JPEG extensions */
1150  case M_SOF11: /* Lossless, arithmetic */
1151  case M_SOF13: /* Differential sequential, arithmetic */
1152  case M_SOF14: /* Differential progressive, arithmetic */
1153  case M_SOF15: /* Differential lossless, arithmetic */
1154  ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
1155  break;
1156 
1157  case M_SOS:
1158  if (! get_sos(cinfo))
1159  return JPEG_SUSPENDED;
1160  cinfo->unread_marker = 0; /* processed the marker */
1161  return JPEG_REACHED_SOS;
1162 
1163  case M_EOI:
1164  TRACEMS(cinfo, 1, JTRC_EOI);
1165  cinfo->unread_marker = 0; /* processed the marker */
1166  return JPEG_REACHED_EOI;
1167 
1168  case M_DAC:
1169  if (! get_dac(cinfo))
1170  return JPEG_SUSPENDED;
1171  break;
1172 
1173  case M_DHT:
1174  if (! get_dht(cinfo))
1175  return JPEG_SUSPENDED;
1176  break;
1177 
1178  case M_DQT:
1179  if (! get_dqt(cinfo))
1180  return JPEG_SUSPENDED;
1181  break;
1182 
1183  case M_DRI:
1184  if (! get_dri(cinfo))
1185  return JPEG_SUSPENDED;
1186  break;
1187 
1188  case M_JPG8:
1189  if (! get_lse(cinfo))
1190  return JPEG_SUSPENDED;
1191  break;
1192 
1193  case M_APP0:
1194  case M_APP1:
1195  case M_APP2:
1196  case M_APP3:
1197  case M_APP4:
1198  case M_APP5:
1199  case M_APP6:
1200  case M_APP7:
1201  case M_APP8:
1202  case M_APP9:
1203  case M_APP10:
1204  case M_APP11:
1205  case M_APP12:
1206  case M_APP13:
1207  case M_APP14:
1208  case M_APP15:
1209  if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[
1210  cinfo->unread_marker - (int) M_APP0]) (cinfo))
1211  return JPEG_SUSPENDED;
1212  break;
1213 
1214  case M_COM:
1215  if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo))
1216  return JPEG_SUSPENDED;
1217  break;
1218 
1219  case M_RST0: /* these are all parameterless */
1220  case M_RST1:
1221  case M_RST2:
1222  case M_RST3:
1223  case M_RST4:
1224  case M_RST5:
1225  case M_RST6:
1226  case M_RST7:
1227  case M_TEM:
1228  TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
1229  break;
1230 
1231  case M_DNL: /* Ignore DNL ... perhaps the wrong thing */
1232  if (! skip_variable(cinfo))
1233  return JPEG_SUSPENDED;
1234  break;
1235 
1236  default: /* must be DHP, EXP, JPGn, or RESn */
1237  /* For now, we treat the reserved markers as fatal errors since they are
1238  * likely to be used to signal incompatible JPEG Part 3 extensions.
1239  * Once the JPEG 3 version-number marker is well defined, this code
1240  * ought to change!
1241  */
1242  ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
1243  break;
1244  }
1245  /* Successfully processed marker, so reset state variable */
1246  cinfo->unread_marker = 0;
1247  } /* end loop */
1248 }
#define TRUE
Definition: types.h:120
#define JPEG_REACHED_SOS
Definition: jpeglib.h:1073
#define JPEG_REACHED_EOI
Definition: jpeglib.h:1074
Definition: jdmarker.c:31
first_marker(j_decompress_ptr cinfo)
Definition: jdmarker.c:1058
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
get_sos(j_decompress_ptr cinfo)
Definition: jdmarker.c:322
get_dri(j_decompress_ptr cinfo)
Definition: jdmarker.c:622
Definition: jdmarker.c:84
get_sof(j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, boolean is_arith)
Definition: jdmarker.c:240
skip_variable(j_decompress_ptr cinfo)
Definition: jdmarker.c:982
#define TRACEMS(cinfo, lvl, code)
Definition: jerror.h:265
Definition: jdmarker.c:40
get_soi(j_decompress_ptr cinfo)
Definition: jdmarker.c:199
Definition: jdmarker.c:53
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
Definition: jdmarker.c:56
Definition: jdmarker.c:58
get_lse(j_decompress_ptr cinfo)
Definition: jdmarker.c:646
#define ERREXIT1(cinfo, code, p1)
Definition: jerror.h:212
Definition: jdmarker.c:42
Definition: jdmarker.c:57
Definition: jdmarker.c:54
#define JPEG_SUSPENDED
Definition: jpeglib.h:1042
#define get_dac(cinfo)
Definition: jdmarker.c:453
get_dqt(j_decompress_ptr cinfo)
Definition: jdmarker.c:532
get_dht(j_decompress_ptr cinfo)
Definition: jdmarker.c:459
next_marker(j_decompress_ptr cinfo)
Definition: jdmarker.c:1011
Definition: jdmarker.c:82
Definition: jdmarker.c:55

Referenced by jinit_marker_reader().

◆ read_restart_marker()

read_restart_marker ( j_decompress_ptr  cinfo)

Definition at line 1264 of file jdmarker.c.

1265 {
1266  /* Obtain a marker unless we already did. */
1267  /* Note that next_marker will complain if it skips any data. */
1268  if (cinfo->unread_marker == 0) {
1269  if (! next_marker(cinfo))
1270  return FALSE;
1271  }
1272 
1273  if (cinfo->unread_marker ==
1274  ((int) M_RST0 + cinfo->marker->next_restart_num)) {
1275  /* Normal case --- swallow the marker and let entropy decoder continue */
1276  TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
1277  cinfo->unread_marker = 0;
1278  } else {
1279  /* Uh-oh, the restart markers have been messed up. */
1280  /* Let the data source manager determine how to resync. */
1281  if (! (*cinfo->src->resync_to_restart) (cinfo,
1282  cinfo->marker->next_restart_num))
1283  return FALSE;
1284  }
1285 
1286  /* Update next-restart state */
1287  cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
1288 
1289  return TRUE;
1290 }
#define TRUE
Definition: types.h:120
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
#define TRACEMS1(cinfo, lvl, code, p1)
Definition: jerror.h:268
struct jpeg_source_mgr * src
Definition: jpeglib.h:463
next_marker(j_decompress_ptr cinfo)
Definition: jdmarker.c:1011

Referenced by jinit_marker_reader().

◆ reset_marker_reader()

reset_marker_reader ( j_decompress_ptr  cinfo)

Definition at line 1393 of file jdmarker.c.

1394 {
1396 
1397  cinfo->comp_info = NULL; /* until allocated by get_sof */
1398  cinfo->input_scan_number = 0; /* no SOS seen yet */
1399  cinfo->unread_marker = 0; /* no pending marker */
1400  marker->pub.saw_SOI = FALSE; /* set internal state too */
1401  marker->pub.saw_SOF = FALSE;
1402  marker->pub.discarded_bytes = 0;
1403  marker->cur_marker = NULL;
1404 }
my_marker_reader * my_marker_ptr
Definition: jdmarker.c:109
jpeg_component_info * comp_info
Definition: jpeglib.h:583
struct jpeg_marker_reader * marker
Definition: jpeglib.h:683
smooth NULL
Definition: ftsmooth.c:416
int marker
Definition: jpeglib.h:1027

Referenced by jinit_marker_reader().

◆ skip_variable()

skip_variable ( j_decompress_ptr  cinfo)

Definition at line 982 of file jdmarker.c.

984 {
985  INT32 length;
986  INPUT_VARS(cinfo);
987 
988  INPUT_2BYTES(cinfo, length, return FALSE);
989  length -= 2;
990 
991  TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length);
992 
993  INPUT_SYNC(cinfo); /* do before skip_input_data */
994  if (length > 0)
995  (*cinfo->src->skip_input_data) (cinfo, (long) length);
996 
997  return TRUE;
998 }
#define TRUE
Definition: types.h:120
#define INPUT_VARS(cinfo)
Definition: jdmarker.c:121
#define TRACEMS2(cinfo, lvl, code, p1, p2)
Definition: jerror.h:272
#define INPUT_SYNC(cinfo)
Definition: jdmarker.c:127
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
struct jpeg_source_mgr * src
Definition: jpeglib.h:463
signed int INT32
#define INPUT_2BYTES(cinfo, V, action)
Definition: jdmarker.c:158

Referenced by jinit_marker_reader(), and read_markers().