ReactOS 0.4.15-dev-8339-g4028de8
jdatasrc.c File Reference
#include "jinclude.h"
#include "jpeglib.h"
#include "jerror.h"
Include dependency graph for jdatasrc.c:

Go to the source code of this file.

Classes

struct  my_source_mgr
 

Macros

#define INPUT_BUF_SIZE   4096 /* choose an efficiently fread'able size */
 

Typedefs

typedef my_source_mgrmy_src_ptr
 

Functions

 init_source (j_decompress_ptr cinfo)
 
 init_mem_source (j_decompress_ptr cinfo)
 
 fill_input_buffer (j_decompress_ptr cinfo)
 
 fill_mem_input_buffer (j_decompress_ptr cinfo)
 
 skip_input_data (j_decompress_ptr cinfo, long num_bytes)
 
 term_source (j_decompress_ptr cinfo)
 
 jpeg_stdio_src (j_decompress_ptr cinfo, FILE *infile)
 
 jpeg_mem_src (j_decompress_ptr cinfo, const unsigned char *inbuffer, size_t insize)
 

Macro Definition Documentation

◆ INPUT_BUF_SIZE

#define INPUT_BUF_SIZE   4096 /* choose an efficiently fread'able size */

Definition at line 36 of file jdatasrc.c.

Typedef Documentation

◆ my_src_ptr

Definition at line 34 of file jdatasrc.c.

Function Documentation

◆ fill_input_buffer()

fill_input_buffer ( j_decompress_ptr  cinfo)

Definition at line 97 of file jdatasrc.c.

98{
99 my_src_ptr src = (my_src_ptr) cinfo->src;
100 size_t nbytes;
101
102 nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE);
103
104 if (nbytes <= 0) {
105 if (src->start_of_file) /* Treat empty input file as fatal error */
106 ERREXIT(cinfo, JERR_INPUT_EMPTY);
107 WARNMS(cinfo, JWRN_JPEG_EOF);
108 /* Insert a fake EOI marker */
109 src->buffer[0] = (JOCTET) 0xFF;
110 src->buffer[1] = (JOCTET) JPEG_EOI;
111 nbytes = 2;
112 }
113
114 src->pub.next_input_byte = src->buffer;
115 src->pub.bytes_in_buffer = nbytes;
116 src->start_of_file = FALSE;
117
118 return TRUE;
119}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLenum src
Definition: glext.h:6340
my_source_mgr * my_src_ptr
Definition: jdatasrc.c:34
#define INPUT_BUF_SIZE
Definition: jdatasrc.c:36
#define WARNMS(cinfo, code)
Definition: jerror.h:251
#define JFREAD(file, buf, sizeofbuf)
Definition: jinclude.h:92
char JOCTET
Definition: jmorecfg.h:167
#define JPEG_EOI
Definition: jpeglib.h:1127
#define ERREXIT(msg)
Definition: rdjpgcom.c:72
struct jpeg_source_mgr * src
Definition: jpeglib.h:463

Referenced by jpeg_stdio_src().

◆ fill_mem_input_buffer()

fill_mem_input_buffer ( j_decompress_ptr  cinfo)

Definition at line 122 of file jdatasrc.c.

123{
124 static const JOCTET mybuffer[4] = {
125 (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
126 };
127
128 /* The whole JPEG data is expected to reside in the supplied memory
129 * buffer, so any request for more data beyond the given buffer size
130 * is treated as an error.
131 */
132 WARNMS(cinfo, JWRN_JPEG_EOF);
133
134 /* Insert a fake EOI marker */
135
136 cinfo->src->next_input_byte = mybuffer;
137 cinfo->src->bytes_in_buffer = 2;
138
139 return TRUE;
140}

Referenced by jpeg_mem_src().

◆ init_mem_source()

init_mem_source ( j_decompress_ptr  cinfo)

Definition at line 57 of file jdatasrc.c.

58{
59 /* no work necessary here */
60}

Referenced by jpeg_mem_src().

◆ init_source()

init_source ( j_decompress_ptr  cinfo)

Definition at line 45 of file jdatasrc.c.

46{
47 my_src_ptr src = (my_src_ptr) cinfo->src;
48
49 /* We reset the empty-input-file flag for each image,
50 * but we don't clear the input buffer.
51 * This is correct behavior for reading a series of images from one source.
52 */
53 src->start_of_file = TRUE;
54}

Referenced by jpeg_stdio_src().

◆ jpeg_mem_src()

jpeg_mem_src ( j_decompress_ptr  cinfo,
const unsigned char inbuffer,
size_t  insize 
)

Definition at line 249 of file jdatasrc.c.

251{
252 struct jpeg_source_mgr * src;
253
254 if (inbuffer == NULL || insize == 0) /* Treat empty input as fatal error */
255 ERREXIT(cinfo, JERR_INPUT_EMPTY);
256
257 /* The source object is made permanent so that a series of JPEG images
258 * can be read from the same buffer by calling jpeg_mem_src only before
259 * the first one.
260 */
261 if (cinfo->src == NULL) { /* first time for this JPEG object? */
262 cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)
264 }
265
266 src = cinfo->src;
267 src->init_source = init_mem_source;
268 src->fill_input_buffer = fill_mem_input_buffer;
269 src->skip_input_data = skip_input_data;
270 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */
271 src->term_source = term_source;
272 src->bytes_in_buffer = insize;
273 src->next_input_byte = (const JOCTET *) inbuffer;
274}
#define SIZEOF(_ar)
Definition: calc.h:97
#define NULL
Definition: types.h:112
term_source(j_decompress_ptr cinfo)
Definition: jdatasrc.c:199
init_mem_source(j_decompress_ptr cinfo)
Definition: jdatasrc.c:57
fill_mem_input_buffer(j_decompress_ptr cinfo)
Definition: jdatasrc.c:122
skip_input_data(j_decompress_ptr cinfo, long num_bytes)
Definition: jdatasrc.c:156
jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired)
Definition: jdmarker.c:1338
struct jpeg_common_struct * j_common_ptr
Definition: jpeglib.h:284
const unsigned char * inbuffer
Definition: jpeglib.h:983
const unsigned char size_t insize
Definition: jpeglib.h:984
#define JPOOL_PERMANENT
Definition: jpeglib.h:807

◆ jpeg_stdio_src()

jpeg_stdio_src ( j_decompress_ptr  cinfo,
FILE infile 
)

Definition at line 212 of file jdatasrc.c.

213{
215
216 /* The source object and input buffer are made permanent so that a series
217 * of JPEG images can be read from the same file by calling jpeg_stdio_src
218 * only before the first one. (If we discarded the buffer at the end of
219 * one image, we'd likely lose the start of the next one.)
220 * This makes it unsafe to use this manager and a different source
221 * manager serially with the same JPEG object. Caveat programmer.
222 */
223 if (cinfo->src == NULL) { /* first time for this JPEG object? */
224 cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)
226 src = (my_src_ptr) cinfo->src;
227 src->buffer = (JOCTET *) (*cinfo->mem->alloc_small)
229 }
230
231 src = (my_src_ptr) cinfo->src;
232 src->pub.init_source = init_source;
233 src->pub.fill_input_buffer = fill_input_buffer;
234 src->pub.skip_input_data = skip_input_data;
235 src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
236 src->pub.term_source = term_source;
237 src->infile = infile;
238 src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
239 src->pub.next_input_byte = NULL; /* until buffer loaded */
240}
fill_input_buffer(j_decompress_ptr cinfo)
Definition: jdatasrc.c:97
init_source(j_decompress_ptr cinfo)
Definition: jdatasrc.c:45
static FILE * infile
Definition: rdjpgcom.c:65

Referenced by main(), and read_JPEG_file().

◆ skip_input_data()

skip_input_data ( j_decompress_ptr  cinfo,
long  num_bytes 
)

Definition at line 156 of file jdatasrc.c.

157{
158 struct jpeg_source_mgr * src = cinfo->src;
159 size_t nbytes;
160
161 /* Just a dumb implementation for now. Could use fseek() except
162 * it doesn't work on pipes. Not clear that being smart is worth
163 * any trouble anyway --- large skips are infrequent.
164 */
165 if (num_bytes > 0) {
166 nbytes = (size_t) num_bytes;
167 while (nbytes > src->bytes_in_buffer) {
168 nbytes -= src->bytes_in_buffer;
169 (void) (*src->fill_input_buffer) (cinfo);
170 /* note we assume that fill_input_buffer will never return FALSE,
171 * so suspension need not be handled.
172 */
173 }
174 src->next_input_byte += nbytes;
175 src->bytes_in_buffer -= nbytes;
176 }
177}
__kernel_size_t size_t
Definition: linux.h:237

Referenced by jpeg_mem_src(), and jpeg_stdio_src().

◆ term_source()

term_source ( j_decompress_ptr  cinfo)

Definition at line 199 of file jdatasrc.c.

200{
201 /* no work necessary here */
202}

Referenced by jpeg_mem_src(), and jpeg_stdio_src().