#include <setjmp.h>
#include "iolayer.h"
-#include "image.h"
+#include "imagei.h"
#include "jpeglib.h"
#include "jerror.h"
#include <errno.h>
#define JPEG_APP13 0xED /* APP13 marker code */
#define JPGS 16384
-unsigned char fake_eoi[]={(JOCTET) 0xFF,(JOCTET) JPEG_EOI};
+static unsigned char fake_eoi[]={(JOCTET) 0xFF,(JOCTET) JPEG_EOI};
/* Bad design right here */
(void) jpeg_read_header(&cinfo, TRUE);
(void) jpeg_start_decompress(&cinfo);
+ if (!i_int_check_image_file_limits(cinfo.output_width, cinfo.output_height,
+ cinfo.output_components, sizeof(i_sample_t))) {
+ mm_log((1, "i_readjpeg: image size exceeds limits\n"));
+
+ jpeg_destroy_decompress(&cinfo);
+ return NULL;
+ }
im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components);
+ if (!im) {
+ jpeg_destroy_decompress(&cinfo);
+ return NULL;
+ }
row_stride = cinfo.output_width * cinfo.output_components;
buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
while (cinfo.output_scanline < cinfo.output_height) {
(void) jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
*itlength=tlength;
+
+ i_tags_add(&im->tags, "i_format", 0, "jpeg", 4, 0);
+
mm_log((1,"i_readjpeg_wiol -> (0x%x)\n",im));
return im;
}
undef_int
i_writejpeg_wiol(i_img *im, io_glue *ig, int qfactor) {
- struct stat stbuf;
JSAMPLE *image_buffer;
int quality;