]> granicus.if.org Git - imagemagick/commitdiff
Added ping support to the heic coder (#507).
authorDirk Lemstra <dirk@git.imagemagick.org>
Thu, 8 Feb 2018 22:31:59 +0000 (23:31 +0100)
committerDirk Lemstra <dirk@git.imagemagick.org>
Thu, 8 Feb 2018 22:31:59 +0000 (23:31 +0100)
coders/heic.c

index 0e0cd2d09455d1c08d1726b170550ebfa5dcbcba..86c7cc4a7c1302c3f742452c33eecdc08c3708ff 100644 (file)
@@ -1107,6 +1107,7 @@ static Image *ReadHEICImage(const ImageInfo *image_info,
     image=DestroyImageList(image);
     return((Image *) NULL);
   }
+  cropped=(Image *) NULL;
 
   length=GetBlobSize(image);
   count = MAX_ATOMS_IN_BOX;
@@ -1137,19 +1138,25 @@ static Image *ReadHEICImage(const ImageInfo *image_info,
   image->rows = 512 * (ctx.grid.rowsMinusOne + 1);
   image->depth=8;
 
-  ctx.tmp = CloneImage(image, 256, 256, MagickTrue, exception);
-  if (ctx.tmp == NULL) {
-    (void) ThrowMagickException(exception,GetMagickModule(),ResourceLimitError,
-      "MemoryAllocationFailed","`%s'",image->filename);
+  status=SetImageExtent(image,image->columns,image->rows,exception);
+  if (status == MagickFalse)
     goto cleanup;
-  }
 
-  DuplicateBlob(ctx.tmp, image);
+  if (image_info->ping == MagickFalse)
+    {
+      ctx.tmp = CloneImage(image, 256, 256, MagickTrue, exception);
+      if (ctx.tmp == NULL) {
+        (void) ThrowMagickException(exception,GetMagickModule(),
+          ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
+        goto cleanup;
+      }
 
-  for (i = 0; i < count; i++) {
-    decodeH265Image(image, &ctx, i+1, exception);
-  }
+      DuplicateBlob(ctx.tmp, image);
 
+      for (i = 0; i < count; i++) {
+        decodeH265Image(image, &ctx, i+1, exception);
+      }
+    }
 
   crop_info.x = 0;
   crop_info.y = 0;
@@ -1242,9 +1249,13 @@ static Image *ReadHEICImage(const ImageInfo *image_info,
 
   cropped = CropImage(image, &crop_info, exception);
   image = DestroyImage(image);
-
   if (cropped != NULL)
-    SetImageColorspace(cropped, YCbCrColorspace, exception);
+    {
+      if (image_info->ping != MagickFalse)
+        cropped->colorspace=YCbCrColorspace;
+      else
+        SetImageColorspace(cropped,YCbCrColorspace,exception);
+    }
 
 cleanup:
   if (image) {