OLD | NEW |
1 /* | 1 /* |
2 * jdatasrc-tj.c | 2 * jdatasrc-tj.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) 2011, D. R. Commander. | 8 * Copyright (C) 2011, 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 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 * is not granted the right to give a suspension return. If the skip extends | 99 * is not granted the right to give a suspension return. If the skip extends |
99 * beyond the data currently in the buffer, the buffer can be marked empty so | 100 * beyond the data currently in the buffer, the buffer can be marked empty so |
100 * that the next read will cause a fill_input_buffer call that can suspend. | 101 * that the next read will cause a fill_input_buffer call that can suspend. |
101 * Arranging for additional bytes to be discarded before reloading the input | 102 * Arranging for additional bytes to be discarded before reloading the input |
102 * buffer is the application writer's problem. | 103 * buffer is the application writer's problem. |
103 */ | 104 */ |
104 | 105 |
105 METHODDEF(void) | 106 METHODDEF(void) |
106 skip_input_data (j_decompress_ptr cinfo, long num_bytes) | 107 skip_input_data (j_decompress_ptr cinfo, long num_bytes) |
107 { | 108 { |
108 struct jpeg_source_mgr * src = cinfo->src; | 109 struct jpeg_source_mgr *src = cinfo->src; |
109 | 110 |
110 /* Just a dumb implementation for now. Could use fseek() except | 111 /* Just a dumb implementation for now. Could use fseek() except |
111 * it doesn't work on pipes. Not clear that being smart is worth | 112 * it doesn't work on pipes. Not clear that being smart is worth |
112 * any trouble anyway --- large skips are infrequent. | 113 * any trouble anyway --- large skips are infrequent. |
113 */ | 114 */ |
114 if (num_bytes > 0) { | 115 if (num_bytes > 0) { |
115 while (num_bytes > (long) src->bytes_in_buffer) { | 116 while (num_bytes > (long) src->bytes_in_buffer) { |
116 num_bytes -= (long) src->bytes_in_buffer; | 117 num_bytes -= (long) src->bytes_in_buffer; |
117 (void) (*src->fill_input_buffer) (cinfo); | 118 (void) (*src->fill_input_buffer) (cinfo); |
118 /* note we assume that fill_input_buffer will never return FALSE, | 119 /* note we assume that fill_input_buffer will never return FALSE, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 } | 151 } |
151 | 152 |
152 | 153 |
153 /* | 154 /* |
154 * Prepare for input from a supplied memory buffer. | 155 * Prepare for input from a supplied memory buffer. |
155 * The buffer must contain the whole JPEG data. | 156 * The buffer must contain the whole JPEG data. |
156 */ | 157 */ |
157 | 158 |
158 GLOBAL(void) | 159 GLOBAL(void) |
159 jpeg_mem_src_tj (j_decompress_ptr cinfo, | 160 jpeg_mem_src_tj (j_decompress_ptr cinfo, |
160 » unsigned char * inbuffer, unsigned long insize) | 161 const unsigned char *inbuffer, unsigned long insize) |
161 { | 162 { |
162 struct jpeg_source_mgr * src; | 163 struct jpeg_source_mgr *src; |
163 | 164 |
164 if (inbuffer == NULL || insize == 0)» /* Treat empty input as fatal error */ | 165 if (inbuffer == NULL || insize == 0) /* Treat empty input as fatal error */ |
165 ERREXIT(cinfo, JERR_INPUT_EMPTY); | 166 ERREXIT(cinfo, JERR_INPUT_EMPTY); |
166 | 167 |
167 /* The source object is made permanent so that a series of JPEG images | 168 /* The source object is made permanent so that a series of JPEG images |
168 * can be read from the same buffer by calling jpeg_mem_src only before | 169 * can be read from the same buffer by calling jpeg_mem_src only before |
169 * the first one. | 170 * the first one. |
170 */ | 171 */ |
171 if (cinfo->src == NULL) {» /* first time for this JPEG object? */ | 172 if (cinfo->src == NULL) { /* first time for this JPEG object? */ |
172 cinfo->src = (struct jpeg_source_mgr *) | 173 cinfo->src = (struct jpeg_source_mgr *) |
173 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, | 174 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, |
174 » » » » SIZEOF(struct jpeg_source_mgr)); | 175 sizeof(struct jpeg_source_mgr)); |
175 } | 176 } |
176 | 177 |
177 src = cinfo->src; | 178 src = cinfo->src; |
178 src->init_source = init_mem_source; | 179 src->init_source = init_mem_source; |
179 src->fill_input_buffer = fill_mem_input_buffer; | 180 src->fill_input_buffer = fill_mem_input_buffer; |
180 src->skip_input_data = skip_input_data; | 181 src->skip_input_data = skip_input_data; |
181 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */ | 182 src->resync_to_restart = jpeg_resync_to_restart; /* use default method */ |
182 src->term_source = term_source; | 183 src->term_source = term_source; |
183 src->bytes_in_buffer = (size_t) insize; | 184 src->bytes_in_buffer = (size_t) insize; |
184 src->next_input_byte = (JOCTET *) inbuffer; | 185 src->next_input_byte = (const JOCTET *) inbuffer; |
185 } | 186 } |
OLD | NEW |