]> granicus.if.org Git - imagemagick/commitdiff
Added support for arithmetic coding to the jpeg encoder.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sat, 15 Sep 2018 14:09:33 +0000 (16:09 +0200)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sat, 15 Sep 2018 14:09:33 +0000 (16:09 +0200)
ChangeLog
coders/jpeg.c

index 48bed6bd7595c8e34c1f8550b7959b6c121db49a..555be3efab69cb2a42c75eeb98f65d04d289ee5d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
 2018-09-09  7.0.8-12 Cristy  <quetzlzacatenango@image...>
   * Release ImageMagick version 7.0.8-12, GIT revision 14729:798fbdb5b:20180828
 
+2018-09-15  7.0.8-12 Dirk Lemstra <dirk@lem.....org>
+  * Added support for arithmetic coding to the jpeg encoder:
+    -define jpeg:arithmetic-coding=true.
+
 2018-09-08  7.0.8-12 Cristy  <quetzlzacatenango@image...>
   * Fixed numerous use of uninitialized values, integer overflow, memory
     exceeded, and timeouts (credit to OSS Fuzz).
index c2998288771fc35c33d088b48f822a538eb9260c..d046c6a46af7221f5b370c4e10c2516749076cf6 100644 (file)
@@ -1337,6 +1337,10 @@ static Image *ReadJPEGImage(const ImageInfo *image_info,
   (void) FormatLocaleString(value,MagickPathExtent,"%.20g",(double)
     jpeg_info.out_color_space);
   (void) SetImageProperty(image,"jpeg:colorspace",value,exception);
+#if defined(D_ARITH_CODING_SUPPORTED)
+  if (jpeg_info.arith_code == TRUE)
+    (void) SetImageProperty(image,"jpeg:coding","arithmetic",exception);
+#endif
   if (image_info->ping != MagickFalse)
     {
       jpeg_destroy_decompress(&jpeg_info);
@@ -2371,6 +2375,14 @@ static MagickBooleanType WriteJPEGImage(const ImageInfo *image_info,
           jpeg_info.optimize_coding=status == MagickFalse ? FALSE : TRUE;
         }
     }
+#if defined(C_ARITH_CODING_SUPPORTED)
+  option=GetImageOption(image_info,"jpeg:arithmetic-coding");
+  if (option != (const char *) NULL)
+    {
+      jpeg_info.arith_code=IsStringTrue(option) != MagickFalse ? TRUE : FALSE;
+      jpeg_info.optimize_coding=FALSE; // Not supported.
+    }
+#endif
 #if (JPEG_LIB_VERSION >= 61) && defined(C_PROGRESSIVE_SUPPORTED)
   if ((LocaleCompare(image_info->magick,"PJPEG") == 0) ||
       (image_info->interlace != NoInterlace))