]> mj.ucw.cz Git - libucw.git/blobdiff - images/io-libjpeg.c
Opt: Documented opt and its interaction with conf
[libucw.git] / images / io-libjpeg.c
index 70efc91410ff5ea639732fb45f3d94d47c54c8a1..74af24acccc1d95fceba24b91554ac35be29b1ec 100644 (file)
@@ -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 <ucw/lib.h>
+#include <ucw/mempool.h>
+#include <ucw/fastbuf.h>
+#include <images/images.h>
+#include <images/error.h>
+#include <images/color.h>
+#include <images/io-main.h>
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -358,34 +358,29 @@ libjpeg_read_data(struct image_io *io)
   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;
@@ -451,7 +446,7 @@ libjpeg_read_data(struct image_io *io)
 #             define IMAGE_WALK_COL_STEP 2
 #             define IMAGE_WALK_DO_ROW_START do{ src = buf; jpeg_read_scanlines(&i->cinfo, (JSAMPLE **)&src, 1); }while(0)
 #             define IMAGE_WALK_DO_STEP do{ walk_pos[0] = *src++; walk_pos[1] = 255; }while(0)
-#             include "images/image-walk.h"
+#             include <images/image-walk.h>
            }
            break;
          case 4: /* * -> *+Alpha or aligned * */
@@ -465,7 +460,7 @@ libjpeg_read_data(struct image_io *io)
 #             define IMAGE_WALK_COL_STEP 4
 #             define IMAGE_WALK_DO_ROW_START do{ src = buf; jpeg_read_scanlines(&i->cinfo, (JSAMPLE **)&src, 1); }while(0)
 #             define IMAGE_WALK_DO_STEP do{ *(u32 *)walk_pos = *(u32 *)src; walk_pos[3] = 255; src += 3; }while(0)
-#             include "images/image-walk.h"
+#             include <images/image-walk.h>
            }
            break;
          default:
@@ -539,6 +534,7 @@ libjpeg_write(struct image_io *io)
     }
   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)
@@ -581,7 +577,7 @@ libjpeg_write(struct image_io *io)
 #             define IMAGE_WALK_COL_STEP 2
 #             define IMAGE_WALK_DO_ROW_END do{ dest = buf; jpeg_write_scanlines(&i.cinfo, (JSAMPLE **)&dest, 1); }while(0)
 #             define IMAGE_WALK_DO_STEP do{ *dest++ = walk_pos[0]; }while(0)
-#             include "images/image-walk.h"
+#             include <images/image-walk.h>
              break;
            }
          case 4: /* *+Alpha or aligned * -> * */
@@ -595,7 +591,7 @@ libjpeg_write(struct image_io *io)
 #             define IMAGE_WALK_COL_STEP 4
 #             define IMAGE_WALK_DO_ROW_END do{ dest = buf; jpeg_write_scanlines(&i.cinfo, (JSAMPLE **)&dest, 1); }while(0)
 #             define IMAGE_WALK_DO_STEP do{ *dest++ = walk_pos[0]; *dest++ = walk_pos[1]; *dest++ = walk_pos[2]; }while(0)
-#             include "images/image-walk.h"
+#             include <images/image-walk.h>
              break;
            }
          default: