equal
deleted
inserted
replaced
65 j_common_ptr cinfo; |
65 j_common_ptr cinfo; |
66 { |
66 { |
67 struct my_error_mgr *myerrPtr = (struct my_error_mgr *) cinfo->err; |
67 struct my_error_mgr *myerrPtr = (struct my_error_mgr *) cinfo->err; |
68 |
68 |
69 if (@global(ErrorPrinting) == true) { |
69 if (@global(ErrorPrinting) == true) { |
70 fprintf(stderr, "JPEGReader [warning]: jpeg error\n"); |
70 console_printf("JPEGReader [warning]: jpeg error\n"); |
71 } |
71 } |
72 longjmp(myerrPtr->setjmp_buffer, 1); |
72 longjmp(myerrPtr->setjmp_buffer, 1); |
73 } |
73 } |
74 |
74 |
75 static |
75 static |
77 j_common_ptr cinfo; |
77 j_common_ptr cinfo; |
78 { |
78 { |
79 char buffer[JMSG_LENGTH_MAX]; |
79 char buffer[JMSG_LENGTH_MAX]; |
80 |
80 |
81 if (@global(ErrorPrinting) == true) { |
81 if (@global(ErrorPrinting) == true) { |
82 fprintf(stderr, "libJPEG [error]: "); |
82 console_printf("libJPEG [error]: "); |
83 |
83 |
84 /* Create the message */ |
84 /* Create the message */ |
85 (*cinfo->err->format_message) (cinfo, buffer); |
85 (*cinfo->err->format_message) (cinfo, buffer); |
86 |
86 |
87 /* Send it to stderr, adding a newline */ |
87 /* Send it to stderr, adding a newline */ |
88 fprintf(stderr, "%s\n", buffer); |
88 console_printf("%s\n", buffer); |
89 } |
89 } |
90 } |
90 } |
91 |
91 |
92 /* |
92 /* |
93 * Optional progress monitor: display a percent-done figure on stderr. |
93 * Optional progress monitor: display a percent-done figure on stderr. |
103 int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); |
103 int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); |
104 |
104 |
105 if (percent_done != prog->percent_done) { |
105 if (percent_done != prog->percent_done) { |
106 prog->percent_done = percent_done; |
106 prog->percent_done = percent_done; |
107 if (total_passes > 1) { |
107 if (total_passes > 1) { |
108 fprintf(stderr, "\rPass %d/%d: %3d%% ", |
108 console_printf("\rPass %d/%d: %3d%% ", |
109 prog->pub.completed_passes + prog->completed_extra_passes + 1, |
109 prog->pub.completed_passes + prog->completed_extra_passes + 1, |
110 total_passes, percent_done); |
110 total_passes, percent_done); |
111 } else { |
111 } else { |
112 fprintf(stderr, "\r %3d%% ", percent_done); |
112 console_printf("\r %3d%% ", percent_done); |
113 } |
113 } |
114 fflush(stderr); |
114 fflush(stderr); |
115 } |
115 } |
116 } |
116 } |
117 |
117 |
133 void |
133 void |
134 JPG_end_progress_monitor (j_common_ptr cinfo) |
134 JPG_end_progress_monitor (j_common_ptr cinfo) |
135 { |
135 { |
136 /* Clear away progress display */ |
136 /* Clear away progress display */ |
137 if (cinfo->err->trace_level == 0) { |
137 if (cinfo->err->trace_level == 0) { |
138 fprintf(stderr, "\r \r"); |
138 console_printf("\r \r"); |
139 fflush(stderr); |
|
140 } |
139 } |
141 } |
140 } |
142 |
141 |
143 #endif |
142 #endif |
144 |
143 |
169 |
168 |
170 Only reading of files is supported. |
169 Only reading of files is supported. |
171 |
170 |
172 [See also:] |
171 [See also:] |
173 Image Form Icon |
172 Image Form Icon |
174 BlitImageReader FaceReader GIFReader PBMReader PCXReader |
173 BlitImageReader FaceReader GIFReader PBMReader PCXReader |
175 ST80FormReader SunRasterReader TargaReader TIFFReader WindowsIconReader |
174 ST80FormReader SunRasterReader TargaReader TIFFReader WindowsIconReader |
176 XBMReader XPMReader XWDReader |
175 XBMReader XPMReader XWDReader |
177 " |
176 " |
178 ! ! |
177 ! ! |
179 |
178 |
180 !JPEGReader class methodsFor:'initialization'! |
179 !JPEGReader class methodsFor:'initialization'! |
181 |
180 |
252 if (__isExternalBytesLike(j_d_s) |
251 if (__isExternalBytesLike(j_d_s) |
253 && __isExternalBytesLike(j_e_m)) { |
252 && __isExternalBytesLike(j_e_m)) { |
254 cinfoPtr = (struct jpeg_decompress_struct *)(__externalBytesAddress(j_d_s)); |
253 cinfoPtr = (struct jpeg_decompress_struct *)(__externalBytesAddress(j_d_s)); |
255 jerrPtr = (struct my_error_mgr *)(__externalBytesAddress(j_e_m)); |
254 jerrPtr = (struct my_error_mgr *)(__externalBytesAddress(j_e_m)); |
256 |
255 |
257 /* |
256 /* |
258 * Initialize the JPEG decompression object with default error handling. |
257 * Initialize the JPEG decompression object with default error handling. |
259 */ |
258 */ |
260 cinfoPtr->err = jpeg_std_error(jerrPtr); |
259 cinfoPtr->err = jpeg_std_error(jerrPtr); |
261 |
260 |
262 /* |
261 /* |
263 * prepare to handle errors smoothly ... |
262 * prepare to handle errors smoothly ... |
264 */ |
263 */ |
265 jerrPtr->pub.error_exit = my_error_exit; |
264 jerrPtr->pub.error_exit = my_error_exit; |
266 if (setjmp(jerrPtr->setjmp_buffer)) { |
265 if (setjmp(jerrPtr->setjmp_buffer)) { |
267 /* |
266 /* |
268 * error occurred ... |
267 * error occurred ... |
269 */ |
268 */ |
270 jpeg_destroy_decompress(cinfoPtr); |
269 jpeg_destroy_decompress(cinfoPtr); |
271 RETURN (false); |
270 RETURN (false); |
272 } |
271 } |
276 */ |
275 */ |
277 jerrPtr->pub.output_message = my_output_message; |
276 jerrPtr->pub.output_message = my_output_message; |
278 |
277 |
279 jpeg_create_decompress(cinfoPtr); |
278 jpeg_create_decompress(cinfoPtr); |
280 #if 0 |
279 #if 0 |
281 /* |
280 /* |
282 * Insert custom COM marker processor. |
281 * Insert custom COM marker processor. |
283 */ |
282 */ |
284 jpeg_set_marker_processor(cinfoPtr, JPEG_COM, COM_handler); |
283 jpeg_set_marker_processor(cinfoPtr, JPEG_COM, COM_handler); |
285 #endif |
284 #endif |
286 cinfoPtr->err->trace_level = 0; |
285 cinfoPtr->err->trace_level = 0; |
390 rowPointers[2] = NULL; |
389 rowPointers[2] = NULL; |
391 rowPointers[3] = NULL; |
390 rowPointers[3] = NULL; |
392 |
391 |
393 if (cinfoPtr->output_scanline < cinfoPtr->output_height) { |
392 if (cinfoPtr->output_scanline < cinfoPtr->output_height) { |
394 if (setjmp(jerrPtr->setjmp_buffer)) { |
393 if (setjmp(jerrPtr->setjmp_buffer)) { |
395 /* |
394 /* |
396 * error occurred ... |
395 * error occurred ... |
397 */ |
396 */ |
398 jpeg_destroy_decompress(cinfoPtr); |
397 jpeg_destroy_decompress(cinfoPtr); |
399 RETURN (__mkSmallInteger(-1)); |
398 RETURN (__mkSmallInteger(-1)); |
400 } |
399 } |
401 num_scanlines = jpeg_read_scanlines(cinfoPtr, |
400 num_scanlines = jpeg_read_scanlines(cinfoPtr, |
402 rowPointers, |
401 rowPointers, |
403 1); |
402 1); |
404 RETURN (__mkSmallInteger(num_scanlines)); |
403 RETURN (__mkSmallInteger(num_scanlines)); |
405 } |
404 } |
406 RETURN (__mkSmallInteger(0)); |
405 RETURN (__mkSmallInteger(0)); |
494 ^ self fromStream:s. |
493 ^ self fromStream:s. |
495 ] ensure:[ |
494 ] ensure:[ |
496 s notNil ifTrue:[s close]. |
495 s notNil ifTrue:[s close]. |
497 tmpFile delete. |
496 tmpFile delete. |
498 ]. |
497 ]. |
499 |
498 |
500 "/ 'JPEGReader [info]: can only read from real streams' infoPrintCR. |
499 "/ 'JPEGReader [info]: can only read from real streams' infoPrintCR. |
501 "/ ^ nil |
500 "/ ^ nil |
502 ]. |
501 ]. |
503 |
502 |
504 inStream := aStream. |
503 inStream := aStream. |
535 bytesPerRow := colorComponents * width. |
534 bytesPerRow := colorComponents * width. |
536 |
535 |
537 [(returnCode := self decompressChunkInto:data startingAt:dataIdx) > 0] whileTrue:[ |
536 [(returnCode := self decompressChunkInto:data startingAt:dataIdx) > 0] whileTrue:[ |
538 "/ got a row in the buffer ... |
537 "/ got a row in the buffer ... |
539 dataIdx := dataIdx + bytesPerRow |
538 dataIdx := dataIdx + bytesPerRow |
540 ]. |
539 ]. |
541 returnCode < 0 ifTrue:[ |
540 returnCode < 0 ifTrue:[ |
542 'JPEGReader [info]: ' infoPrint. self get_error_message infoPrintCR. |
541 'JPEGReader [info]: ' infoPrint. self get_error_message infoPrintCR. |
543 ^ nil |
542 ^ nil |
544 ]. |
543 ]. |
545 |
544 |
576 ! ! |
575 ! ! |
577 |
576 |
578 !JPEGReader class methodsFor:'documentation'! |
577 !JPEGReader class methodsFor:'documentation'! |
579 |
578 |
580 version |
579 version |
581 ^ '$Header: /cvs/stx/stx/libview2/JPEGReader.st,v 1.46 2005-07-08 19:39:01 cg Exp $' |
580 ^ '$Header: /cvs/stx/stx/libview2/JPEGReader.st,v 1.47 2007-01-24 13:44:00 cg Exp $' |
582 ! ! |
581 ! ! |
583 |
582 |
584 JPEGReader initialize! |
583 JPEGReader initialize! |