AlbumShaper  1.0a3
Functions
jpegSize.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool getJPEGSize (const char *filename, int &width, int &height)
 

Function Documentation

§ getJPEGSize()

bool getJPEGSize ( const char *  filename,
int &  width,
int &  height 
)

Definition at line 65 of file jpegSize.cpp.

References first_marker(), infile, M_EOI, M_SOF0, M_SOF1, M_SOF10, M_SOF11, M_SOF13, M_SOF14, M_SOF15, M_SOF2, M_SOF3, M_SOF5, M_SOF6, M_SOF7, M_SOF9, M_SOS, next_marker(), process_SOFn(), READ_BINARY, and skip_variable().

Referenced by getImageSize(), and isJpeg().

66 {
67  //open file
68  if ((infile = fopen(filename, READ_BINARY)) == NULL)
69  return false;
70 
71  //this is scan_JPEG_header (int verbose)
72  //Parse the marker stream until SOFn is seen;
73  int marker;
74 
75  //Expect SOI at start of file
76  if (!first_marker(&marker))
77  {
78  fclose(infile);
79  return false;
80  }
81 
82  /* Scan miscellaneous markers until we reach SOFn. */
83  for (;;)
84  {
85  if(!next_marker(&marker))
86  {
87  fclose(infile);
88  return false;
89  }
90 
91  switch (marker)
92  {
93  /* Note that marker codes 0xC4, 0xC8, 0xCC are not, and must not be,
94  * treated as SOFn. C4 in particular is actually DHT.
95  */
96  case M_SOF0: /* Baseline */
97  case M_SOF1: /* Extended sequential, Huffman */
98  case M_SOF2: /* Progressive, Huffman */
99  case M_SOF3: /* Lossless, Huffman */
100  case M_SOF5: /* Differential sequential, Huffman */
101  case M_SOF6: /* Differential progressive, Huffman */
102  case M_SOF7: /* Differential lossless, Huffman */
103  case M_SOF9: /* Extended sequential, arithmetic */
104  case M_SOF10: /* Progressive, arithmetic */
105  case M_SOF11: /* Lossless, arithmetic */
106  case M_SOF13: /* Differential sequential, arithmetic */
107  case M_SOF14: /* Differential progressive, arithmetic */
108  case M_SOF15: /* Differential lossless, arithmetic */
109  if(!process_SOFn(width, height))
110  {
111  fclose(infile);
112  return false;
113  }
114  else
115  {
116  fclose(infile);
117  return true;
118  }
119  case M_SOS: /* stop before hitting compressed data */
120  {
121  fclose(infile);
122  return false;
123  }
124  case M_EOI: /* in case it's a tables-only JPEG stream */
125  {
126  fclose(infile);
127  return false;
128  }
129  default: /* Anything else just gets skipped */
130  skip_variable(); /* we assume it has a parameter count... */
131  break;
132  }
133  } /* end loop */
134 
135 
136 //cout << "ERROR!\n";
137 return false;
138 
139 }
#define M_SOF7
Definition: jpegSize.cpp:32
#define M_SOF10
Definition: jpegSize.cpp:34
#define M_SOF3
Definition: jpegSize.cpp:29
bool skip_variable()
Definition: jpegSize.cpp:237
#define M_SOF13
Definition: jpegSize.cpp:36
bool next_marker(int *res)
Definition: jpegSize.cpp:172
#define READ_BINARY
Definition: jpegSize.cpp:52
#define M_SOF15
Definition: jpegSize.cpp:38
#define M_SOF0
Definition: jpegSize.cpp:26
#define M_SOF14
Definition: jpegSize.cpp:37
int width
Definition: blur.cpp:79
FILE * infile
Definition: jpegSize.cpp:56
#define M_SOF1
Definition: jpegSize.cpp:27
bool first_marker(int *res)
Definition: jpegSize.cpp:149
#define M_SOF2
Definition: jpegSize.cpp:28
#define M_SOS
Definition: jpegSize.cpp:41
#define M_EOI
Definition: jpegSize.cpp:40
#define M_SOF6
Definition: jpegSize.cpp:31
#define M_SOF9
Definition: jpegSize.cpp:33
#define M_SOF5
Definition: jpegSize.cpp:30
bool process_SOFn(int &width, int &height)
Definition: jpegSize.cpp:261
#define M_SOF11
Definition: jpegSize.cpp:35
int height
Definition: blur.cpp:79