#undef LOCAL_DEBUG
-#include "lib/lib.h"
-#include "lib/mempool.h"
-#include "lib/fastbuf.h"
+#include "ucw/lib.h"
+#include "ucw/mempool.h"
+#include "ucw/fastbuf.h"
#include "images/images.h"
#include "images/error.h"
#include "images/color.h"
uns read_flags = io->flags;
/* Select color space */
- switch (read_flags & IMAGE_COLOR_SPACE)
+ switch (i->cinfo.jpeg_color_space)
{
- case COLOR_SPACE_GRAYSCALE:
- i->cinfo.out_color_space = JCS_GRAYSCALE;
- break;
- case COLOR_SPACE_YCBCR:
+ case JCS_GRAYSCALE:
+ read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_YCBCR;
+ i->cinfo.out_color_space = JCS_YCbCr;
+ break;
+ case JCS_YCbCr:
+ read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_YCBCR;
i->cinfo.out_color_space = JCS_YCbCr;
break;
- case COLOR_SPACE_CMYK:
+ case JCS_CMYK:
+ read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_CMYK;
i->cinfo.out_color_space = JCS_CMYK;
break;
- case COLOR_SPACE_YCCK:
+ case JCS_YCCK:
+ read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_YCCK;
i->cinfo.out_color_space = JCS_YCCK;
break;
default:
- switch (i->cinfo.jpeg_color_space)
- {
- case JCS_CMYK:
- read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_CMYK;
- i->cinfo.out_color_space = JCS_YCbCr;
- break;
- default:
- read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_RGB;
- i->cinfo.out_color_space = JCS_RGB;
- break;
- }
+ read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_CHANNELS_FORMAT) | COLOR_SPACE_RGB;
+ i->cinfo.out_color_space = JCS_RGB;
break;
- }
+ }
/* Prepare the image */
struct image_io_read_data_internals rdi;
}
i.cinfo.input_components = color_space_channels[img->flags & IMAGE_COLOR_SPACE];
jpeg_set_defaults(&i.cinfo);
+ jpeg_set_colorspace(&i.cinfo, i.cinfo.in_color_space);
if (io->jpeg_quality)
jpeg_set_quality(&i.cinfo, MIN(io->jpeg_quality, 100), 1);
if (io->exif_size)