X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=images%2Fio-libmagick.c;h=3636163174a183cbf1400713c965ccad5e6b9068;hb=bcccb399f05d8b2cf90a1df330cb0a4b032ae8c8;hp=cdf58048ced1d69946e6ce3d11dc28b3c15cb3da;hpb=62eda8640605c19ecd817e274e75717022349732;p=libucw.git diff --git a/images/io-libmagick.c b/images/io-libmagick.c index cdf58048..36361631 100644 --- a/images/io-libmagick.c +++ b/images/io-libmagick.c @@ -9,13 +9,13 @@ #undef LOCAL_DEBUG -#include "lib/lib.h" -#include "lib/mempool.h" -#include "lib/fastbuf.h" -#include "images/images.h" -#include "images/error.h" -#include "images/color.h" -#include "images/io-main.h" +#include +#include +#include +#include +#include +#include +#include #include #include @@ -25,13 +25,13 @@ #define MAX_FILE_SIZE (1 << 30) #define QUANTUM_SCALE (QuantumDepth - 8) -#define QUANTUM_TO_BYTE(x) ((uns)(x) >> QUANTUM_SCALE) -#define BYTE_TO_QUANTUM(x) ((uns)(x) << QUANTUM_SCALE) +#define QUANTUM_TO_BYTE(x) ((uint)(x) >> QUANTUM_SCALE) +#define BYTE_TO_QUANTUM(x) ((uint)(x) << QUANTUM_SCALE) #define ALPHA_TO_BYTE(x) (255 - QUANTUM_TO_BYTE(x)) #define BYTE_TO_ALPHA(x) (BYTE_TO_QUANTUM(255 - (x))) static pthread_mutex_t libmagick_mutex = PTHREAD_MUTEX_INITIALIZER; -static uns libmagick_counter; +static uint libmagick_counter; struct magick_read_data { ExceptionInfo exception; @@ -82,13 +82,13 @@ libmagick_read_header(struct image_io *io) DBG("libmagick_read_header()"); /* Read entire stream */ - sh_off_t file_size = bfilesize(io->fastbuf) - btell(io->fastbuf); + ucw_off_t file_size = bfilesize(io->fastbuf) - btell(io->fastbuf); if (unlikely(file_size > MAX_FILE_SIZE)) { IMAGE_ERROR(io->context, IMAGE_ERROR_READ_FAILED, "Too long stream."); return 0; } - uns buf_size = file_size; + uint buf_size = file_size; byte *buf = xmalloc(buf_size); breadb(io->fastbuf, buf, buf_size); @@ -169,9 +169,12 @@ libmagick_read_data(struct image_io *io) /* Prepare the image */ struct image_io_read_data_internals rdi; - uns read_flags = io->flags; + uint read_flags = io->flags; + uint cs = read_flags & IMAGE_COLOR_SPACE; + if (cs != COLOR_SPACE_GRAYSCALE && cs != COLOR_SPACE_RGB) + read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_PIXEL_FORMAT) | COLOR_SPACE_RGB; if ((read_flags & IMAGE_IO_USE_BACKGROUND) && !(read_flags & IMAGE_ALPHA)) - read_flags = (read_flags | IMAGE_ALPHA) & IMAGE_CHANNELS_FORMAT; + read_flags = (read_flags & IMAGE_CHANNELS_FORMAT) | IMAGE_ALPHA; if (unlikely(!image_io_read_data_prepare(&rdi, io, rd->image->columns, rd->image->rows, read_flags))) { libmagick_destroy_read_data(rd); @@ -200,7 +203,7 @@ libmagick_read_data(struct image_io *io) # define IMAGE_WALK_DO_STEP do{ \ walk_pos[0] = libmagick_pixel_to_gray(src); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 2: @@ -213,7 +216,7 @@ libmagick_read_data(struct image_io *io) walk_pos[0] = libmagick_pixel_to_gray(src); \ walk_pos[1] = ALPHA_TO_BYTE(src->opacity); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 3: @@ -227,7 +230,7 @@ libmagick_read_data(struct image_io *io) walk_pos[1] = QUANTUM_TO_BYTE(src->green); \ walk_pos[2] = QUANTUM_TO_BYTE(src->blue); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 4: @@ -242,7 +245,7 @@ libmagick_read_data(struct image_io *io) walk_pos[2] = QUANTUM_TO_BYTE(src->blue); \ walk_pos[3] = ALPHA_TO_BYTE(src->opacity); \ src++; }while(0) -# include "images/image-walk.h" +# include break; default: @@ -279,7 +282,8 @@ libmagick_write(struct image_io *io) info->colorspace = RGBColorspace; break; default: - ASSERT(0); + IMAGE_ERROR(io->context, IMAGE_ERROR_WRITE_FAILED, "Unsupported color space."); + goto err; } switch (io->format) { @@ -329,7 +333,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[0]); \ dest->opacity = 0; \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 2: @@ -344,7 +348,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[0]); \ dest->opacity = BYTE_TO_ALPHA(walk_pos[1]); \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 3: @@ -359,7 +363,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[2]); \ dest->opacity = 0; \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 4: @@ -374,7 +378,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[2]); \ dest->opacity = BYTE_TO_ALPHA(walk_pos[3]); \ dest++; }while(0) -# include "images/image-walk.h" +# include break; default: