… | |
… | |
213 | { |
213 | { |
214 | } |
214 | } |
215 | |
215 | |
216 | static boolean cv_ms_fill (j_decompress_ptr cinfo) |
216 | static boolean cv_ms_fill (j_decompress_ptr cinfo) |
217 | { |
217 | { |
218 | ERREXIT (cinfo, JERR_INPUT_EMPTY); |
218 | // unexpected EOF, warn and generate fake EOI marker |
|
|
219 | |
|
|
220 | WARNMS (cinfo, JWRN_JPEG_EOF); |
|
|
221 | |
|
|
222 | struct jpeg_source_mgr *src = (struct jpeg_source_mgr *)cinfo->src; |
|
|
223 | |
|
|
224 | static const JOCTET eoi[] = { 0xFF, JPEG_EOI }; |
|
|
225 | |
|
|
226 | src->next_input_byte = eoi; |
|
|
227 | src->bytes_in_buffer = sizeof (eoi); |
219 | |
228 | |
220 | return TRUE; |
229 | return TRUE; |
221 | } |
230 | } |
222 | |
231 | |
223 | static void cv_ms_skip (j_decompress_ptr cinfo, long num_bytes) |
232 | static void cv_ms_skip (j_decompress_ptr cinfo, long num_bytes) |
224 | { |
233 | { |
225 | if (num_bytes > 0) |
|
|
226 | { |
|
|
227 | struct jpeg_source_mgr *src = (struct jpeg_source_mgr *)cinfo->src; |
234 | struct jpeg_source_mgr *src = (struct jpeg_source_mgr *)cinfo->src; |
228 | |
235 | |
229 | src->next_input_byte += num_bytes; |
236 | src->next_input_byte += num_bytes; |
230 | src->bytes_in_buffer -= num_bytes; |
237 | src->bytes_in_buffer -= num_bytes; |
231 | } |
|
|
232 | } |
238 | } |
233 | |
239 | |
234 | static void cv_jpeg_mem_src (j_decompress_ptr cinfo, void *buf, size_t buflen) |
240 | static void cv_jpeg_mem_src (j_decompress_ptr cinfo, void *buf, size_t buflen) |
235 | { |
241 | { |
236 | struct jpeg_source_mgr *src; |
242 | struct jpeg_source_mgr *src; |
… | |
… | |
521 | |
527 | |
522 | perlinterp_acquire (); |
528 | perlinterp_acquire (); |
523 | XSRETURN_UNDEF; |
529 | XSRETURN_UNDEF; |
524 | } |
530 | } |
525 | |
531 | |
|
|
532 | if (!data_len) |
|
|
533 | longjmp (jerr.setjmp_buffer, 4); |
|
|
534 | |
526 | jpeg_create_decompress (&cinfo); |
535 | jpeg_create_decompress (&cinfo); |
527 | cv_jpeg_mem_src (&cinfo, data, data_len); |
536 | cv_jpeg_mem_src (&cinfo, data, data_len); |
528 | |
537 | |
529 | jpeg_read_header (&cinfo, TRUE); |
538 | jpeg_read_header (&cinfo, TRUE); |
530 | |
539 | |