Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(395)

Side by Side Diff: jdatasrc.c

Issue 1934113002: Update libjpeg_turbo to 1.4.90 from https://github.com/libjpeg-turbo/ (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * jdatasrc.c 2 * jdatasrc.c
3 * 3 *
4 * This file was part of the Independent JPEG Group's software: 4 * This file was part of the Independent JPEG Group's software:
5 * Copyright (C) 1994-1996, Thomas G. Lane. 5 * Copyright (C) 1994-1996, Thomas G. Lane.
6 * Modified 2009-2011 by Guido Vollbeding. 6 * Modified 2009-2011 by Guido Vollbeding.
7 * libjpeg-turbo Modifications: 7 * libjpeg-turbo Modifications:
8 * Copyright (C) 2013, D. R. Commander. 8 * Copyright (C) 2013, D. R. Commander.
9 * For conditions of distribution and use, see the accompanying README file. 9 * For conditions of distribution and use, see the accompanying README.ijg
10 * file.
10 * 11 *
11 * This file contains decompression data source routines for the case of 12 * This file contains decompression data source routines for the case of
12 * reading JPEG data from memory or from a file (or any stdio stream). 13 * reading JPEG data from memory or from a file (or any stdio stream).
13 * While these routines are sufficient for most applications, 14 * While these routines are sufficient for most applications,
14 * some will want to use a different source manager. 15 * some will want to use a different source manager.
15 * IMPORTANT: we assume that fread() will correctly transcribe an array of 16 * IMPORTANT: we assume that fread() will correctly transcribe an array of
16 * JOCTETs from 8-bit-wide elements on external storage. If char is wider 17 * JOCTETs from 8-bit-wide elements on external storage. If char is wider
17 * than 8 bits on your machine, you may need to do some tweaking. 18 * than 8 bits on your machine, you may need to do some tweaking.
18 */ 19 */
19 20
20 /* this is not a core library module, so it doesn't define JPEG_INTERNALS */ 21 /* this is not a core library module, so it doesn't define JPEG_INTERNALS */
21 #include "jinclude.h" 22 #include "jinclude.h"
22 #include "jpeglib.h" 23 #include "jpeglib.h"
23 #include "jerror.h" 24 #include "jerror.h"
24 25
25 26
26 /* Expanded data source object for stdio input */ 27 /* Expanded data source object for stdio input */
27 28
28 typedef struct { 29 typedef struct {
29 struct jpeg_source_mgr pub;» /* public fields */ 30 struct jpeg_source_mgr pub; /* public fields */
30 31
31 FILE * infile;» » /* source stream */ 32 FILE *infile; /* source stream */
32 JOCTET * buffer;» » /* start of buffer */ 33 JOCTET *buffer; /* start of buffer */
33 boolean start_of_file;» /* have we gotten any data yet? */ 34 boolean start_of_file; /* have we gotten any data yet? */
34 } my_source_mgr; 35 } my_source_mgr;
35 36
36 typedef my_source_mgr * my_src_ptr; 37 typedef my_source_mgr *my_src_ptr;
37 38
38 #define INPUT_BUF_SIZE 4096» /* choose an efficiently fread'able size */ 39 #define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */
39 40
40 41
41 /* 42 /*
42 * Initialize source --- called by jpeg_read_header 43 * Initialize source --- called by jpeg_read_header
43 * before any data is actually read. 44 * before any data is actually read.
44 */ 45 */
45 46
46 METHODDEF(void) 47 METHODDEF(void)
47 init_source (j_decompress_ptr cinfo) 48 init_source (j_decompress_ptr cinfo)
48 { 49 {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 100
100 METHODDEF(boolean) 101 METHODDEF(boolean)
101 fill_input_buffer (j_decompress_ptr cinfo) 102 fill_input_buffer (j_decompress_ptr cinfo)
102 { 103 {
103 my_src_ptr src = (my_src_ptr) cinfo->src; 104 my_src_ptr src = (my_src_ptr) cinfo->src;
104 size_t nbytes; 105 size_t nbytes;
105 106
106 nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE); 107 nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE);
107 108
108 if (nbytes <= 0) { 109 if (nbytes <= 0) {
109 if (src->start_of_file)» /* Treat empty input file as fatal error */ 110 if (src->start_of_file) /* Treat empty input file as fatal error */
110 ERREXIT(cinfo, JERR_INPUT_EMPTY); 111 ERREXIT(cinfo, JERR_INPUT_EMPTY);
111 WARNMS(cinfo, JWRN_JPEG_EOF); 112 WARNMS(cinfo, JWRN_JPEG_EOF);
112 /* Insert a fake EOI marker */ 113 /* Insert a fake EOI marker */
113 src->buffer[0] = (JOCTET) 0xFF; 114 src->buffer[0] = (JOCTET) 0xFF;
114 src->buffer[1] = (JOCTET) JPEG_EOI; 115 src->buffer[1] = (JOCTET) JPEG_EOI;
115 nbytes = 2; 116 nbytes = 2;
116 } 117 }
117 118
118 src->pub.next_input_byte = src->buffer; 119 src->pub.next_input_byte = src->buffer;
119 src->pub.bytes_in_buffer = nbytes; 120 src->pub.bytes_in_buffer = nbytes;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 * is not granted the right to give a suspension return. If the skip extends 155 * is not granted the right to give a suspension return. If the skip extends
155 * beyond the data currently in the buffer, the buffer can be marked empty so 156 * beyond the data currently in the buffer, the buffer can be marked empty so
156 * that the next read will cause a fill_input_buffer call that can suspend. 157 * that the next read will cause a fill_input_buffer call that can suspend.
157 * Arranging for additional bytes to be discarded before reloading the input 158 * Arranging for additional bytes to be discarded before reloading the input
158 * buffer is the application writer's problem. 159 * buffer is the application writer's problem.
159 */ 160 */
160 161
161 METHODDEF(void) 162 METHODDEF(void)
162 skip_input_data (j_decompress_ptr cinfo, long num_bytes) 163 skip_input_data (j_decompress_ptr cinfo, long num_bytes)
163 { 164 {
164 struct jpeg_source_mgr * src = cinfo->src; 165 struct jpeg_source_mgr *src = cinfo->src;
165 166
166 /* Just a dumb implementation for now. Could use fseek() except 167 /* Just a dumb implementation for now. Could use fseek() except
167 * it doesn't work on pipes. Not clear that being smart is worth 168 * it doesn't work on pipes. Not clear that being smart is worth
168 * any trouble anyway --- large skips are infrequent. 169 * any trouble anyway --- large skips are infrequent.
169 */ 170 */
170 if (num_bytes > 0) { 171 if (num_bytes > 0) {
171 while (num_bytes > (long) src->bytes_in_buffer) { 172 while (num_bytes > (long) src->bytes_in_buffer) {
172 num_bytes -= (long) src->bytes_in_buffer; 173 num_bytes -= (long) src->bytes_in_buffer;
173 (void) (*src->fill_input_buffer) (cinfo); 174 (void) (*src->fill_input_buffer) (cinfo);
174 /* note we assume that fill_input_buffer will never return FALSE, 175 /* note we assume that fill_input_buffer will never return FALSE,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 } 207 }
207 208
208 209
209 /* 210 /*
210 * Prepare for input from a stdio stream. 211 * Prepare for input from a stdio stream.
211 * The caller must have already opened the stream, and is responsible 212 * The caller must have already opened the stream, and is responsible
212 * for closing it after finishing decompression. 213 * for closing it after finishing decompression.
213 */ 214 */
214 215
215 GLOBAL(void) 216 GLOBAL(void)
216 jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile) 217 jpeg_stdio_src (j_decompress_ptr cinfo, FILE *infile)
217 { 218 {
218 my_src_ptr src; 219 my_src_ptr src;
219 220
220 /* The source object and input buffer are made permanent so that a series 221 /* The source object and input buffer are made permanent so that a series
221 * of JPEG images can be read from the same file by calling jpeg_stdio_src 222 * of JPEG images can be read from the same file by calling jpeg_stdio_src
222 * only before the first one. (If we discarded the buffer at the end of 223 * only before the first one. (If we discarded the buffer at the end of
223 * one image, we'd likely lose the start of the next one.) 224 * one image, we'd likely lose the start of the next one.)
224 * This makes it unsafe to use this manager and a different source 225 * This makes it unsafe to use this manager and a different source
225 * manager serially with the same JPEG object. Caveat programmer. 226 * manager serially with the same JPEG object. Caveat programmer.
226 */ 227 */
227 if (cinfo->src == NULL) {» /* first time for this JPEG object? */ 228 if (cinfo->src == NULL) { /* first time for this JPEG object? */
228 cinfo->src = (struct jpeg_source_mgr *) 229 cinfo->src = (struct jpeg_source_mgr *)
229 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, 230 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
230 » » » » SIZEOF(my_source_mgr)); 231 sizeof(my_source_mgr));
231 src = (my_src_ptr) cinfo->src; 232 src = (my_src_ptr) cinfo->src;
232 src->buffer = (JOCTET *) 233 src->buffer = (JOCTET *)
233 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, 234 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
234 » » » » INPUT_BUF_SIZE * SIZEOF(JOCTET)); 235 INPUT_BUF_SIZE * sizeof(JOCTET));
235 } 236 }
236 237
237 src = (my_src_ptr) cinfo->src; 238 src = (my_src_ptr) cinfo->src;
238 src->pub.init_source = init_source; 239 src->pub.init_source = init_source;
239 src->pub.fill_input_buffer = fill_input_buffer; 240 src->pub.fill_input_buffer = fill_input_buffer;
240 src->pub.skip_input_data = skip_input_data; 241 src->pub.skip_input_data = skip_input_data;
241 src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */ 242 src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
242 src->pub.term_source = term_source; 243 src->pub.term_source = term_source;
243 src->infile = infile; 244 src->infile = infile;
244 src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ 245 src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
245 src->pub.next_input_byte = NULL; /* until buffer loaded */ 246 src->pub.next_input_byte = NULL; /* until buffer loaded */
246 } 247 }
247 248
248 249
249 #if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED) 250 #if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED)
250 /* 251 /*
251 * Prepare for input from a supplied memory buffer. 252 * Prepare for input from a supplied memory buffer.
252 * The buffer must contain the whole JPEG data. 253 * The buffer must contain the whole JPEG data.
253 */ 254 */
254 255
255 GLOBAL(void) 256 GLOBAL(void)
256 jpeg_mem_src (j_decompress_ptr cinfo, 257 jpeg_mem_src (j_decompress_ptr cinfo,
257 » unsigned char * inbuffer, unsigned long insize) 258 const unsigned char *inbuffer, unsigned long insize)
258 { 259 {
259 struct jpeg_source_mgr * src; 260 struct jpeg_source_mgr *src;
260 261
261 if (inbuffer == NULL || insize == 0)» /* Treat empty input as fatal error */ 262 if (inbuffer == NULL || insize == 0) /* Treat empty input as fatal error */
262 ERREXIT(cinfo, JERR_INPUT_EMPTY); 263 ERREXIT(cinfo, JERR_INPUT_EMPTY);
263 264
264 /* The source object is made permanent so that a series of JPEG images 265 /* The source object is made permanent so that a series of JPEG images
265 * can be read from the same buffer by calling jpeg_mem_src only before 266 * can be read from the same buffer by calling jpeg_mem_src only before
266 * the first one. 267 * the first one.
267 */ 268 */
268 if (cinfo->src == NULL) {» /* first time for this JPEG object? */ 269 if (cinfo->src == NULL) { /* first time for this JPEG object? */
269 cinfo->src = (struct jpeg_source_mgr *) 270 cinfo->src = (struct jpeg_source_mgr *)
270 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, 271 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
271 » » » » SIZEOF(struct jpeg_source_mgr)); 272 sizeof(struct jpeg_source_mgr));
272 } 273 }
273 274
274 src = cinfo->src; 275 src = cinfo->src;
275 src->init_source = init_mem_source; 276 src->init_source = init_mem_source;
276 src->fill_input_buffer = fill_mem_input_buffer; 277 src->fill_input_buffer = fill_mem_input_buffer;
277 src->skip_input_data = skip_input_data; 278 src->skip_input_data = skip_input_data;
278 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */ 279 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */
279 src->term_source = term_source; 280 src->term_source = term_source;
280 src->bytes_in_buffer = (size_t) insize; 281 src->bytes_in_buffer = (size_t) insize;
281 src->next_input_byte = (JOCTET *) inbuffer; 282 src->next_input_byte = (const JOCTET *) inbuffer;
282 } 283 }
283 #endif 284 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698